GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
Executable
+170
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* Copyright (c) XCAM. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __XCAM_MBUF_H__
|
||||
#define __XCAM_MBUF_H__
|
||||
|
||||
#include "xcam_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define XCAM_MBUF_MAX_PACK (8)
|
||||
#define XCAM_MBUF_PAYLOAD_TYPE_ALL (0xFFFE)
|
||||
#define XCAM_MBUF_PAYLOAD_TYPE_INVALID (0xFFFF)
|
||||
|
||||
/* error number */
|
||||
#define XCAM_ERR_MBUF_BASE XCAM_FAILURE
|
||||
#define XCAM_ERR_MBUF_MUTEX_INIT_FAILED (XCAM_ERR_MBUF_BASE - 1)
|
||||
#define XCAM_ERR_MBUF_PARAM_INVALID (XCAM_ERR_MBUF_BASE - 2)
|
||||
#define XCAM_ERR_MBUF_ALLOC_FAILED (XCAM_ERR_MBUF_BASE - 3)
|
||||
#define XCAM_ERR_MBUF_ADDR_NULL (XCAM_ERR_MBUF_BASE - 4)
|
||||
#define XCAM_ERR_MBUF_NO_MEMORY (XCAM_ERR_MBUF_BASE - 5)
|
||||
#define XCAM_ERR_MBUF_BUFFER_FULL (XCAM_ERR_MBUF_BASE - 6)
|
||||
#define XCAM_ERR_MBUF_BUFFER_EMPTY (XCAM_ERR_MBUF_BASE - 7)
|
||||
#define XCAM_ERR_MBUF_FREE_ERR (XCAM_ERR_MBUF_BASE - 8)
|
||||
#define XCAM_ERR_MBUF_GET_BUF_FAILED (XCAM_ERR_MBUF_BASE - 9)
|
||||
#define XCAM_ERR_MBUF_PUT_BUF_FAILED (XCAM_ERR_MBUF_BASE - 10)
|
||||
#define XCAM_ERR_MBUF_READ_FAILED (XCAM_ERR_MBUF_BASE - 11)
|
||||
#define XCAM_ERR_MBUF_BUSY (XCAM_ERR_MBUF_BASE - 12)
|
||||
#define XCAM_ERR_MBUF_PAYLOAD_CHECK_ERR (XCAM_ERR_MBUF_BASE - 13)
|
||||
#define XCAM_ERR_MBUF_NOT_REGISTERED (XCAM_ERR_MBUF_BASE - 14)
|
||||
#define XCAM_ERR_MBUF_RELEASE_FAILED (XCAM_ERR_MBUF_BASE - 15)
|
||||
|
||||
|
||||
|
||||
/* mbuffer config */
|
||||
typedef struct cam_mbuf_cfg_s {
|
||||
xcam_u32 buf_size; /* memory size of mbuffer */
|
||||
xcam_s32 payload_count; /* max patload type num in mbuffer */
|
||||
} xcam_mbuf_cfg;
|
||||
|
||||
/* mbuffer pack info */
|
||||
typedef struct cam_mbuf_pack_info_s {
|
||||
xcam_u64 pts; /* timestamp if the frame */
|
||||
xcam_u32 seq; /* sequence num of the frame */
|
||||
xcam_u16 payload_type; /* mbuffer data payload type 0~0xFFF0,0xFFFE:all,0xFFFF:invalid */
|
||||
xcam_u8 key_frame; /* whether keyframe or not */
|
||||
xcam_u8 pack_count; /* pack_count < XCAM_MBUF_MAX_PACK*/
|
||||
xcam_u8 *pack_addr[XCAM_MBUF_MAX_PACK]; /* start address of the data block */
|
||||
xcam_u32 pack_size[XCAM_MBUF_MAX_PACK]; /* len of the block data agree with pAdder */
|
||||
} xcam_mbuf_pack_info;
|
||||
|
||||
/*
|
||||
* Create the instant of mbuf, allocate buf.
|
||||
* param[in] xcam_mbuf_cfg *mbuf_cfg: property of buffer
|
||||
* param[out] xcam_void **handle: mbuf handle
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_ERR_MBUF_ALLOC_FAILED buffer malloc failed
|
||||
* XCAM_ERR_MBUF_MUTEX_INIT_FAILED
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_get_buffer(xcam_handle **handle, xcam_mbuf_cfg *mbuf_cfg);
|
||||
|
||||
/*
|
||||
* Realse mbuffer.
|
||||
* param[in] xcam_void *handle: mbuf handle
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_release_buffer(xcam_handle *handle);
|
||||
|
||||
/*
|
||||
* register MBUF payload type, for example 0 for video 1 for audio.
|
||||
* param[in] xcam_void * handle: mbuf handle
|
||||
* param[in] xcam_u16 payload_type: payload type
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_FAILURE regiter space is full
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_register_payload(xcam_handle *handle, xcam_u16 payload_type);
|
||||
|
||||
/*
|
||||
* unregister MBUF payload type.
|
||||
* param[in] xcam_void * handle: mbuf handle
|
||||
* param[in] xcam_u16 payload_type: payload type
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_FAILURE
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_unregister_payload(xcam_handle *handle, xcam_u16 payload_type);
|
||||
|
||||
/*
|
||||
* Set read/write status of mbuf, according to the payload type.
|
||||
* param[in] xcam_void * handle: muf handle
|
||||
* param[in] xcam_u16 payload_type: payload type
|
||||
* param[in] xcam_bool enable_read : enable read ptr or not
|
||||
* param[in] xcam_bool enable_write: enable write ptr or not
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_FAILURE payload not found
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_set_rw_enable(xcam_handle *handle, xcam_u16 payload_type, xcam_bool enable_read, xcam_bool enable_write);
|
||||
|
||||
/*
|
||||
* Get the read/write status of mbuffer, according to the payload type.
|
||||
* param[in] xcam_void *handle: the handle of mbuf
|
||||
* param[in] xcam_u16 payload_type: payload type
|
||||
* param[in] xcam_bool *enable_read : enable read ptr or not
|
||||
* param[in] xcam_bool *enable_write: enable write ptr or not
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_ERR_MBUF_NOT_REGISTERED
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_get_rw_enable(xcam_handle *handle, xcam_u16 payload_type, xcam_bool *enable_read, xcam_bool *enable_write);
|
||||
|
||||
/*
|
||||
* Write package into mbuf
|
||||
* param[in] xcam_void * handle: mbuf handle
|
||||
* param[in] xcam_mbuf_pack_info *pack_info pack info data
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID,XCAM_ERR_MBUF_GET_BUF_FAILED,XCAM_ERR_MBUF_PUT_BUF_FAILED
|
||||
* XCAM_ERR_MBUF_FULL,XCAM_ERR_MBUF_BUSY,
|
||||
* XCAM_ERR_MBUF_BUSY
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_write_pack(xcam_handle *handle, const xcam_mbuf_pack_info *pack_info);
|
||||
|
||||
/*
|
||||
* Read data from mbuf
|
||||
* param[in] xcam_void * handle: mbuf handle
|
||||
* param[in] xcam_u16 payload_type payload type
|
||||
* param[out] xcam_mbuf_pack_info *pack_info read out pack info
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_ERR_MBUF_BUFFER_EMPTY
|
||||
* XCAM_ERR_MBUF_PAYLOAD_CHECK_ERR no such data of the giving payload type
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_read_pack(xcam_handle *handle, xcam_u16 payload_type, xcam_mbuf_pack_info *pack_info);
|
||||
|
||||
/*
|
||||
* Forward the read ptr for the payload type data
|
||||
* param[in] xcam_void * handle: mbuf handle
|
||||
* param[in] xcam_u16 payload_type: payload type
|
||||
* param[out] xcam_u32 step: moving steps for the read ptr,1 for move one package after
|
||||
* return XCAM_SUCCESS success
|
||||
* XCAM_ERR_MBUF_PARAM_INVALID illegal params
|
||||
* XCAM_ERR_MBUF_RELEASE_FAILED
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_forward(xcam_handle *handle, xcam_u16 payload_type, xcam_u32 step);
|
||||
|
||||
/*
|
||||
* Print the debug info
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_debug(xcam_handle *handle, xcam_u16 payload_type);
|
||||
|
||||
/*
|
||||
* Get package data offset
|
||||
*/
|
||||
xcam_s32 xcam_mbuf_get_package_data_offset(xcam_handle *handle, const xcam_mbuf_pack_info *pack_info, xcam_u32 *offset);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __XCAM_MBUF_H__ */
|
||||
Reference in New Issue
Block a user