Commit | Line | Data |
---|---|---|
c6f4bc34 YK |
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_Venc.h | |
20 | * @brief | |
21 | * @author SeungBeom Kim (sbcrux.kim@samsung.com) | |
22 | * Yunji Kim (yunji.kim@samsung.com) | |
23 | * @version 2.0.0 | |
24 | * @history | |
25 | * 2012.02.20 : Create | |
26 | */ | |
27 | ||
28 | #ifndef EXYNOS_OMX_VIDEO_ENCODE | |
29 | #define EXYNOS_OMX_VIDEO_ENCODE | |
30 | ||
31 | #include "OMX_Component.h" | |
32 | #include "Exynos_OMX_Def.h" | |
33 | #include "Exynos_OSAL_Queue.h" | |
34 | #include "Exynos_OMX_Baseport.h" | |
35 | #include "Exynos_OMX_Basecomponent.h" | |
c6f4bc34 YK |
36 | |
37 | #define MAX_VIDEO_INPUTBUFFER_NUM 5 | |
38 | #define MAX_VIDEO_OUTPUTBUFFER_NUM 4 | |
39 | ||
40 | #define DEFAULT_FRAME_WIDTH 176 | |
41 | #define DEFAULT_FRAME_HEIGHT 144 | |
42 | ||
43 | #define DEFAULT_VIDEO_INPUT_BUFFER_SIZE (ALIGN_TO_16B(DEFAULT_FRAME_WIDTH) * ALIGN_TO_16B(DEFAULT_FRAME_HEIGHT) + \ | |
44 | ALIGN((ALIGN_TO_16B(DEFAULT_FRAME_WIDTH) * ALIGN_TO_16B(DEFAULT_FRAME_HEIGHT))/2,256)) | |
45 | #define DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE (DEFAULT_FRAME_WIDTH * DEFAULT_FRAME_HEIGHT) * 2 | |
46 | ||
47 | #define MFC_INPUT_BUFFER_NUM_MAX 3 | |
48 | #define MFC_OUTPUT_BUFFER_NUM_MAX 4 | |
49 | ||
50 | #define DEFAULT_MFC_INPUT_YBUFFER_SIZE ALIGN_TO_16B(1920) * ALIGN_TO_16B(1080) | |
51 | #define DEFAULT_MFC_INPUT_CBUFFER_SIZE ALIGN((DEFAULT_MFC_INPUT_YBUFFER_SIZE / 2), 256) | |
52 | #define DEFAULT_MFC_OUTPUT_BUFFER_SIZE 1920 * 1080 * 3 / 2 | |
53 | ||
433e798a EC |
54 | #ifdef USE_ENCODER_RGBINPUT_SUPPORT |
55 | #define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 8 | |
56 | #else | |
c6f4bc34 | 57 | #define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 5 |
433e798a | 58 | #endif |
c6f4bc34 YK |
59 | #define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 1 |
60 | ||
433e798a EC |
61 | #define MFC_DEFAULT_INPUT_BUFFER_PLANE 2 |
62 | #define MFC_DEFAULT_OUTPUT_BUFFER_PLANE 1 | |
c6f4bc34 YK |
63 | |
64 | #define MAX_INPUTBUFFER_NUM_DYNAMIC 0 /* Dynamic number of metadata buffer */ | |
433e798a | 65 | #define MAX_OUTPUTBUFFER_NUM_DYNAMIC 0 /* Dynamic number of metadata buffer */ |
c6f4bc34 YK |
66 | |
67 | // The largest metadata buffer size advertised | |
68 | // when metadata buffer mode is used for video encoding | |
69 | #define MAX_INPUT_METADATA_BUFFER_SIZE (64) | |
70 | ||
71 | typedef struct | |
72 | { | |
73 | void *pAddrY; | |
74 | void *pAddrC; | |
75 | } CODEC_ENC_ADDR_INFO; | |
76 | ||
433e798a EC |
77 | typedef struct _BYPASS_BUFFER_INFO |
78 | { | |
79 | OMX_U32 nFlags; | |
80 | OMX_TICKS timeStamp; | |
81 | } BYPASS_BUFFER_INFO; | |
82 | ||
c6f4bc34 YK |
83 | typedef struct _CODEC_ENC_BUFFER |
84 | { | |
85 | void *pVirAddr[MAX_BUFFER_PLANE]; /* virtual address */ | |
86 | int bufferSize[MAX_BUFFER_PLANE]; /* buffer alloc size */ | |
87 | int fd[MAX_BUFFER_PLANE]; /* buffer FD */ | |
88 | int dataSize; /* total data length */ | |
89 | } CODEC_ENC_BUFFER; | |
90 | ||
433e798a EC |
91 | typedef struct _ENCODE_CODEC_EXTRA_BUFFERINFO |
92 | { | |
93 | /* For Encode Input */ | |
94 | OMX_COLOR_FORMATTYPE eColorFormat; | |
95 | } ENCODE_CODEC_EXTRA_BUFFERINFO; | |
96 | ||
c6f4bc34 YK |
97 | typedef struct _EXYNOS_OMX_VIDEOENC_COMPONENT |
98 | { | |
99 | OMX_HANDLETYPE hCodecHandle; | |
100 | OMX_BOOL bFirstFrame; | |
433e798a EC |
101 | OMX_BOOL bQosChanged; |
102 | OMX_U32 nQosRatio; | |
103 | OMX_U32 nInbufSpareSize; | |
c6f4bc34 YK |
104 | CODEC_ENC_BUFFER *pMFCEncInputBuffer[MFC_INPUT_BUFFER_NUM_MAX]; |
105 | CODEC_ENC_BUFFER *pMFCEncOutputBuffer[MFC_OUTPUT_BUFFER_NUM_MAX]; | |
106 | ||
107 | /* Buffer Process */ | |
108 | OMX_BOOL bExitBufferProcessThread; | |
109 | OMX_HANDLETYPE hSrcInputThread; | |
110 | OMX_HANDLETYPE hSrcOutputThread; | |
111 | OMX_HANDLETYPE hDstInputThread; | |
112 | OMX_HANDLETYPE hDstOutputThread; | |
113 | ||
114 | /* Shared Memory Handle */ | |
115 | OMX_HANDLETYPE hSharedMemory; | |
116 | ||
10db72aa SK |
117 | /* For DRM Record */ |
118 | OMX_BOOL bDRMPlayerMode; | |
119 | ||
c6f4bc34 YK |
120 | OMX_BOOL configChange; |
121 | OMX_BOOL IntraRefreshVOP; | |
122 | OMX_VIDEO_CONTROLRATETYPE eControlRate[ALL_PORT_NUM]; | |
123 | OMX_VIDEO_PARAM_QUANTIZATIONTYPE quantization; | |
aa4a2b3e | 124 | OMX_VIDEO_PARAM_INTRAREFRESHTYPE intraRefresh; |
c6f4bc34 YK |
125 | |
126 | OMX_BOOL bFirstInput; | |
127 | OMX_BOOL bFirstOutput; | |
128 | ||
129 | OMX_COLOR_FORMATTYPE ANBColorFormat; | |
433e798a | 130 | OMX_BOOL bRGBSupport; |
c6f4bc34 YK |
131 | |
132 | /* CSC handle */ | |
133 | OMX_PTR csc_handle; | |
134 | OMX_U32 csc_set_format; | |
135 | ||
136 | OMX_ERRORTYPE (*exynos_codec_srcInputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData); | |
137 | OMX_ERRORTYPE (*exynos_codec_srcOutputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pInputData); | |
138 | OMX_ERRORTYPE (*exynos_codec_dstInputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pOutputData); | |
139 | OMX_ERRORTYPE (*exynos_codec_dstOutputProcess) (OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DATA *pOutputData); | |
140 | ||
141 | OMX_ERRORTYPE (*exynos_codec_start)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); | |
142 | OMX_ERRORTYPE (*exynos_codec_stop)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); | |
143 | OMX_ERRORTYPE (*exynos_codec_bufferProcessRun)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); | |
144 | OMX_ERRORTYPE (*exynos_codec_enqueueAllBuffer)(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); | |
145 | ||
146 | int (*exynos_checkInputFrame) (OMX_U8 *pInputStream, OMX_U32 buffSize, OMX_U32 flag, | |
147 | OMX_BOOL bPreviousFrameEOF, OMX_BOOL *pbEndOfFrame); | |
148 | OMX_ERRORTYPE (*exynos_codec_getCodecInputPrivateData) (OMX_PTR codecBuffer, OMX_PTR addr[], OMX_U32 size[]); | |
149 | OMX_ERRORTYPE (*exynos_codec_getCodecOutputPrivateData) (OMX_PTR codecBuffer, OMX_PTR addr, OMX_U32 *size); | |
150 | } EXYNOS_OMX_VIDEOENC_COMPONENT; | |
151 | ||
152 | #ifdef __cplusplus | |
153 | extern "C" { | |
154 | #endif | |
155 | ||
156 | inline void Exynos_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent); | |
157 | OMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_U32 nPortIndex); | |
158 | OMX_ERRORTYPE Exynos_Input_CodecBufferToData(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_PTR codecBuffer, EXYNOS_OMX_DATA *pData); | |
e50b9040 | 159 | OMX_ERRORTYPE Exynos_Output_CodecBufferToData(CODEC_ENC_BUFFER *pCodecBuffer, EXYNOS_OMX_DATA *pData); |
c6f4bc34 YK |
160 | |
161 | ||
162 | OMX_ERRORTYPE Exynos_OMX_SrcInputBufferProcess(OMX_HANDLETYPE hComponent); | |
163 | OMX_ERRORTYPE Exynos_OMX_SrcOutputBufferProcess(OMX_HANDLETYPE hComponent); | |
164 | OMX_ERRORTYPE Exynos_OMX_DstInputBufferProcess(OMX_HANDLETYPE hComponent); | |
165 | OMX_ERRORTYPE Exynos_OMX_DstOutputBufferProcess(OMX_HANDLETYPE hComponent); | |
166 | OMX_ERRORTYPE Exynos_OMX_VideoEncodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent); | |
167 | OMX_ERRORTYPE Exynos_OMX_VideoEncodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent); | |
168 | ||
cc46393d AS |
169 | void Exynos_Free_CodecBuffers(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex); |
170 | ||
c6f4bc34 YK |
171 | #ifdef __cplusplus |
172 | } | |
173 | #endif | |
174 | ||
175 | #endif |