nt9856x/code/lib/include/hd_bsmux_lib.h
2023-03-28 15:07:53 +08:00

506 lines
22 KiB
C
Executable File

/**
@brief Header file of bitstream muxer module.\n
This file contains the functions which is related to bsmux in the chip.
@file hd_bsmux_lib.h
@ingroup mlib
@note Nothing.
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
*/
#ifndef _HD_BSMUX_LIB_H_
#define _HD_BSMUX_LIB_H_
/********************************************************************
INCLUDE FILES
********************************************************************/
#include "hd_common.h"
/********************************************************************
MACRO CONSTANT DEFINITIONS
********************************************************************/
#define HD_BSMUX_MAX_CTRL 16 ///< max count of ctrl of this device (interface)
#define HD_BSMUX_MAX_IN 64 ///< max count of input of this device (interface)
#define HD_BSMUX_MAX_OUT 64 ///< max count of output of this device (interface)
#define HD_BSMUX_MAX_DATA_TYPE 4 ///< max count of output pool of this device (interface)
/**
@name file operation definitions (bitwise)
@note modified from uitron
*/
#define HD_BSMUX_FOP_NONE 0x00000000 ///< Do nothing. Used for event only
#define HD_BSMUX_FOP_CREATE 0x00000001 ///< Create a new file (if old one exists, it will be truncated)
#define HD_BSMUX_FOP_CLOSE 0x00000002 ///< Close the file
#define HD_BSMUX_FOP_CONT_WRITE 0x00000004 ///< Write continously (from current position)
#define HD_BSMUX_FOP_SEEK_WRITE 0x00000008 ///< Write after seeking
#define HD_BSMUX_FOP_FLUSH 0x00000010 ///< Flush the data right away after writing
#define HD_BSMUX_FOP_DISCARD 0x00000100 ///< Discard operations which not processed yet
#define HD_BSMUX_FOP_READ_WRITE 0x00001000 ///< Read data from sysinfo and write continously (from current position)
#define HD_BSMUX_FOP_SNAPSHOT (HD_BSMUX_FOP_CREATE | HD_BSMUX_FOP_CONT_WRITE | HD_BSMUX_FOP_CLOSE) ///< Create a single file in one operation
/********************************************************************
MACRO FUNCTION DEFINITIONS
********************************************************************/
#define HD_BSMUX_SET_COUNT(a, b) ((a)*10)+(b) ///< ex: use HD_BSMUX_SET_COUNT(1, 5) for setting 1.5
#define HD_BSMUX_SET_MS(a, b) ((a)*1000)+(b) ///< ex: use HD_BSMUX_SET_MS(1, 500) for setting 1.5 sec
#define HD_BSMUX_UTC_DATE(y, m, d) ((y << 16) | ((m & 0x00ff) << 8) | (d & 0x00ff))
#define HD_BSMUX_UTC_TIME(h, m, s) ((h << 16) | ((m & 0x00ff) << 8) | (s & 0x00ff))
#define HD_BSMUX_UTC_YEAR(d) ((d) >> 16)
#define HD_BSMUX_UTC_MON(d) (((d) & 0xff00) >> 8)
#define HD_BSMUX_UTC_DAY(d) ((d) & 0x00ff)
#define HD_BSMUX_UTC_HOUR(t) ((t) >> 16)
#define HD_BSMUX_UTC_MIN(t) (((t) & 0xff00) >> 8)
#define HD_BSMUX_UTC_SEC(t) ((t) & 0x00ff)
#define HD_LIB_BSMUX_COUNT 32
#define HD_LIB_BSMUX_BASE 0
#define HD_LIB_BSMUX(did) (HD_LIB_BSMUX_BASE + (did))
#define HD_LIB_BSMUX_MAX (HD_LIB_BSMUX_BASE + HD_LIB_BSMUX_COUNT - 1)
#define HD_BSMUX_CTRL(dev_id) ((HD_LIB_BSMUX(dev_id) << 16) | HD_CTRL)
#define HD_BSMUX_IN(dev_id, in_id) ((HD_LIB_BSMUX(dev_id) << 16) | (((in_id) & 0x00ff) << 8))
#define HD_BSMUX_OUT(dev_id, out_id) ((HD_LIB_BSMUX(dev_id) << 16) | ((out_id) & 0x00ff))
/********************************************************************
TYPE DEFINITION
********************************************************************/
/**
@name file event definitions
@note modified from uitron (should be the same as HD_FILEOUT_FEVENT_XXX)
*/
typedef enum _HD_BSMUX_FEVENT {
HD_BSMUX_FEVENT_NORMAL = 0x00000000, ///< normal recording
HD_BSMUX_FEVENT_EMR = 0x00000001, ///< emergency recording
HD_BSMUX_FEVENT_BSINCARD = 0x00000002, ///< stored in cards temporarily
ENUM_DUMMY4WORD(HD_BSMUX_FEVENT)
} HD_BSMUX_FEVENT;
/**
@name file type definitions.
@note modified from uitron (should be the same as MEDIA_FILEFORMAT_XXX)
*/
typedef enum _HD_BSMUX_FTYPE {
HD_BSMUX_FTYPE_MOV = 0x00000001, ///< MOV file format
HD_BSMUX_FTYPE_MP4 = 0x00000004, ///< MP4 file format
HD_BSMUX_FTYPE_TS = 0x00000008, ///< TS file format
ENUM_DUMMY4WORD(HD_BSMUX_FTYPE)
} HD_BSMUX_FTYPE;
/**
bsmux output data descriptor.
@note modified from BSMUXER_FILE_BUF
@CALLBACK: FOUT
*/
#define HD_BSMUX_DESC_SIZE 38 ///< size of data desc in WORDS
typedef struct _HD_BSMUX_OUT_DATA {
UINT32 sign; ///< MAKEFOURCC('F','O','U','T')
UINT32 event; ///< bsmux fevent
UINT32 fileop; ///< bitwise: open/close/conti_write or seek_write/flush/none(event only)/discard
UINT32 addr; ///< write data address
UINT64 size; ///< write data size
UINT64 pos; ///< only valid if seek_write
UINT32 type; ///< file type, MP4, TS, JPG, THM
UINT32 fpath_size; ///< Length of file path
CHAR *p_fpath; ///< Specify file path (if NULL, it will callback project to get)
INT32 (*fp_pushed)(void *p_data); ///< callback for previous module release buffer
INT32 ret_push; ///< fileop result [ER/INT32]
UINT32 pathID; ///< keep path id
UINT32 resv[23];
VOID *p_user_data;
} HD_BSMUX_OUT_DATA;
STATIC_ASSERT(sizeof(HD_BSMUX_OUT_DATA) / sizeof(UINT32) == HD_BSMUX_DESC_SIZE);
/**
@name callback event type.
@note modified from BSMUXER_CALLBACKEVENT
*/
typedef enum _HD_BSMUX_CB_EVENT {
HD_BSMUX_CB_EVENT_PUTBSDONE = 0x00000001, ///< put bs done
HD_BSMUX_CB_EVENT_FOUTREADY = 0x00000002, ///< fout data ready
HD_BSMUX_CB_EVENT_KICKTHUMB = 0x00000004, ///< <obsolete>
HD_BSMUX_CB_EVENT_CUT_COMPLETE = 0x00000008, ///< cut file complete
HD_BSMUX_CB_EVENT_CLOSE_RESULT = 0x00000010, ///< result causing module close
HD_BSMUX_CB_EVENT_COPYBSBUF = 0x00000020, ///< copy bs done
HD_BSMUX_CB_EVENT_CUT_BEGIN = 0x00000040, ///< cut file begin
ENUM_DUMMY4WORD(HD_BSMUX_CB_EVENT)
} HD_BSMUX_CB_EVENT;
/**
@name callback error code.
@note modified from BSMUXER_CALLBACKEVENT
*/
typedef enum _HD_BSMUX_ERRCODE {
HD_BSMUX_ERRCODE_NONE = 0x00000000, ///< normal
HD_BSMUX_ERRCODE_SLOWMEDIA = 0x00000001, ///< slow media to restart
HD_BSMUX_ERRCODE_LOOPREC_FULL = 0x00000004, ///< <obsolete>
HD_BSMUX_ERRCODE_OVERTIME = 0x00000020, ///< <obsolete>
HD_BSMUX_ERRCODE_MAXSIZE = 0x00000040, ///< <obsolete>
HD_BSMUX_ERRCODE_VANOTSYNC = 0x00000080, ///< vid/aud not sync
HD_BSMUX_ERRCODE_GOPMISMATCH = 0x00000100, ///< gop not match setting
HD_BSMUX_ERRCODE_PROCDATAFAIL = 0x00000200, ///< proc push data fail
ENUM_DUMMY4WORD(HD_BSMUX_ERRCODE)
} HD_BSMUX_ERRCODE;
/**
callback information.
@note modified from BSMUXER_CALLBACK_INFO
@CALLBACK: FOUT
*/
typedef struct _HD_BSMUX_CBINFO {
UINT32 id; ///< path id
HD_BSMUX_OUT_DATA * out_data; ///< output data
HD_BSMUX_ERRCODE errcode; ///< callback error (if normal be none)
HD_BSMUX_CB_EVENT cb_event; ///< callback event
} HD_BSMUX_CBINFO;
/**
callback funcion prototype.
@param CHAR * p_name
@param HD_BSMUX_CBINFO * cbinfo
@param UINT32 * param
*/
typedef INT32 (*HD_BSMUX_CALLBACK)(CHAR *p_name, HD_BSMUX_CBINFO *cbinfo, UINT32 *param);
/**
bsmux callback info.
@note internal use
@SET: HD_BSMUX_PARAM_REG_CALLBACK
*/
typedef struct _HD_BSMUX_REG_CALLBACK {
HD_BSMUX_CALLBACK callbackfunc;
UINT32 version;
} HD_BSMUX_REG_CALLBACK;
/**
@name video codec type.
@note modified from uitron (should be the same as MEDIAVIDENC_XXX)
*/
typedef enum _HD_BSMUX_VIDCODEC {
HD_BSMUX_VIDCODEC_MJPG = 0x00000001, ///< motion jpeg
HD_BSMUX_VIDCODEC_H264 = 0x00000002, ///< h.264
HD_BSMUX_VIDCODEC_H265 = 0x00000003, ///< h.265
ENUM_DUMMY4WORD(HD_BSMUX_VIDCODEC)
} HD_BSMUX_VIDCODEC;
/**
video info (project setting).
@SET/GET: HD_BSMUX_PARAM_VIDEOINFO
*/
typedef struct _HD_BSMUX_VIDEOINFO {
UINT32 vidcodec; ///< vidoe codec type (using HD_BSMUX_VIDCODEC)
UINT32 vfr; ///< vidoe frame rate (round)(playback)
UINT32 width; ///< video width
UINT32 height; ///< video height
UINT32 descAddr; ///< <obsolete>
UINT32 descSize; ///< <obsolete>
UINT32 tbr; ///< target bitrate Bytes/sec
UINT32 DAR; ///< MP_VDOENC_DAR_DEFAULT or others
UINT32 gop; ///< gop
} HD_BSMUX_VIDEOINFO;
/**
@name audio codec type.
@note modified from uitron (should be the same as MOVAUDENC_XXX)
*/
typedef enum _HD_BSMUX_AUDCODEC {
HD_BSMUX_AUDCODEC_PCM = 0x00000001, ///< PCM
HD_BSMUX_AUDCODEC_AAC = 0x00000002, ///< AAC
HD_BSMUX_AUDCODEC_PPCM = 0x00000003, ///< Packed PCM
HD_BSMUX_AUDCODEC_ULAW = 0x00000004, ///< PCM uLaw
HD_BSMUX_AUDCODEC_ALAW = 0x00000005, ///< PCM aLaw
ENUM_DUMMY4WORD(HD_BSMUX_AUDCODEC)
} HD_BSMUX_AUDCODEC;
/**
audio info (project setting).
@SET/GET: HD_BSMUX_PARAM_AUDIOINFO
*/
typedef struct _HD_BSMUX_AUDIOINFO {
UINT32 codectype; ///< audio codec type (using HD_BSMUX_AUDCODEC)
UINT32 chs; ///< channels
UINT32 asr; ///< audio samplerate
UINT32 aud_en; ///< audio enable
UINT32 adts_bytes; ///< audio adts bytes
} HD_BSMUX_AUDIOINFO;
/**
@name recoding type.
@note modified from uitron (should be the same as MEDIAREC_XXX)
*/
typedef enum _HD_BSMUX_RECFORMAT {
HD_BSMUX_RECFORMAT_VID_ONLY = 0x00000001, ///< video only, normal speed
HD_BSMUX_RECFORMAT_AUD_VID_BOTH = 0x00000002, ///< video/audio sync, normal speed
HD_BSMUX_RECFORMAT_GOLFSHOT = 0x00000004, ///< golfshot mode(rec n fps, play m fps, n > m, n % m = 0), no audio
HD_BSMUX_RECFORMAT_TIMELAPSE = 0x00000005, ///< timelapse mode(rec n fps, play m fps, n < m, m % n = 0), no audio
ENUM_DUMMY4WORD(HD_BSMUX_RECFORMAT)
} HD_BSMUX_RECFORMAT;
/**
file info (project setting).
@SET/GET: HD_BSMUX_PARAM_FILEINFO
*/
typedef struct _HD_BSMUX_FILEINFO {
UINT32 emron; ///< emr on/off
UINT32 emrloop; ///< emrloop on/off
UINT32 strgid; ///< <obsolete>
UINT32 seamlessSec; ///< seamless sec
UINT32 rollbacksec; ///< rollback sec
UINT32 keepsec; ///< keep sec of emerengy recording
UINT32 endtype; ///< <obsolete>
UINT32 filetype; ///< file type (using HD_BSMUX_FTYPE)
UINT32 recformat; ///< recoding type (using HD_BSMUX_RECFORMAT)
UINT32 playvfr; ///< playback config for timelapse/golfshot mode
UINT32 revsec; ///< buffer reserved sec
UINT32 overlop_on; ///< overlap on/off
UINT32 seamlessSec_ms; ///< seamless sec (ms)
UINT32 rollbacksec_ms; ///< rollback sec (ms)
UINT32 keepsec_ms; ///< keep sec of emerengy recording (ms)
UINT32 revsec_ms; ///< buffer reserved sec (ms)
} HD_BSMUX_FILEINFO;
/**
buf info (project setting).
@note for bs data of videnc/audenc
@SET: HD_BSMUX_PARAM_BUFINFO
*/
typedef struct _HD_BSMUX_BUFINFO {
HD_BUFINFO videnc;
HD_BUFINFO audenc;
} HD_BSMUX_BUFINFO;
/**
wrinfo (project setting).
@SET/GET: HD_BSMUX_PARAM_WRINFO
*/
typedef struct _HD_BSMUX_WRINFO {
UINT32 flush_freq; ///< flush frequency
UINT32 wrblk_size; ///< write block size
} HD_BSMUX_WRINFO;
/**
extinfo (project setting).
@SET/GET: HD_BSMUX_PARAM_EXTINFO
*/
typedef struct _HD_BSMUX_EXTINFO {
UINT32 unit; ///< extend unit sec
UINT32 max_num; ///< extend max num
UINT32 enable; ///< extend on/off
} HD_BSMUX_EXTINFO;
/**
gps data.
@SET: HD_BSMUX_PARAM_GPS_DATA
*/
typedef struct _HD_BSMUX_GPS_DATA {
UINT32 gpson;
UINT32 gpsdataadr;
UINT32 gpsdatasize;
} HD_BSMUX_GPS_DATA;
/**
user data.
@SET: HD_BSMUX_PARAM_USER_DATA
*/
typedef struct _HD_BSMUX_USER_DATA {
UINT32 useron;
UINT32 userdataadr;
UINT32 userdatasize;
} HD_BSMUX_USER_DATA;
/**
customized data.
@SET: HD_BSMUX_PARAM_CUST_DATA
*/
typedef struct _HD_BSMUX_CUST_DATA {
UINT32 custon;
UINT32 custtag;
UINT32 custaddr;
UINT32 custsize;
} HD_BSMUX_CUST_DATA;
/**
@name put data type.
*/
typedef enum _HD_BSMUX_PUT_DATA_TYPE {
HD_BSMUX_PUT_DATA_TYPE_MIN,
HD_BSMUX_PUT_DATA_TYPE_GPS = 0x00000001, ///< put gps data
HD_BSMUX_PUT_DATA_TYPE_USER = 0x00000002, ///< put user data (moov only)
HD_BSMUX_PUT_DATA_TYPE_CUST = 0x00000004, ///< put customized data (with specific tag)
HD_BSMUX_PUT_DATA_TYPE_THUMB = 0x00000010, ///< put thumbnail data
HD_BSMUX_PUT_DATA_TYPE_MAX,
ENUM_DUMMY4WORD(HD_BSMUX_PUT_DATA_TYPE)
} HD_BSMUX_PUT_DATA_TYPE;
/**
put data info (event).
@SET: HD_BSMUX_PARAM_PUT_DATA
*/
typedef struct _HD_BSMUX_PUT_DATA {
HD_BSMUX_PUT_DATA_TYPE type; ///< put data type
UINT32 phy_addr; ///< physical address of data buffer
UINT32 vir_addr; ///< virtual address of data buffer
UINT32 size; ///< size of data buffer
UINT32 resv; ///< reserved for specific info
} HD_BSMUX_PUT_DATA;
/**
trig emr (event).
@SET: HD_BSMUX_PARAM_TRIG_EMR
*/
typedef struct _HD_BSMUX_TRIG_EMR {
UINT32 emr_on; ///< emergency on/off
UINT32 pause_on; ///< pause on/off
UINT32 pause_id; ///< pause id
} HD_BSMUX_TRIG_EMR;
/**
@name trigger event type.
*/
typedef enum _HD_BSMUX_TRIG_EVENT_TYPE {
HD_BSMUX_TRIG_EVENT_MIN,
HD_BSMUX_TRIG_EVENT_CUTNOW = 0x00000001, ///< trigger cut now event of output path
HD_BSMUX_TRIG_EVENT_EXTEND = 0x00000002, ///< trigger extend event of output path
HD_BSMUX_TRIG_EVENT_PAUSE = 0x00000004, ///< trigger pause event of output path
HD_BSMUX_TRIG_EVENT_RESUME = 0x00000008, ///< trigger resume event of output path
HD_BSMUX_TRIG_EVENT_EMERGENCY = 0x00000010, ///< trigger emergency of output path
HD_BSMUX_TRIG_EVENT_MAX,
ENUM_DUMMY4WORD(HD_BSMUX_TRIG_EVENT_TYPE)
} HD_BSMUX_TRIG_EVENT_TYPE;
/**
trigger event info (event).
@SET: HD_BSMUX_PARAM_TRIG_EVENT
*/
typedef struct _HD_BSMUX_TRIG_EVENT {
HD_BSMUX_TRIG_EVENT_TYPE type; ///< trigger event type
UINT32 ret_val; ///< return value
} HD_BSMUX_TRIG_EVENT;
/**
@name uitlity type.
*/
typedef enum _HD_BSMUX_EN_UTIL_TYPE {
HD_BSMUX_EN_UTIL_MIN,
HD_BSMUX_EN_UTIL_SW_METHOD = 0x00000001, ///< buffer copy method of mov container of output path. ts is unsupported.
HD_BSMUX_EN_UTIL_FRONTMOOV = 0x00000010, ///< front 'moov' box of mov container of output path.
HD_BSMUX_EN_UTIL_STRG_BUF = 0x00000020, ///< storage buffer usgae of mov format of output path.
HD_BSMUX_EN_UTIL_RECOVERY = 0x00000040, ///< file recovery mechanism for mov container of output path.
HD_BSMUX_EN_UTIL_EMERGENCY = 0x00000080, ///< emergency once information of output path.
HD_BSMUX_EN_UTIL_FREA_BOX = 0x00000100, ///< 'frea' box on mov container of output path. if true 'skip' box will be replaced.
HD_BSMUX_EN_UTIL_DUR_LIMIT = 0x00000200, ///< timestamp/duration limit of input bitstream of output path.
HD_BSMUX_EN_UTIL_MUXALIGN = 0x00000400, ///< buffer copy alignment of mov container of output path.
HD_BSMUX_EN_UTIL_BUFLOCK = 0x00000800, ///< buffer lock (ms) if output resource is blocked of output path.
HD_BSMUX_EN_UTIL_FAST_PUT = 0x00001000, ///< fast put first writeblock for mov container of output path.
HD_BSMUX_EN_UTIL_EN_DROP = 0x00002000, ///< drop invalid bitstream for mov container of output path.
HD_BSMUX_EN_UTIL_GPS_DATA = 0x00004000, ///< gps input data configuration of output path.
HD_BSMUX_EN_UTIL_UTC_AUTO = 0x00008000, ///< utc time zone mode for mov container of output path.
HD_BSMUX_EN_UTIL_BUF_USAGE = 0x00010000, ///< buffer usage of bitstream copy of output path.
HD_BSMUX_EN_UTIL_UTC_TIME = 0x00020000, ///< utc time configuration for mov container of output path.
HD_BSMUX_EN_UTIL_VAR_RATE = 0x00040000, ///< variable rate-control configuration for mov container of output path.
HD_BSMUX_EN_UTIL_BTAG_SIZE = 0x00080000, ///< 'mdat'/'stco' box tag size on mov container of output path. valid 32(bit) or 64(bit).
HD_BSMUX_EN_UTIL_MAX,
ENUM_DUMMY4WORD(HD_BSMUX_EN_UTIL_TYPE)
} HD_BSMUX_EN_UTIL_TYPE;
/**
enable uitlity info (util).
@SET: HD_BSMUX_PARAM_TRIG_EVENT
*/
typedef struct _HD_BSMUX_EN_UTIL {
HD_BSMUX_EN_UTIL_TYPE type; ///< uitlity type
UINT32 enable; ///< on/off
UINT32 resv[2]; ///< reserved
} HD_BSMUX_EN_UTIL;
/**
util calc sec info.
@GET: HD_BSMUX_PARAM_CALC_SEC
*/
typedef struct _HD_BSMUX_CALC_SEC_SETTING {
UINT64 nowFSFreeSpace; ///< in: free space
UINT32 vidfps; ///< in: video frame per second
UINT32 vidTBR; ///< in: now video target bit rate
UINT32 audSampleRate; ///< in: audio sample rate
UINT32 audChs; ///< in: ahdio channels
UINT32 gpson; ///< in: if gps on
UINT32 nidxon; ///< in: if nidx on
} HD_BSMUX_CALC_SEC_SETTING;
typedef struct _HD_BSMUX_CALC_SEC {
UINT64 givenSpace; ///< in: free space
HD_BSMUX_CALC_SEC_SETTING info[HD_BSMUX_MAX_CTRL];
UINT32 calc_sec; ///< out: free sec
} HD_BSMUX_CALC_SEC;
/**
@name data type.
*/
typedef enum _HD_BSMUX_TYPE {
HD_BSMUX_TYPE_VIDEO = 0x00000001, ///< video bitstream data (main)
HD_BSMUX_TYPE_AUDIO = 0x00000002, ///< audio bitstream data
HD_BSMUX_TYPE_USRCB = 0x00000040, ///< user callback data
HD_BSMUX_TYPE_SUBVD = 0x00000200, ///< video bitstream data (sub)
ENUM_DUMMY4WORD(HD_BSMUX_TYPE)
} HD_BSMUX_TYPE;
/**
bitstream muxer data descriptor.
*/
typedef struct _HD_BSMUX_BS {
UINT32 sign; ///< signature = MAKEFOURCC('B','S','M','X')
HD_BSMUX_TYPE data_type; ///< data type
UINT64 timestamp; ///< timestamp (unit: microsecond)
VOID * p_user_bs; ///< for bitstream data descriptor
VOID * p_user_data; ///< for user callback data
} HD_BSMUX_BS;
/**
@name bsmux param id.
*/
typedef enum _HD_BSMUX_PARAM_ID {
HD_BSMUX_PARAM_MIN = 0,
HD_BSMUX_PARAM_REG_CALLBACK, ///< support set with ctrl path, using HD_BSMUX_CALLBACK
HD_BSMUX_PARAM_VIDEOINFO, ///< support get/set with i/o path, using HD_BSMUX_VIDEOINFO struct
HD_BSMUX_PARAM_AUDIOINFO, ///< support get/set with i/o path, using HD_BSMUX_AUDIOINFO struct
HD_BSMUX_PARAM_FILEINFO, ///< support get/set with i/o path, using HD_BSMUX_FILEINFO struct
HD_BSMUX_PARAM_BUFINFO, ///< support get/set with i/o path, using HD_BSMUX_BUFINFO struct
HD_BSMUX_PARAM_WRINFO, ///< support get/set with i/o path, using HD_BSMUX_WRINFO struct
HD_BSMUX_PARAM_EXTINFO, ///< support get/set with i/o path, using HD_BSMUX_EXTINFO struct
HD_BSMUX_PARAM_GPS_DATA, ///< <obsolete> use HD_BSMUX_PARAM_PUT_DATA with HD_BSMUX_PUT_DATA_TYPE_GPS
HD_BSMUX_PARAM_USER_DATA, ///< <obsolete> use HD_BSMUX_PARAM_PUT_DATA with HD_BSMUX_PUT_DATA_TYPE_USER
HD_BSMUX_PARAM_CUST_DATA, ///< <obsolete> use HD_BSMUX_PARAM_PUT_DATA with HD_BSMUX_PUT_DATA_TYPE_CUST
HD_BSMUX_PARAM_PUT_DATA, ///< support set with i/o path, using HD_BSMUX_PUT_DATA struct
HD_BSMUX_PARAM_TRIG_EMR, ///< support set with i/o path, using HD_BSMUX_TRIG_EMR struct
HD_BSMUX_PARAM_CUT_NOW, ///< <obsolete> use HD_BSMUX_PARAM_TRIG_EVENT with HD_BSMUX_TRIG_EVENT_CUTNOW
HD_BSMUX_PARAM_EXTEND, ///< <obsolete> use HD_BSMUX_PARAM_TRIG_EVENT with HD_BSMUX_TRIG_EVENT_EXTEND
HD_BSMUX_PARAM_PAUSE, ///< <obsolete> use HD_BSMUX_PARAM_TRIG_EVENT with HD_BSMUX_TRIG_EVENT_PAUSE
HD_BSMUX_PARAM_RESUME, ///< <obsolete> use HD_BSMUX_PARAM_TRIG_EVENT [func: trig emr/emrloop/emroncard]
HD_BSMUX_PARAM_TRIG_EVENT, ///< support set with i/o path, using HD_BSMUX_TRIG_EVENT struct
HD_BSMUX_PARAM_EN_UTIL, ///< support set with i/o path, using HD_BSMUX_EN_UTIL struct
HD_BSMUX_PARAM_CALC_SEC, ///< support get with ctrl path, using HD_BSMUX_CALC_SEC struct
HD_BSMUX_PARAM_MAX,
ENUM_DUMMY4WORD(HD_BSMUX_PARAM_ID)
} HD_BSMUX_PARAM_ID;
/********************************************************************
EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
********************************************************************/
HD_RESULT hd_bsmux_init(VOID);
HD_RESULT hd_bsmux_open(HD_IN_ID in_id, HD_OUT_ID out_id, HD_PATH_ID* p_path_id);
HD_RESULT hd_bsmux_start(HD_PATH_ID path_id);
HD_RESULT hd_bsmux_stop(HD_PATH_ID path_id);
HD_RESULT hd_bsmux_close(HD_PATH_ID path_id);
HD_RESULT hd_bsmux_get(HD_PATH_ID path_id, HD_BSMUX_PARAM_ID id, VOID *p_param);
HD_RESULT hd_bsmux_set(HD_PATH_ID path_id, HD_BSMUX_PARAM_ID id, VOID *p_param);
HD_RESULT hd_bsmux_push_in_buf_video(HD_PATH_ID path_id, HD_VIDEOENC_BS* p_user_in_video_bs, INT32 wait_ms);
HD_RESULT hd_bsmux_push_in_buf_audio(HD_PATH_ID path_id, HD_AUDIO_BS* p_user_in_audio_bs, INT32 wait_ms);
HD_RESULT hd_bsmux_push_in_buf_struct(HD_PATH_ID path_id, HD_BSMUX_BS* p_user_in_bsmux_bs, INT32 wait_ms);
HD_RESULT hd_bsmux_uninit(VOID);
#endif //_HD_BSMUX_LIB_H_