aboutsummaryrefslogtreecommitdiff
path: root/include/linux/vcodec/venc_drv_base.h
blob: 1b99ec0b6da5fc9ca61f69c9cafd9f72b1bf9c27 (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
#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);                       ///< Function to do driver Initialization
    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);      ///< get codec's required memory size.
    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);      ///< set codec's required memory size.
    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;       ///< Dump file
    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
} VENC_HANDLE_T;

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


#endif