video: Add missing function prototypes
[GitHub/LineageOS/android_hardware_samsung_slsi_openmax.git] / component / video / enc / Exynos_OMX_Venc.h
CommitLineData
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
71typedef struct
72{
73 void *pAddrY;
74 void *pAddrC;
75} CODEC_ENC_ADDR_INFO;
76
433e798a
EC
77typedef struct _BYPASS_BUFFER_INFO
78{
79 OMX_U32 nFlags;
80 OMX_TICKS timeStamp;
81} BYPASS_BUFFER_INFO;
82
c6f4bc34
YK
83typedef 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
91typedef struct _ENCODE_CODEC_EXTRA_BUFFERINFO
92{
93 /* For Encode Input */
94 OMX_COLOR_FORMATTYPE eColorFormat;
95} ENCODE_CODEC_EXTRA_BUFFERINFO;
96
c6f4bc34
YK
97typedef 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
153extern "C" {
154#endif
155
156inline void Exynos_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent);
157OMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_U32 nPortIndex);
158OMX_ERRORTYPE Exynos_Input_CodecBufferToData(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_PTR codecBuffer, EXYNOS_OMX_DATA *pData);
e50b9040 159OMX_ERRORTYPE Exynos_Output_CodecBufferToData(CODEC_ENC_BUFFER *pCodecBuffer, EXYNOS_OMX_DATA *pData);
c6f4bc34
YK
160
161
162OMX_ERRORTYPE Exynos_OMX_SrcInputBufferProcess(OMX_HANDLETYPE hComponent);
163OMX_ERRORTYPE Exynos_OMX_SrcOutputBufferProcess(OMX_HANDLETYPE hComponent);
164OMX_ERRORTYPE Exynos_OMX_DstInputBufferProcess(OMX_HANDLETYPE hComponent);
165OMX_ERRORTYPE Exynos_OMX_DstOutputBufferProcess(OMX_HANDLETYPE hComponent);
166OMX_ERRORTYPE Exynos_OMX_VideoEncodeComponentInit(OMX_IN OMX_HANDLETYPE hComponent);
167OMX_ERRORTYPE Exynos_OMX_VideoEncodeComponentDeinit(OMX_IN OMX_HANDLETYPE hComponent);
168
cc46393d
AS
169void Exynos_Free_CodecBuffers(OMX_COMPONENTTYPE *pOMXComponent, OMX_U32 nPortIndex);
170
c6f4bc34
YK
171#ifdef __cplusplus
172}
173#endif
174
175#endif