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 } EXYNOS_OMX_BUFFERHEADERTYPE
;
60 typedef struct _EXYNOS_OMX_DATABUFFER
62 OMX_HANDLETYPE bufferMutex
;
63 OMX_BUFFERHEADERTYPE
* bufferHeader
;
68 OMX_U32 remainDataLen
;
72 } EXYNOS_OMX_DATABUFFER
;
74 typedef void* CODEC_EXTRA_BUFFERINFO
;
76 typedef struct _EXYNOS_OMX_SINGLEPLANE_DATA
80 } EXYNOS_OMX_SINGLEPLANE_DATA
;
82 typedef struct _EXYNOS_OMX_MULTIPLANE_DATA
84 OMX_U32 validPlaneNum
;
85 OMX_PTR dataBuffer
[MAX_BUFFER_PLANE
];
86 int fd
[MAX_BUFFER_PLANE
];
87 } EXYNOS_OMX_MULTIPLANE_DATA
;
89 typedef struct _EXYNOS_OMX_DATA
92 EXYNOS_OMX_SINGLEPLANE_DATA singlePlaneBuffer
;
93 EXYNOS_OMX_MULTIPLANE_DATA multiPlaneBuffer
;
98 OMX_U32 remainDataLen
;
102 CODEC_EXTRA_BUFFERINFO extInfo
;
104 /* For Share Buffer */
105 OMX_BUFFERHEADERTYPE
* bufferHeader
;
108 typedef struct _EXYNOS_OMX_WAY1_PORT_DATABUFFER
110 EXYNOS_OMX_DATABUFFER dataBuffer
;
111 } EXYNOS_OMX_PORT_1WAY_DATABUFFER
;
113 typedef struct _EXYNOS_OMX_WAY2_PORT_DATABUFFER
115 EXYNOS_OMX_DATABUFFER inputDataBuffer
;
116 EXYNOS_OMX_DATABUFFER outputDataBuffer
;
117 } EXYNOS_OMX_PORT_2WAY_DATABUFFER
;
119 typedef enum _EXYNOS_OMX_PORT_WAY_TYPE
123 } EXYNOS_OMX_PORT_WAY_TYPE
;
125 typedef enum _EXYNOS_OMX_EXCEPTION_STATE
127 GENERAL_STATE
= 0x00,
131 } EXYNOS_OMX_EXCEPTION_STATE
;
133 typedef enum _EXYNOS_OMX_PLANE
139 ANB_START_PLANE = 0x10,
140 ANB_ONE_PLANE = 0x11,
141 ANB_TWO_PLANE = 0x12,
142 ANB_THREE_PLANE = 0x13,
146 typedef struct _EXYNOS_OMX_BASEPORT
148 EXYNOS_OMX_BUFFERHEADERTYPE
*extendBufferHeader
;
149 OMX_U32
*bufferStateAllocate
;
150 OMX_PARAM_PORTDEFINITIONTYPE portDefinition
;
151 OMX_HANDLETYPE bufferSemID
;
152 EXYNOS_QUEUE bufferQ
;
153 OMX_U32 assignedBufferNum
;
155 OMX_STATETYPE portState
;
156 OMX_HANDLETYPE loadedResource
;
157 OMX_HANDLETYPE unloadedResource
;
159 OMX_BOOL bIsPortFlushed
;
160 OMX_BOOL bIsPortDisabled
;
161 OMX_MARKTYPE markType
;
163 OMX_CONFIG_RECTTYPE cropRectangle
;
166 OMX_HANDLETYPE tunneledComponent
;
167 OMX_U32 tunneledPort
;
168 OMX_U32 tunnelBufferNum
;
169 OMX_BUFFERSUPPLIERTYPE bufferSupplier
;
172 OMX_BOOL bIsANBEnabled
;
173 OMX_BOOL bStoreMetaData
;
174 OMX_BOOL bNeedContigMem
;
176 EXYNOS_OMX_BUFFERPROCESS_TYPE bufferProcessType
;
177 EXYNOS_OMX_PORT_WAY_TYPE portWayType
;
178 OMX_HANDLETYPE codecSemID
;
179 EXYNOS_QUEUE codecBufferQ
;
181 OMX_HANDLETYPE pauseEvent
;
185 EXYNOS_OMX_PORT_1WAY_DATABUFFER port1WayDataBuffer
;
186 EXYNOS_OMX_PORT_2WAY_DATABUFFER port2WayDataBuffer
;
190 EXYNOS_OMX_DATA processData
;
192 /* for flush of Shared buffer scheme */
193 OMX_HANDLETYPE hAllCodecBufferReturnEvent
;
194 OMX_HANDLETYPE hPortMutex
;
195 EXYNOS_OMX_EXCEPTION_STATE exceptionFlag
;
196 } EXYNOS_OMX_BASEPORT
;
203 OMX_ERRORTYPE
Exynos_OMX_PortEnableProcess(OMX_COMPONENTTYPE
*pOMXComponent
, OMX_S32 nPortIndex
);
204 OMX_ERRORTYPE
Exynos_OMX_PortDisableProcess(OMX_COMPONENTTYPE
*pOMXComponent
, OMX_S32 nPortIndex
);
205 OMX_ERRORTYPE
Exynos_OMX_BufferFlushProcess(OMX_COMPONENTTYPE
*pOMXComponent
, OMX_S32 nPortIndex
, OMX_BOOL bEvent
);
206 OMX_ERRORTYPE
Exynos_OMX_Port_Constructor(OMX_HANDLETYPE hComponent
);
207 OMX_ERRORTYPE
Exynos_OMX_Port_Destructor(OMX_HANDLETYPE hComponent
);
208 OMX_ERRORTYPE
Exynos_ResetDataBuffer(EXYNOS_OMX_DATABUFFER
*pDataBuffer
);
209 OMX_ERRORTYPE
Exynos_ResetCodecData(EXYNOS_OMX_DATA
*pData
);
210 OMX_ERRORTYPE
Exynos_Shared_BufferToData(EXYNOS_OMX_DATABUFFER
*pUseBuffer
, EXYNOS_OMX_DATA
*pData
, EXYNOS_OMX_PLANE nPlane
);
211 OMX_ERRORTYPE
Exynos_OMX_OutputBufferReturn(OMX_COMPONENTTYPE
*pOMXComponent
, OMX_BUFFERHEADERTYPE
* bufferHeader
);