3 * Copyright 2012 Samsung Electronics S.LSI Co. LTD
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @file Exynos_OMX_Baseport.h
21 * @author SeungBeom Kim (sbcrux.kim@samsung.com)
22 * HyeYeon Chung (hyeon.chung@samsung.com)
28 #ifndef EXYNOS_OMX_BASE_PORT
29 #define EXYNOS_OMX_BASE_PORT
32 #include "OMX_Component.h"
33 #include "Exynos_OMX_Def.h"
34 #include "Exynos_OSAL_Queue.h"
35 #include "Exynos_OMX_Def.h"
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
43 #define MAX_BUFFER_NUM 40
45 #define INPUT_PORT_INDEX 0
46 #define OUTPUT_PORT_INDEX 1
47 #define ALL_PORT_INDEX -1
48 #define ALL_PORT_NUM 2
51 typedef struct _EXYNOS_OMX_BUFFERHEADERTYPE
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;
62 typedef struct _EXYNOS_OMX_DATABUFFER
64 OMX_HANDLETYPE bufferMutex;
65 OMX_BUFFERHEADERTYPE* bufferHeader;
70 OMX_U32 remainDataLen;
74 } EXYNOS_OMX_DATABUFFER;
76 typedef void* CODEC_EXTRA_BUFFERINFO;
78 typedef struct _EXYNOS_OMX_SINGLEPLANE_DATA
82 } EXYNOS_OMX_SINGLEPLANE_DATA;
84 typedef struct _EXYNOS_OMX_MULTIPLANE_DATA
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;
93 typedef struct _EXYNOS_OMX_DATA
96 EXYNOS_OMX_SINGLEPLANE_DATA singlePlaneBuffer;
97 EXYNOS_OMX_MULTIPLANE_DATA multiPlaneBuffer;
102 OMX_U32 remainDataLen;
106 CODEC_EXTRA_BUFFERINFO extInfo;
108 /* For Share Buffer */
109 OMX_BUFFERHEADERTYPE* bufferHeader;
112 typedef struct _EXYNOS_OMX_WAY1_PORT_DATABUFFER
114 EXYNOS_OMX_DATABUFFER dataBuffer;
115 } EXYNOS_OMX_PORT_1WAY_DATABUFFER;
117 typedef struct _EXYNOS_OMX_WAY2_PORT_DATABUFFER
119 EXYNOS_OMX_DATABUFFER inputDataBuffer;
120 EXYNOS_OMX_DATABUFFER outputDataBuffer;
121 } EXYNOS_OMX_PORT_2WAY_DATABUFFER;
123 typedef enum _EXYNOS_OMX_PORT_WAY_TYPE
127 } EXYNOS_OMX_PORT_WAY_TYPE;
129 typedef enum _EXYNOS_OMX_EXCEPTION_STATE
131 GENERAL_STATE = 0x00,
134 } EXYNOS_OMX_EXCEPTION_STATE;
136 typedef enum _EXYNOS_OMX_PLANE
142 ANB_START_PLANE = 0x10,
143 ANB_ONE_PLANE = 0x11,
144 ANB_TWO_PLANE = 0x12,
145 ANB_THREE_PLANE = 0x13,
149 typedef struct _EXYNOS_OMX_BASEPORT
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;
161 OMX_BOOL bIsPortFlushed;
162 OMX_BOOL bIsPortDisabled;
163 OMX_MARKTYPE markType;
165 OMX_CONFIG_RECTTYPE cropRectangle;
168 OMX_HANDLETYPE tunneledComponent;
169 OMX_U32 tunneledPort;
170 OMX_U32 tunnelBufferNum;
171 OMX_BUFFERSUPPLIERTYPE bufferSupplier;
174 OMX_BOOL bIsPBEnabled;
175 OMX_BOOL bStoreMetaData;
177 EXYNOS_OMX_BUFFERPROCESS_TYPE bufferProcessType;
178 EXYNOS_OMX_PORT_WAY_TYPE portWayType;
179 OMX_HANDLETYPE codecSemID;
180 EXYNOS_QUEUE codecBufferQ;
182 OMX_HANDLETYPE pauseEvent;
186 EXYNOS_OMX_PORT_1WAY_DATABUFFER port1WayDataBuffer;
187 EXYNOS_OMX_PORT_2WAY_DATABUFFER port2WayDataBuffer;
191 EXYNOS_OMX_DATA processData;
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;
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);