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_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 2.0.0 25 * @history 26 * 2012.02.20 : 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 3 49#define DEFAULT_MFC_INPUT_BUFFER_SIZE 1920 * 1080 * 3 / 2 50 51#define MFC_OUTPUT_BUFFER_NUM_MAX 16 * 2 52#define DEFAULT_MFC_OUTPUT_YBUFFER_SIZE 1920 * 1080 53#define DEFAULT_MFC_OUTPUT_CBUFFER_SIZE 1920 * 1080 / 2 54 55#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 1 56#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 4 57 58#define EXTRA_DPB_NUM 5 59 60#define MFC_INPUT_BUFFER_PLANE 1 61#define MFC_OUTPUT_BUFFER_PLANE 2 62 63typedef struct 64{ 65 void *pAddrY; 66 void *pAddrC; 67} CODEC_DEC_ADDR_INFO; 68 69typedef struct _CODEC_DEC_BUFFER 70{ 71 void *pVirAddr[MAX_BUFFER_PLANE]; /* virtual address */ 72 int bufferSize[MAX_BUFFER_PLANE]; /* buffer alloc size */ 73 int fd[MAX_BUFFER_PLANE]; /* buffer FD */ 74 int dataSize; /* total data length */ 75} CODEC_DEC_BUFFER; 76 77typedef struct _DECODE_CODEC_EXTRA_BUFFERINFO 78{ 79 /* For Decode Output */ 80 OMX_U32 imageWidth; 81 OMX_U32 imageHeight; 82 OMX_COLOR_FORMATTYPE ColorFormat; 83} DECODE_CODEC_EXTRA_BUFFERINFO; 84 85typedef struct _EXYNOS_OMX_VIDEODEC_COMPONENT 86{ 87 OMX_HANDLETYPE hCodecHandle; 88 OMX_BOOL bThumbnailMode; 89 OMX_BOOL bFirstFrame; 90 CODEC_DEC_BUFFER *pMFCDecInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; 91 CODEC_DEC_BUFFER *pMFCDecOutputBuffer[MFC_OUTPUT_BUFFER_NUM_MAX]; 92 93 /* Buffer Process */ 94 OMX_BOOL bExitBufferProcessThread; 95 OMX_HANDLETYPE hSrcInputThread; 96 OMX_HANDLETYPE hSrcOutputThread; 97 OMX_HANDLETYPE hDstInputThread; 98 OMX_HANDLETYPE hDstOutputThread; 99 100 /* Shared Memory Handle */ 101 OMX_HANDLETYPE hSharedMemory; 102 103 /* For DRM Play */ 104 OMX_BOOL bDRMPlayerMode; 105 106 /* CSC handle */ 107 OMX_PTR csc_handle; 108 OMX_U32 csc_set_format; 109 110 OMX_ERRORTYPE (*exynos_codec_srcInputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData); 111 OMX_ERRORTYPE (*exynos_codec_srcOutputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData); 112 OMX_ERRORTYPE (*exynos_codec_dstInputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pOutputData); 113 OMX_ERRORTYPE (*exynos_codec_dstOutputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pOutputData); 114 115 OMX_ERRORTYPE (*exynos_codec_start)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 116 OMX_ERRORTYPE (*exynos_codec_stop)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 117 OMX_ERRORTYPE (*exynos_codec_bufferProcessRun)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 118 OMX_ERRORTYPE (*exynos_codec_enqueueAllBuffer)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 119 120 int (*exynos_checkInputFrame) (OMX_U8 *pInputStream, OMX_U32 buffSize, OMX_U32 flag, 121 OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame); 122 OMX_ERRORTYPE (*exynos_codec_getCodecInputPrivateData) (OMX_PTR codecBuffer, OMX_PTR addr, OMX_U32 *size); 123 OMX_ERRORTYPE (*exynos_codec_getCodecOutputPrivateData) (OMX_PTR codecBuffer, OMX_PTR addr[], OMX_U32 size[]); 124} EXYNOS_OMX_VIDEODEC_COMPONENT; 125 126#ifdef __cplusplus 127extern "C" { 128#endif 129 130int calc_plane(int width, int height); 131inline void Exynos_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent); 132OMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_U32 nPortIndex); 133OMX_ERRORTYPE Exynos_Input_CodecBufferToData(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_PTR codecBuffer, EXYNOS_OMX_DATA *pData); 134OMX_ERRORTYPE Exynos_Output_CodecBufferToData(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_PTR codecBuffer, EXYNOS_OMX_DATA *pData); 135 136OMX_ERRORTYPE Exynos_OMX_SrcInputBufferProcess(OMX_HANDLETYPE hComponent); 137OMX_ERRORTYPE Exynos_OMX_SrcOutputBufferProcess(OMX_HANDLETYPE hComponent); 138OMX_ERRORTYPE Exynos_OMX_DstInputBufferProcess(OMX_HANDLETYPE hComponent); 139OMX_ERRORTYPE Exynos_OMX_DstOutputBufferProcess(OMX_HANDLETYPE hComponent); 140OMX_ERRORTYPE Exynos_OMX_VideoDecodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent); 141OMX_ERRORTYPE Exynos_OMX_VideoDecodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent); 142 143#ifdef __cplusplus 144} 145#endif 146 147#endif 148