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