1826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev/*-------------------------------------------------------------------------- 2e4010605f233a213cf0d972397bb33c34c364227Patrick TjinCopyright (c) 2012-2016, 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" 37e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _VQZIP_ 38e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "VQZip.h" 39e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 40826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "omx_video_common.h" 41826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "omx_video_base.h" 42826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "omx_video_encoder.h" 43826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h> 44e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <media/msm_vidc.h> 45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h> 46826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define TIMEOUT 5*60*1000 48f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BIT(num) (1 << (num)) 49f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define MAX_HYB_HIERP_LAYERS 6 50bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch#define MAX_AVC_HP_LAYERS (4) 51e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MAX_V4L2_BUFS 64 //VB2_MAX_FRAME 526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 53f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavanenum hier_type { 54f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan HIER_NONE = 0x0, 55f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan HIER_P = 0x1, 56f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan HIER_B = 0x2, 57f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan HIER_P_HYBRID = 0x3, 58f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan}; 59826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 6061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_switch { 6161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char status; 62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 6461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_allocatorproperty { 6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long mincount; 6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long actualcount; 6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long datasize; 6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long suffixsize; 6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long alignment; 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long bufpoolid; 71826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 72826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 7361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_basecfg { 7461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long input_width; 7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long input_height; 7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long dvs_width; 7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long dvs_height; 7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long codectype; 7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long fps_num; 8061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long fps_den; 8161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long targetbitrate; 8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long inputformat; 83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_profile { 8661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long profile; 87826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_profilelevel { 8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long level; 90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_sessionqp { 9361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long iframeqp; 948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long pframeqp; 958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long bframeqp; 968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_initqp { 998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long iframeqp; 1008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long pframeqp; 1018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long bframeqp; 1028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long enableinitqp; 103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_qprange { 10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long maxqp; 10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long minqp; 108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_intraperiod { 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long num_pframes; 11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long num_bframes; 112826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 11361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_seqheader { 11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *hdrbufptr; 11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long bufsize; 11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long hdrlen; 117826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 118826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_capability { 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long codec_types; 12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long maxframe_width; 12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long maxframe_height; 12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long maxtarget_bitrate; 12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long maxframe_rate; 12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long input_formats; 12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char dvs; 127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_entropycfg { 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned longentropysel; 13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long cabacmodel; 132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_dbcfg { 13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long db_mode; 13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long slicealpha_offset; 13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long slicebeta_offset; 138826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_intrarefresh { 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long irmode; 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long mbcount; 143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 144826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 14561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_multiclicecfg { 14661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long mslice_mode; 14761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long mslice_size; 148826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 149826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_bufferflush { 15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long flush_mode; 152826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 153826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_ratectrlcfg { 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long rcmode; 156826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 157826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_voptimingcfg { 15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long voptime_resolution; 160826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_framerate { 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long fps_denominator; 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long fps_numerator; 164826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 165826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 16661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_targetbitrate { 16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long target_bitrate; 168826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 169826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 170826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_rotation { 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long rotation; 173826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 174826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_timeout { 17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long millisec; 177826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 178826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_headerextension { 18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long header_extension; 181826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 182826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct msm_venc_video_capability { 1846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int min_width; 1856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int max_width; 1866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int min_height; 1876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int max_height; 1886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}; 1896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_idrperiod { 19161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long idrperiod; 19261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 19361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 19461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct msm_venc_slice_delivery { 19561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned long enable; 19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 19761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_hierlayers { 1998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned int numlayers; 200f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan enum hier_type hier_mode; 2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 2028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_ltrinfo { 2048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned int enabled; 2058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned int count; 2068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 2078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_perf_level { 2098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned int perflevel; 2108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 2118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_vui_timing_info { 2138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned int enabled; 2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 216e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct msm_venc_vqzip_sei_info { 217e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int enabled; 218e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 219e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct msm_venc_peak_bitrate { 2218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned int peakbitrate; 2228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 2238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 224f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavanstruct msm_venc_vpx_error_resilience { 225f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan unsigned int enable; 226f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan}; 227f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 228eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavanstruct msm_venc_priority { 229eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan OMX_U32 priority; 230eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan}; 231eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan 232e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct msm_venc_hybrid_hp { 233e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int nSize; 234e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int nKeyFrameInterval; 235e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int nTemporalLayerBitrateRatio[OMX_VIDEO_MAX_HP_LAYERS]; 236e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int nMinQuantizer; 237e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int nMaxQuantizer; 238e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int nHpLayers; 239e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 240e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 241bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetschstruct msm_venc_temporal_layers { 242bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch enum hier_type hier_mode; 243bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 nMaxLayers; 244bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 nMaxBLayers; 245bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 nPLayers; 246bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 nBLayers; 247bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_BOOL bIsBitrateRatioValid; 248bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch // cumulative ratio: eg [25, 50, 75, 100] means [L0=25%, L1=25%, L2=25%, L3=25%] 249bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 nTemporalLayerBitrateRatio[OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS]; 250bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch // Layerwise ratio: eg [L0=25%, L1=25%, L2=25%, L3=25%] 251bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 nTemporalLayerBitrateFraction[OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS]; 252bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch}; 253bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch 254da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavanstruct msm_venc_color_space { 255da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan OMX_U32 primaries; 256da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan OMX_U32 range; 257da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan OMX_U32 matrix_coeffs; 258da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan OMX_U32 transfer_chars; 259da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan}; 260da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan 2616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalenum v4l2_ports { 26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan CAPTURE_PORT, 26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OUTPUT_PORT, 26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAX_PORT 2656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}; 2666eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 267e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinclass encExtradata { 268e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinprivate: 269e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin enum { 270e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FREE, 271e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin BUSY, 272e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FOR_CONFIG, 273e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 274e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct info { 275e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int status; 276e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *cookie; 277e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 278e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pthread_mutex_t lock; 279e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int mCount; 280e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ssize_t mSize; 281e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin char *mUaddr; 282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct venc_ion mIon; 283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct info mIndex[MAX_V4L2_BUFS]; 284e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin class omx_venc *mVencHandle; 285e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int __get(char **userptr, int *fd, unsigned *offset, ssize_t *size, int type); 286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE __allocate(); 287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void __free(); 288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void __debug(); 289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinpublic: 290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int mDbgEtbCount; 291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin encExtradata(class omx_venc *venc_handle); 292e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ~encExtradata(); 293e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void update(unsigned int count, ssize_t size); 294e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* Get extradata whose status is FREE. */ 295e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get(char **userptr, int *fd, unsigned *offset, ssize_t *size); 296e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* Get extradata which is tagged with cookie via setCookieForConfigExtradata. If no extradata is tagged with this cookie then get extradata whose status is FREE. */ 297e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get(void *cookie, char **userptr, int *fd, unsigned *offset, ssize_t *size); 298e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* return the extradata back to the pool of FREE extradata. */ 299e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE put(char *userptr); 300e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* If there is already an extradata with status FOR_CONFIG, return that else return FREE extradata. */ 301e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE getForConfig(char **userptr, int *fd, unsigned *offset, ssize_t *size); 302e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* Return the extradata pointer corresponding to the index. Does not change status of extradata. */ 303e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE peek(unsigned index, char **userptr, int *fd, unsigned* offset, ssize_t *size); 304e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* Attach a cookie to extradata. Extradata with this cookie can be retrieved via getExtradata call.*/ 305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void setCookieForConfig(void *cookie); 306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ssize_t getBufferSize(); 307e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int getBufferCount(); 308e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool vqzip_sei_found; 309e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 310e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 311e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct statistics { 312e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct timeval prev_tv; 313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int prev_fbd; 314e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int bytes_generated; 3156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}; 3166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 317f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavanenum rc_modes { 318f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan RC_VBR_VFR = BIT(0), 319f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan RC_VBR_CFR = BIT(1), 320f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan RC_CBR_VFR = BIT(2), 321f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan RC_CBR_CFR = BIT(3), 322f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan RC_ALL = (RC_VBR_VFR | RC_VBR_CFR 323f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan | RC_CBR_VFR | RC_CBR_CFR) 324f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan}; 325f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 326826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass venc_dev 327826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan venc_dev(class omx_venc *venc_class); //constructor 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~venc_dev(); //des 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan static void* async_venc_message_thread (void *); 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_open(OMX_U32); 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void venc_close(); 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_stop(void); 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_pause(void); 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_start(void); 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_flush(unsigned); 339826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_meta_mode(bool); 341826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_resume(void); 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_start_done(void); 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_stop_done(void); 34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned venc_set_message_thread_id(pthread_t); 34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_use_buf(void*, unsigned,unsigned); 34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_free_buf(void*, unsigned); 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_empty_buf(void *, void *,unsigned,unsigned); 34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_fill_buf(void *, void *,unsigned,unsigned); 35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_get_buf_req(OMX_U32 *,OMX_U32 *, 3528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 *,OMX_U32); 3538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_buf_req(OMX_U32 *,OMX_U32 *, 3548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 *,OMX_U32); 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_param(void *,OMX_INDEXTYPE); 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_config(void *configData, OMX_INDEXTYPE index); 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_get_profile_level(OMX_U32 *eProfile,OMX_U32 *eLevel); 358f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_get_seq_hdr(void *, unsigned, unsigned *); 3594cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan bool venc_get_dimensions(OMX_U32 portIndex, OMX_U32 *w, OMX_U32 *h); 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_start(void); 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_stop(void); 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_start_done(void); 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_loaded_stop_done(void); 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_is_video_session_supported(unsigned long width, unsigned long height); 365c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan bool venc_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width, 366c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan OMX_U32 height); 3678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_get_performance_level(OMX_U32 *perflevel); 3688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_get_vui_timing_info(OMX_U32 *enabled); 369e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_get_vqzip_sei_info(OMX_U32 *enabled); 3708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_get_peak_bitrate(OMX_U32 *peakbitrate); 371e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_get_batch_size(OMX_U32 *size); 372bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch bool venc_get_temporal_layer_caps(OMX_U32 * /*nMaxLayers*/, 373bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 * /*nMaxBLayers*/); 3748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_get_output_log_flag(); 375e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_check_valid_config(); 3768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int venc_output_log_buffers(const char *buffer_addr, int buffer_len); 377e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int venc_input_log_buffers(OMX_BUFFERHEADERTYPE *buffer, int fd, int plane_offset, 378e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned long inputformat); 3798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int venc_extradata_log_buffers(char *buffer_addr); 380e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_bitrate_type(OMX_U32 type); 381e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int venc_roiqp_log_buffers(OMX_QTI_VIDEO_CONFIG_ROIINFO *roiInfo); 382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 383e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _VQZIP_ 384e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin class venc_dev_vqzip 385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 386e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin public: 387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin venc_dev_vqzip(); 388e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ~venc_dev_vqzip(); 389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool init(); 390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void deinit(); 391e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct VQZipConfig pConfig; 392e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int tempSEI[300]; 393e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int fill_stats_data(void* pBuf, void *pStats); 394e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin typedef void (*vqzip_deinit_t)(void*); 395e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin typedef void* (*vqzip_init_t)(void); 396e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin typedef VQZipStatus (*vqzip_compute_stats_t)(void* const , const void * const , const VQZipConfig* ,VQZipStats*); 397e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin private: 398e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pthread_mutex_t lock; 399e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *mLibHandle; 400e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *mVQZIPHandle; 401e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin vqzip_init_t mVQZIPInit; 402e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin vqzip_deinit_t mVQZIPDeInit; 403e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin vqzip_compute_stats_t mVQZIPComputeStats; 404e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 405e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin venc_dev_vqzip vqzip; 406e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 4078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct venc_debug_cap m_debug; 40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_nDriver_fd; 409e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int m_poll_efd; 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_profile_set; 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_level_set; 412e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int num_input_planes, num_output_planes; 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int etb, ebd, ftb, fbd; 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct recon_buffer { 41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char* virtual_address; 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd; 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int alignment; 41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int offset; 420826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int ion_device_fd; 42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_allocation_data alloc_data; 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_fd_data ion_alloc_fd; 424826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int stopped; 4282e277fbebd51de1d4f029f7950ed2a98731177dcArun Menon int resume_in_stopped; 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_max_allowed_bitrate_check; 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_t m_tid; 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool async_thread_created; 432e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool async_thread_force_stop; 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan class omx_venc *venc_handle; 4348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int append_mbi_extradata(void *, struct msm_vidc_extradata_header*); 435e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool handle_output_extradata(void *); 436e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool handle_input_extradata(void *, int); 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int venc_set_format(int); 4388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool deinterlace_enabled; 439f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool hw_overload; 440e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool is_gralloc_source_ubwc; 441e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool is_camera_source_ubwc; 442da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan bool is_csc_enabled; 443e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 fd_list[64]; 444e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin encExtradata mInputExtradata; 445e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin encExtradata mOutputExtradata; 446e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 4488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 m_codec; 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_basecfg m_sVenc_cfg; 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_ratectrlcfg rate_ctrl; 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_targetbitrate bitrate; 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_intraperiod intra_period; 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_profile codec_profile; 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_profilelevel profile_level; 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_switch set_param; 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_voptimingcfg time_inc; 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_allocatorproperty m_sInput_buff_property; 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_allocatorproperty m_sOutput_buff_property; 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_sessionqp session_qp; 4608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_venc_initqp init_qp; 4618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_venc_qprange session_qp_range; 4628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_venc_qprange session_qp_values; 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_multiclicecfg multislice; 46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_entropycfg entropy; 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_dbcfg dbkfilter; 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_intrarefresh intra_refresh; 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_headerextension hec; 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_voptimingcfg voptimecfg; 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_video_capability capability; 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_idrperiod idrperiod; 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_venc_slice_delivery slice_mode; 472f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan struct msm_venc_hierlayers hier_layers; 4738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_venc_perf_level performance_level; 4748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_venc_vui_timing_info vui_timing_info; 475e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct msm_venc_vqzip_sei_info vqzip_sei_info; 4768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_venc_peak_bitrate peak_bitrate; 477f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan struct msm_venc_ltrinfo ltrinfo; 478f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan struct msm_venc_vpx_error_resilience vpx_err_resilience; 479eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan struct msm_venc_priority sess_priority; 480dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan OMX_U32 operating_rate; 481e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int rc_off_level; 482e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct msm_venc_hybrid_hp hybrid_hp; 483bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch msm_venc_temporal_layers temporal_layers_config; 484da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan struct msm_venc_color_space color_space; 48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_profile_level(OMX_U32 eProfile,OMX_U32 eLevel); 48788cb130018b5b78cca238a4e22ef4dc88295d8dfPraveen Chavan bool venc_set_intra_period_config(OMX_U32 nPFrames, OMX_U32 nBFrames); 48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_intra_period(OMX_U32 nPFrames, OMX_U32 nBFrames); 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_target_bitrate(OMX_U32 nTargetBitrate, OMX_U32 config); 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_ratectrl_cfg(OMX_VIDEO_CONTROLRATETYPE eControlRate); 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_session_qp(OMX_U32 i_frame_qp, OMX_U32 p_frame_qp,OMX_U32 b_frame_qp); 4928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_session_qp_range(OMX_U32 min_qp, OMX_U32 max_qp); 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_encode_framerate(OMX_U32 encode_framerate, OMX_U32 config); 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_intra_vop_refresh(OMX_BOOL intra_vop_refresh); 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_color_format(OMX_COLOR_FORMATTYPE color_format); 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_validate_profile_level(OMX_U32 *eProfile, OMX_U32 *eLevel); 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_multislice_cfg(OMX_INDEXTYPE codec, OMX_U32 slicesize); 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_entropy_config(OMX_BOOL enable, OMX_U32 i_cabac_level); 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_inloop_filter(OMX_VIDEO_AVCLOOPFILTERTYPE loop_filter); 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_intra_refresh (OMX_VIDEO_INTRAREFRESHTYPE intrarefresh, OMX_U32 nMBs); 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_error_resilience(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* error_resilience); 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_voptiming_cfg(OMX_U32 nTimeIncRes); 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void venc_config_print(); 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_slice_delivery_mode(OMX_U32 enable); 5058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_extradata(OMX_U32 extra_data, OMX_BOOL enable); 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool venc_set_idr_period(OMX_U32 nPFrames, OMX_U32 nIDRPeriod); 5072e277fbebd51de1d4f029f7950ed2a98731177dcArun Menon bool venc_reconfig_reqbufs(); 5088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_vpe_rotation(OMX_S32 rotation_angle); 5098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_deinterlace(OMX_U32 enable); 5108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_ltrmode(OMX_U32 enable, OMX_U32 count); 511e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_enable_initial_qp(QOMX_EXTNINDEX_VIDEO_INITIALQP* initqp); 512f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_set_useltr(OMX_U32 frameIdx); 513f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_set_markltr(OMX_U32 frameIdx); 5148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_inband_video_header(OMX_BOOL enable); 5158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_au_delimiter(OMX_BOOL enable); 5168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_hier_layers(QOMX_VIDEO_HIERARCHICALCODINGTYPE type, OMX_U32 num_layers); 5178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_perf_level(QOMX_VIDEO_PERF_LEVEL ePerfLevel); 5188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_vui_timing_info(OMX_BOOL enable); 5198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_peak_bitrate(OMX_U32 nPeakBitrate); 5208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool venc_set_searchrange(); 521f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_set_vpx_error_resilience(OMX_BOOL enable); 522f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_set_perf_mode(OMX_U32 mode); 523e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_mbi_statistics_mode(OMX_U32 mode); 524e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_vqzip_sei_type(OMX_BOOL enable); 525e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_hybrid_hierp(QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE* hhp); 526e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_batch_size(OMX_U32 size); 527f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_calibrate_gop(); 528e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_vqzip_defaults(); 529f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool venc_validate_hybridhp_params(OMX_U32 layers, OMX_U32 bFrames, OMX_U32 count, int mode); 530bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch bool venc_set_hierp_layers(OMX_U32 hierp_layers); 531e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_baselayerid(OMX_U32 baseid); 532e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_qp(OMX_U32 nQp); 533e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_aspectratio(void *nSar); 534e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_priority(OMX_U32 priority); 535eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan bool venc_set_session_priority(OMX_U32 priority); 536dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan bool venc_set_operatingrate(OMX_U32 rate); 537bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch bool venc_set_layer_bitrates(OMX_U32 *pLayerBitrates, OMX_U32 numLayers); 538e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_set_roi_qp_info(OMX_QTI_VIDEO_CONFIG_ROIINFO *roiInfo); 5398a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar OMX_ERRORTYPE venc_set_temporal_layers(OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE *pTemporalParams); 540bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_ERRORTYPE venc_set_temporal_layers_internal(); 541da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan bool venc_set_colorspace(OMX_U32 primaries, OMX_U32 range, OMX_U32 transfer_chars, OMX_U32 matrix_coeffs); 542da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan 543826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 pmem_free(); 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 pmem_allocate(OMX_U32 size, OMX_U32 alignment, OMX_U32 count); 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 venc_allocate_recon_buffers(); 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline int clip2(int x) { 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x -1; 54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 1; 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 2; 55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 4; 55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 16; 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x + 1; 55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return x; 55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int metadatamode; 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool streaming[MAX_PORT]; 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool extradata; 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_t pause_resume_mlock; 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_cond_t pause_resume_cond; 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool paused; 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int color_format; 5658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool is_searchrange_set; 5668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool enable_mv_narrow_searchrange; 567f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan int supported_rc_modes; 568e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool is_thulium_v1; 569f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool camera_mode_enabled; 570e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 571e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool venc_empty_batch (OMX_BUFFERHEADERTYPE *buf, unsigned index); 572e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static const int kMaxBuffersInBatch = 16; 573e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int mBatchSize; 574e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct BatchInfo { 575e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin BatchInfo(); 576e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* register a buffer and obtain its unique id (v4l2-buf-id) 577e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin */ 578e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int registerBuffer(int bufferId); 579e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* retrieve the buffer given its v4l2-buf-id 580e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin */ 581e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int retrieveBufferAt(int v4l2Id); 582e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool isPending(int bufferId); 583e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 584e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin private: 585e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static const int kMaxBufs = 64; 586e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static const int kBufIDFree = -1; 587e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pthread_mutex_t mLock; 588e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int mBufMap[64]; // Map with slots for each buffer 589e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin size_t mNumPending; 590e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 591e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin public: 592e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // utility methods to parse entities in batch 593e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // payload format for batch of 3 594e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //| fd0 | fd1 | fd2 | off0 | off1 | off2 | len0 | len1 | len2 | csc0 | csc1 | csc2 | dTS0 | dTS1 | dTS2| 595e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static inline int getFdAt(native_handle_t *, int index); 596e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static inline int getOffsetAt(native_handle_t *, int index); 597e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static inline int getSizeAt(native_handle_t *, int index); 598e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static inline int getColorFormatAt(native_handle_t *, int index); 599e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static inline int getTimeStampAt(native_handle_t *, int index); 600e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 601e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin BatchInfo mBatchInfo; 60270929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan bool mUseAVTimerTimestamps; 603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 604826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state { 60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_UNINIT_DONE = 0x0001, 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_INIT, 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_INIT_DONE, 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_OPEN, 61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_OPEN_DONE, 61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_LOAD_RESOURCES, 61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_LOAD_RESOURCES_DONE, 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_START, 61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_START_DONE, 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_STOP, 61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_STOP_DONE, 61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_RELEASE_RESOURCES, 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_RELEASE_RESOURCES_DONE, 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CLOSE, 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CLOSE_DONE, 62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_UNINIT, 622826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 623826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 6246eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 625