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