You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

581 lines
24 KiB

//-----------------------------------------------------------------------------
// COPYRIGHT (C) 2020 CHIPS&MEDIA INC. ALL RIGHTS RESERVED
//
// This file is distributed under BSD 3 clause and LGPL2.1 (dual license)
// SPDX License Identifier: BSD-3-Clause
// SPDX License Identifier: LGPL-2.1-only
//
// The entire notice above must be reproduced on all authorized copies.
//
// Description :
//-----------------------------------------------------------------------------
#ifndef _COMPONENT_H_
#define _COMPONENT_H_
#include "config.h"
#include "vpuapifunc.h"
#include "main_helper.h"
#define MAX_QUEUE_NUM 5
typedef void* Component;
typedef enum {
GET_PARAM_COM_STATE, /*!<< It returns state of component. Param: ComponentState* */
GET_PARAM_COM_IS_CONTAINER_CONUSUMED, /*!<< pointer of PortContainer */
GET_PARAM_FEEDER_BITSTREAM_BUF, /*!<< to a feeder component : ParamDecBitstreamBuffer */
GET_PARAM_FEEDER_EOS, /*!<< to a feeder component : BOOL */
GET_PARAM_VPU_STATUS, /*!<< to a component. Get status information of the VPU : ParamVpuStatus. */
GET_PARAM_DEC_HANDLE,
GET_PARAM_DEC_CODEC_INFO, /*!<< It returns a codec information. Param: DecInitialInfo */
GET_PARAM_DEC_BITSTREAM_BUF_POS, /*!<< to a decoder component in ring-buffer mode. */
GET_PARAM_DEC_FRAME_BUF_NUM, /*!<< to a decoder component : ParamDecNeedFrameBufferNum*/
GET_PARAM_RENDERER_FRAME_BUF, /*!<< to a renderer component. ParamDecFrameBuffer */
GET_PARAM_RENDERER_PPU_FRAME_BUF, /*!<< to a renderer component. ParamDecPPUFrameBuffer */
GET_PARAM_SRC_FRAME_INFO,
GET_PARAM_ENC_HANDLE,
GET_PARAM_ENC_FRAME_BUF_NUM,
GET_PARAM_ENC_FRAME_BUF_REGISTERED,
GET_PARAM_YUVFEEDER_FRAME_BUF,
GET_PARAM_READER_BITSTREAM_BUF,
GET_PARAM_MAX
} GetParameterCMD;
typedef enum {
// Common commands
SET_PARAM_COM_PAUSE, /*!<< Makes a component pause. A concrete component needs to implement its own pause state. */
// Decoder commands
SET_PARAM_DEC_SKIP_COMMAND, /*!<< Send a skip command to a decoder component. */
SET_PARAM_DEC_TARGET_TID, /*!<< Send a target temporal id to a decoder component.
A parameter is pointer of ParamDecTargetTid structure. */
SET_PARAM_DEC_RESET, /*!<< Reset VPU */
SET_PARAM_DEC_FLUSH, /*!<< Flush command */
//Encoder commands
SET_PARAM_ENC_SUBFRAMESYNC,
SET_PARAM_ENC_READ_BS_WHEN_FULL_INTERRUPT, /*!<< Consume the bitstream buffer when the bitstream buffer full interrupt is asserted.
The parameter is a pointer of BOOL(TRUE or FALSE)
*/
// Renderer commands
SET_PARAM_RENDERER_FLUSH, /*!<< Drop all frames in the internal queue depending on the ParamDecFlush struct*/
SET_PARAM_RENDERER_ALLOC_FRAMEBUFFERS,
SET_PARAM_RENDERER_REALLOC_FRAMEBUFFER, /*!<< Re-allocate a framebuffer with given parameters.
A component which is linked with a decoder as a sink component MUST implement this command. : ParamReallocFB
*/
SET_PARAM_RENDERER_INTRES_CHANGED_ALLOC_FRAMEBUFFERS, /*!<< allocate a framebuffer for Inter resolution changed */
SET_PARAM_RENDERER_FREE_FRAMEBUFFERS, /*!<< A command to free framebuffers */
SET_PARAM_RENDERER_CHANGE_COM_STATE, /*!<< A command to change a component state for renderer */
SET_PARAM_RENDERER_INTRES_CHANGED_FREE_FRAMEBUFFERS, /*!<< A command to free framebuffers in case of inter
resolution changed */
SET_PARAM_RENDERER_RELEASE_FRAME_BUFFRES, /* A command to release all framebuffers allocated in renderer */
// Feeder commands
SET_PARAM_FEEDER_START_INJECT_ERROR, /* The parameter is null. */
SET_PARAM_FEEDER_STOP_INJECT_ERROR, /* The parameter is null. */
SET_PARAM_FEEDER_RESET,
SET_PARAM_FEEDER_REFILL_BS_BUFFER,
SET_PARAM_MAX
} SetParameterCMD;
typedef enum {
COMPONENT_STATE_NONE,
COMPONENT_STATE_CREATED,
COMPONENT_STATE_PREPARED,
COMPONENT_STATE_EXECUTED,
COMPONENT_STATE_TERMINATED,
COMPONENT_STATE_MAX
} ComponentState;
typedef enum {
CNM_COMPONENT_PARAM_FAILURE,
CNM_COMPONENT_PARAM_SUCCESS,
CNM_COMPONENT_PARAM_NOT_READY,
CNM_COMPONENT_PARAM_NOT_FOUND,
CNM_COMPONENT_PARAM_TERMINATED,
CNM_COMPONENT_PARAM_MAX
} CNMComponentParamRet;
typedef enum {
CNM_COMPONENT_TYPE_NONE,
CNM_COMPONENT_TYPE_ISOLATION,
CNM_COMPONENT_TYPE_SOURCE,
CNM_COMPONENT_TYPE_FILTER,
CNM_COMPONENT_TYPE_SINK,
} CNMComponentType;
typedef enum {
CNM_PORT_CONTAINER_TYPE_DATA,
CNM_PORT_CONTAINER_TYPE_CLOCK,
CNM_PORT_CONTAINER_TYPE_MAX
} CNMPortContainerType;
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef enum {
SUB_FRAME_SYNC_SRC_ADDR_SEND, //for PIC_RUN
SUB_FRAME_SYNC_DATA_FEED
} SubFrameSyncContainerType;
typedef struct PortContainer {
Uint32 packetNo;
BOOL consumed;
BOOL reuse;
BOOL last;
Uint32 type;
} PortContainer;
typedef struct PortContainerClock {
Uint32 packetNo;
BOOL consumed;
BOOL reuse;
BOOL last;
Uint32 type;
} PortContainerClock;
typedef struct PortContainerES {
Uint32 packetNo;
BOOL consumed;
BOOL reuse; /*!<< If data in container wasn't consumed then @reuse is assigned to 1. */
BOOL last;
Uint32 type;
/* ---- DO NOT TOUCH THE ABOVE FIELDS ---- */
vpu_buffer_t buf;
Uint32 size;
Uint32 streamBufFull;
/* ---- Belows vairables are for ringbuffer ---- */
PhysicalAddress rdPtr;
PhysicalAddress wrPtr;
PhysicalAddress paBsBufStart;
PhysicalAddress paBsBufEnd;
vpu_buffer_t newBsBuf;
} PortContainerES;
typedef struct PortContainerDisplay {
Uint32 packetNo;
BOOL consumed;
BOOL reuse;
BOOL last;
Uint32 type;
Int32 chromaIDCFlag;
/* ---- DO NOT TOUCH THE ABOVE FIELDS ---- */
DecOutputInfo decInfo;
BOOL scaleX; //only used for CODA series VC1 multi-resolution
BOOL scaleY;
} PortContainerDisplay;
typedef struct ParamEncNeedFrameBufferNum {
Uint32 reconFbNum;
Uint32 srcFbNum;
} ParamEncNeedFrameBufferNum;
typedef struct ParamEncFrameBuffer {
Uint32 reconFbStride;
Uint32 reconFbHeight;
FrameBuffer* reconFb;
FrameBuffer* srcFb;
FrameBufferAllocInfo reconFbAllocInfo;
FrameBufferAllocInfo srcFbAllocInfo;
} ParamEncFrameBuffer;
typedef struct ParamEncBitstreamBuffer {
Uint32 num;
vpu_buffer_t* bs;
} ParamEncBitstreamBuffer;
typedef struct {
BOOL ringBufferEnable;
Uint8* encodedStreamBuf;
Int32 encodedStreamBufSize;
Int32 encodedStreamBufLength;
} EncodedStreamBufInfo;
typedef struct {
Uint8* encodedHeaderBuf;
Int32 encodedHeaderBufSize;
osal_file_t fp;
} EncodedHeaderBufInfo;
typedef struct {
BOOL ret;
BOOL success;
BOOL isConnectedEnc;
ParamEncNeedFrameBufferNum fbCnt;
} ParamRenderAllocInfo;
typedef struct PortContainerYuv {
Uint32 packetNo;
BOOL consumed;
BOOL reuse;
BOOL last;
Uint32 type;
/* ---- DO NOT TOUCH THE ABOVE FIELDS ---- */
FrameBuffer fb;
FrameBuffer fbOffsetTbl;
Int32 srcFbIndex;
BOOL prevMapReuse;
BOOL srcCanBeWritten;
} PortContainerYuv;
typedef struct ParamDecBitstreamBuffer {
Uint32 num;
vpu_buffer_t* bs;
} ParamDecBitstreamBuffer;
typedef struct ParamDecNeedFrameBufferNum {
Uint32 linearNum; /*!<< the number of framebuffers which are used to decompress or converter to linear data */
Uint32 nonLinearNum; /*!<< the number of tiled or compressed framebuffers which are used as a reconstruction */
} ParamDecNeedFrameBufferNum;
typedef struct ParamDecFrameBuffer {
Uint32 stride;
Uint32 linearNum; /*!<< the number of framebuffers which are used to decompress or converter to linear data */
Uint32 nonLinearNum; /*!<< the number of tiled or compressed framebuffers which are used as a reconstruction */
FrameBuffer* fb;
} ParamDecFrameBuffer;
typedef struct ParamDecPPUFrameBuffer {
BOOL enablePPU;
Queue* ppuQ;
FrameBuffer* fb;
} ParamDecPPUFrameBuffer;
typedef struct ParamDecReallocFB {
Int32 linearIdx;
Int32 compressedIdx;
Int32 indexInterFrameDecoded; /*!<< In case of VP9 codec, index of the frame buffer to reallocate */
Uint32 width; /*!<< New picture width */
Uint32 height; /*!<< New picture hieght */
FrameBuffer newFbs[2]; /*!<< Reallocated framebuffers. newFbs[0] for compressed fb, newFbs[1] for linear fb */
} ParamDecReallocFB;
/* ParamDecBitStreamBufPos is used to get or set read pointer and write pointer of a bitstream buffer.
*/
typedef struct ParamDecBitstreamBufPos {
PhysicalAddress rdPtr;
PhysicalAddress wrPtr;
Uint32 avail; /*!<< the available size */
} ParamDecBitstreamBufPos;
typedef struct ParamVpuStatus {
QueueStatusInfo cq; /*!<< The command queue status */
} ParamVpuStatus;
typedef struct ParamDecTargetTid {
Int32 targetTid;
Int32 tidMode; /*!<< 0 - targetTid is used as an absolute value, 1 - targetTid is used as an relative value */
} ParamDecTargetTid;
typedef struct ParamReallocFrameBuffer {
Uint32 tiledIndex;
Uint32 linearIndex;
} FrameReallocFrameBuffer;
typedef struct {
Queue* inputQ;
Queue* outputQ;
Component owner;
Component connectedComponent; /*!<< NOTE: DO NOT ACCESS THIS VARIABLE DIRECTLY */
Uint32 sequenceNo; /*!<< The sequential number of transferred data */
} Port;
typedef struct CNMComponentConfig{
Uint8* bitcode;
Uint32 sizeOfBitcode; /*!<< size of bitcode in word(2byte) */
TestDecConfig testDecConfig;
DecOpenParam decOpenParam;
TestEncConfig testEncConfig;
EncOpenParam encOpenParam;
ENC_CFG encCfg;
} CNMComponentConfig;
#define COMPONENT_EVENT_NONE 0
/* ------------------------------------------------ */
/* ---------------- COMMON EVENTS ---------------- */
/* ------------------------------------------------ */
#define COMPONENT_EVENT_SLEEP (1ULL<<0) /*!<< The third parameter of listener is NULL. */
#define COMPONENT_EVENT_WAKEUP (1ULL<<1) /*!<< The third parameter of listener is NULL. */
#define COMPONENT_EVENT_COMMON_ALL 0xffffULL
/* ------------------------------------------------ */
/* ---------------- DECODER EVENTS ---------------- */
/* ------------------------------------------------ */
#define COMPONENT_EVENT_DEC_OPEN (1ULL<<16) /*!<< The third parameter of listener is a pointer of CNMComListenerDecOpen. */
#define COMPONENT_EVENT_DEC_ISSUE_SEQ (1ULL<<17) /*!<< The third parameter of listener is a pointer of CNMComListenerDecIssueSeq */
#define COMPONENT_EVENT_DEC_COMPLETE_SEQ (1ULL<<18) /*!<< The third parameter of listener is a pointer of CNMComListenerDecCompleteSeq */
#define COMPONENT_EVENT_DEC_REGISTER_FB (1ULL<<19) /*!<< The third parameter of listener is a pointer of CNMComListenerDecRegisterFb */
#define COMPONENT_EVENT_DEC_READY_ONE_FRAME (1ULL<<20) /*!<< The third parameter of listener is a pointer of CNMComListenerDecReadyOneFrame */
#define COMPONENT_EVENT_DEC_START_ONE_FRAME (1ULL<<21) /*!<< The third parameter of listener is a pointer of CNMComListenerStartDecOneFrame. */
#define COMPONENT_EVENT_DEC_INTERRUPT (1ULL<<22) /*!<< The third parameter of listener is a pointer of CNMComListenerHandlingInt */
#define COMPONENT_EVENT_DEC_GET_OUTPUT_INFO (1ULL<<23) /*!<< The third parameter of listener is a pointer of CNMComListenerDecDone. */
#define COMPONENT_EVENT_DEC_DECODED_ALL (1ULL<<24) /*!<< The third parameter of listener is a pointer of CNMComListenerDecClose . */
#define COMPONENT_EVENT_DEC_CLOSE (1ULL<<25) /*!<< The third parameter of listener is NULL. */
#define COMPONENT_EVENT_DEC_RESET_DONE (1ULL<<26) /*!<< The third parameter of listener is NULL. */
#define COMPONENT_EVENT_DEC_ALL 0xffff0000ULL
/* ------------------------------------------------ */
/* ---------------- RENDERER EVENTS ----------------*/
/* ------------------------------------------------ */
typedef enum {
COMPONENT_EVENT_RENDER_ALLOCATE_FRAMEBUFER = (1<<0),
COMPONENT_EVENT_RENDER_ALL = 0xffffffff
} ComponentEventRenderer;
typedef struct CNMComListenerDecOpen {
DecHandle handle;
RetCode ret;
} CNMComListenerDecOpen;
typedef struct CNMComListenerDecIssueSeq {
DecHandle handle;
RetCode ret;
} CNMComListenerDecIssueSeq;
typedef struct CNMComListenerDecCompleteSeq {
DecInitialInfo* initialInfo;
FrameBufferFormat wtlFormat;
Uint32 cbcrInterleave;
CodStd bitstreamFormat;
char refYuvPath[MAX_FILE_PATH];
RetCode ret;
} CNMComListenerDecCompleteSeq;
typedef struct CNMComListenerDecRegisterFb {
DecHandle handle;
Uint32 numNonLinearFb;
Uint32 numLinearFb;
} CNMComListenerDecRegisterFb;
typedef struct CNMComListenerDecReadyOneFrame {
DecHandle handle;
} CNMComListenerDecReadyOneFrame;
typedef struct CNMComListenerStartDecOneFrame {
DecHandle handle;
RetCode result;
DecParam decParam;
} CNMComListenerStartDecOneFrame;
typedef struct CNMComListenerDecInt {
DecHandle handle;
Int32 flag;
Uint32 decIndex;
} CNMComListenerDecInt;
typedef struct CNMComListenerDecDone {
DecHandle handle;
RetCode ret;
DecParam* decParam;
DecOutputInfo* output;
Uint32 numDecoded;
vpu_buffer_t vbUser;
CodStd bitstreamFormat; /* codec */
BOOL enableScaler;
BOOL scaleX; //only used for CODA series VC1 multi-resolution
BOOL scaleY;
#if defined(SUPPORT_VCPU_FPGA) || defined(SUPPORT_VCORE_FPGA)
VcoreTestData* vcoreData;
#endif /* SUPPORT_VCPU_FPGA || SUPPORT_VCORE_FPGA */
} CNMComListenerDecDone;
typedef struct CNMComListenerDecClose {
DecHandle handle;
} CNMComListenerDecClose;
/* ------------------------------------------------ */
/* ---------------- ENCODER EVENTS ---------------- */
/* ------------------------------------------------ */
#define COMPONENT_EVENT_ENC_OPEN (1ULL<<32) /*!<< The third parameter of listener is a pointer of CNMComListenerEncOpen. */
#define COMPONENT_EVENT_ENC_ISSUE_SEQ (1ULL<<33) /*!<< The third parameter of listener is NULL */
#define COMPONENT_EVENT_ENC_COMPLETE_SEQ (1ULL<<34) /*!<< The third parameter of listener is a pointer of CNMComListenerEncCompleteSeq */
#define COMPONENT_EVENT_ENC_REGISTER_FB (1ULL<<35) /*!<< The third parameter of listener is NULL */
#define COMPONENT_EVENT_ENC_READY_ONE_FRAME (1ULL<<36) /*!<< The third parameter of listener is a pointer of CNMComListenerEncReadyOneFrame */
#define COMPONENT_EVENT_ENC_START_ONE_FRAME (1ULL<<37) /*!<< The third parameter of listener is a pointer of CNMComListenerEncStartOneFrame */
#define COMPONENT_EVENT_ENC_HANDLING_INT (1ULL<<38) /*!<< The third parameter of listener is a pointer of CNMComListenerHandlingInt */
#define COMPONENT_EVENT_ENC_GET_OUTPUT_INFO (1ULL<<39) /*!<< The third parameter of listener is a pointer of CNMComListenerEncDone. */
#define COMPONENT_EVENT_ENC_CLOSE (1ULL<<40) /*!<< The third parameter of listener is a pointer of CNMComListenerEncClose. */
#define COMPONENT_EVENT_ENC_FULL_INTERRUPT (1ULL<<41) /*!<< The third parameter of listener is a pointer of CNMComListenerEncFull . */
#define COMPONENT_EVENT_ENC_ENCODED_ALL (1ULL<<42) /*!<< The third parameter of listener is a pointer of EncHandle. */
#define COMPONENT_EVENT_ENC_RESET (1ULL<<43) /*!<< The third parameter of listener is a pointer of EncHandle. */
#define COMPONENT_EVENT_CODA9_ENC_MAKE_HEADER (1ULL<<44) /*!<< The third parameter of listener is a pointer of CNMComListenerEncDone. */
#define COMPONENT_EVENT_ENC_ALL 0xffff00000000ULL
/* ------------------------------------------------ */
/* ---------------- ENC FEEDER EVENTS ----------------*/
/* ------------------------------------------------ */
typedef enum {
COMPONENT_EVENT_ENC_FEEDER_PREPARE = (1<<0),
COMPONENT_EVENT_ENC_FEEDER_ALL = 0xffffffff
} ComponentEventEncFeeder;
typedef struct CNMComListenerEncOpen{
EncHandle handle;
} CNMComListenerEncOpen;
typedef struct CNMComListenerEncCompleteSeq {
EncHandle handle;
} CNMComListenerEncCompleteSeq;
typedef struct CNMComListenerHandlingInt {
EncHandle handle;
} CNMComListenerHandlingInt;
typedef struct CNMComListenerEncMakeHeader{
EncHandle handle;
EncodedHeaderBufInfo encHeaderInfo;
} CNMComListenerEncMakeHeader;
typedef struct CNMComListenerEncReadyOneFrame{
EncHandle handle;
RetCode result;
} CNMComListenerEncReadyOneFrame;
typedef struct CNMComListenerEncStartOneFrame{
EncHandle handle;
RetCode result;
#ifdef SUPPORT_TESTCASE_CQ_16
BOOL firstQueueFullFlag;
#endif
} CNMComListenerEncStartOneFrame;
typedef struct CNMComListenerEncDone {
EncHandle handle;
EncOutputInfo* output;
RetCode ret;
BOOL fullInterrupted;
EncodedStreamBufInfo encodedStreamInfo;
#ifdef SUPPORT_READ_BITSTREAM_IN_ENCODER
osal_file_t fp;
BitstreamReader bsReader;
PhysicalAddress bitstreamBuffer;
Uint32 bitstreamBufferSize;
#endif
} CNMComListenerEncDone;
typedef struct CNMComListenerEncFull {
EncHandle handle;
#ifdef SUPPORT_READ_BITSTREAM_IN_ENCODER
PhysicalAddress wrPtr;
Uint32 size;
PhysicalAddress paBsBufStart;
PhysicalAddress paBsBufEnd;
PhysicalAddress rdPtr;
vpu_buffer_t vbStream;
osal_file_t fp;
Uint8 *fullStreamBuf;
BitstreamReader bsReader;
#endif
} CNMComListenerEncFull;
typedef struct CNMComListenerEncClose {
EncHandle handle;
} CNMComListenerEncClose;
typedef Int32 (*ListenerFuncType)(Component, Port*, void*);
typedef void (*ComponentListenerFunc)(Component com, Uint64 event, void* data, void* context);
typedef struct {
Uint64 events; /*!<< See COMPONENT_EVENT_XXXX, It can be ORed with other events. */
ComponentListenerFunc update;
void* context;
} ComponentListener;
#define MAX_NUM_LISTENERS 32
typedef struct ComponentImpl {
const char* name;
void* context;
Port sinkPort;
Port srcPort;
Uint32 containerSize;
Uint32 numSinkPortQueue;
Component (*Create)(struct ComponentImpl*, CNMComponentConfig*);
CNMComponentParamRet (*GetParameter)(struct ComponentImpl*, struct ComponentImpl*, GetParameterCMD, void*);
CNMComponentParamRet (*SetParameter)(struct ComponentImpl*, struct ComponentImpl*, SetParameterCMD, void*);
BOOL (*Prepare)(struct ComponentImpl*, BOOL*);
/* \brief process input data and return output.
* \return TRUE - process done
*/
BOOL (*Execute)(struct ComponentImpl*, PortContainer*, PortContainer*);
/* \brief release all memories that are allocated by vdi_dma_allocate_memory().
*/
void (*Release)(struct ComponentImpl*);
BOOL (*Destroy)(struct ComponentImpl*);
BOOL success;
osal_thread_t thread;
ComponentState state;
BOOL stateDoing;
BOOL terminate;
ComponentListener listeners[MAX_NUM_LISTENERS];
Uint32 numListeners;
Queue* usingQ; /*<<! NOTE: DO NOT USE Enqueue() AND Dequeue() IN YOUR COMPONENT.
BUT, YOU CAN USE Peek() FUNCTION.
*/
CNMComponentType type;
Uint32 updateTime;
Uint32 Hz; /* Use clock signal ex) 30Hz, A component will receive 30 clock signals per second. */
void* internalData;
BOOL pause;
BOOL portFlush;
} ComponentImpl;
Component ComponentCreate(const char* componentName, CNMComponentConfig* componentParam);
BOOL ComponentSetupTunnel(Component fromComponent, Component toComponent);
ComponentState ComponentExecute(Component component);
/* @return 0 - done
* 1 - running
* 2 - error
*/
Int32 ComponentWait(Component component);
void ComponentStop(Component component);
void ComponentRelease(Component component);
BOOL ComponentChangeState(Component component, Uint32 state);
/* \brief Release all resources of the component
* \param ret The output variable that has status of success or failure.
*/
BOOL ComponentDestroy(Component component, BOOL* ret);
CNMComponentParamRet ComponentGetParameter(Component from, Component to, GetParameterCMD commandType, void* data);
CNMComponentParamRet ComponentSetParameter(Component from, Component to, SetParameterCMD commandType, void* data);
void ComponentNotifyListeners(Component component, Uint64 event, void* data);
BOOL ComponentRegisterListener(Component component, Uint64 events, ComponentListenerFunc func, void* context);
/* \brief Create a port
* \param size The size of PortStruct of the component
* depth The size of internal input queue and output queue.
*/
void ComponentPortCreate(Port* port, Component owner, Uint32 depth, Uint32 size);
/* \brief Fill data into the output queue.
*/
void ComponentPortSetData(Port* port, PortContainer* portData);
/* \brief Peek data from the input queue.
*/
PortContainer* ComponentPortPeekData(Port* port);
/* \brief Get data from the input queue.
*/
PortContainer* ComponentPortGetData(Port* port);
/* \brief Wait before get data from the input queue.
*/
void* WaitBeforeComponentPortGetData(Port* port);
/* \brief Ready status: the output queue is empty.
*/
void ComponentPortWaitReadyStatus(Port* port);
/* \brief Destroy port instance
*/
void ComponentPortDestroy(Port* port);
/* \brief If a port has input data, it returns true.
*/
BOOL ComponentPortHasInputData(Port* port);
Uint32 ComponentPortGetSize(Port* port);
/* \brief Clear input data
*/
void ComponentPortFlush(Component component);
ComponentState ComponentGetState(Component component);
BOOL ComponentParamReturnTest(CNMComponentParamRet ret, BOOL* retry);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // _COMPONENT_H_