Changed sources for compiling
[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 } EXYNOS_OMX_BUFFERHEADERTYPE;
59
60 typedef struct _EXYNOS_OMX_DATABUFFER
61 {
62     OMX_HANDLETYPE        bufferMutex;
63     OMX_BUFFERHEADERTYPE* bufferHeader;
64     OMX_BOOL              dataValid;
65     OMX_U32               allocSize;
66     OMX_U32               dataLen;
67     OMX_U32               usedDataLen;
68     OMX_U32               remainDataLen;
69     OMX_U32               nFlags;
70     OMX_TICKS             timeStamp;
71     OMX_PTR               pPrivate;
72 } EXYNOS_OMX_DATABUFFER;
73
74 typedef void* CODEC_EXTRA_BUFFERINFO;
75
76 typedef struct _EXYNOS_OMX_SINGLEPLANE_DATA
77 {
78     OMX_PTR dataBuffer;
79     int     fd;
80 } EXYNOS_OMX_SINGLEPLANE_DATA;
81
82 typedef struct _EXYNOS_OMX_MULTIPLANE_DATA
83 {
84     OMX_U32 validPlaneNum;
85     OMX_PTR dataBuffer[MAX_BUFFER_PLANE];
86     int     fd[MAX_BUFFER_PLANE];
87 } EXYNOS_OMX_MULTIPLANE_DATA;
88
89 typedef struct _EXYNOS_OMX_DATA
90 {
91     union {
92         EXYNOS_OMX_SINGLEPLANE_DATA singlePlaneBuffer;
93         EXYNOS_OMX_MULTIPLANE_DATA multiPlaneBuffer;
94     } buffer;
95     OMX_U32   allocSize;
96     OMX_U32   dataLen;
97     OMX_U32   usedDataLen;
98     OMX_U32   remainDataLen;
99     OMX_U32   nFlags;
100     OMX_TICKS timeStamp;
101     OMX_PTR   pPrivate;
102     CODEC_EXTRA_BUFFERINFO extInfo;
103
104     /* For Share Buffer */
105     OMX_BUFFERHEADERTYPE* bufferHeader;
106 } EXYNOS_OMX_DATA;
107
108 typedef struct _EXYNOS_OMX_WAY1_PORT_DATABUFFER
109 {
110     EXYNOS_OMX_DATABUFFER dataBuffer;
111 } EXYNOS_OMX_PORT_1WAY_DATABUFFER;
112
113 typedef struct _EXYNOS_OMX_WAY2_PORT_DATABUFFER
114 {
115     EXYNOS_OMX_DATABUFFER inputDataBuffer;
116     EXYNOS_OMX_DATABUFFER outputDataBuffer;
117 } EXYNOS_OMX_PORT_2WAY_DATABUFFER;
118
119 typedef enum _EXYNOS_OMX_PORT_WAY_TYPE
120 {
121     WAY1_PORT = 0x00,
122     WAY2_PORT
123 } EXYNOS_OMX_PORT_WAY_TYPE;
124
125 typedef enum _EXYNOS_OMX_EXCEPTION_STATE
126 {
127     GENERAL_STATE = 0x00,
128     NEED_PORT_FLUSH,
129     NEED_PORT_DISABLE,
130 } EXYNOS_OMX_EXCEPTION_STATE;
131
132 typedef enum _EXYNOS_OMX_PLANE
133 {
134     ONE_PLANE       = 0x01,
135     TWO_PLANE       = 0x02,
136     THREE_PLANE     = 0x03,
137 /*
138     ANB_START_PLANE = 0x10,
139     ANB_ONE_PLANE   = 0x11,
140     ANB_TWO_PLANE   = 0x12,
141     ANB_THREE_PLANE = 0x13,
142 */
143 } EXYNOS_OMX_PLANE;
144
145 typedef struct _EXYNOS_OMX_BASEPORT
146 {
147     EXYNOS_OMX_BUFFERHEADERTYPE   *extendBufferHeader;
148     OMX_U32                       *bufferStateAllocate;
149     OMX_PARAM_PORTDEFINITIONTYPE   portDefinition;
150     OMX_HANDLETYPE                 bufferSemID;
151     EXYNOS_QUEUE                   bufferQ;
152     OMX_U32                        assignedBufferNum;
153     OMX_STATETYPE                  portState;
154     OMX_HANDLETYPE                 loadedResource;
155     OMX_HANDLETYPE                 unloadedResource;
156
157     OMX_BOOL                       bIsPortFlushed;
158     OMX_BOOL                       bIsPortDisabled;
159     OMX_MARKTYPE                   markType;
160
161     OMX_CONFIG_RECTTYPE            cropRectangle;
162
163     /* Tunnel Info */
164     OMX_HANDLETYPE                 tunneledComponent;
165     OMX_U32                        tunneledPort;
166     OMX_U32                        tunnelBufferNum;
167     OMX_BUFFERSUPPLIERTYPE         bufferSupplier;
168     OMX_U32                        tunnelFlags;
169
170     OMX_BOOL                       bIsPBEnabled;
171     OMX_BOOL                       bStoreMetaData;
172
173     EXYNOS_OMX_BUFFERPROCESS_TYPE  bufferProcessType;
174     EXYNOS_OMX_PORT_WAY_TYPE       portWayType;
175     OMX_HANDLETYPE                 codecSemID;
176     EXYNOS_QUEUE                   codecBufferQ;
177
178     OMX_HANDLETYPE                 pauseEvent;
179
180     /* Buffer */
181     union {
182         EXYNOS_OMX_PORT_1WAY_DATABUFFER port1WayDataBuffer;
183         EXYNOS_OMX_PORT_2WAY_DATABUFFER port2WayDataBuffer;
184     } way;
185
186     /* Data */
187     EXYNOS_OMX_DATA                processData;
188
189     /* for flush of Shared buffer scheme */
190     OMX_HANDLETYPE                 hAllCodecBufferReturnEvent;
191     OMX_HANDLETYPE                 hPortMutex;
192     EXYNOS_OMX_EXCEPTION_STATE     exceptionFlag;
193 } EXYNOS_OMX_BASEPORT;
194
195
196 #ifdef __cplusplus
197 extern "C" {
198 #endif
199
200 OMX_ERRORTYPE Exynos_OMX_PortEnableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex);
201 OMX_ERRORTYPE Exynos_OMX_PortDisableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex);
202 OMX_ERRORTYPE Exynos_OMX_BufferFlushProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex, OMX_BOOL bEvent);
203 OMX_ERRORTYPE Exynos_OMX_Port_Constructor(OMX_HANDLETYPE hComponent);
204 OMX_ERRORTYPE Exynos_OMX_Port_Destructor(OMX_HANDLETYPE hComponent);
205 OMX_ERRORTYPE Exynos_ResetDataBuffer(EXYNOS_OMX_DATABUFFER *pDataBuffer);
206 OMX_ERRORTYPE Exynos_ResetCodecData(EXYNOS_OMX_DATA *pData);
207 OMX_ERRORTYPE Exynos_Shared_BufferToData(EXYNOS_OMX_DATABUFFER *pUseBuffer, EXYNOS_OMX_DATA *pData, EXYNOS_OMX_PLANE nPlane);
208 OMX_ERRORTYPE Exynos_Shared_DataToBuffer(EXYNOS_OMX_DATA *pData, EXYNOS_OMX_DATABUFFER *pUseBuffer);
209
210 #ifdef __cplusplus
211 };
212 #endif
213
214
215 #endif