Basic Device

The following code block shows the data structure for the basic device structure.
typedef struct _ST_CI_DEVICE {
    CI_CONNECTION *pstCiConnection;
    STF_U8 u8DeviceId;
    STF_U8 u8DeviceType;
    STF_CHAR szDeviceName[DEV_NAME_LEN_MAX];
    STF_S32 s32CiConnections;
    STF_BOOL8 bConnected;
    EN_MEM_TYPE enMemType;
    STF_VOID *pvDevParam;

    STF_RESULT (*Destroy)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*Connection)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*Disconnect)(ST_CI_DEVICE *pstDevice);
    STF_BOOL8 (*IsConnected)(ST_CI_DEVICE *pstDevice);
    STF_S32 (*GetConnections)(ST_CI_DEVICE *pstDevice);
    CI_CONNECTION *(*GetConnection)(ST_CI_DEVICE *pstDevice);
    int (*GetFileHandle)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*SubscribeEvent)(ST_CI_DEVICE *pstDevice, STF_S32 s32EventType);
    STF_RESULT (*UnsubscribeEvent)(ST_CI_DEVICE *pstDevice, STF_S32 s32EventType);
    STF_RESULT (*DequeueEvent)(ST_CI_DEVICE *pstDevice, struct v4l2_event *pstEvent);
    STF_RESULT (*InitDevice)(ST_CI_DEVICE *pstDevice, STF_U32 u32PixelFormat);
    STF_U32 (*GetPixelFormat)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*SetPixelFormat)(ST_CI_DEVICE *pstDevice, STF_U32 u32PixelFormat);
    struct v4l2_rect (*QueryCropWin)(ST_CI_DEVICE *pstDevice);
    ST_RECT (*QueryCropWin_2)(ST_CI_DEVICE *pstDevice);
    struct v4l2_rect (*GetCropWin)(ST_CI_DEVICE *pstDevice);
    ST_RECT (*GetCropWin_2)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*SetCropWin)(ST_CI_DEVICE *pstDevice, struct v4l2_rect *pstRect);
    STF_RESULT (*SetCropWin_2)(ST_CI_DEVICE *pstDevice, ST_RECT *pstRect);
    STF_RESULT (*EnumFormat)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*GetFormat)(ST_CI_DEVICE *pstDevice, struct v4l2_format *pstFormat);
    STF_RESULT (*SetFormat)(ST_CI_DEVICE *pstDevice, STF_U16 u16Width, STF_U16 u16Height, STF_U32 u32PixelFormat);
    STF_RESULT (*TryFormat)(ST_CI_DEVICE *pstDevice, STF_U32 u32PixelFormat);
    STF_RESULT (*GetParam)(ST_CI_DEVICE *pstDevice, STF_U32 *pu32Numerator, STF_U32 *pu32Denominator);
    STF_RESULT (*SetParam)(ST_CI_DEVICE *pstDevice, STF_U32 u32Numerator, STF_U32 u32Denominator);
    STF_RESULT (*SetParam_2)(ST_CI_DEVICE *pstDevice, STF_U32 u32FPS);
    struct v4l2_rect (*GetSelection)(ST_CI_DEVICE *pstDevice);
    ST_RECT (*GetSelection_2)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*SetSelection)(ST_CI_DEVICE *pstDevice, struct v4l2_rect *pstRect);
    STF_RESULT (*SetSelection_2)(ST_CI_DEVICE *pstDevice, ST_RECT *pstRect);
    STF_RESULT (*SetStreamOn)(ST_CI_DEVICE *pstDevice, STF_BOOL8 bOn);
    STF_BOOL8 (*IsStreamOn)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*AllocateBuf)(ST_CI_DEVICE *pstDevice, STF_U32 u32Count, STF_BOOL8 bMmap, STF_BOOL8 bExport, ST_DMA_BUF_INFO *pstDmaBufInfo);
    STF_RESULT (*AllocateAndEnqueueBuf)(ST_CI_DEVICE *pstDevice, STF_U32 u32AllocateCount, STF_U32 u32EnqueueCount, STF_BOOL8 bMmap, STF_BOOL8 bExport, ST_DMA_BUF_INFO *pstDmaBufInfo);
    ST_VDO_MEM *(*GetBuffer)(ST_CI_DEVICE *pstDevice, STF_U32 u32Index);
    ST_VDO_BUF (*GetBufInfo)(ST_CI_DEVICE *pstDevice, STF_U32 u32Index);
    STF_RESULT (*EnqueueBuf)(ST_CI_DEVICE *pstDevice, STF_U8 u8BufIdx);
    STF_RESULT (*EnqueueBuf_2)(ST_CI_DEVICE *pstDevice, STF_U32 u32Count, ST_VDO_BUF_INFO *pstVideoBufferInfo);
    STF_RESULT (*EnqueueBufFromAvailableQueue)(ST_CI_DEVICE *pstDevice, STF_S32 s32Count);
    STF_RESULT (*EnqueueBufFromCompletedQueue)(ST_CI_DEVICE *pstDevice, STF_S32 s32Count);
    STF_RESULT (*DequeueBuf)(ST_CI_DEVICE *pstDevice, ST_VDO_MEM **ppstVdoMem);
    STF_RESULT (*DequeueBuf_2)(ST_CI_DEVICE *pstDevice, STF_S32 *ps32Count, ST_VDO_BUF_INFO *pstVideoBufferInfo);
    STF_RESULT (*DequeueBufToCompletedQueue)(ST_CI_DEVICE *pstDevice, STF_S32 s32Count);
    STF_RESULT (*SwitchBufFromCompletedToAvailableQueue)(ST_CI_DEVICE *pstDevice, STF_S32 s32RemainCount);
    STF_RESULT (*PushBufToQueue)(ST_CI_DEVICE *pstDevice, sLinkedList_T *pstListQueue, ST_VDO_MEM *pstVdoMem, STF_BOOL8 bIsPushToFront);
    ST_VDO_MEM *(*PopBufFromQueue)(ST_CI_DEVICE *pstDevice, sLinkedList_T *pstListQueue, STF_BOOL8 bIsPopFromBack);
    STF_RESULT (*ReleaseBuf)(ST_CI_DEVICE *pstDevice);
    STF_RESULT (*GenerateLinksInfo)(ST_CI_DEVICE *pstDevice, EN_SNSR_IF enSensorInterface, ST_ITEM_INFO *pstLinksInfo);
    STF_RESULT (*ProcessLinks)(ST_CI_DEVICE *pstDevice, ST_ITEM_INFO *pstLinksInfo);
    STF_RESULT (*ProcessLinks_2)(ST_CI_DEVICE *pstDevice, EN_SNSR_IF enSensorInterface);
} ST_CI_DEVICE, *PST_CI_DEVICE;
The following table describes the fields in the above code block.
Table 1. Basic Device Field Description
Field Description
pstCiConnection The connection handle
u8DeviceId The device ID
u8DeviceType The device type (FB, PP, DRM, Video, V4L2 sub-device, etc.)
szDeviceName The device name
s32CiConnections Indicate the number of applications using this connection handle
bConnected Indicate whether the connection handle is open
enMemType Indicate which video buffer type (EN_MEM_TYPE_MMAP or EN_MEM_TYPE_DMA) will be allocated
pvDevParam Point to the device parameters structure
*Destroy Destroy this device
*Connection Connect to the device driver
*Disconnect Disconnect form the device driver
*IsConnected Check the connection status
*GetConnections Get the number of connections
*GetConnection Get the connection handle
*GetFileHandle Get the file descriptor from the connection handle
*SubscribeEvent1 Subscribe an event to the video device
*UnsubscribeEvent1 Unsubscribe an event to the video device
*DequeueEvent1 Dequeue an event from the video device
*InitDevice Device initialization
*GetPixelFormat Get the pixel format from the device
*SetPixelFormat Set the pixel format to the device
*QueryCropWin1 Query the cropping window from the video device
*QueryCropWin_21 Query the cropping window from the video device
*GetCropWin1 Get the cropping window from the video device
*GetCropWin_21 Get the cropping window from the video device
*SetCropWin1 Set the cropping window into the video device
*SetCropWin_21 Set the cropping window into the video device
*EnumFormat1 Enumerate supported formats from the video device
*GetFormat1 Get the data format from the video device
*SetFormat1 Set the data format into the video device
*TryFormat1 Test if the video device supports this data format
*GetParam1 Get streaming parameters from the video device
*SetParam1 Set streaming parameters into the video device
*SetParam_21 Set streaming parameters into the video device
*GetSelection1 Get selection rectangle from the video device
*GetSelection_21 Get selection rectangle from the video device
*SetSelection1 Set selection rectangle into the video device
*SetSelection_21 Set selection rectangle into the video device
*SetStreamOn1 Start/Stop video device streaming I/O
*IsStreamOn1 Check the streaming I/O status from the video device
*AllocateBuf2 Allocate buffers for the device
*AllocateAndEnqueueBuf1 Allocate and enqueue buffers into the video device
*GetBuffer1 Get the video buffer from the video device
*GetBufInfo1 Get the video buffer information from the video device
*EnqueueBuf1 Enqueue buffer into the video device
*EnqueueBuf_21 Enqueue buffers into the video device
*EnqueueBufFromAvailableQueue1 Enqueue buffers from available queue to the video device
*EnqueueBufFromCompletedQueue1 Enqueue buffers from completed queue to the video device
*DequeueBuf1 Dequeue buffers from the video device
*DequeueBuf_21 Dequeue buffers from the video device
*DequeueBufToCompletedQueue1 Dequeue buffers from the video device to completed queue
*SwitchBufFromCompletedToAvailableQueue1 Switch buffers from the completed queue to available queue
*PushBufToQueue1 Push buffer into the queue
*PopBufFromQueue1 Pop buffer from the queue
*ReleaseBuf2 Release buffers from the device
*GenerateLinksInfo1 Generate the media link information
*ProcessLinks1 Process the media link settings
*ProcessLinks_21 Process the media link settings
Note:
  1. The field items are for video device only.

  2. The field items are for DRM and video device only.