120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang/* 220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * 338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang * Copyright 2012 Samsung Electronics S.LSI Co. LTD 420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * 520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * Licensed under the Apache License, Version 2.0 (the "License"); 620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * you may not use this file except in compliance with the License. 720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * You may obtain a copy of the License at 820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * 920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * http://www.apache.org/licenses/LICENSE-2.0 1020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * 1120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * Unless required by applicable law or agreed to in writing, software 1220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * distributed under the License is distributed on an "AS IS" BASIS, 1320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * See the License for the specific language governing permissions and 1520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * limitations under the License. 1620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang */ 1720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 1820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang/* 1920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @file Exynos_OMX_Vdec.h 2020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @brief 2120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @author SeungBeom Kim (sbcrux.kim@samsung.com) 2220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * HyeYeon Chung (hyeon.chung@samsung.com) 2320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * Yunji Kim (yunji.kim@samsung.com) 2438ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang * @version 2.0.0 2520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang * @history 2638ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang * 2012.02.20 : Create 2720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang */ 2820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 2920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#ifndef EXYNOS_OMX_VIDEO_DECODE 3020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#define EXYNOS_OMX_VIDEO_DECODE 3120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 3220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "OMX_Component.h" 3320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OMX_Def.h" 3420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OSAL_Queue.h" 3520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OMX_Baseport.h" 3620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "Exynos_OMX_Basecomponent.h" 3720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#include "ExynosVideoApi.h" 3820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 39d03573a4a182b0a36eaa16fb7638d98429d1c3fbSeungBeom Kim#define MAX_VIDEO_INPUTBUFFER_NUM 5 40d03573a4a182b0a36eaa16fb7638d98429d1c3fbSeungBeom Kim#define MAX_VIDEO_OUTPUTBUFFER_NUM 2 4120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 42d03573a4a182b0a36eaa16fb7638d98429d1c3fbSeungBeom Kim#define DEFAULT_FRAME_WIDTH 176 43d03573a4a182b0a36eaa16fb7638d98429d1c3fbSeungBeom Kim#define DEFAULT_FRAME_HEIGHT 144 4420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 4520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#define DEFAULT_VIDEO_INPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT) * 2 4620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#define DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT * 3) / 2 4720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 4838ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang#define MFC_INPUT_BUFFER_NUM_MAX 3 4938ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang#define DEFAULT_MFC_INPUT_BUFFER_SIZE 1920 * 1080 * 3 / 2 5038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang 5138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang#define MFC_OUTPUT_BUFFER_NUM_MAX 16 * 2 5238ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang#define DEFAULT_MFC_OUTPUT_YBUFFER_SIZE 1920 * 1080 5338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang#define DEFAULT_MFC_OUTPUT_CBUFFER_SIZE 1920 * 1080 / 2 5420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 5520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 1 5620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 4 5720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 5838ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang#define EXTRA_DPB_NUM 5 5938ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang 603e79a27e56341c1ae1038773875512dbd37de3b7SeungBeom Kim#define MFC_INPUT_BUFFER_PLANE 1 613e79a27e56341c1ae1038773875512dbd37de3b7SeungBeom Kim#define MFC_OUTPUT_BUFFER_PLANE 2 623e79a27e56341c1ae1038773875512dbd37de3b7SeungBeom Kim 6320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changtypedef struct 6420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang{ 6520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang void *pAddrY; 6620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang void *pAddrC; 6738ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang} CODEC_DEC_ADDR_INFO; 6820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 69ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kimtypedef struct _CODEC_DEC_BUFFER 7020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang{ 71ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim void *pVirAddr[MAX_BUFFER_PLANE]; /* virtual address */ 72ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim int bufferSize[MAX_BUFFER_PLANE]; /* buffer alloc size */ 73ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim int fd[MAX_BUFFER_PLANE]; /* buffer FD */ 74ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim int dataSize; /* total data length */ 75ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim} CODEC_DEC_BUFFER; 7638ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang 7738ef2572d26fc760c584a1855a3d002f34eb0231Jiho Changtypedef struct _DECODE_CODEC_EXTRA_BUFFERINFO 7838ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang{ 7938ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang /* For Decode Output */ 8038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_U32 imageWidth; 8138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_U32 imageHeight; 8238ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_COLOR_FORMATTYPE ColorFormat; 8338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang} DECODE_CODEC_EXTRA_BUFFERINFO; 8420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 8520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changtypedef struct _EXYNOS_OMX_VIDEODEC_COMPONENT 8620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang{ 8720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang OMX_HANDLETYPE hCodecHandle; 8820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang OMX_BOOL bThumbnailMode; 8920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang OMX_BOOL bFirstFrame; 90ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim CODEC_DEC_BUFFER *pMFCDecInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; 91ef059a025332fc3b7d68e1b8bd1f7abe34cf37e9SeungBeom Kim CODEC_DEC_BUFFER *pMFCDecOutputBuffer[MFC_OUTPUT_BUFFER_NUM_MAX]; 9220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 9338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang /* Buffer Process */ 9438ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_BOOL bExitBufferProcessThread; 9538ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_HANDLETYPE hSrcInputThread; 9638ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_HANDLETYPE hSrcOutputThread; 9738ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_HANDLETYPE hDstInputThread; 9838ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_HANDLETYPE hDstOutputThread; 9938ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang 10038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang /* Shared Memory Handle */ 10138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_HANDLETYPE hSharedMemory; 10238ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang 10338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang /* For DRM Play */ 10438ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_BOOL bDRMPlayerMode; 10520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 10620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang /* CSC handle */ 10720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang OMX_PTR csc_handle; 10820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang OMX_U32 csc_set_format; 109800a8d754f6251b19a56b1aebde0e239c0e5f3cdJiho Chang 11038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_srcInputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData); 11138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_srcOutputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData); 11238ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_dstInputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pOutputData); 11338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_dstOutputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pOutputData); 114800a8d754f6251b19a56b1aebde0e239c0e5f3cdJiho Chang 11538ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_start)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 11638ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_stop)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 11738ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_bufferProcessRun)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 11838ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_enqueueAllBuffer)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); 11920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 12038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang int (*exynos_checkInputFrame) (OMX_U8 *pInputStream, OMX_U32 buffSize, OMX_U32 flag, 12138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame); 12238ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_getCodecInputPrivateData) (OMX_PTR codecBuffer, OMX_PTR addr, OMX_U32 *size); 12338ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang OMX_ERRORTYPE (*exynos_codec_getCodecOutputPrivateData) (OMX_PTR codecBuffer, OMX_PTR addr[], OMX_U32 size[]); 12438ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang} EXYNOS_OMX_VIDEODEC_COMPONENT; 12520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 12620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#ifdef __cplusplus 12720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Changextern "C" { 12820d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#endif 12920d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 13038ef2572d26fc760c584a1855a3d002f34eb0231Jiho Changint calc_plane(int width, int height); 13138ef2572d26fc760c584a1855a3d002f34eb0231Jiho Changinline void Exynos_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent); 13238ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_U32 nPortIndex); 13338ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_ERRORTYPE Exynos_Input_CodecBufferToData(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_PTR codecBuffer, EXYNOS_OMX_DATA *pData); 13438ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_ERRORTYPE Exynos_Output_CodecBufferToData(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_PTR codecBuffer, EXYNOS_OMX_DATA *pData); 13538ef2572d26fc760c584a1855a3d002f34eb0231Jiho Chang 13638ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_ERRORTYPE Exynos_OMX_SrcInputBufferProcess(OMX_HANDLETYPE hComponent); 13738ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_ERRORTYPE Exynos_OMX_SrcOutputBufferProcess(OMX_HANDLETYPE hComponent); 13838ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_ERRORTYPE Exynos_OMX_DstInputBufferProcess(OMX_HANDLETYPE hComponent); 13938ef2572d26fc760c584a1855a3d002f34eb0231Jiho ChangOMX_ERRORTYPE Exynos_OMX_DstOutputBufferProcess(OMX_HANDLETYPE hComponent); 14020d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_VideoDecodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent); 14120d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho ChangOMX_ERRORTYPE Exynos_OMX_VideoDecodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent); 14220d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 14320d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#ifdef __cplusplus 14420d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang} 14520d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#endif 14620d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang 14720d3e6e3118a6e19627296e9247e948d54ec0fb8Jiho Chang#endif 148