147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*-------------------------------------------------------------------------- 26eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCopyright (c) 2010-2013, The Linux Foundation. All rights reserved. 347e37c4428509524ee576920a98381f3e4872493Nick Pelly 447e37c4428509524ee576920a98381f3e4872493Nick PellyRedistribution and use in source and binary forms, with or without 547e37c4428509524ee576920a98381f3e4872493Nick Pellymodification, are permitted provided that the following conditions are met: 647e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions of source code must retain the above copyright 747e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer. 847e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions in binary form must reproduce the above copyright 947e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer in the 1047e37c4428509524ee576920a98381f3e4872493Nick Pelly documentation and/or other materials provided with the distribution. 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation nor 1247e37c4428509524ee576920a98381f3e4872493Nick Pelly the names of its contributors may be used to endorse or promote 1347e37c4428509524ee576920a98381f3e4872493Nick Pelly products derived from this software without specific prior written 1447e37c4428509524ee576920a98381f3e4872493Nick Pelly permission. 1547e37c4428509524ee576920a98381f3e4872493Nick Pelly 1647e37c4428509524ee576920a98381f3e4872493Nick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1747e37c4428509524ee576920a98381f3e4872493Nick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1847e37c4428509524ee576920a98381f3e4872493Nick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1947e37c4428509524ee576920a98381f3e4872493Nick PellyNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2047e37c4428509524ee576920a98381f3e4872493Nick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2147e37c4428509524ee576920a98381f3e4872493Nick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2247e37c4428509524ee576920a98381f3e4872493Nick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2347e37c4428509524ee576920a98381f3e4872493Nick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2447e37c4428509524ee576920a98381f3e4872493Nick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2547e37c4428509524ee576920a98381f3e4872493Nick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2647e37c4428509524ee576920a98381f3e4872493Nick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2747e37c4428509524ee576920a98381f3e4872493Nick Pelly--------------------------------------------------------------------------*/ 2847e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "omx_video_encoder.h" 2947e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <string.h> 3047e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "video_encoder_device.h" 3147e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <stdio.h> 32826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 33826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h> 34826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 35826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <cutils/properties.h> 37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef _ANDROID_ 39826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <glib.h> 40826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define strlcpy g_strlcpy 41826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 4247e37c4428509524ee576920a98381f3e4872493Nick Pelly/*---------------------------------------------------------------------------- 4361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Preprocessor Definitions and Constants 4461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * -------------------------------------------------------------------------*/ 4547e37c4428509524ee576920a98381f3e4872493Nick Pelly 4647e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_SPEC_VERSION 0x00000101 4747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_INIT_STRUCT(_s_, _name_) \ 4861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset((_s_), 0x0, sizeof(_name_)); \ 4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan(_s_)->nSize = sizeof(_name_); \ 5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan(_s_)->nVersion.nVersion = OMX_SPEC_VERSION 5147e37c4428509524ee576920a98381f3e4872493Nick Pelly 5247e37c4428509524ee576920a98381f3e4872493Nick Pellyextern int m_pipe; 5347e37c4428509524ee576920a98381f3e4872493Nick Pelly 5447e37c4428509524ee576920a98381f3e4872493Nick Pelly// factory function executed by the core to create instances 5547e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid *get_omx_component_factory_fn(void) 5647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 5761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return(new omx_venc); 5847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 5947e37c4428509524ee576920a98381f3e4872493Nick Pelly 6047e37c4428509524ee576920a98381f3e4872493Nick Pelly//constructor 6147e37c4428509524ee576920a98381f3e4872493Nick Pelly 6247e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_venc::omx_venc() 6347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_mode_enable = false; 6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(meta_buffer_hdr,0,sizeof(meta_buffer_hdr)); 6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(meta_buffers,0,sizeof(meta_buffers)); 6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(opaque_buffer_hdr,0,sizeof(opaque_buffer_hdr)); 6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = false; 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan get_syntaxhdr_enable = false; 71826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 7247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 7347e37c4428509524ee576920a98381f3e4872493Nick Pelly 7447e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_venc::~omx_venc() 7547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan get_syntaxhdr_enable = false; 7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //nothing to do 7847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 7947e37c4428509524ee576920a98381f3e4872493Nick Pelly 8047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 8161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ComponentInit 8347e37c4428509524ee576920a98381f3e4872493Nick Pelly 8461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Initialize the component. 8647e37c4428509524ee576920a98381f3e4872493Nick Pelly 8761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ctxt -- Context information related to the self. 8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan id -- Event identifier. This could be any of the following: 9061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1. Command completion event 9161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2. Buffer done callback event 9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3. Frame done callback event 9347e37c4428509524ee576920a98381f3e4872493Nick Pelly 9461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 9561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 9647e37c4428509524ee576920a98381f3e4872493Nick Pelly 9761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 9847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) 9947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 10047e37c4428509524ee576920a98381f3e4872493Nick Pelly 10161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int fds[2]; 10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int r; 10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CODINGTYPE codec_type; 10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 10861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("\n omx_venc(): Inside component_init()"); 10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Copy the role information which provides the decoder m_nkind 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_nkind,role,OMX_MAX_STRINGNAME_SIZE); 11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char *)m_nkind,"OMX.qcom.video.encoder.mpeg4",\ 11361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.mpeg4",\ 11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE); 11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingMPEG4; 11761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\ 11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE); 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingH263; 12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\ 12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingAVC; 12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1266eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 12761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.vp8", \ 12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE); 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingVPX; 13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1326eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 13361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Unknown Component\n"); 13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidComponentName; 13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 13747e37c4428509524ee576920a98381f3e4872493Nick Pelly 13847e37c4428509524ee576920a98381f3e4872493Nick Pelly 13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet != OMX_ErrorNone) { 14061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef ENABLE_GET_SYNTAX_HDR 14361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan get_syntaxhdr_enable = true; 14461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Get syntax header enabled"); 1456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 14647e37c4428509524ee576920a98381f3e4872493Nick Pelly 14761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan handle = new venc_dev(this); 14861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 14961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle == NULL) { 15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: handle is NULL"); 15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 15247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_open(codec_type) != true) { 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: venc_open failed"); 15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Intialise the OMX layer variables 16061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&m_pCallbacks,0,sizeof(OMX_CALLBACKTYPE)); 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPortParam, OMX_PORT_PARAM_TYPE); 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam.nPorts = 0x2; 16461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam.nStartPortNumber = (OMX_U32) PORT_INDEX_IN; 16561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 16661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPortParam_audio, OMX_PORT_PARAM_TYPE); 16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_audio.nPorts = 0; 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_audio.nStartPortNumber = 0; 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPortParam_img, OMX_PORT_PARAM_TYPE); 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_img.nPorts = 0; 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_img.nStartPortNumber = 0; 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamBitrate, OMX_VIDEO_PARAM_BITRATETYPE); 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.eControlRate = OMX_Video_ControlRateVariableSkipFrames; 17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = 64000; 17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigBitrate, OMX_VIDEO_CONFIG_BITRATETYPE); 18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = 64000; 18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigFramerate, OMX_CONFIG_FRAMERATETYPE); 18461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 18561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.xEncodeFramerate = 30 << 16; 18661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 18761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigIntraRefreshVOP, OMX_CONFIG_INTRAREFRESHVOPTYPE); 18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigIntraRefreshVOP.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 18961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigIntraRefreshVOP.IntraRefreshVOP = OMX_FALSE; 19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 19161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigFrameRotation, OMX_CONFIG_ROTATIONTYPE); 19261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nPortIndex = (OMX_U32) PORT_INDEX_IN; 19361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nRotation = 0; 19461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 19561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sSessionQuantization, OMX_VIDEO_PARAM_QUANTIZATIONTYPE); 19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 19761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpI = 9; 19861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpP = 6; 19961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpB = 2; 20061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 20161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sSessionQPRange, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE); 20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.minQP = 2; 20461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingAVC) 20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.maxQP = 51; 20647e37c4428509524ee576920a98381f3e4872493Nick Pelly else 20761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.maxQP = 31; 20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sAVCSliceFMO, OMX_VIDEO_PARAM_AVCSLICEFMO); 21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.eSliceMode = OMX_VIDEO_SLICEMODE_AVCDefault; 21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.nNumSliceGroups = 0; 21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.nSliceGroupMapType = 0; 21461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamProfileLevel, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 21761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sIntraperiod, QOMX_VIDEO_INTRAPERIODTYPE); 21861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 21961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = (m_sConfigFramerate.xEncodeFramerate * 2) - 1; 22061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 22161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sErrorCorrection, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE); 22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableDataPartitioning = OMX_FALSE; 22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableHEC = OMX_FALSE; 22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableResync = OMX_FALSE; 22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableRVLC = OMX_FALSE; 22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.nResynchMarkerSpacing = 0; 22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sIntraRefresh, OMX_VIDEO_PARAM_INTRAREFRESHTYPE); 23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraRefresh.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraRefresh.eRefreshMode = OMX_VIDEO_IntraRefreshMax; 23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 23361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingMPEG4) { 23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_MPEG4ProfileSimple; 23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_MPEG4Level0; 23661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingH263) { 23761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_H263ProfileBaseline; 23861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_H263Level10; 23961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingAVC) { 24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_AVCProfileBaseline; 24161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_AVCLevel1; 2427beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingVPX) { 2437beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_VP8ProfileMain; 2447beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_VP8Level_Version0; 24547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 24647e37c4428509524ee576920a98381f3e4872493Nick Pelly 24761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the video parameters for input port 24861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sInPortDef, OMX_PARAM_PORTDEFINITIONTYPE); 24961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nPortIndex= (OMX_U32) PORT_INDEX_IN; 25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bEnabled = OMX_TRUE; 25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bPopulated = OMX_FALSE; 25261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.eDomain = OMX_PortDomainVideo; 25361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.eDir = OMX_DirInput; 25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.cMIMEType = "YUV420"; 25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH; 25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT; 25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nStride = OMX_CORE_QCIF_WIDTH; 25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nSliceHeight = OMX_CORE_QCIF_HEIGHT; 25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nBitrate = 64000; 26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.xFramerate = 15 << 16; 2610b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE) 2620b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; 26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; 26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_buf_req(&m_sInPortDef.nBufferCountMin, 26661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferCountActual, 26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferSize, 26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nPortIndex) != true) { 26961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUndefined; 27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 27147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 27261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the video parameters for output port 27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE); 27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bEnabled = OMX_TRUE; 27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bPopulated = OMX_FALSE; 27861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.eDomain = OMX_PortDomainVideo; 27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.eDir = OMX_DirOutput; 28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH; 28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT; 28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nBitrate = 64000; 28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.xFramerate = 15 << 16; 28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eColorFormat = OMX_COLOR_FormatUnused; 28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingMPEG4) { 28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; 28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingH263) { 28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; 2897beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingAVC) { 29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; 2917beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingVPX) { 2927beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingVPX; 29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2947beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano 29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex) != true) { 29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUndefined; 30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the video color format for input port 30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE); 30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_IN; 30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.nIndex = 0; 3060b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE) 3070b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; 30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.eCompressionFormat = OMX_VIDEO_CodingUnused; 30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the compression format for output port 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sOutPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE); 31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.nIndex = 0; 31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eColorFormat = OMX_COLOR_FormatUnused; 31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingMPEG4) { 31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingMPEG4; 31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingH263) { 31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingH263; 3207beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingAVC) { 32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingAVC; 3227beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingVPX) { 3237beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingVPX; 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3267beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano 32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // mandatory Indices for kronos test suite 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPriorityMgmt, OMX_PRIORITYMGMTTYPE); 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sInBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE); 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_IN; 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sOutBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE); 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // mp4 specific init 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamMPEG4, OMX_VIDEO_PARAM_MPEG4TYPE); 33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eProfile = OMX_VIDEO_MPEG4ProfileSimple; 34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel = OMX_VIDEO_MPEG4Level0; 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nSliceHeaderSpacing = 0; 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bSVH = OMX_FALSE; 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bGov = OMX_FALSE; 34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps 34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bACPred = OMX_TRUE; 34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nTimeIncRes = 30; // delta = 2 @ 15 fps 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nAllowedPictureTypes = 2; // pframe and iframe 34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nHeaderExtension = 1; // number of video packet headers per vop 35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bReversibleVLC = OMX_FALSE; 35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // h263 specific init 35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamH263, OMX_VIDEO_PARAM_H263TYPE); 35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nBFrames = 0; 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eProfile = OMX_VIDEO_H263ProfileBaseline; 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel = OMX_VIDEO_H263Level10; 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.bPLUSPTYPEAllowed = OMX_FALSE; 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nAllowedPictureTypes = 2; 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.bForceRoundingTypeToZero = OMX_TRUE; 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPictureHeaderRepetition = 0; 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nGOBHeaderInterval = 1; 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // h264 specific init 36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamAVC, OMX_VIDEO_PARAM_AVCTYPE); 36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nSliceHeaderSpacing = 0; 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nBFrames = 0; 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bUseHadamard = OMX_FALSE; 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nRefFrames = 1; 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nRefIdx10ActiveMinus1 = 1; 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nRefIdx11ActiveMinus1 = 0; 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableUEP = OMX_FALSE; 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableFMO = OMX_FALSE; 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableASO = OMX_FALSE; 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableRS = OMX_FALSE; 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eProfile = OMX_VIDEO_AVCProfileBaseline; 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel = OMX_VIDEO_AVCLevel1; 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nAllowedPictureTypes = 2; 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bFrameMBsOnly = OMX_FALSE; 38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bMBAFF = OMX_FALSE; 38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEntropyCodingCABAC = OMX_FALSE; 38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bWeightedPPrediction = OMX_FALSE; 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nWeightedBipredicitonMode = 0; 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bconstIpred = OMX_FALSE; 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bDirect8x8Inference = OMX_FALSE; 38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bDirectSpatialTemporal = OMX_FALSE; 39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nCabacInitIdc = 0; 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable; 39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3937beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano // VP8 specific init 3947beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_INIT_STRUCT(&m_sParamVP8, OMX_VIDEO_PARAM_VP8TYPE); 3957beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 3967beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eProfile = OMX_VIDEO_VP8ProfileMain; 3977beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel = OMX_VIDEO_VP8Level_Version0; 3987beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.nDCTPartitions = 0; 3997beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.bErrorResilientMode = OMX_FALSE; 4007beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamLTRMode, QOMX_VIDEO_PARAM_LTRMODE_TYPE); 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamLTRMode.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamLTRMode.eLTRMode = QOMX_VIDEO_LTRMode_Disable; 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_state = OMX_StateLoaded; 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sExtraData = 0; 40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pipe(fds)) { 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: pipe creation failed\n"); 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (fds[0] == 0 || fds[1] == 0) { 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pipe(fds)) { 41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: pipe creation failed\n"); 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pipe_in = fds[0]; 42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pipe_out = fds[1]; 42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan msg_thread_created = true; 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan r = pthread_create(&msg_thread_id,0, message_thread, this); 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (r < 0) { 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan msg_thread_created = false; 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan async_thread_created = true; 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan r = pthread_create(&async_thread_id,0, venc_dev::async_venc_message_thread, this); 43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (r < 0) { 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan async_thread_created = false; 43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_set_message_thread_id(async_thread_id); 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 43947e37c4428509524ee576920a98381f3e4872493Nick Pelly 44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("\n Component_init return value = 0x%x", eRet); 44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 44247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 44347e37c4428509524ee576920a98381f3e4872493Nick Pelly 44447e37c4428509524ee576920a98381f3e4872493Nick Pelly 44547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::Setparameter 44847e37c4428509524ee576920a98381f3e4872493Nick Pelly 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Set Parameter method implementation. 45147e37c4428509524ee576920a98381f3e4872493Nick Pelly 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 45447e37c4428509524ee576920a98381f3e4872493Nick Pelly 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if successful. 45747e37c4428509524ee576920a98381f3e4872493Nick Pelly 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 45947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE hComp, 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE paramIndex, 46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR paramData) 46247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 46447e37c4428509524ee576920a98381f3e4872493Nick Pelly 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set Param in Invalid State\n"); 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (paramData == NULL) { 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData \n"); 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*set_parameter can be called in loaded state 47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan or disabled port */ 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateLoaded 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || m_sInPortDef.bEnabled == OMX_FALSE 47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || m_sOutPortDef.bEnabled == OMX_FALSE) { 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Set Parameter called in valid state"); 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State\n"); 48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (paramIndex) { 48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPortDefinition: 48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE *portDefn; 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData; 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPortDefinition H= %d, W = %d\n", 49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (int)portDefn->format.video.nFrameHeight, 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (int)portDefn->format.video.nFrameWidth); 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (PORT_INDEX_IN == portDefn->nPortIndex) { 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!dev_is_video_session_supported(portDefn->format.video.nFrameWidth, 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->format.video.nFrameHeight)) { 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("video session not supported\n"); 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_unsupported_setting(); 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n i/p actual cnt requested = %d\n", portDefn->nBufferCountActual); 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n i/p min cnt requested = %d\n", portDefn->nBufferCountMin); 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n i/p buffersize requested = %d\n", portDefn->nBufferSize); 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) { 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: (In_PORT) Min buffers (%d) > actual count (%d)\n", 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->nBufferCountMin, portDefn->nBufferCountActual); 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) { 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: venc_set_param input failed"); 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n i/p previous actual cnt = %d\n", m_sInPortDef.nBufferCountActual); 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n i/p previous min cnt = %d\n", m_sInPortDef.nBufferCountMin); 51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sInPortDef, portDefn,sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); 518826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 519826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 5200b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan if (portDefn->format.video.eColorFormat == 5210b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) { 5220b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE) 5230b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat) { 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.init()) { 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\n C2D init failed"); 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nC2D init is successful"); 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = true; 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = false; 535826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Query Input Buffer Requirements*/ 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sInPortDef.nBufferCountMin, 53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferCountActual, 53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferSize, 54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nPortIndex); 54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Query ouput Buffer Requirements*/ 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sOutPortDef.nBufferCountMin, 54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nBufferCountActual = portDefn->nBufferCountActual; 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (PORT_INDEX_OUT == portDefn->nPortIndex) { 54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n o/p actual cnt requested = %d\n", portDefn->nBufferCountActual); 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n o/p min cnt requested = %d\n", portDefn->nBufferCountMin); 55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n o/p buffersize requested = %d\n", portDefn->nBufferSize); 55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) { 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: (Out_PORT) Min buffers (%d) > actual count (%d)\n", 55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->nBufferCountMin, portDefn->nBufferCountActual); 55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) { 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: venc_set_param output failed"); 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 5616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Query ouput Buffer Requirements*/ 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 5676eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sOutPortDef,portDefn,sizeof(struct OMX_PARAM_PORTDEFINITIONTYPE)); 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan update_profile_level(); //framerate , bitrate 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n o/p previous actual cnt = %d\n", m_sOutPortDef.nBufferCountActual); 57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n o/p previous min cnt = %d\n", m_sOutPortDef.nBufferCountMin); 57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferCountActual = portDefn->nBufferCountActual; 57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set_parameter: Bad Port idx %d", 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (int)portDefn->nPortIndex); 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.xEncodeFramerate = portDefn->format.video.xFramerate; 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = portDefn->format.video.nBitrate; 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = portDefn->format.video.nBitrate; 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 58447e37c4428509524ee576920a98381f3e4872493Nick Pelly 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoPortFormat: 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt = 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData; 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d\n", 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portFmt->eColorFormat); 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //set the driver with the corresponding values 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (PORT_INDEX_IN == portFmt->nPortIndex) { 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamVideoPortFormat) != true) { 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d\n", 59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portFmt->eColorFormat); 59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan update_profile_level(); //framerate 60047e37c4428509524ee576920a98381f3e4872493Nick Pelly 601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portFmt->eColorFormat == 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) { 6040b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE) 6050b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m; 60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat) { 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.init()) { 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\n C2D init failed"); 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nC2D init is successful"); 61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = true; 61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 616826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.eColorFormat = portFmt->eColorFormat; 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_input_msg_id = OMX_COMPONENT_GENERATE_ETB; 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = false; 62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.xFramerate = portFmt->xFramerate; 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TODO if no use case for O/P port,delet m_sOutPortFormat 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoInit: 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { //TODO, do we need this index set param 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE* pParam = (OMX_PORT_PARAM_TYPE*)(paramData); 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n Set OMX_IndexParamVideoInit called"); 63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 63347e37c4428509524ee576920a98381f3e4872493Nick Pelly 63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoBitrate: 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData; 63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoBitrate"); 63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamVideoBitrate) != true) { 63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = pParam->nTargetBitrate; 64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.eControlRate = pParam->eControlRate; 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan update_profile_level(); //bitrate 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = pParam->nTargetBitrate; 64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nBitrate = pParam->nTargetBitrate; 64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nBitrate = pParam->nTargetBitrate; 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\nbitrate = %u", m_sOutPortDef.format.video.nBitrate); 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoMpeg4: 65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData; 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE mp4_param; 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&mp4_param, pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE)); 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoMpeg4"); 65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 657826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mp4_param.nBFrames = 1; 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 662826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported\n"); 66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mp4_param.nBFrames = 0; 66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 667826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported\n"); 67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mp4_param.nBFrames = 0; 67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&mp4_param,OMX_IndexParamVideoMpeg4) != true) { 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamMPEG4,pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE)); 67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = m_sParamMPEG4.nPFrames; 67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nBFrames = m_sParamMPEG4.nBFrames; 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoH263: 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData; 68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoH263"); 68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamVideoH263) != true) { 68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamH263,pParam, sizeof(struct OMX_VIDEO_PARAM_H263TYPE)); 69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = m_sParamH263.nPFrames; 69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nBFrames = m_sParamH263.nBFrames; 69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoAvc: 69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData; 69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE avc_param; 69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&avc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_AVCTYPE)); 69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoAvc"); 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((pParam->eProfile == OMX_VIDEO_AVCProfileHigh)|| 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (pParam->eProfile == OMX_VIDEO_AVCProfileMain)) { 703826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported"); 70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan avc_param.nBFrames = 1; 70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nRefFrames != 2) { 70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: 2 RefFrames are needed, changing RefFrames from %lu to 2", pParam->nRefFrames); 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan avc_param.nRefFrames = 2; 71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 712826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported\n"); 71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan avc_param.nBFrames = 0; 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nRefFrames != 1) { 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: Only 1 RefFrame is supported, changing RefFrame from %lu to 1)", pParam->nRefFrames); 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan avc_param.nRefFrames = 1; 72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 721826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nRefFrames != 1) { 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: Only 1 RefFrame is supported, changing RefFrame from %lu to 1)", pParam->nRefFrames); 72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan avc_param.nRefFrames = 1; 72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported\n"); 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan avc_param.nBFrames = 0; 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&avc_param,OMX_IndexParamVideoAvc) != true) { 73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamAVC,pParam, sizeof(struct OMX_VIDEO_PARAM_AVCTYPE)); 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = m_sParamAVC.nPFrames; 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nBFrames = m_sParamAVC.nBFrames; 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 7407beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8: 7417beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano { 7427beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData; 7437beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_VIDEO_PARAM_VP8TYPE vp8_param; 7447beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoVp8"); 7457beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano if (pParam->nDCTPartitions != m_sParamVP8.nDCTPartitions || 7467beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano pParam->bErrorResilientMode != m_sParamVP8.bErrorResilientMode) { 7477beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano DEBUG_PRINT_ERROR("VP8 doesn't support nDCTPartitions or bErrorResilientMode"); 7487beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 7497beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano memcpy(&vp8_param, pParam, sizeof( struct OMX_VIDEO_PARAM_VP8TYPE)); 7507beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano if (handle->venc_set_param(&vp8_param, (OMX_INDEXTYPE)OMX_IndexParamVideoVp8) != true) { 7517beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano return OMX_ErrorUnsupportedSetting; 7527beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 7537beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano memcpy(&m_sParamVP8,pParam, sizeof(struct OMX_VIDEO_PARAM_VP8TYPE)); 7547beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano break; 7557beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelCurrent: 75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData; 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoProfileLevelCurrent"); 76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(pParam,OMX_IndexParamVideoProfileLevelCurrent) != true) { 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: OMX_IndexParamVideoProfileLevelCurrent failed for Profile: %lu " 76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "Level :%lu", pParam->eProfile, pParam->eLevel); 76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = pParam->eProfile; 76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = pParam->eLevel; 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\ 76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)m_sParamProfileLevel.eProfile; 77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)m_sParamProfileLevel.eLevel; 77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile, 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel); 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\ 77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)m_sParamProfileLevel.eProfile; 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)m_sParamProfileLevel.eLevel; 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n H263 profile = %d, level = %d", m_sParamH263.eProfile, 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel); 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\ 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile; 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel; 78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile, 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel); 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 7877beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",\ 7887beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_MAX_STRINGNAME_SIZE)) { 7897beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eProfile = (OMX_VIDEO_VP8PROFILETYPE)m_sParamProfileLevel.eProfile; 7907beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel = (OMX_VIDEO_VP8LEVELTYPE)m_sParamProfileLevel.eLevel; 7917beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano DEBUG_PRINT_LOW("\n VP8 profile = %d, level = %d", m_sParamVP8.eProfile, 7927beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel); 7937beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamStandardComponentRole: 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_COMPONENTROLETYPE *comp_role; 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData; 80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamStandardComponentRole %s\n", 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role->cRole); 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_state == OMX_StateLoaded)&& 80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) { 80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Set Parameter called in valid state"); 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Set Parameter called in Invalid State\n"); 80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole); 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE); 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole); 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedSetting; 82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE); 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole); 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 8336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) { 83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) { 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE); 83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole); 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 8426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %s\n", m_nkind); 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidComponentName; 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84947e37c4428509524ee576920a98381f3e4872493Nick Pelly 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPriorityMgmt: 85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt"); 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state != OMX_StateLoaded) { 85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State\n"); 85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PRIORITYMGMTTYPE *priorityMgmtype = (OMX_PRIORITYMGMTTYPE*) paramData; 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt %d\n", 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan priorityMgmtype->nGroupID); 86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: priorityMgmtype %d\n", 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan priorityMgmtype->nGroupPriority); 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPriorityMgmt.nGroupID = priorityMgmtype->nGroupID; 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPriorityMgmt.nGroupPriority = priorityMgmtype->nGroupPriority; 86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 86947e37c4428509524ee576920a98381f3e4872493Nick Pelly 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamCompBufferSupplier: 87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier"); 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData; 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier %d\n", 87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferSupplierType->eBufferSupplier); 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferSupplierType->nPortIndex == 0 || bufferSupplierType->nPortIndex ==1) 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInBufSupplier.eBufferSupplier = bufferSupplierType->eBufferSupplier; 87847e37c4428509524ee576920a98381f3e4872493Nick Pelly 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 88047e37c4428509524ee576920a98381f3e4872493Nick Pelly 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 88247e37c4428509524ee576920a98381f3e4872493Nick Pelly 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 88447e37c4428509524ee576920a98381f3e4872493Nick Pelly 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoQuantization: 88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoQuantization\n"); 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData; 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (session_qp->nPortIndex == PORT_INDEX_OUT) { 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData, OMX_IndexParamVideoQuantization) != true) { 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpI = session_qp->nQpI; 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpP = session_qp->nQpP; 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Unsupported port Index for Session QP setting\n"); 89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90247e37c4428509524ee576920a98381f3e4872493Nick Pelly 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoQPRange: 90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexParamVideoQPRange\n"); 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData; 90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qp_range->nPortIndex == PORT_INDEX_OUT) { 90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData, 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexParamVideoQPRange) != true) { 91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.minQP= qp_range->minQP; 91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.maxQP= qp_range->maxQP; 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Unsupported port Index for QP range setting\n"); 91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 9206eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexPortDefn: 92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PARAM_PORTDEFINITIONTYPE* pParam = 92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_QCOM_PARAM_PORTDEFINITIONTYPE*)paramData; 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexPortDefn"); 92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_IN) { 92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid && 92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMemRegion < OMX_QCOM_MemRegionMax) { 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem = OMX_TRUE; 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem = OMX_FALSE; 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid && 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMemRegion < OMX_QCOM_MemRegionMax) { 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_output_pmem = OMX_TRUE; 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_output_pmem = OMX_FALSE; 93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: SetParameter called on unsupported Port Index for QcomPortDefn"); 94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 946826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoErrorCorrection: 94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection\n"); 95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* pParam = 95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData; 95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, OMX_IndexParamVideoErrorCorrection)) { 95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Request for setting Error Resilience failed"); 95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sErrorCorrection,pParam, sizeof(m_sErrorCorrection)); 95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoIntraRefresh: 96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_param:OMX_IndexParamVideoIntraRefresh\n"); 96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_INTRAREFRESHTYPE* pParam = 96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData; 96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData,OMX_IndexParamVideoIntraRefresh)) { 96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Request for setting intra refresh failed"); 96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sIntraRefresh, pParam, sizeof(m_sIntraRefresh)); 96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 971826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 9728e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava case OMX_QcomIndexParamVideoMetaBufferMode: 973826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan StoreMetaDataInBuffersParams *pParam = 97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (StoreMetaDataInBuffersParams*)paramData; 9768e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava DEBUG_PRINT_HIGH("set_parameter:OMX_QcomIndexParamVideoMetaBufferMode: " 97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "port_index = %lu, meta_mode = %d", pParam->nPortIndex, pParam->bStoreMetaData); 97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_IN) { 97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->bStoreMetaData != meta_mode_enable) { 98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_meta_mode(pParam->bStoreMetaData)) { 98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: set Metabuffer mode %d fail", 98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->bStoreMetaData); 98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_mode_enable = pParam->bStoreMetaData; 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) { 98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nBufferCountActual = m_sInPortDef.nBufferCountMin; 98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&m_sInPortDef,OMX_IndexParamPortDefinition) != true) { 98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: venc_set_param input failed"); 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*TODO: reset encoder driver Meta mode*/ 99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sOutPortDef.nBufferCountMin, 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: metamode is " 100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for input port only"); 100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1005826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 1007826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 10086eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_) 100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamIndexExtraDataType: 101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_parameter: OMX_QcomIndexParamIndexExtraDataType"); 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData; 101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) { 101461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->bEnabled == OMX_TRUE) 101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sExtraData |= VEN_EXTRADATA_SLICEINFO; 101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sExtraData &= ~VEN_EXTRADATA_SLICEINFO; 101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("SliceInfo extradata %s", 102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&m_sExtraData, 102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) != true) { 102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting " 102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_ExtraDataVideoEncoderSliceInfo failed"); 102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex = PORT_INDEX_OUT; 102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%lu, " 103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "count min=%lu, buffer size=%lu", 103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferCountActual, 103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferCountMin, 103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferSize); 103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 10406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) { 104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->bEnabled == OMX_TRUE) 104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sExtraData |= VEN_EXTRADATA_LTRINFO; 104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sExtraData &= ~VEN_EXTRADATA_LTRINFO; 104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("LTRInfo extradata %s", 104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&m_sExtraData, 105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) != true) { 105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting " 105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "OMX_ExtraDataVideoLTRInfo failed"); 105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 105561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex = PORT_INDEX_OUT; 105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 105861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%d, " 106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "count min=%d, buffer size=%d", 106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferCountActual, 106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferCountMin, 106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferSize); 106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: LTR information is " 106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for output port only"); 106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 10726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: unsupported extrdata index (%x)", 107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nIndex); 107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRMode: 108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRMODE_TYPE* pParam = 108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRMODE_TYPE*)paramData; 108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRMode)) { 108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Setting LTR mode failed"); 108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamLTRMode, pParam, sizeof(m_sParamLTRMode)); 108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRCount: 109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRCOUNT_TYPE* pParam = 109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRCOUNT_TYPE*)paramData; 109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRCount)) { 109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Setting LTR count failed"); 109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamLTRCount, pParam, sizeof(m_sParamLTRCount)); 110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoMaxAllowedBitrateCheck: 110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan handle->m_max_allowed_bitrate_check = 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnable == OMX_TRUE) ? true : false); 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_parameter: max allowed bitrate check %s", 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnable == OMX_TRUE) ? "enabled" : "disabled")); 111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexParamVideoMaxAllowedBitrateCheck " 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan " called on wrong port(%lu)", pParam->nPortIndex); 111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1119826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableSliceDeliveryMode: 112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 112361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, 112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode)) { 112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting slice delivery mode failed"); 112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableSliceDeliveryMode " 113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%lu)", pParam->nPortIndex); 113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableH263PlusPType: 113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("OMX_QcomIndexEnableH263PlusPType"); 114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, 114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexEnableH263PlusPType)) { 114661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting PlusPType failed"); 114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 114861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableH263PlusPType " 115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "called on wrong port(%lu)", pParam->nPortIndex); 115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoSliceFMO: 115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 115961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %d\n", paramIndex); 116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 116261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 116547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 116647e37c4428509524ee576920a98381f3e4872493Nick Pelly 1167826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::update_profile_level() 1168826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 eProfile, eLevel; 1170826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_get_profile_level(&eProfile,&eLevel)) { 117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nFailed to update the profile_level\n"); 117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 117561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile; 117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel; 117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\ 118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile; 118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel; 118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile, 118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel); 118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\ 118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)eProfile; 118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)eLevel; 118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n H263 profile = %d, level = %d", m_sParamH263.eProfile, 119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel); 119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\ 119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile; 119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel; 119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile, 119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel); 119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 11987beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.vp8",\ 11997beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_MAX_STRINGNAME_SIZE)) { 12007beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eProfile = (OMX_VIDEO_VP8PROFILETYPE)eProfile; 12017beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel = (OMX_VIDEO_VP8LEVELTYPE)eLevel; 12027beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano DEBUG_PRINT_LOW("\n VP8 profile = %d, level = %d", m_sParamVP8.eProfile, 12037beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel); 12047beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 120747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::SetConfig 121047e37c4428509524ee576920a98381f3e4872493Nick Pelly 121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 121261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Set Config method implementation 121347e37c4428509524ee576920a98381f3e4872493Nick Pelly 121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 121647e37c4428509524ee576920a98381f3e4872493Nick Pelly 121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if successful. 121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 122047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::set_config(OMX_IN OMX_HANDLETYPE hComp, 122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE configIndex, 122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR configData) 122347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (configData == NULL) { 122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: param is null"); 122661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 122747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 122847e37c4428509524ee576920a98381f3e4872493Nick Pelly 122961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: config called in Invalid state"); 123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 1232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 1233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 123461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // params will be validated prior to venc_init 123561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (configIndex) { 123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoBitrate: 123761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 123861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_BITRATETYPE* pParam = 123961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData); 124061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoBitrate (%lu)", pParam->nEncodeBitrate); 124161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 124361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, OMX_IndexConfigVideoBitrate) != true) { 124461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoBitrate failed"); 124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = pParam->nEncodeBitrate; 124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = pParam->nEncodeBitrate; 125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nBitrate = pParam->nEncodeBitrate; 125161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 125261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex); 125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoFramerate: 125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_FRAMERATETYPE* pParam = 126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData); 126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoFramerate (0x%lx)", pParam->xEncodeFramerate); 126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, OMX_IndexConfigVideoFramerate) != true) { 126561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoFramerate failed"); 126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 126761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 126961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.xEncodeFramerate = pParam->xEncodeFramerate; 127061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.xFramerate = pParam->xEncodeFramerate; 127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.xFramerate = pParam->xEncodeFramerate; 127261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex); 127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 127861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoIntraperiod: 128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 128161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_INTRAPERIODTYPE* pParam = 128261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData); 128347e37c4428509524ee576920a98381f3e4872493Nick Pelly 128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): QOMX_IndexConfigVideoIntraperiod"); 128561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_720P 128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames > 0) { 128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("B frames not supported\n"); 128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 129061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Old: P/B frames = %lu/%lu, New: P/B frames = %lu/%lu", 129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames, m_sIntraperiod.nBFrames, 129461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nPFrames, pParam->nBFrames); 129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sIntraperiod.nBFrames != pParam->nBFrames) { 129661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Dynamically changing B-frames not supported"); 129761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, (OMX_INDEXTYPE) QOMX_IndexConfigVideoIntraperiod) != true) { 130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting QOMX_IndexConfigVideoIntraperiod failed"); 130161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 130261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = pParam->nPFrames; 130461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nBFrames = pParam->nBFrames; 130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nIDRPeriod = pParam->nIDRPeriod; 130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nPFrames = pParam->nPFrames; 130961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sParamMPEG4.eProfile != OMX_VIDEO_MPEG4ProfileSimple) 131061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nBFrames = pParam->nBFrames; 131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 131261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nBFrames = 0; 131361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingH263) { 131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPFrames = pParam->nPFrames; 131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nPFrames = pParam->nPFrames; 131761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sParamAVC.eProfile != OMX_VIDEO_AVCProfileBaseline) 131861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nBFrames = pParam->nBFrames; 131961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nBFrames = 0; 132161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 132361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: (QOMX_IndexConfigVideoIntraperiod) Unsupported port index: %lu", pParam->nPortIndex); 132461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 132561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 132761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 132861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 132947e37c4428509524ee576920a98381f3e4872493Nick Pelly 133061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoIntraVOPRefresh: 133161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 133261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_INTRAREFRESHVOPTYPE* pParam = 133361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_INTRAREFRESHVOPTYPE*>(configData); 133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 133561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoIntraVOPRefresh"); 133661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, 133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IndexConfigVideoIntraVOPRefresh) != true) { 133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoIntraVOPRefresh failed"); 134061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 134161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigIntraRefreshVOP.IntraRefreshVOP = pParam->IntraRefreshVOP; 134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex); 134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigCommonRotate: 135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_ROTATIONTYPE *pParam = 135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData); 135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S32 nRotation; 135661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex != PORT_INDEX_IN) { 135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex); 135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 136161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pParam->nRotation == 0 || 136261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nRotation == 90 || 136361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nRotation == 180 || 136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nRotation == 270 ) { 136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("\nset_config: Rotation Angle %lu", pParam->nRotation); 136661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 136761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: un supported Rotation %lu", pParam->nRotation); 136861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 136961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 137061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nRotation = pParam->nRotation - m_sConfigFrameRotation.nRotation; 137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nRotation < 0) 137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nRotation = -nRotation; 137361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nRotation == 90 || nRotation == 270) { 137461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("\nset_config: updating device Dims"); 137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, 137661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IndexConfigCommonRotate) != true) { 137761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonRotate failed"); 137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 138061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 nFrameWidth; 138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("\nset_config: updating port Dims"); 138361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nFrameWidth = m_sInPortDef.format.video.nFrameWidth; 138561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameWidth = 138661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameHeight; 138761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameHeight = nFrameWidth; 138861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 138961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nFrameWidth = 139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameWidth; 139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nFrameHeight = 139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameHeight; 139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nRotation = pParam->nRotation; 139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nRotation = pParam->nRotation; 139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexConfigVideoFramePackingArrangement: 140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_QcomIndexConfigVideoFramePackingArrangement"); 140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingAVC) { 140461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_FRAME_PACK_ARRANGEMENT *configFmt = 140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_QCOM_FRAME_PACK_ARRANGEMENT *) configData; 140661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan extra_data_handle.set_frame_pack_data(configFmt); 140761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FramePackingData not supported for non AVC compression"); 140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 141061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 141161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 141261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRPeriod: 141361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 141461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE*)configData; 141561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRPeriod)) { 141661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Setting LTR period failed"); 141761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 141961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sConfigLTRPeriod, pParam, sizeof(m_sConfigLTRPeriod)); 142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 142261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRUse: 142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRUSE_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRUSE_TYPE*)configData; 142561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRUse)) { 142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: Setting LTR use failed"); 142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sConfigLTRUse, pParam, sizeof(m_sConfigLTRUse)); 143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRMark: 143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRMARK_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRMARK_TYPE*)configData; 143561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Setting ltr mark is not supported"); 143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 143761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoAVCIntraPeriod: 144061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD*) configData; 144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_config: OMX_IndexConfigVideoAVCIntraPeriod"); 144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_IndexConfigVideoAVCIntraPeriod)) { 144461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoAVCIntraPeriod failed"); 144561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sConfigAVCIDRPeriod, pParam, sizeof(m_sConfigAVCIDRPeriod)); 144861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 145161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex); 145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 14536eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 145447e37c4428509524ee576920a98381f3e4872493Nick Pelly 145561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 145647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 145747e37c4428509524ee576920a98381f3e4872493Nick Pelly 145847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 145961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ComponentDeInit 146147e37c4428509524ee576920a98381f3e4872493Nick Pelly 146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Destroys the component and release memory allocated to the heap. 146447e37c4428509524ee576920a98381f3e4872493Nick Pelly 146561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 146661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 146747e37c4428509524ee576920a98381f3e4872493Nick Pelly 146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 146961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 147047e37c4428509524ee576920a98381f3e4872493Nick Pelly 147161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 147247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::component_deinit(OMX_IN OMX_HANDLETYPE hComp) 147347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 147461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 i = 0; 147561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("\n omx_venc(): Inside component_deinit()"); 147661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (OMX_StateLoaded != m_state) { 147761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("WARNING:Rxd DeInit,OMX not in LOADED state %d\n",\ 147861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_state); 147961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Freeing the Output Memory\n"); 148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sOutPortDef.nBufferCountActual; i++ ) { 148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_output_buffer (&m_out_mem_ptr[i]); 148461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_out_mem_ptr); 148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = NULL; 148747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 148847e37c4428509524ee576920a98381f3e4872493Nick Pelly 148961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if the input buffers have to be cleaned up*/ 149061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr 1491826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 149261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && !meta_mode_enable 1493826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 149461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) { 149561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Freeing the Input Memory\n"); 149661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i<m_sInPortDef.nBufferCountActual; i++ ) { 149761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_input_buffer (&m_inp_mem_ptr[i]); 149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 149947e37c4428509524ee576920a98381f3e4872493Nick Pelly 150047e37c4428509524ee576920a98381f3e4872493Nick Pelly 150161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_inp_mem_ptr); 150261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = NULL; 150361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 150447e37c4428509524ee576920a98381f3e4872493Nick Pelly 150561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Reset counters in mesg queues 150661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.m_size=0; 150761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cmd_q.m_size=0; 150861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.m_size=0; 150961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.m_read = m_ftb_q.m_write =0; 151061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cmd_q.m_read = m_cmd_q.m_write =0; 151161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.m_read = m_etb_q.m_write =0; 151247e37c4428509524ee576920a98381f3e4872493Nick Pelly 151347e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_ 151461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Clear the strong reference 151561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Calling m_heap_ptr.clear()\n"); 151661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_heap_ptr.clear(); 151747e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_ 151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Calling venc_close()\n"); 151961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan handle->venc_close(); 152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Deleting HANDLE[%p]\n", handle); 152161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan delete (handle); 152261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("OMX_Venc:Component Deinit\n"); 152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 152447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 152547e37c4428509524ee576920a98381f3e4872493Nick Pelly 152647e37c4428509524ee576920a98381f3e4872493Nick Pelly 152747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_stop( void) 152847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 152961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_stop(); 153047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 153147e37c4428509524ee576920a98381f3e4872493Nick Pelly 153247e37c4428509524ee576920a98381f3e4872493Nick Pelly 153347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_pause(void) 153447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 153561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_pause(); 153647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 153747e37c4428509524ee576920a98381f3e4872493Nick Pelly 153847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_start(void) 153947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_start(); 154147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 154247e37c4428509524ee576920a98381f3e4872493Nick Pelly 154347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_flush(unsigned port) 154447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 154561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_flush(port); 154647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 154747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_resume(void) 154847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 154961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_resume(); 155047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 155147e37c4428509524ee576920a98381f3e4872493Nick Pelly 1552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 omx_venc::dev_start_done(void) 155347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 155461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_start_done(); 1555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15576eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOMX_U32 omx_venc::dev_set_message_thread_id(pthread_t tid) 1558826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 155961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_set_message_thread_id(tid); 1560826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1562826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index) 1563826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 156461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_use_buf(buf_addr,port,index); 156547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 156647e37c4428509524ee576920a98381f3e4872493Nick Pelly 156747e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_free_buf(void *buf_addr,unsigned port) 156847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 156961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_free_buf(buf_addr,port); 157047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 157147e37c4428509524ee576920a98381f3e4872493Nick Pelly 1572826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_empty_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd) 157347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 157461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_empty_buf(buffer, pmem_data_buf,index,fd); 157547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 157647e37c4428509524ee576920a98381f3e4872493Nick Pelly 1577826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_fill_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd) 157847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 157961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_fill_buf(buffer, pmem_data_buf,index,fd); 158047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 158147e37c4428509524ee576920a98381f3e4872493Nick Pelly 1582826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_get_seq_hdr(void *buffer, unsigned size, unsigned *hdrlen) 1583826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 158461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_get_seq_hdr(buffer, size, hdrlen); 1585826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1586826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 15876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_get_capability_ltrcount(OMX_U32 *min, OMX_U32 *max, OMX_U32 *step_size) 15886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 15896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 159061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Get Capability LTR Count is not supported"); 159161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 15926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 159361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_get_capability_ltrcount(min, max, step_size); 15946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 15956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 15966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 1597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start() 1598826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 159961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_start(); 1600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop() 1603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 160461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_stop(); 1605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1606826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1607826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start_done() 1608826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 160961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_start_done(); 1610826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 1611826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1612826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop_done() 1613826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 161461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_stop_done(); 1615826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 161647e37c4428509524ee576920a98381f3e4872493Nick Pelly 161747e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_get_buf_req(OMX_U32 *min_buff_count, 161861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *actual_buff_count, 161961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *buff_size, 162061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port) 162147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 162261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_get_buf_req(min_buff_count, 162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan actual_buff_count, 162461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buff_size, 162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan port); 162647e37c4428509524ee576920a98381f3e4872493Nick Pelly 162747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 162847e37c4428509524ee576920a98381f3e4872493Nick Pelly 162947e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_set_buf_req(OMX_U32 *min_buff_count, 163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *actual_buff_count, 163161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *buff_size, 163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port) 163347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 163461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_set_buf_req(min_buff_count, 163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan actual_buff_count, 163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buff_size, 163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan port); 163847e37c4428509524ee576920a98381f3e4872493Nick Pelly 163947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 164047e37c4428509524ee576920a98381f3e4872493Nick Pelly 16416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_is_video_session_supported(OMX_U32 width, OMX_U32 height) 16426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 16436eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_is_video_session_supported(width,height); 16456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 164661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Check against video capability not supported"); 164761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 16486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 16496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 16506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 16516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 16526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalint omx_venc::dev_handle_extradata(void *buffer, int index) 16536eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 165461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->handle_extradata(buffer, index); 165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 165661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_venc::dev_set_format(int color) 165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_set_format(color); 16606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 16616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 16626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 166347e37c4428509524ee576920a98381f3e4872493Nick Pellyint omx_venc::async_message_process (void *context, void* message) 166447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video* omx = NULL; 166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_msg *m_sVenc_msg = NULL; 166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* omxhdr = NULL; 166861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_buffer *temp_buff = NULL; 166961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 167061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (context == NULL || message == NULL) { 167161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: omx_venc::async_message_process invalid i/p params"); 167261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 167347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 167461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg = (struct venc_msg *)message; 167547e37c4428509524ee576920a98381f3e4872493Nick Pelly 167661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx = reinterpret_cast<omx_video*>(context); 167761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_msg->statuscode != VEN_S_SUCCESS) { 167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: async_msg_process() - Error statuscode = %lu\n", 168061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->statuscode); 168161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->omx_report_error(); 168247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 168361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n omx_venc::async_message_process- msgcode = %d\n", 168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->msgcode); 168661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (m_sVenc_msg->msgcode) { 168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_START: 168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode,\ 168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_START_DONE); 169061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_STOP: 169261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode,\ 169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_STOP_DONE); 169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_RESUME: 169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode,\ 169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_RESUME_DONE); 169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_PAUSE: 170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode,\ 170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_PAUSE_DONE); 170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 170361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_FLUSH_INPUT_DONE: 170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode,\ 170661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH); 170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_FLUSH_OUPUT_DONE: 170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode,\ 171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH); 171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_INPUT_BUFFER_DONE: 171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = (OMX_BUFFERHEADERTYPE* )\ 171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->buf.clientdata; 171561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (omxhdr == NULL || 171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (((OMX_U32)(omxhdr - omx->m_inp_mem_ptr) > omx->m_sInPortDef.nBufferCountActual) && 171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((OMX_U32)(omxhdr - omx->meta_buffer_hdr) > omx->m_sInPortDef.nBufferCountActual))) { 171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = NULL; 172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->statuscode = VEN_S_EFAIL; 172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_ 172461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->omx_release_meta_buffer(omxhdr); 172561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event ((unsigned int)omxhdr,m_sVenc_msg->statuscode, 172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EBD); 172861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_OUTPUT_BUFFER_DONE: 173061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = (OMX_BUFFERHEADERTYPE*)m_sVenc_msg->buf.clientdata; 173161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 173261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (omxhdr != NULL) && 173361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((OMX_U32)(omxhdr - omx->m_out_mem_ptr) < omx->m_sOutPortDef.nBufferCountActual)) { 173461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_msg->buf.len <= omxhdr->nAllocLen) { 173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nFilledLen = m_sVenc_msg->buf.len; 173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nOffset = m_sVenc_msg->buf.offset; 173761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nTimeStamp = m_sVenc_msg->buf.timestamp; 173861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n o/p TS = %u", (OMX_U32)m_sVenc_msg->buf.timestamp); 173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nFlags = m_sVenc_msg->buf.flags; 174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Use buffer case*/ 174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (omx->output_use_buffer && !omx->m_use_output_pmem) { 174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n memcpy() for o/p Heap UseBuffer"); 174461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(omxhdr->pBuffer, 174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sVenc_msg->buf.ptrbuffer), 174661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->buf.len); 174761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 174861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 174961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nFilledLen = 0; 175061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 175161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 175261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 175361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = NULL; 175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->statuscode = VEN_S_EFAIL; 175561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event ((unsigned int)omxhdr,m_sVenc_msg->statuscode, 175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FBD); 175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 175961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_NEED_OUTPUT_BUFFER: 176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TBD what action needs to be done here?? 176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 17626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_LTRUSE_FAILED: 176461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("LTRUSE Failed!"); 176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode, 176661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_LTRUSE_FAILED); 176761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 17686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 176961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 177161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 177347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 1774c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan 1775c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavanbool omx_venc::dev_color_align(OMX_BUFFERHEADERTYPE *buffer, 1776c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan OMX_U32 width, OMX_U32 height) 1777c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan{ 1778c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan return handle->venc_color_align(buffer, width,height); 1779c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan} 1780