222 lines
8.2 KiB
C
Executable File
222 lines
8.2 KiB
C
Executable File
/**
|
|
@brief Header file of bitstream demuxer module.\n
|
|
This file contains the functions which is related to bitstream demuxer in the chip.
|
|
|
|
@file hd_bsdemux_lib.h
|
|
|
|
@ingroup mlib
|
|
|
|
@note Nothing.
|
|
|
|
Copyright Novatek Microelectronics Corp. 2019. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _HD_BSDEMUX_H_
|
|
#define _HD_BSDEMUX_H_
|
|
|
|
/********************************************************************
|
|
INCLUDE FILES
|
|
********************************************************************/
|
|
#include "hd_type.h"
|
|
#include "hd_util.h"
|
|
#include "avfile/MediaReadLib.h"
|
|
|
|
/********************************************************************
|
|
MACRO CONSTANT DEFINITIONS
|
|
********************************************************************/
|
|
#define HD_BSDEMUX_MAX_IN 64 ///< max count of HD_IN() of this device (interface)
|
|
#define HD_BSDEMUX_MAX_OUT 64 ///< max count of HD_OUT() of this device (interface)
|
|
#define HD_BSDEMUX_MAX_DATA_TYPE 4 ///< max count of output pool of this device (interface)
|
|
|
|
/********************************************************************
|
|
MACRO FUNCTION DEFINITIONS
|
|
********************************************************************/
|
|
#define HD_BSDEMUX_SET_COUNT(a, b) ((a)*10)+(b) ///< ex: use HD_BSDEMUX_SET_COUNT(1, 5) for setting 1.5
|
|
|
|
/********************************************************************
|
|
TYPE DEFINITION
|
|
********************************************************************/
|
|
/**
|
|
@name HD_BSDEMUX_IN capability
|
|
*/
|
|
typedef enum _HD_BSDEMUX_IN_CAPS {
|
|
HD_BSDEMUX_IN_CAPS_MP4 = 0x00000001, ///< support bitstream demux from mp4
|
|
HD_BSDEMUX_IN_CAPS_TS = 0x00000002, ///< support bitstream demux from ts
|
|
ENUM_DUMMY4WORD(HD_BSDEMUX_IN_CAPS)
|
|
} HD_BSDEMUX_IN_CAPS;
|
|
|
|
/**
|
|
@name HD_BSDEMUX_OUT capability
|
|
*/
|
|
typedef enum _HD_BSDEMUX_OUT_CAPS {
|
|
HD_BSDEMUX_OUT_CAPS_VIDEO = 0x00000001, ///< support bitstream demux to video
|
|
HD_BSDEMUX_OUT_CAPS_AUDIO = 0x00000002, ///< support bitstream demux to audio
|
|
ENUM_DUMMY4WORD(HD_BSDEMUX_OUT_CAPS)
|
|
} HD_BSDEMUX_OUT_CAPS;
|
|
|
|
/**
|
|
@name HD_BSDEMUX system capability
|
|
*/
|
|
typedef struct _HD_BSDEMUX_SYSCAPS {
|
|
HD_DAL dev_id; ///< device id
|
|
UINT32 chip; ///< chip id of hardware
|
|
UINT32 max_in_count; ///< supported max count of HD_IN()
|
|
UINT32 max_out_count; ///< supported max count of HD_OUT()
|
|
HD_DEVICE_CAPS dev_caps; ///< capability of device, using HD_DEVICE_CAPS
|
|
HD_BSDEMUX_IN_CAPS in_caps[HD_BSDEMUX_MAX_IN]; ///< capability of input, using HD_BSDEMUX_CAPS
|
|
HD_BSDEMUX_OUT_CAPS out_caps[HD_BSDEMUX_MAX_OUT]; ///< capability of output, using HD_VIDEO_CAPS
|
|
} HD_BSDEMUX_SYSCAPS;
|
|
|
|
/**
|
|
NOTE: for IPC SYSCAPS,
|
|
|
|
max_in_count = 16;
|
|
max_out_count = 16;
|
|
dev_caps =
|
|
HD_CAPS_PATHCONFIG; ///< require: set HD_BSDEMUX_PATH_CONFIG struct
|
|
in_caps[0~16] =
|
|
HD_BSDEMUX_CAPS_MP4 ///< support bitstream demux from mp4
|
|
| HD_BSDEMUX_CAPS_TS ///< support bitstream demux from ts
|
|
out_caps[0~16] =
|
|
HD_BSDEMUX_OUT_CAPS_VIDEO ///< support bitstream demux to video
|
|
| HD_BSDEMUX_OUT_CAPS_AUDIO; ///< support bitstream demux to audio
|
|
*/
|
|
|
|
/**
|
|
bitstream type (video / audio)
|
|
*/
|
|
typedef enum _HD_BSDEMUX_BS_TPYE {
|
|
HD_BSDEMUX_BS_TPYE_VIDEO = 0x00000001, ///< video bitstream type
|
|
HD_BSDEMUX_BS_TPYE_AUDIO = 0x00000002, ///< audio bitstream type
|
|
ENUM_DUMMY4WORD(HD_BSDEMUX_BS_TPYE)
|
|
} HD_BSDEMUX_BS_TPYE;
|
|
|
|
/**
|
|
bsdemux push in buf descriptor.
|
|
*/
|
|
typedef struct _HD_BSDEMUX_BUF {
|
|
UINT32 sign; ///< MAKEFOURCC('B','S','D','X')
|
|
//UINT32 addr; ///< data address
|
|
//UINT64 size; ///< data size
|
|
HD_BSDEMUX_BS_TPYE bs_type; ///< bitstream type (video / audio)
|
|
UINT32 index; ///< bitstream index
|
|
} HD_BSDEMUX_BUF;
|
|
|
|
/**
|
|
bsdemux file format
|
|
*/
|
|
typedef enum _HD_BSDEMUX_FILE_FMT {
|
|
HD_BSDEMUX_FILE_FMT_MP4 = 0x00000001, ///< mp4 file format
|
|
HD_BSDEMUX_FILE_FMT_TS = 0x00000002, ///< ts file format
|
|
ENUM_DUMMY4WORD(HD_BSDEMUX_FILE_FMT)
|
|
} HD_BSDEMUX_FILE_FMT;
|
|
|
|
/**
|
|
bsdemux decrypt information
|
|
*/
|
|
/*typedef struct _HD_BSDEMUX_DECRYPT_INFO {
|
|
UINT32 addr; ///< addr of decrypt key
|
|
UINT32 len; ///< size of decrypt key
|
|
} HD_BSDEMUX_DECRYPT_INFO;*/
|
|
|
|
/**
|
|
bsdemux path configuration
|
|
*/
|
|
typedef struct _HD_BSDEMUX_PATH_CONFIG {
|
|
HD_BSDEMUX_FILE_FMT file_fmt; ///< file format
|
|
CONTAINERPARSER *container; ///< file container
|
|
} HD_BSDEMUX_PATH_CONFIG;
|
|
|
|
/**
|
|
bsdemux inport parameter
|
|
*/
|
|
typedef struct _HD_BSDEMUX_IN {
|
|
HD_VIDEO_CODEC video_codec; ///< video codec type
|
|
UINT32 video_width; ///< video width
|
|
UINT32 video_height; ///< video height
|
|
UINT32 video_gop; ///< video gop number
|
|
UINT32 desc_size; ///< h.26x desc size
|
|
UINT32 video_en; ///< enable video demux
|
|
UINT32 audio_en; ///< enable audio demux
|
|
UINT32 decrypt_key; ///< addr of decrypt key
|
|
} HD_BSDEMUX_IN;
|
|
|
|
/**
|
|
bsdemux file related information
|
|
*/
|
|
typedef struct _HD_BSDEMUX_FILE {
|
|
UINT32 buf_start_addr; ///< read file buffer start addr
|
|
UINT64 blk_size; ///< file block size
|
|
UINT32 tt_blknum; ///< total file block number
|
|
} HD_BSDEMUX_FILE;
|
|
|
|
/**
|
|
bsdemux callback event type.
|
|
*/
|
|
typedef enum _HD_BSDEMUX_CB_EVENT{
|
|
HD_BSDEMUX_CB_EVENT_VIDEO_BS = 0x00000001,
|
|
HD_BSDEMUX_CB_EVENT_AUDIO_BS = 0x00000002,
|
|
HD_BSDEMUX_CB_EVENT_READ_VIDEO_BS = 0x00000003,
|
|
HD_BSDEMUX_CB_EVENT_READ_AUDIO_BS = 0x00000004,
|
|
ENUM_DUMMY4WORD(HD_BSDEMUX_CB_EVENT)
|
|
} HD_BSDEMUX_CB_EVENT;
|
|
|
|
/**
|
|
bsdemux callback information.
|
|
note: modified from uitron
|
|
*/
|
|
typedef struct _HD_BSDEMUX_CBINFO{
|
|
UINT64 offset; ///< bitstream offest
|
|
UINT32 addr; ///< bitstream addr
|
|
UINT32 size; ///< bitstream size
|
|
UINT32 index; ///< bitstream index
|
|
BOOL eof;
|
|
} HD_BSDEMUX_CBINFO;
|
|
|
|
/**
|
|
bsdemux callback funcion prototype.
|
|
|
|
@param HD_BSDEMUX_CB_EVENT event_id
|
|
@param HD_BSDEMUX_CBINFO * param_1
|
|
*/
|
|
typedef INT32 (*HD_BSDEMUX_CALLBACK)(HD_BSDEMUX_CB_EVENT event_id, HD_BSDEMUX_CBINFO *p_param);
|
|
|
|
/**
|
|
bsdemux callback info.
|
|
*/
|
|
typedef struct _HD_BSDEMUX_REG_CALLBACK {
|
|
HD_BSDEMUX_CALLBACK callbackfunc;
|
|
} HD_BSDEMUX_REG_CALLBACK;
|
|
|
|
typedef enum _HD_BSDEMUX_PARAM_ID{
|
|
HD_BSDEMUX_PARAM_DEVCOUNT, ///< support get with ctrl path, using HD_DEVCOUNT struct (device id max count)
|
|
HD_BSDEMUX_PARAM_SYSCAPS, ///< support get with ctrl path, using HD_BSDEMUX_SYSCAPS
|
|
HD_BSDEMUX_PARAM_PATH_CONFIG, ///< support get/set with i/o path, using HD_BSDEMUX_PATH_CONFIG
|
|
HD_BSDEMUX_PARAM_IN, ///< support get/set with i/o path, using HD_BSDEMUX_IN struct
|
|
HD_BSDEMUX_PARAM_FILE, ///< support get/set with i/o path, using HD_BSDEMUX_FILE struct
|
|
HD_BSDEMUX_PARAM_REG_CALLBACK, ///< register callback function for output data, using prototype HD_BSDEMUX_CALLBACK
|
|
HD_BSDEMUX_PARAM_TRIG_TSDMX,
|
|
HD_BSDEMUX_PARAM_FILESIZE,
|
|
HD_BSDEMUX_PARAM_TSDMX_BUFBLK,
|
|
HD_BSDEMUX_PARAM_TSDMX_BUF_RESET,
|
|
HD_BSDEMUX_PARAM_FILE_REMAIN_SIZE,
|
|
HD_BSDEMUX_PARAM_MAX,
|
|
ENUM_DUMMY4WORD(HD_BSDEMUX_PARAM_ID)
|
|
} HD_BSDEMUX_PARAM_ID;
|
|
|
|
/********************************************************************
|
|
EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
|
|
********************************************************************/
|
|
HD_RESULT hd_bsdemux_init(VOID);
|
|
HD_RESULT hd_bsdemux_open(HD_PATH_ID path_id);
|
|
//HD_RESULT hd_bsdemux_start(HD_PATH_ID path_id); // not used
|
|
//HD_RESULT hd_bsdemux_stop(HD_PATH_ID path_id); // not used
|
|
HD_RESULT hd_bsdemux_close(HD_PATH_ID path_id);
|
|
HD_RESULT hd_bsdemux_get(HD_PATH_ID path_id, HD_BSDEMUX_PARAM_ID id, VOID* p_param);
|
|
HD_RESULT hd_bsdemux_set(HD_PATH_ID path_id, HD_BSDEMUX_PARAM_ID id, VOID* p_param);
|
|
HD_RESULT hd_bsdemux_push_in_buf(HD_PATH_ID path_id, HD_BSDEMUX_BUF* p_in_bsdemux_buf, INT32 wait_ms);
|
|
HD_RESULT hd_bsdemux_uninit(VOID);
|
|
|
|
#endif
|
|
|