fixed svace issues and removed build warnings
[platform/adaptation/ap_samsung/libomxil-e3250-v4l2.git] / openmax / component / common / Exynos_OMX_Baseport.h
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_Baseport.h
20  * @brief
21  * @author     SeungBeom Kim (sbcrux.kim@samsung.com)
22  *             HyeYeon Chung (hyeon.chung@samsung.com)
23  * @version    2.0.0
24  * @history
25  *    2012.02.20 : Create
26  */
27
28 #ifndef EXYNOS_OMX_BASE_PORT
29 #define EXYNOS_OMX_BASE_PORT
30
31
32 #include "OMX_Component.h"
33 #include "Exynos_OMX_Def.h"
34 #include "Exynos_OSAL_Queue.h"
35 #include "Exynos_OMX_Def.h"
36
37
38 #define BUFFER_STATE_ALLOCATED  (1 << 0)
39 #define BUFFER_STATE_ASSIGNED   (1 << 1)
40 #define HEADER_STATE_ALLOCATED  (1 << 2)
41 #define BUFFER_STATE_FREE        0
42
43 #define MAX_BUFFER_NUM          40
44
45 #define INPUT_PORT_INDEX    0
46 #define OUTPUT_PORT_INDEX   1
47 #define ALL_PORT_INDEX     -1
48 #define ALL_PORT_NUM        2
49
50
51 typedef struct _EXYNOS_OMX_BUFFERHEADERTYPE
52 {
53     OMX_BUFFERHEADERTYPE *OMXBufferHeader;
54     OMX_BOOL              bBufferInOMX;
55     OMX_HANDLETYPE        ANBHandle;
56     void                 *pYUVBuf[MAX_BUFFER_PLANE];
57     int                   buf_fd[MAX_BUFFER_PLANE];
58     void                 *tbm_bo[MAX_BUFFER_PLANE];
59     int                   size[MAX_BUFFER_PLANE];
60 } EXYNOS_OMX_BUFFERHEADERTYPE;
61
62 typedef struct _EXYNOS_OMX_DATABUFFER
63 {
64     OMX_HANDLETYPE        bufferMutex;
65     OMX_BUFFERHEADERTYPE* bufferHeader;
66     OMX_BOOL              dataValid;
67     OMX_U32               allocSize;
68     OMX_U32               dataLen;
69     OMX_U32               usedDataLen;
70     OMX_U32               remainDataLen;
71     OMX_U32               nFlags;
72     OMX_TICKS             timeStamp;
73     OMX_PTR               pPrivate;
74 } EXYNOS_OMX_DATABUFFER;
75
76 typedef void* CODEC_EXTRA_BUFFERINFO;
77
78 typedef struct _EXYNOS_OMX_SINGLEPLANE_DATA
79 {
80     OMX_PTR dataBuffer;
81     int     fd;
82 } EXYNOS_OMX_SINGLEPLANE_DATA;
83
84 typedef struct _EXYNOS_OMX_MULTIPLANE_DATA
85 {
86     OMX_U32 validPlaneNum;
87     OMX_PTR dataBuffer[MAX_BUFFER_PLANE];
88     int     fd[MAX_BUFFER_PLANE];
89     void   *tbm_bo[MAX_BUFFER_PLANE];
90     int     size[MAX_BUFFER_PLANE];
91 } EXYNOS_OMX_MULTIPLANE_DATA;
92
93 typedef struct _EXYNOS_OMX_DATA
94 {
95     union {
96         EXYNOS_OMX_SINGLEPLANE_DATA singlePlaneBuffer;
97         EXYNOS_OMX_MULTIPLANE_DATA multiPlaneBuffer;
98     } buffer;
99     OMX_U32   allocSize;
100     OMX_U32   dataLen;
101     OMX_U32   usedDataLen;
102     OMX_U32   remainDataLen;
103     OMX_U32   nFlags;
104     OMX_TICKS timeStamp;
105     OMX_PTR   pPrivate;
106     CODEC_EXTRA_BUFFERINFO extInfo;
107
108     /* For Share Buffer */
109     OMX_BUFFERHEADERTYPE* bufferHeader;
110 } EXYNOS_OMX_DATA;
111
112 typedef struct _EXYNOS_OMX_WAY1_PORT_DATABUFFER
113 {
114     EXYNOS_OMX_DATABUFFER dataBuffer;
115 } EXYNOS_OMX_PORT_1WAY_DATABUFFER;
116
117 typedef struct _EXYNOS_OMX_WAY2_PORT_DATABUFFER
118 {
119     EXYNOS_OMX_DATABUFFER inputDataBuffer;
120     EXYNOS_OMX_DATABUFFER outputDataBuffer;
121 } EXYNOS_OMX_PORT_2WAY_DATABUFFER;
122
123 typedef enum _EXYNOS_OMX_PORT_WAY_TYPE
124 {
125     WAY1_PORT = 0x00,
126     WAY2_PORT
127 } EXYNOS_OMX_PORT_WAY_TYPE;
128
129 typedef enum _EXYNOS_OMX_EXCEPTION_STATE
130 {
131     GENERAL_STATE = 0x00,
132     NEED_PORT_FLUSH,
133     NEED_PORT_DISABLE,
134 } EXYNOS_OMX_EXCEPTION_STATE;
135
136 typedef enum _EXYNOS_OMX_PLANE
137 {
138     ONE_PLANE       = 0x01,
139     TWO_PLANE       = 0x02,
140     THREE_PLANE     = 0x03,
141 /*
142     ANB_START_PLANE = 0x10,
143     ANB_ONE_PLANE   = 0x11,
144     ANB_TWO_PLANE   = 0x12,
145     ANB_THREE_PLANE = 0x13,
146 */
147 } EXYNOS_OMX_PLANE;
148
149 typedef struct _EXYNOS_OMX_BASEPORT
150 {
151     EXYNOS_OMX_BUFFERHEADERTYPE   *extendBufferHeader;
152     OMX_U32                       *bufferStateAllocate;
153     OMX_PARAM_PORTDEFINITIONTYPE   portDefinition;
154     OMX_HANDLETYPE                 bufferSemID;
155     EXYNOS_QUEUE                   bufferQ;
156     OMX_U32                        assignedBufferNum;
157     OMX_STATETYPE                  portState;
158     OMX_HANDLETYPE                 loadedResource;
159     OMX_HANDLETYPE                 unloadedResource;
160
161     OMX_BOOL                       bIsPortFlushed;
162     OMX_BOOL                       bIsPortDisabled;
163     OMX_MARKTYPE                   markType;
164
165     OMX_CONFIG_RECTTYPE            cropRectangle;
166
167     /* Tunnel Info */
168     OMX_HANDLETYPE                 tunneledComponent;
169     OMX_U32                        tunneledPort;
170     OMX_U32                        tunnelBufferNum;
171     OMX_BUFFERSUPPLIERTYPE         bufferSupplier;
172     OMX_U32                        tunnelFlags;
173
174     OMX_BOOL                       bIsPBEnabled;
175     OMX_BOOL                       bStoreMetaData;
176
177     EXYNOS_OMX_BUFFERPROCESS_TYPE  bufferProcessType;
178     EXYNOS_OMX_PORT_WAY_TYPE       portWayType;
179     OMX_HANDLETYPE                 codecSemID;
180     EXYNOS_QUEUE                   codecBufferQ;
181
182     OMX_HANDLETYPE                 pauseEvent;
183
184     /* Buffer */
185     union {
186         EXYNOS_OMX_PORT_1WAY_DATABUFFER port1WayDataBuffer;
187         EXYNOS_OMX_PORT_2WAY_DATABUFFER port2WayDataBuffer;
188     } way;
189
190     /* Data */
191     EXYNOS_OMX_DATA                processData;
192
193     /* for flush of Shared buffer scheme */
194     OMX_HANDLETYPE                 hAllCodecBufferReturnEvent;
195     OMX_HANDLETYPE                 hPortMutex;
196     EXYNOS_OMX_EXCEPTION_STATE     exceptionFlag;
197 } EXYNOS_OMX_BASEPORT;
198
199
200 #ifdef __cplusplus
201 extern "C" {
202 #endif
203
204 OMX_ERRORTYPE Exynos_OMX_FillThisBuffer(
205     OMX_IN OMX_HANDLETYPE        hComponent,
206     OMX_IN OMX_BUFFERHEADERTYPE *pBuffer);
207 OMX_ERRORTYPE Exynos_OMX_PortEnableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex);
208 OMX_ERRORTYPE Exynos_OMX_PortDisableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex);
209 OMX_ERRORTYPE Exynos_OMX_BufferFlushProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex, OMX_BOOL bEvent);
210 OMX_ERRORTYPE Exynos_OMX_Port_Constructor(OMX_HANDLETYPE hComponent);
211 OMX_ERRORTYPE Exynos_OMX_Port_Destructor(OMX_HANDLETYPE hComponent);
212 OMX_ERRORTYPE Exynos_ResetDataBuffer(EXYNOS_OMX_DATABUFFER *pDataBuffer);
213 OMX_ERRORTYPE Exynos_ResetCodecData(EXYNOS_OMX_DATA *pData);
214 OMX_ERRORTYPE Exynos_Shared_BufferToData(EXYNOS_OMX_DATABUFFER *pUseBuffer, EXYNOS_OMX_DATA *pData, EXYNOS_OMX_PLANE nPlane);
215 OMX_ERRORTYPE Exynos_Shared_DataToBuffer(EXYNOS_OMX_DATA *pData, EXYNOS_OMX_DATABUFFER *pUseBuffer);
216 OMX_ERRORTYPE Exynos_OMX_InputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent, OMX_BUFFERHEADERTYPE* bufferHeader);
217 OMX_ERRORTYPE Exynos_OMX_OutputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent, OMX_BUFFERHEADERTYPE* bufferHeader);
218
219 #ifdef __cplusplus
220 };
221 #endif
222
223
224 #endif