aboutsummaryrefslogtreecommitdiff
path: root/kernel-headers/venc_drv_base.h
blob: ff02e7bf5fc170af9f79b1e28e65cbbefb618701 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "venc_drv_if_private.h"
#include "vcodec_if_v2.h"

#include <sys/time.h>

#ifndef _VENC_DRV_BASE_
#define _VENC_DRV_BASE_

#define DO_VCODEC_RESET(cmd, index)                                                             \
	{                                                                                               \
	}

typedef enum __VDDRV_MRESULT_T {
	VDDRV_MRESULT_SUCCESS = VAL_TRUE,  /* /< Represent success */
	VDDRV_MRESULT_FAIL = VAL_FALSE     /* /< Represent failure */
} VDDRV_MRESULT_T;

typedef struct __VENC_DRV_BASE_T {
	VAL_UINT32_T(*Init)(
		VAL_HANDLE_T * handle,
		VAL_HANDLE_T halhandle,
		VAL_HANDLE_T valhandle
	);
	VAL_UINT32_T(*Encode)(
		VAL_HANDLE_T handle,
		VENC_DRV_START_OPT_T eOpt,
		P_VENC_DRV_PARAM_FRM_BUF_T pFrameBuf,
		P_VENC_DRV_PARAM_BS_BUF_T pBitstreamBuf,
		VENC_DRV_DONE_RESULT_T * pResult
	);
	VAL_UINT32_T(*GetParam)(
		VAL_HANDLE_T handle,
		VENC_DRV_GET_TYPE_T a_eType,
		VAL_VOID_T * a_pvInParam,
		VAL_VOID_T * a_pvOutParam
	);
	VAL_UINT32_T(*SetParam)(
		VAL_HANDLE_T handle,
		VENC_DRV_SET_TYPE_T a_eType,
		VAL_VOID_T * a_pvInParam,
		VAL_VOID_T * a_pvOutParam
	);
	VAL_UINT32_T(*DeInit)(
		VAL_HANDLE_T handle
	); /* /< Function to do driver de-initialization */
} VENC_DRV_BASE_T;

/**
 * @par Structure
 *   mhalVdoDrv_t
 * @par Description
 *   This is a structure which store common video enc driver information
 */
typedef struct mhalVdoDrv_s {
	VAL_VOID_T                      *prCodecHandle;
	VAL_UINT32_T                    u4EncodedFrameCount;
	VCODEC_ENC_CALLBACK_T           rCodecCb;
	VIDEO_ENC_API_T                 *prCodecAPI;
	VENC_BS_T                       pBSBUF;

	VCODEC_ENC_BUFFER_INFO_T        EncoderInputParamNC;
	VENC_DRV_PARAM_BS_BUF_T         BSout;
	VENC_HYBRID_ENCSETTING          rVencSetting;
	VAL_UINT8_T                     *ptr;
} mhalVdoDrv_t;


typedef struct __VENC_HYBRID_HANDLE_T {
	mhalVdoDrv_t                    rMhalVdoDrv;
	VAL_MEMORY_T                    rBSDrvWorkingMem;
	VAL_UINT32_T                    nOmxTids;
	VAL_VCODEC_THREAD_ID_T          rThreadID;
	VIDEO_ENC_WRAP_HANDLE_T         hWrapper;
	VAL_VOID_T                      *pDrvModule;    /* /< used for dlopen and dlclose */
} VENC_HYBRID_HANDLE_T;


typedef struct __VENC_HANDLE_T {
	VENC_DRV_VIDEO_FORMAT_T CodecFormat;
	VENC_DRV_BASE_T         rFuncPtr;      /* /< Point to driver's proprietary function. */
	VAL_HANDLE_T            hDrvHandle;    /* /< Handle of each format driver */
	VAL_HANDLE_T            hHalHandle;    /* /< HAL handle */
	VAL_HANDLE_T            hValHandle;    /* /< VAL handle */
	VAL_MEMORY_T            rHandleMem;    /* /< Memory for venc handle */
	VAL_VOID_T              *prExtraData;  /* /< Driver private data pointer. */
	VAL_MEMORY_T            rExtraDataMem; /* /< Save extra data memory information to be used in release. */
	VENC_HYBRID_HANDLE_T    rHybridHandle; /* /< Hybrid handle */
	FILE *pfDump;
	VAL_UINT32_T            u4ShowInfo;    /* /< Flag for show FPS and BitRate */
	VAL_UINT32_T            u4FPS;         /* /< FPS */
	VAL_UINT32_T            u4Bitrate;     /* /< Bitrate */
	struct timeval          tStart;        /* /< Start time counting FPS and bitrate */
	VENC_DRV_SCENARIO_T     eScenario;     /* /< VENC Senario */
	VAL_INT32_T             nPerfServiceHandle; /* /< Used by performace service */
	VAL_UINT32_T            u4RecFrmWidth;  /* /< Recoded frame width, (may not 16 byte-align) */
	VAL_UINT32_T            u4RecFrmHeight; /* /< Recoded frame height, (may not 16 byte-align) */
} VENC_HANDLE_T;

VENC_DRV_MRESULT_T ParseConfig(const char *cfgFileName, const char *ParameterItem, VAL_UINT32_T *val);


#endif