1826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev/*--------------------------------------------------------------------------
28767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanCopyright (c) 2012-2014, The Linux Foundation. All rights reserved.
3826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevRedistribution and use in source and binary forms, with or without
56eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalmodification, are permitted provided that the following conditions are
66eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalmet:
7826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    * Redistributions of source code must retain the above copyright
8826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      notice, this list of conditions and the following disclaimer.
96eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Redistributions in binary form must reproduce the above
106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      copyright notice, this list of conditions and the following
116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      disclaimer in the documentation and/or other materials provided
126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      with the distribution.
136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Neither the name of The Linux Foundation nor the names of its
146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      contributors may be used to endorse or promote products derived
156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      from this software without specific prior written permission.
166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
176eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
186eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
196eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
206eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
216eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
226eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
236eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
246eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
256eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
266eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
276eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev--------------------------------------------------------------------------*/
29826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef __OMX_VENC_DEV__
30826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define __OMX_VENC_DEV__
31826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
32826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "OMX_Types.h"
33826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "OMX_Core.h"
347beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano#include "OMX_VideoExt.h"
35826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "OMX_QCOMExtns.h"
36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "qc_omx_component.h"
37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "omx_video_common.h"
38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "omx_video_base.h"
39826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "omx_video_encoder.h"
40826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <linux/fb.h>
42826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <gui/ISurfaceComposer.h>
448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <gui/SurfaceComposerClient.h>
458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <ui/DisplayInfo.h>
46826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define TIMEOUT 5*60*1000
486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_switch {
5161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char    status;
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
5461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_allocatorproperty {
5561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long     mincount;
5661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long     actualcount;
5761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long     datasize;
5861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long     suffixsize;
5961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long     alignment;
6061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long     bufpoolid;
61826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
6361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_basecfg {
6461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    input_width;
6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    input_height;
6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    dvs_width;
6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    dvs_height;
6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    codectype;
6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    fps_num;
7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    fps_den;
7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    targetbitrate;
7261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    inputformat;
73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_profile {
7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    profile;
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_profilelevel {
7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    level;
80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_sessionqp {
8361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    iframeqp;
848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long    pframeqp;
858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long    bframeqp;
868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_initqp {
898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long    iframeqp;
908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long    pframeqp;
918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long    bframeqp;
928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long    enableinitqp;
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
94826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
9561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_qprange {
9661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    maxqp;
9761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    minqp;
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
9961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_intraperiod {
10061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    num_pframes;
10161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    num_bframes;
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_seqheader {
10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *hdrbufptr;
10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    bufsize;
10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    hdrlen;
107826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_capability {
11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    codec_types;
11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    maxframe_width;
11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    maxframe_height;
11361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    maxtarget_bitrate;
11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    maxframe_rate;
11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    input_formats;
11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char    dvs;
117826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
118826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_entropycfg {
12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned longentropysel;
12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    cabacmodel;
122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
123826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_dbcfg {
12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    db_mode;
12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    slicealpha_offset;
12761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    slicebeta_offset;
128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_intrarefresh {
13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    irmode;
13261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    mbcount;
133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_multiclicecfg {
13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    mslice_mode;
13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    mslice_size;
138826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_bufferflush {
14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    flush_mode;
142826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
14461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_ratectrlcfg {
14561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    rcmode;
146826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
147826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
14861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct    msm_venc_voptimingcfg {
14961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    voptime_resolution;
150826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_framerate {
15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    fps_denominator;
15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    fps_numerator;
154826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
155826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_targetbitrate {
15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    target_bitrate;
158826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
159826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
160826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_rotation {
16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    rotation;
163826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
164826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
16561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_timeout {
16661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    millisec;
167826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
168826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_headerextension {
17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long    header_extension;
171826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
172826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct msm_venc_video_capability {
1746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_width;
1756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_width;
1766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_height;
1776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_height;
1786eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
1796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_idrperiod {
18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long idrperiod;
18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
18461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_slice_delivery {
18561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned long enable;
18661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
18761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
1888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_hierlayers {
1898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned int numlayers;
1908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
1918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
1928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_ltrinfo {
1938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned int enabled;
1948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned int count;
1958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
1968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
1978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_perf_level {
1988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned int perflevel;
1998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_vui_timing_info {
2028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned int enabled;
2038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
2048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_peak_bitrate {
2068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned int peakbitrate;
2078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
2088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2096eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalenum v4l2_ports {
21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    CAPTURE_PORT,
21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OUTPUT_PORT,
21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MAX_PORT
2136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
2146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
2156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info {
2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long buffer_size;
21761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    char* uaddr;
21861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int count;
21961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int size;
22061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int allocated;
2216eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_ion ion;
2236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2246eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
2256eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass venc_dev
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        venc_dev(class omx_venc *venc_class); //constructor
23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ~venc_dev(); //des
23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static void* async_venc_message_thread (void *);
23361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_open(OMX_U32);
23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void venc_close();
23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_stop(void);
23661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_pause(void);
23761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_start(void);
23861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_flush(unsigned);
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_meta_mode(bool);
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_resume(void);
24361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_start_done(void);
24461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_stop_done(void);
24561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned venc_set_message_thread_id(pthread_t);
24661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_use_buf(void*, unsigned,unsigned);
24761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_free_buf(void*, unsigned);
24861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_empty_buf(void *, void *,unsigned,unsigned);
24961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_fill_buf(void *, void *,unsigned,unsigned);
25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_get_buf_req(OMX_U32 *,OMX_U32 *,
2528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 *,OMX_U32);
2538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_buf_req(OMX_U32 *,OMX_U32 *,
2548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 *,OMX_U32);
25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_param(void *,OMX_INDEXTYPE);
25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_config(void *configData, OMX_INDEXTYPE index);
25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_get_profile_level(OMX_U32 *eProfile,OMX_U32 *eLevel);
2588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_get_seq_hdr(void *, unsigned, OMX_U32 *);
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_loaded_start(void);
26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_loaded_stop(void);
26161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_loaded_start_done(void);
26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_loaded_stop_done(void);
26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_is_video_session_supported(unsigned long width, unsigned long height);
264c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        bool venc_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
265c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                        OMX_U32 height);
2668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_get_performance_level(OMX_U32 *perflevel);
2678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_get_vui_timing_info(OMX_U32 *enabled);
2688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_get_peak_bitrate(OMX_U32 *peakbitrate);
2698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_get_output_log_flag();
2708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int venc_output_log_buffers(const char *buffer_addr, int buffer_len);
2718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int venc_input_log_buffers(OMX_BUFFERHEADERTYPE *buffer, int fd, int plane_offset);
2728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int venc_extradata_log_buffers(char *buffer_addr);
2738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct venc_debug_cap m_debug;
27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_nDriver_fd;
27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_profile_set;
27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_level_set;
27861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int num_planes;
27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int etb, ebd, ftb, fbd;
28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct recon_buffer {
28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* virtual_address;
28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int alignment;
28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
286826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int ion_device_fd;
28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            struct ion_allocation_data alloc_data;
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            struct ion_fd_data ion_alloc_fd;
290826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int stopped;
2942e277fbebd51de1d4f029f7950ed2a98731177dcArun Menon        int resume_in_stopped;
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_max_allowed_bitrate_check;
29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t m_tid;
29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class omx_venc *venc_handle;
29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_extradata();
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_extradata();
3018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int append_mbi_extradata(void *, struct msm_vidc_extradata_header*);
30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool handle_extradata(void *, int);
30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int venc_set_format(int);
3048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool deinterlace_enabled;
30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    private:
3068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32                             m_codec;
30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_basecfg             m_sVenc_cfg;
30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_ratectrlcfg         rate_ctrl;
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_targetbitrate       bitrate;
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_intraperiod         intra_period;
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_profile             codec_profile;
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_profilelevel        profile_level;
31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_switch              set_param;
31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_voptimingcfg        time_inc;
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_allocatorproperty   m_sInput_buff_property;
31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_allocatorproperty   m_sOutput_buff_property;
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_sessionqp           session_qp;
3188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_initqp              init_qp;
3198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_qprange             session_qp_range;
3208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_qprange             session_qp_values;
32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_multiclicecfg       multislice;
32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_entropycfg          entropy;
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_dbcfg               dbkfilter;
32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_intrarefresh        intra_refresh;
32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_headerextension     hec;
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_voptimingcfg        voptimecfg;
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_video_capability    capability;
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_idrperiod           idrperiod;
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct msm_venc_slice_delivery      slice_mode;
3308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_hierlayers          hier_p_layers;
3318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_perf_level          performance_level;
3328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_vui_timing_info     vui_timing_info;
3338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct msm_venc_peak_bitrate        peak_bitrate;
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_profile_level(OMX_U32 eProfile,OMX_U32 eLevel);
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames);
33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_target_bitrate(OMX_U32 nTargetBitrate, OMX_U32 config);
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_ratectrl_cfg(OMX_VIDEO_CONTROLRATETYPE eControlRate);
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_session_qp(OMX_U32 i_frame_qp, OMX_U32 p_frame_qp,OMX_U32 b_frame_qp);
3408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_session_qp_range(OMX_U32 min_qp, OMX_U32 max_qp);
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_encode_framerate(OMX_U32 encode_framerate, OMX_U32 config);
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_intra_vop_refresh(OMX_BOOL intra_vop_refresh);
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_color_format(OMX_COLOR_FORMATTYPE color_format);
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_validate_profile_level(OMX_U32 *eProfile, OMX_U32 *eLevel);
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_multislice_cfg(OMX_INDEXTYPE codec, OMX_U32 slicesize);
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_entropy_config(OMX_BOOL enable, OMX_U32 i_cabac_level);
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_inloop_filter(OMX_VIDEO_AVCLOOPFILTERTYPE loop_filter);
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_intra_refresh (OMX_VIDEO_INTRAREFRESHTYPE intrarefresh, OMX_U32 nMBs);
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_error_resilience(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* error_resilience);
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_voptiming_cfg(OMX_U32 nTimeIncRes);
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void venc_config_print();
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_slice_delivery_mode(OMX_U32 enable);
3538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_extradata(OMX_U32 extra_data, OMX_BOOL enable);
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool venc_set_idr_period(OMX_U32 nPFrames, OMX_U32 nIDRPeriod);
3552e277fbebd51de1d4f029f7950ed2a98731177dcArun Menon        bool venc_reconfig_reqbufs();
3568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_vpe_rotation(OMX_S32 rotation_angle);
3578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_deinterlace(OMX_U32 enable);
3588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_ltrmode(OMX_U32 enable, OMX_U32 count);
3598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_useltr();
3608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_markltr();
3618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan	bool venc_enable_initial_qp(QOMX_EXTNINDEX_VIDEO_INITIALQP* initqp);
3628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_inband_video_header(OMX_BOOL enable);
3638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_au_delimiter(OMX_BOOL enable);
3648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_hier_layers(QOMX_VIDEO_HIERARCHICALCODINGTYPE type, OMX_U32 num_layers);
3658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_perf_level(QOMX_VIDEO_PERF_LEVEL ePerfLevel);
3668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_vui_timing_info(OMX_BOOL enable);
3678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_peak_bitrate(OMX_U32 nPeakBitrate);
3688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool venc_set_searchrange();
3692e277fbebd51de1d4f029f7950ed2a98731177dcArun Menon
370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 pmem_free();
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 pmem_allocate(OMX_U32 size, OMX_U32 alignment, OMX_U32 count);
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 venc_allocate_recon_buffers();
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline int clip2(int x) {
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x -1;
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 1;
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 2;
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 4;
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 16;
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x + 1;
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return x;
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
383826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int metadatamode;
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool streaming[MAX_PORT];
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool extradata;
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct extradata_buffer_info extradata_info;
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t pause_resume_mlock;
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_cond_t pause_resume_cond;
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool paused;
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int color_format;
3938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_searchrange_set;
3948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool enable_mv_narrow_searchrange;
3958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DisplayInfo display_info;
396826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
397826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
398826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT,
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT_DONE,
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN,
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN_DONE,
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES,
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES_DONE,
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START,
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START_DONE,
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP,
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP_DONE,
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES,
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES_DONE,
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE,
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE_DONE,
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT,
415826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
416826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
4176eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
418