xref: /OK3568_Linux_fs/external/rockit/mpi/sdk/include/rk_comm_adec.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */
2*4882a593Smuzhiyun /* Copyright (c) 2021 Fuzhou Rockchip Electronics Co., Ltd */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_RK_COMM_ADEC_H_
5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMM_ADEC_H_
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include "rk_type.h"
8*4882a593Smuzhiyun #include "rk_common.h"
9*4882a593Smuzhiyun #include "rk_comm_mb.h"
10*4882a593Smuzhiyun #include "rk_comm_aio.h"
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #ifdef __cplusplus
13*4882a593Smuzhiyun #if __cplusplus
14*4882a593Smuzhiyun extern "C" {
15*4882a593Smuzhiyun #endif
16*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun typedef enum rkADEC_MODE_E {
19*4882a593Smuzhiyun     /*
20*4882a593Smuzhiyun      * require input is valid dec pack(a complete frame encode result),
21*4882a593Smuzhiyun      * e.g.the stream get from AENC is a valid dec pack, the stream know
22*4882a593Smuzhiyun      * actually pack len from file is also a dec pack.
23*4882a593Smuzhiyun      * this mode is high-performative*/
24*4882a593Smuzhiyun     ADEC_MODE_PACK = 0,
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun     /*
27*4882a593Smuzhiyun      * input is stream,low-performative, if you couldn't find out whether
28*4882a593Smuzhiyun      * a stream is vaild dec pack,you could use this mode
29*4882a593Smuzhiyun      */
30*4882a593Smuzhiyun     ADEC_MODE_STREAM,
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun     ADEC_MODE_BUTT
33*4882a593Smuzhiyun } ADEC_MODE_E;
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun typedef struct rkADEC_ATTR_CODEC_S {
36*4882a593Smuzhiyun     RK_CODEC_ID_E  enType;
37*4882a593Smuzhiyun     RK_U32         u32Channels;
38*4882a593Smuzhiyun     RK_U32         u32SampleRate;
39*4882a593Smuzhiyun 	RK_U32         u32BitPerCodedSample;  /* codewords */
40*4882a593Smuzhiyun     RK_U32         u32Bitrate;
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun     RK_VOID       *pExtraData;
43*4882a593Smuzhiyun     RK_U32         u32ExtraDataSize;
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun     RK_U32         u32Resv[4];           /* resv for user */
46*4882a593Smuzhiyun     RK_VOID       *pstResv;              /* resv for user */
47*4882a593Smuzhiyun } ADEC_ATTR_CODEC_S;
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun typedef struct rkADEC_FRAME_INFO_S {
50*4882a593Smuzhiyun     RK_U32         u32SampleRate;
51*4882a593Smuzhiyun     RK_U32         u32Channels;
52*4882a593Smuzhiyun     RK_U64         u64ChnLayout;
53*4882a593Smuzhiyun     AUDIO_BIT_WIDTH_E enBitWidth;
54*4882a593Smuzhiyun     RK_U32         resv[2];
55*4882a593Smuzhiyun } ADEC_FRAME_INFO_S;
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun typedef struct rkADEC_CH_ATTR_S {
58*4882a593Smuzhiyun     RK_CODEC_ID_E   enType;         /* audio codec id */
59*4882a593Smuzhiyun     ADEC_MODE_E     enMode;         /* decode mode */
60*4882a593Smuzhiyun     RK_U32          u32BufCount;    /* decode buffer count */
61*4882a593Smuzhiyun     RK_U32          u32BufSize;     /* decode buffer size(buffer size to store pcm data) */
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun     ADEC_ATTR_CODEC_S stCodecAttr;
64*4882a593Smuzhiyun } ADEC_CHN_ATTR_S;
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun typedef struct rkADEC_CH_STATE_S {
67*4882a593Smuzhiyun     RK_BOOL bEndOfStream;             /* EOS flag */
68*4882a593Smuzhiyun     RK_U32 u32BufferFrmNum;           /* total number of channel buffer */
69*4882a593Smuzhiyun     RK_U32 u32BufferFreeNum;          /* free number of channel buffer */
70*4882a593Smuzhiyun     RK_U32 u32BufferBusyNum;          /* busy number of channel buffer */
71*4882a593Smuzhiyun } ADEC_CHN_STATE_S;
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun typedef enum rkEN_ADEC_ERR_CODE_E {
74*4882a593Smuzhiyun     ADEC_ERR_DECODER_ERR     = 64,
75*4882a593Smuzhiyun     ADEC_ERR_BUF_LACK,
76*4882a593Smuzhiyun     ADEC_ERR_REGISTER_ERR,
77*4882a593Smuzhiyun } RK_ADEC_ERR_CODE_E;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun typedef struct rkADEC_DECODER_S {
80*4882a593Smuzhiyun     RK_CODEC_ID_E enType;
81*4882a593Smuzhiyun     RK_UCHAR aszName[17];
82*4882a593Smuzhiyun     // open decoder
83*4882a593Smuzhiyun     RK_S32 (*pfnOpenDecoder)(RK_VOID *pDecoderAttr, RK_VOID **ppDecoder);
84*4882a593Smuzhiyun     RK_S32 (*pfnDecodeFrm)(RK_VOID *pDecoder, RK_VOID *pParam);
85*4882a593Smuzhiyun     // get audio frames infor
86*4882a593Smuzhiyun     RK_S32 (*pfnGetFrmInfo)(RK_VOID *pDecoder, RK_VOID *pInfo);
87*4882a593Smuzhiyun     // close audio decoder
88*4882a593Smuzhiyun     RK_S32 (*pfnCloseDecoder)(RK_VOID *pDecoder);
89*4882a593Smuzhiyun     // reset audio decoder
90*4882a593Smuzhiyun     RK_S32 (*pfnResetDecoder)(RK_VOID *pDecoder);
91*4882a593Smuzhiyun } ADEC_DECODER_S;
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /* result of register ADEC */
94*4882a593Smuzhiyun typedef enum rkADEC_DECODER_RESULT {
95*4882a593Smuzhiyun     ADEC_DECODER_OK = RK_SUCCESS,
96*4882a593Smuzhiyun     ADEC_DECODER_TRY_AGAIN,
97*4882a593Smuzhiyun     ADEC_DECODER_ERROR,
98*4882a593Smuzhiyun     ADEC_DECODER_EOS,
99*4882a593Smuzhiyun } ADEC_DECODER_RESULT;
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun /* invlalid device ID */
102*4882a593Smuzhiyun #define RK_ERR_ADEC_INVALID_DEVID     RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID)
103*4882a593Smuzhiyun /* invlalid channel ID */
104*4882a593Smuzhiyun #define RK_ERR_ADEC_INVALID_CHNID     RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID)
105*4882a593Smuzhiyun /* at lease one parameter is illagal ,eg, an illegal enumeration value  */
106*4882a593Smuzhiyun #define RK_ERR_ADEC_ILLEGAL_PARAM     RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM)
107*4882a593Smuzhiyun /* channel exists */
108*4882a593Smuzhiyun #define RK_ERR_ADEC_EXIST             RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_EXIST)
109*4882a593Smuzhiyun /* channel unexists */
110*4882a593Smuzhiyun #define RK_ERR_ADEC_UNEXIST           RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST)
111*4882a593Smuzhiyun /* using a NULL point */
112*4882a593Smuzhiyun #define RK_ERR_ADEC_NULL_PTR          RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR)
113*4882a593Smuzhiyun /* try to enable or initialize system,device or channel, before configing attribute */
114*4882a593Smuzhiyun #define RK_ERR_ADEC_NOT_CONFIG        RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG)
115*4882a593Smuzhiyun /* operation is not supported by NOW */
116*4882a593Smuzhiyun #define RK_ERR_ADEC_NOT_SUPPORT       RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT)
117*4882a593Smuzhiyun /* operation is not permitted ,eg, try to change stati attribute */
118*4882a593Smuzhiyun #define RK_ERR_ADEC_NOT_PERM          RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM)
119*4882a593Smuzhiyun /* failure caused by malloc memory */
120*4882a593Smuzhiyun #define RK_ERR_ADEC_NOMEM             RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM)
121*4882a593Smuzhiyun /* failure caused by malloc buffer */
122*4882a593Smuzhiyun #define RK_ERR_ADEC_NOBUF             RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF)
123*4882a593Smuzhiyun /* no data in buffer */
124*4882a593Smuzhiyun #define RK_ERR_ADEC_BUF_EMPTY         RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY)
125*4882a593Smuzhiyun /* no buffer for new data */
126*4882a593Smuzhiyun #define RK_ERR_ADEC_BUF_FULL          RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL)
127*4882a593Smuzhiyun /* system is not ready,had not initialed or loaded*/
128*4882a593Smuzhiyun #define RK_ERR_ADEC_SYS_NOTREADY      RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY)
129*4882a593Smuzhiyun /* decoder internal err */
130*4882a593Smuzhiyun #define RK_ERR_ADEC_DECODER_ERR       RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, ADEC_ERR_DECODER_ERR)
131*4882a593Smuzhiyun /* input buffer not enough to decode one frame */
132*4882a593Smuzhiyun #define RK_ERR_ADEC_BUF_LACK          RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, ADEC_ERR_BUF_LACK)
133*4882a593Smuzhiyun /* register ADec fail */
134*4882a593Smuzhiyun #define RK_ERR_ADEC_REGISTER_ERR      RK_DEF_ERR(RK_ID_ADEC, RK_ERR_LEVEL_ERROR, ADEC_ERR_REGISTER_ERR)
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #ifdef __cplusplus
138*4882a593Smuzhiyun #if __cplusplus
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun #endif
141*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun #endif /* End of #ifndef  INCLUDE_RT_MPI_RK_COMM_ADEC_H_ */
144*4882a593Smuzhiyun 
145