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