Exynos_OMX_Baseport.h revision 01fa64f5f096690c95b2fd1d3a875d7a1aeefe53
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 51typedef 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 60typedef 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 74typedef void* CODEC_EXTRA_BUFFERINFO; 75 76typedef struct _EXYNOS_OMX_SINGLEPLANE_DATA 77{ 78 OMX_PTR dataBuffer; 79 int fd; 80} EXYNOS_OMX_SINGLEPLANE_DATA; 81 82typedef 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 89typedef 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 108typedef struct _EXYNOS_OMX_WAY1_PORT_DATABUFFER 109{ 110 EXYNOS_OMX_DATABUFFER dataBuffer; 111} EXYNOS_OMX_PORT_1WAY_DATABUFFER; 112 113typedef struct _EXYNOS_OMX_WAY2_PORT_DATABUFFER 114{ 115 EXYNOS_OMX_DATABUFFER inputDataBuffer; 116 EXYNOS_OMX_DATABUFFER outputDataBuffer; 117} EXYNOS_OMX_PORT_2WAY_DATABUFFER; 118 119typedef enum _EXYNOS_OMX_PORT_WAY_TYPE 120{ 121 WAY1_PORT = 0x00, 122 WAY2_PORT 123} EXYNOS_OMX_PORT_WAY_TYPE; 124 125typedef enum _EXYNOS_OMX_EXCEPTION_STATE 126{ 127 GENERAL_STATE = 0x00, 128 NEED_PORT_FLUSH, 129 NEED_PORT_DISABLE, 130} EXYNOS_OMX_EXCEPTION_STATE; 131 132typedef 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 145typedef 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 bIsANBEnabled; 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 197extern "C" { 198#endif 199 200OMX_ERRORTYPE Exynos_OMX_PortEnableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex); 201OMX_ERRORTYPE Exynos_OMX_PortDisableProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex); 202OMX_ERRORTYPE Exynos_OMX_BufferFlushProcess(OMX_COMPONENTTYPE *pOMXComponent, OMX_S32 nPortIndex, OMX_BOOL bEvent); 203OMX_ERRORTYPE Exynos_OMX_Port_Constructor(OMX_HANDLETYPE hComponent); 204OMX_ERRORTYPE Exynos_OMX_Port_Destructor(OMX_HANDLETYPE hComponent); 205OMX_ERRORTYPE Exynos_ResetDataBuffer(EXYNOS_OMX_DATABUFFER *pDataBuffer); 206OMX_ERRORTYPE Exynos_ResetCodecData(EXYNOS_OMX_DATA *pData); 207OMX_ERRORTYPE Exynos_Shared_BufferToData(EXYNOS_OMX_DATABUFFER *pUseBuffer, EXYNOS_OMX_DATA *pData, EXYNOS_OMX_PLANE nPlane); 208OMX_ERRORTYPE Exynos_Shared_DataToBuffer(EXYNOS_OMX_DATA *pData, EXYNOS_OMX_DATABUFFER *pUseBuffer); 209 210#ifdef __cplusplus 211}; 212#endif 213 214 215#endif 216