Exynos_OMX_Vdec.h revision 800a8d754f6251b19a56b1aebde0e239c0e5f3cd
1/* 2 * 3 * Copyright 2010 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_Vdec.h 20 * @brief 21 * @author SeungBeom Kim (sbcrux.kim@samsung.com) 22 * HyeYeon Chung (hyeon.chung@samsung.com) 23 * Yunji Kim (yunji.kim@samsung.com) 24 * @version 1.1.0 25 * @history 26 * 2010.7.15 : Create 27 */ 28 29#ifndef EXYNOS_OMX_VIDEO_DECODE 30#define EXYNOS_OMX_VIDEO_DECODE 31 32#include "OMX_Component.h" 33#include "Exynos_OMX_Def.h" 34#include "Exynos_OSAL_Queue.h" 35#include "Exynos_OMX_Baseport.h" 36#include "Exynos_OMX_Basecomponent.h" 37#include "ExynosVideoApi.h" 38 39#define MAX_VIDEO_INPUTBUFFER_NUM 5 40#define MAX_VIDEO_OUTPUTBUFFER_NUM 2 41 42#define DEFAULT_FRAME_WIDTH 176 43#define DEFAULT_FRAME_HEIGHT 144 44 45#define DEFAULT_VIDEO_INPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT) * 2 46#define DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT * 3) / 2 47 48#define MFC_INPUT_BUFFER_NUM_MAX 2 49#define DEFAULT_MFC_INPUT_BUFFER_SIZE 1024 * 1024 * MFC_INPUT_BUFFER_NUM_MAX /*DEFAULT_VIDEO_INPUT_BUFFER_SIZE*/ 50 51#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 1 52#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 4 53 54typedef struct 55{ 56 void *pAddrY; 57 void *pAddrC; 58} MFC_DEC_ADDR_INFO; 59 60typedef struct _EXYNOS_MFC_NBDEC_THREAD 61{ 62 OMX_HANDLETYPE hNBDecodeThread; 63 OMX_HANDLETYPE hDecFrameStart; 64 OMX_HANDLETYPE hDecFrameEnd; 65 OMX_BOOL bExitDecodeThread; 66 OMX_BOOL bDecoderRun; 67 68 OMX_U32 oneFrameSize; 69} EXYNOS_MFC_NBDEC_THREAD; 70 71typedef struct _MFC_DEC_INPUT_BUFFER 72{ 73 void *PhyAddr; // physical address 74 void *VirAddr; // virtual address 75 int bufferSize; // input buffer alloc size 76 int dataSize; // Data length 77} MFC_DEC_INPUT_BUFFER; 78 79typedef struct _EXYNOS_OMX_VIDEODEC_COMPONENT 80{ 81 OMX_HANDLETYPE hCodecHandle; 82 EXYNOS_MFC_NBDEC_THREAD NBDecThread; 83 84 OMX_BOOL bThumbnailMode; 85 OMX_BOOL bFirstFrame; 86 MFC_DEC_INPUT_BUFFER MFCDecInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; 87 OMX_U32 indexInputBuffer; 88 89 ExynosVideoDecOps *pDecOps; 90 ExynosVideoDecBufferOps *pInbufOps; 91 ExynosVideoDecBufferOps *pOutbufOps; 92 ExynosVideoBuffer *pOutbuf; 93 94 /* CSC handle */ 95 OMX_PTR csc_handle; 96 OMX_U32 csc_set_format; 97 98 /* For DRM Play */ 99 OMX_PTR hCscCopy; 100 OMX_BOOL bSetCscCopyFormat; 101 OMX_BOOL bDRMPlayerMode; 102 103 /* Shared Memory Handle */ 104 OMX_HANDLETYPE hSharedMemory; 105} EXYNOS_OMX_VIDEODEC_COMPONENT; 106 107 108#ifdef __cplusplus 109extern "C" { 110#endif 111 112OMX_ERRORTYPE Exynos_OMX_UseBuffer( 113 OMX_IN OMX_HANDLETYPE hComponent, 114 OMX_INOUT OMX_BUFFERHEADERTYPE **ppBufferHdr, 115 OMX_IN OMX_U32 nPortIndex, 116 OMX_IN OMX_PTR pAppPrivate, 117 OMX_IN OMX_U32 nSizeBytes, 118 OMX_IN OMX_U8 *pBuffer); 119OMX_ERRORTYPE Exynos_OMX_AllocateBuffer( 120 OMX_IN OMX_HANDLETYPE hComponent, 121 OMX_INOUT OMX_BUFFERHEADERTYPE **ppBuffer, 122 OMX_IN OMX_U32 nPortIndex, 123 OMX_IN OMX_PTR pAppPrivate, 124 OMX_IN OMX_U32 nSizeBytes); 125OMX_ERRORTYPE Exynos_OMX_FreeBuffer( 126 OMX_IN OMX_HANDLETYPE hComponent, 127 OMX_IN OMX_U32 nPortIndex, 128 OMX_IN OMX_BUFFERHEADERTYPE *pBufferHdr); 129OMX_ERRORTYPE Exynos_OMX_AllocateTunnelBuffer( 130 EXYNOS_OMX_BASEPORT *pOMXBasePort, 131 OMX_U32 nPortIndex); 132OMX_ERRORTYPE Exynos_OMX_FreeTunnelBuffer( 133 EXYNOS_OMX_BASEPORT *pOMXBasePort, 134 OMX_U32 nPortIndex); 135OMX_ERRORTYPE Exynos_OMX_ComponentTunnelRequest( 136 OMX_IN OMX_HANDLETYPE hComp, 137 OMX_IN OMX_U32 nPort, 138 OMX_IN OMX_HANDLETYPE hTunneledComp, 139 OMX_IN OMX_U32 nTunneledPort, 140 OMX_INOUT OMX_TUNNELSETUPTYPE *pTunnelSetup); 141OMX_ERRORTYPE Exynos_OMX_BufferProcess(OMX_HANDLETYPE hComponent); 142OMX_ERRORTYPE Exynos_OMX_VideoDecodeGetParameter( 143 OMX_IN OMX_HANDLETYPE hComponent, 144 OMX_IN OMX_INDEXTYPE nParamIndex, 145 OMX_INOUT OMX_PTR ComponentParameterStructure); 146OMX_ERRORTYPE Exynos_OMX_VideoDecodeSetParameter( 147 OMX_IN OMX_HANDLETYPE hComponent, 148 OMX_IN OMX_INDEXTYPE nIndex, 149 OMX_IN OMX_PTR ComponentParameterStructure); 150OMX_ERRORTYPE Exynos_OMX_VideoDecodeGetConfig( 151 OMX_HANDLETYPE hComponent, 152 OMX_INDEXTYPE nIndex, 153 OMX_PTR pComponentConfigStructure); 154OMX_ERRORTYPE Exynos_OMX_VideoDecodeSetConfig( 155 OMX_HANDLETYPE hComponent, 156 OMX_INDEXTYPE nIndex, 157 OMX_PTR pComponentConfigStructure); 158OMX_ERRORTYPE Exynos_OMX_VideoDecodeGetExtensionIndex( 159 OMX_IN OMX_HANDLETYPE hComponent, 160 OMX_IN OMX_STRING cParameterName, 161 OMX_OUT OMX_INDEXTYPE *pIndexType); 162OMX_ERRORTYPE Exynos_OMX_VideoDecodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent); 163OMX_ERRORTYPE Exynos_OMX_VideoDecodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent); 164OMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent); 165inline void Exynos_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent); 166 167#ifdef __cplusplus 168} 169#endif 170 171#endif 172