1/*
2 *
3 * Copyright 2012 Samsung Electronics S.LSI Co. LTD
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * @file        Exynos_OMX_Adec.h
20 * @brief
21 * @author      Yunji Kim (yunji.kim@samsung.com)
22 *
23 * @version     1.1.0
24 * @history
25 *   2012.02.28 : Create
26 */
27
28#ifndef EXYNOS_OMX_AUDIO_DECODE
29#define EXYNOS_OMX_AUDIO_DECODE
30
31#include "OMX_Component.h"
32#include "Exynos_OMX_Def.h"
33#include "Exynos_OSAL_Queue.h"
34#include "Exynos_OMX_Baseport.h"
35#include "Exynos_OMX_Basecomponent.h"
36
37#define MAX_AUDIO_INPUTBUFFER_NUM    2
38#define MAX_AUDIO_OUTPUTBUFFER_NUM   2
39
40#define DEFAULT_AUDIO_INPUT_BUFFER_SIZE     (16 * 1024)
41#define DEFAULT_AUDIO_OUTPUT_BUFFER_SIZE    (32 * 1024)
42
43#define DEFAULT_AUDIO_SAMPLING_FREQ  44100
44#define DEFAULT_AUDIO_CHANNELS_NUM   2
45#define DEFAULT_AUDIO_BIT_PER_SAMPLE 16
46
47#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX    1
48#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX   1
49
50typedef struct _SRP_DEC_INPUT_BUFFER
51{
52    void *PhyAddr;      // physical address
53    void *VirAddr;      // virtual address
54    int   bufferSize;   // input buffer alloc size
55    int   dataSize;     // Data length
56} SRP_DEC_INPUT_BUFFER;
57
58typedef struct _EXYNOS_OMX_AUDIODEC_COMPONENT
59{
60    OMX_HANDLETYPE hCodecHandle;
61
62    OMX_BOOL bFirstFrame;
63    OMX_PTR pInputBuffer;
64    SRP_DEC_INPUT_BUFFER SRPDecInputBuffer[MAX_AUDIO_INPUTBUFFER_NUM];
65    OMX_U32  indexInputBuffer;
66
67    /* Buffer Process */
68    OMX_BOOL       bExitBufferProcessThread;
69    OMX_HANDLETYPE hBufferProcessThread;
70
71    OMX_ERRORTYPE (*exynos_codec_bufferProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData, EXYNOS_OMX_DATA *pOutputData);
72
73    int (*exynos_checkInputFrame)(OMX_U8 *pInputStream, OMX_U32 buffSize, OMX_U32 flag, OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame);
74} EXYNOS_OMX_AUDIODEC_COMPONENT;
75
76
77#ifdef __cplusplus
78extern "C" {
79#endif
80
81OMX_ERRORTYPE Exynos_OMX_UseBuffer(
82    OMX_IN OMX_HANDLETYPE            hComponent,
83    OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr,
84    OMX_IN OMX_U32                   nPortIndex,
85    OMX_IN OMX_PTR                   pAppPrivate,
86    OMX_IN OMX_U32                   nSizeBytes,
87    OMX_IN OMX_U8                   *pBuffer);
88OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
89    OMX_IN OMX_HANDLETYPE            hComponent,
90    OMX_INOUT OMX_BUFFERHEADERTYPE **ppBuffer,
91    OMX_IN OMX_U32                   nPortIndex,
92    OMX_IN OMX_PTR                   pAppPrivate,
93    OMX_IN OMX_U32                   nSizeBytes);
94OMX_ERRORTYPE Exynos_OMX_FreeBuffer(
95    OMX_IN OMX_HANDLETYPE hComponent,
96    OMX_IN OMX_U32        nPortIndex,
97    OMX_IN OMX_BUFFERHEADERTYPE *pBufferHdr);
98OMX_ERRORTYPE Exynos_OMX_AllocateTunnelBuffer(
99    EXYNOS_OMX_BASEPORT *pOMXBasePort,
100    OMX_U32              nPortIndex);
101OMX_ERRORTYPE Exynos_OMX_FreeTunnelBuffer(
102    EXYNOS_OMX_BASEPORT *pOMXBasePort,
103    OMX_U32              nPortIndex);
104OMX_ERRORTYPE Exynos_OMX_ComponentTunnelRequest(
105    OMX_IN  OMX_HANDLETYPE hComp,
106    OMX_IN OMX_U32         nPort,
107    OMX_IN OMX_HANDLETYPE  hTunneledComp,
108    OMX_IN OMX_U32         nTunneledPort,
109    OMX_INOUT OMX_TUNNELSETUPTYPE *pTunnelSetup);
110OMX_ERRORTYPE Exynos_OMX_BufferProcess(OMX_HANDLETYPE hComponent);
111OMX_ERRORTYPE Exynos_OMX_AudioDecodeGetParameter(
112    OMX_IN OMX_HANDLETYPE hComponent,
113    OMX_IN OMX_INDEXTYPE  nParamIndex,
114    OMX_INOUT OMX_PTR     ComponentParameterStructure);
115OMX_ERRORTYPE Exynos_OMX_AudioDecodeSetParameter(
116    OMX_IN OMX_HANDLETYPE hComponent,
117    OMX_IN OMX_INDEXTYPE  nIndex,
118    OMX_IN OMX_PTR        ComponentParameterStructure);
119OMX_ERRORTYPE Exynos_OMX_AudioDecodeGetConfig(
120    OMX_HANDLETYPE hComponent,
121    OMX_INDEXTYPE nIndex,
122    OMX_PTR pComponentConfigStructure);
123OMX_ERRORTYPE Exynos_OMX_AudioDecodeSetConfig(
124    OMX_HANDLETYPE hComponent,
125    OMX_INDEXTYPE nIndex,
126    OMX_PTR pComponentConfigStructure);
127OMX_ERRORTYPE Exynos_OMX_AudioDecodeGetExtensionIndex(
128    OMX_IN OMX_HANDLETYPE  hComponent,
129    OMX_IN OMX_STRING      cParameterName,
130    OMX_OUT OMX_INDEXTYPE *pIndexType);
131OMX_ERRORTYPE Exynos_OMX_AudioDecodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent);
132OMX_ERRORTYPE Exynos_OMX_AudioDecodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent);
133OMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent);
134
135#ifdef __cplusplus
136}
137#endif
138
139#endif /* EXYNOS_OMX_AUDIO_DECODE */
140