omx_video_encoder.cpp revision c66f61266df4158140e76c2fab3946dad764eee8
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;
24247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
24347e37c4428509524ee576920a98381f3e4872493Nick Pelly
24461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the video parameters for input port
24561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sInPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
24661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.nPortIndex= (OMX_U32) PORT_INDEX_IN;
24761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.bEnabled = OMX_TRUE;
24861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.bPopulated = OMX_FALSE;
24961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.eDomain = OMX_PortDomainVideo;
25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.eDir = OMX_DirInput;
25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.cMIMEType = "YUV420";
25261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH;
25361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT;
25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nStride = OMX_CORE_QCIF_WIDTH;
25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nSliceHeight = OMX_CORE_QCIF_HEIGHT;
25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nBitrate = 64000;
25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.xFramerate = 15 << 16;
25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.eColorFormat =  OMX_COLOR_FormatYUV420SemiPlanar;
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingUnused;
26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
26161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_get_buf_req(&m_sInPortDef.nBufferCountMin,
26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sInPortDef.nBufferCountActual,
26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sInPortDef.nBufferSize,
26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sInPortDef.nPortIndex) != true) {
26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorUndefined;
26661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
26747e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
26961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the video parameters for output port
27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
27161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
27261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.bEnabled = OMX_TRUE;
27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.bPopulated = OMX_FALSE;
27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.eDomain = OMX_PortDomainVideo;
27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.eDir = OMX_DirOutput;
27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH;
27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT;
27861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.nBitrate = 64000;
27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.xFramerate = 15 << 16;
28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.eColorFormat =  OMX_COLOR_FormatUnused;
28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (codec_type == OMX_VIDEO_CodingMPEG4) {
28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingMPEG4;
28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingH263) {
28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingH263;
28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingAVC;
28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sOutPortDef.nBufferCountActual,
29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sOutPortDef.nBufferSize,
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sOutPortDef.nPortIndex) != true) {
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorUndefined;
29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the video color format for input port
29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_IN;
29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.nIndex = 0;
29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.eColorFormat =  OMX_COLOR_FormatYUV420SemiPlanar;
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.eCompressionFormat = OMX_VIDEO_CodingUnused;
30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the compression format for output port
30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sOutPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
30661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortFormat.nIndex = 0;
30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortFormat.eColorFormat = OMX_COLOR_FormatUnused;
30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (codec_type == OMX_VIDEO_CodingMPEG4) {
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingMPEG4;
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingH263) {
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingH263;
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingAVC;
31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // mandatory Indices for kronos test suite
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sInBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_IN;
32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sOutBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // mp4 specific init
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamMPEG4, OMX_VIDEO_PARAM_MPEG4TYPE);
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.eLevel = OMX_VIDEO_MPEG4Level0;
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nSliceHeaderSpacing = 0;
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bSVH = OMX_FALSE;
33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bGov = OMX_FALSE;
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1);  // 2 second intra period for default outport fps
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bACPred = OMX_TRUE;
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nTimeIncRes = 30; // delta = 2 @ 15 fps
33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nAllowedPictureTypes = 2; // pframe and iframe
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nHeaderExtension = 1; // number of video packet headers per vop
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bReversibleVLC = OMX_FALSE;
34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // h263 specific init
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamH263, OMX_VIDEO_PARAM_H263TYPE);
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nBFrames = 0;
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.eProfile = OMX_VIDEO_H263ProfileBaseline;
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.eLevel = OMX_VIDEO_H263Level10;
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.bPLUSPTYPEAllowed = OMX_FALSE;
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nAllowedPictureTypes = 2;
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.bForceRoundingTypeToZero = OMX_TRUE;
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nPictureHeaderRepetition = 0;
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nGOBHeaderInterval = 1;
35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // h264 specific init
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamAVC, OMX_VIDEO_PARAM_AVCTYPE);
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nSliceHeaderSpacing = 0;
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nBFrames = 0;
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bUseHadamard = OMX_FALSE;
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nRefFrames = 1;
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nRefIdx10ActiveMinus1 = 1;
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nRefIdx11ActiveMinus1 = 0;
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableUEP = OMX_FALSE;
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableFMO = OMX_FALSE;
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableASO = OMX_FALSE;
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableRS = OMX_FALSE;
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.eProfile = OMX_VIDEO_AVCProfileBaseline;
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.eLevel = OMX_VIDEO_AVCLevel1;
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nAllowedPictureTypes = 2;
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bFrameMBsOnly = OMX_FALSE;
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bMBAFF = OMX_FALSE;
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEntropyCodingCABAC = OMX_FALSE;
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bWeightedPPrediction = OMX_FALSE;
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nWeightedBipredicitonMode = 0;
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bconstIpred = OMX_FALSE;
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bDirect8x8Inference = OMX_FALSE;
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bDirectSpatialTemporal = OMX_FALSE;
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nCabacInitIdc = 0;
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable;
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamLTRMode, QOMX_VIDEO_PARAM_LTRMODE_TYPE);
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamLTRMode.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamLTRMode.eLTRMode = QOMX_VIDEO_LTRMode_Disable;
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_state                   = OMX_StateLoaded;
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sExtraData = 0;
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (pipe(fds)) {
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: pipe creation failed\n");
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (fds[0] == 0 || fds[1] == 0) {
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pipe(fds)) {
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: pipe creation failed\n");
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorInsufficientResources;
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eRet == OMX_ErrorNone) {
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pipe_in = fds[0];
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pipe_out = fds[1];
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        msg_thread_created = true;
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        r = pthread_create(&msg_thread_id,0, message_thread, this);
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (r < 0) {
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            msg_thread_created = false;
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            async_thread_created = true;
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            r = pthread_create(&async_thread_id,0, venc_dev::async_venc_message_thread, this);
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (r < 0) {
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInsufficientResources;
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                async_thread_created = false;
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dev_set_message_thread_id(async_thread_id);
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
41947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
42047e37c4428509524ee576920a98381f3e4872493Nick Pelly
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_HIGH("\n Component_init return value = 0x%x", eRet);
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
42347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
42447e37c4428509524ee576920a98381f3e4872493Nick Pelly
42547e37c4428509524ee576920a98381f3e4872493Nick Pelly
42647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::Setparameter
42947e37c4428509524ee576920a98381f3e4872493Nick Pelly
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Set Parameter method implementation.
43247e37c4428509524ee576920a98381f3e4872493Nick Pelly
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
43547e37c4428509524ee576920a98381f3e4872493Nick Pelly
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if successful.
43847e37c4428509524ee576920a98381f3e4872493Nick Pelly
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
44047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE     hComp,
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE paramIndex,
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR        paramData)
44347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
44547e37c4428509524ee576920a98381f3e4872493Nick Pelly
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Set Param in Invalid State\n");
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (paramData == NULL) {
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData \n");
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*set_parameter can be called in loaded state
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      or disabled port */
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateLoaded
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            || m_sInPortDef.bEnabled == OMX_FALSE
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            || m_sOutPortDef.bEnabled == OMX_FALSE) {
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("Set Parameter called in valid state");
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State\n");
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    switch (paramIndex) {
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPortDefinition:
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_PORTDEFINITIONTYPE *portDefn;
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData;
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPortDefinition H= %d, W = %d\n",
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (int)portDefn->format.video.nFrameHeight,
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (int)portDefn->format.video.nFrameWidth);
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (PORT_INDEX_IN == portDefn->nPortIndex) {
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!dev_is_video_session_supported(portDefn->format.video.nFrameWidth,
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                portDefn->format.video.nFrameHeight)) {
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("video session not supported\n");
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        omx_report_unsupported_setting();
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n i/p actual cnt requested = %d\n", portDefn->nBufferCountActual);
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n i/p min cnt requested = %d\n", portDefn->nBufferCountMin);
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n i/p buffersize requested = %d\n", portDefn->nBufferSize);
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) {
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("\nERROR: (In_PORT) Min buffers (%d) > actual count (%d)\n",
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                portDefn->nBufferCountMin, portDefn->nBufferCountActual);
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) {
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("\nERROR: venc_set_param input failed");
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n i/p previous actual cnt = %d\n", m_sInPortDef.nBufferCountActual);
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n i/p previous min cnt = %d\n", m_sInPortDef.nBufferCountMin);
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(&m_sInPortDef, portDefn,sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
499826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
500826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portDefn->format.video.eColorFormat == (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) {
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sInPortDef.format.video.eColorFormat =
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_COLOR_FormatYUV420SemiPlanar;
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (!mUseProxyColorFormat) {
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!c2d_conv.init()) {
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("\n C2D init failed");
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                return OMX_ErrorUnsupportedSetting;
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_ERROR("\nC2D init is successful");
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = true;
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ;
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = false;
515826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Query Input Buffer Requirements*/
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    dev_get_buf_req   (&m_sInPortDef.nBufferCountMin,
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sInPortDef.nBufferCountActual,
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sInPortDef.nBufferSize,
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.nPortIndex);
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Query ouput Buffer Requirements*/
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    dev_get_buf_req   (&m_sOutPortDef.nBufferCountMin,
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferCountActual,
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferSize,
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex);
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sInPortDef.nBufferCountActual = portDefn->nBufferCountActual;
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (PORT_INDEX_OUT == portDefn->nPortIndex) {
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n o/p actual cnt requested = %d\n", portDefn->nBufferCountActual);
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n o/p min cnt requested = %d\n", portDefn->nBufferCountMin);
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n o/p buffersize requested = %d\n", portDefn->nBufferSize);
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) {
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("\nERROR: (Out_PORT) Min buffers (%d) > actual count (%d)\n",
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                portDefn->nBufferCountMin, portDefn->nBufferCountActual);
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) {
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("\nERROR: venc_set_param output failed");
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
5416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
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);
5476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(&m_sOutPortDef,portDefn,sizeof(struct OMX_PARAM_PORTDEFINITIONTYPE));
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    update_profile_level(); //framerate , bitrate
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n o/p previous actual cnt = %d\n", m_sOutPortDef.nBufferCountActual);
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n o/p previous min cnt = %d\n", m_sOutPortDef.nBufferCountMin);
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortDef.nBufferCountActual = portDefn->nBufferCountActual;
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Set_parameter: Bad Port idx %d",
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (int)portDefn->nPortIndex);
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sConfigFramerate.xEncodeFramerate = portDefn->format.video.xFramerate;
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sConfigBitrate.nEncodeBitrate = portDefn->format.video.nBitrate;
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamBitrate.nTargetBitrate = portDefn->format.video.nBitrate;
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
56447e37c4428509524ee576920a98381f3e4872493Nick Pelly
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoPortFormat:
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt =
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData;
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d\n",
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        portFmt->eColorFormat);
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //set the driver with the corresponding values
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (PORT_INDEX_IN == portFmt->nPortIndex) {
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,OMX_IndexParamVideoPortFormat) != true) {
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d\n",
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            portFmt->eColorFormat);
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    update_profile_level(); //framerate
58047e37c4428509524ee576920a98381f3e4872493Nick Pelly
581826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portFmt->eColorFormat ==
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) {
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sInPortFormat.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (!mUseProxyColorFormat) {
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!c2d_conv.init()) {
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("\n C2D init failed");
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                return OMX_ErrorUnsupportedSetting;
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_ERROR("\nC2D init is successful");
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = true;
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ;
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else
595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    {
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sInPortFormat.eColorFormat = portFmt->eColorFormat;
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_input_msg_id = OMX_COMPONENT_GENERATE_ETB;
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = false;
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sInPortFormat.xFramerate = portFmt->xFramerate;
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //TODO if no use case for O/P port,delet m_sOutPortFormat
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoInit:
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            { //TODO, do we need this index set param
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE* pParam = (OMX_PORT_PARAM_TYPE*)(paramData);
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("\n Set OMX_IndexParamVideoInit called");
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
61247e37c4428509524ee576920a98381f3e4872493Nick Pelly
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoBitrate:
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData;
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoBitrate");
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(paramData,OMX_IndexParamVideoBitrate) != true) {
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamBitrate.nTargetBitrate = pParam->nTargetBitrate;
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamBitrate.eControlRate = pParam->eControlRate;
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                update_profile_level(); //bitrate
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sConfigBitrate.nEncodeBitrate = pParam->nTargetBitrate;
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sInPortDef.format.video.nBitrate = pParam->nTargetBitrate;
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sOutPortDef.format.video.nBitrate = pParam->nTargetBitrate;
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("\nbitrate = %u", m_sOutPortDef.format.video.nBitrate);
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoMpeg4:
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData;
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_MPEG4TYPE mp4_param;
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&mp4_param, pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE));
63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoMpeg4");
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) {
636826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported");
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mp4_param.nBFrames = 1;
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
641826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mp4_param.nBFrames = 0;
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
646826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mp4_param.nBFrames = 0;
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(&mp4_param,OMX_IndexParamVideoMpeg4) != true) {
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamMPEG4,pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE));
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nPFrames = m_sParamMPEG4.nPFrames;
65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nBFrames = m_sParamMPEG4.nBFrames;
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoH263:
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData;
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoH263");
66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(paramData,OMX_IndexParamVideoH263) != true) {
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamH263,pParam, sizeof(struct OMX_VIDEO_PARAM_H263TYPE));
66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nPFrames = m_sParamH263.nPFrames;
67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nBFrames = m_sParamH263.nBFrames;
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoAvc:
67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData;
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_AVCTYPE avc_param;
67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&avc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_AVCTYPE));
67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoAvc");
67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ((pParam->eProfile == OMX_VIDEO_AVCProfileHigh)||
68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (pParam->eProfile == OMX_VIDEO_AVCProfileMain)) {
682826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported");
68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        avc_param.nBFrames = 1;
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nRefFrames != 2) {
68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: 2 RefFrames are needed, changing RefFrames from %lu to 2", pParam->nRefFrames);
68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        avc_param.nRefFrames = 2;
69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
691826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        avc_param.nBFrames = 0;
69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nRefFrames != 1) {
69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: Only 1 RefFrame is supported, changing RefFrame from %lu to 1)", pParam->nRefFrames);
69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        avc_param.nRefFrames = 1;
69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
700826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nRefFrames != 1) {
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: Only 1 RefFrame is supported, changing RefFrame from %lu to 1)", pParam->nRefFrames);
70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        avc_param.nRefFrames = 1;
70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        avc_param.nBFrames = 0;
70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(&avc_param,OMX_IndexParamVideoAvc) != true) {
71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamAVC,pParam, sizeof(struct OMX_VIDEO_PARAM_AVCTYPE));
71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nPFrames = m_sParamAVC.nPFrames;
71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nBFrames = m_sParamAVC.nBFrames;
71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoProfileLevelCurrent:
72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoProfileLevelCurrent");
72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(pParam,OMX_IndexParamVideoProfileLevelCurrent) != true) {
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("set_parameter: OMX_IndexParamVideoProfileLevelCurrent failed for Profile: %lu "
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            "Level :%lu", pParam->eProfile, pParam->eLevel);
72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamProfileLevel.eProfile = pParam->eProfile;
72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamProfileLevel.eLevel = pParam->eLevel;
73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\
73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)m_sParamProfileLevel.eProfile;
73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)m_sParamProfileLevel.eLevel;
73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile,
73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamMPEG4.eLevel);
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)m_sParamProfileLevel.eProfile;
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)m_sParamProfileLevel.eLevel;
74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n H263 profile = %d, level = %d", m_sParamH263.eProfile,
74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamH263.eLevel);
74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile;
74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel;
74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile,
74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamAVC.eLevel);
74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamStandardComponentRole:
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_COMPONENTROLETYPE *comp_role;
75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData;
75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamStandardComponentRole %s\n",
75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        comp_role->cRole);
75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ((m_state == OMX_StateLoaded)&&
76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) {
76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("Set Parameter called in valid state");
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("Set Parameter called in Invalid State\n");
76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorIncorrectStateOperation;
76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUnsupportedSetting;
78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE);
78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
7896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) {
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) {
79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE);
79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
7986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %s\n", m_nkind);
80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorInvalidComponentName;
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
80547e37c4428509524ee576920a98381f3e4872493Nick Pelly
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPriorityMgmt:
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt");
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_state != OMX_StateLoaded) {
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State\n");
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorIncorrectStateOperation;
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PRIORITYMGMTTYPE *priorityMgmtype = (OMX_PRIORITYMGMTTYPE*) paramData;
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt %d\n",
81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        priorityMgmtype->nGroupID);
81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: priorityMgmtype %d\n",
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        priorityMgmtype->nGroupPriority);
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sPriorityMgmt.nGroupID = priorityMgmtype->nGroupID;
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sPriorityMgmt.nGroupPriority = priorityMgmtype->nGroupPriority;
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
82547e37c4428509524ee576920a98381f3e4872493Nick Pelly
82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamCompBufferSupplier:
82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier");
82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData;
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier %d\n",
83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        bufferSupplierType->eBufferSupplier);
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (bufferSupplierType->nPortIndex == 0 || bufferSupplierType->nPortIndex ==1)
83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sInBufSupplier.eBufferSupplier = bufferSupplierType->eBufferSupplier;
83447e37c4428509524ee576920a98381f3e4872493Nick Pelly
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else
83647e37c4428509524ee576920a98381f3e4872493Nick Pelly
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
83847e37c4428509524ee576920a98381f3e4872493Nick Pelly
83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
84047e37c4428509524ee576920a98381f3e4872493Nick Pelly
84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoQuantization:
84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoQuantization\n");
84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData;
84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (session_qp->nPortIndex == PORT_INDEX_OUT) {
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData, OMX_IndexParamVideoQuantization) != true) {
84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQuantization.nQpI = session_qp->nQpI;
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQuantization.nQpP = session_qp->nQpP;
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Unsupported port Index for Session QP setting\n");
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
85847e37c4428509524ee576920a98381f3e4872493Nick Pelly
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoQPRange:
86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexParamVideoQPRange\n");
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData;
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (qp_range->nPortIndex == PORT_INDEX_OUT) {
86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,
86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexParamVideoQPRange) != true) {
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQPRange.minQP= qp_range->minQP;
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQPRange.maxQP= qp_range->maxQP;
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Unsupported port Index for QP range setting\n");
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
8766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexPortDefn:
87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PARAM_PORTDEFINITIONTYPE* pParam =
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_QCOM_PARAM_PORTDEFINITIONTYPE*)paramData;
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexPortDefn");
88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_IN) {
88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid &&
88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nMemRegion < OMX_QCOM_MemRegionMax) {
88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_input_pmem = OMX_TRUE;
88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_input_pmem = OMX_FALSE;
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_OUT) {
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid &&
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nMemRegion < OMX_QCOM_MemRegionMax) {
89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_output_pmem = OMX_TRUE;
89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_output_pmem = OMX_FALSE;
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: SetParameter called on unsupported Port Index for QcomPortDefn");
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
902826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoErrorCorrection:
90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection\n");
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* pParam =
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData;
90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData, OMX_IndexParamVideoErrorCorrection)) {
90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Request for setting Error Resilience failed");
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sErrorCorrection,pParam, sizeof(m_sErrorCorrection));
91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoIntraRefresh:
91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_param:OMX_IndexParamVideoIntraRefresh\n");
91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_INTRAREFRESHTYPE* pParam =
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData;
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData,OMX_IndexParamVideoIntraRefresh)) {
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Request for setting intra refresh failed");
92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sIntraRefresh, pParam, sizeof(m_sIntraRefresh));
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
927826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoEncodeMetaBufferMode:
929826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            {
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                StoreMetaDataInBuffersParams *pParam =
93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (StoreMetaDataInBuffersParams*)paramData;
93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_parameter:OMX_QcomIndexParamVideoEncodeMetaBufferMode: "
93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        "port_index = %lu, meta_mode = %d", pParam->nPortIndex, pParam->bStoreMetaData);
93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_IN) {
93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->bStoreMetaData != meta_mode_enable) {
93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (!handle->venc_set_meta_mode(pParam->bStoreMetaData)) {
93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_ERROR("\nERROR: set Metabuffer mode %d fail",
93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pParam->bStoreMetaData);
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            return OMX_ErrorUnsupportedSetting;
94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        meta_mode_enable = pParam->bStoreMetaData;
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (meta_mode_enable) {
94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.nBufferCountActual = m_sInPortDef.nBufferCountMin;
94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (handle->venc_set_param(&m_sInPortDef,OMX_IndexParamPortDefinition) != true) {
94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("\nERROR: venc_set_param input failed");
94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                return OMX_ErrorUnsupportedSetting;
94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            /*TODO: reset encoder driver Meta mode*/
95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            dev_get_buf_req   (&m_sOutPortDef.nBufferCountMin,
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferCountActual,
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferSize,
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nPortIndex);
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("set_parameter: metamode is "
95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            "valid for input port only");
95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
961826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
963826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
9646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_)
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamIndexExtraDataType:
96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_parameter: OMX_QcomIndexParamIndexExtraDataType");
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData;
96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) {
97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (pParam->bEnabled == OMX_TRUE)
97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sExtraData |= VEN_EXTRADATA_SLICEINFO;
97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        else
97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sExtraData &= ~VEN_EXTRADATA_SLICEINFO;
97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("SliceInfo extradata %s",
97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (handle->venc_set_param(&m_sExtraData,
97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) != true) {
97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_ERROR("ERROR: Setting "
98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    "OMX_ExtraDataVideoEncoderSliceInfo failed");
98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            return OMX_ErrorUnsupportedSetting;
98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex = PORT_INDEX_OUT;
98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferCountActual,
98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferSize,
98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nPortIndex);
98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%lu, "
98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    "count min=%lu, buffer size=%lu",
99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nBufferCountActual,
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nBufferCountMin,
99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nBufferSize);
99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
9966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) {
99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (pParam->bEnabled == OMX_TRUE)
100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sExtraData |= VEN_EXTRADATA_LTRINFO;
100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        else
100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sExtraData &= ~VEN_EXTRADATA_LTRINFO;
100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("LTRInfo extradata %s",
100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (handle->venc_set_param(&m_sExtraData,
100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) != true) {
100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_ERROR("ERROR: Setting "
100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    "OMX_ExtraDataVideoLTRInfo failed");
100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            return OMX_ErrorUnsupportedSetting;
101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex = PORT_INDEX_OUT;
101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferCountActual,
101461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferSize,
101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nPortIndex);
101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%d, "
101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    "count min=%d, buffer size=%d",
101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nBufferCountActual,
101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nBufferCountMin,
102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nBufferSize);
102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("set_parameter: LTR information is "
102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                "valid for output port only");
102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
10286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("set_parameter: unsupported extrdata index (%x)",
103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nIndex);
103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoLTRMode:
103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_PARAM_LTRMODE_TYPE* pParam =
103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_VIDEO_PARAM_LTRMODE_TYPE*)paramData;
104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRMode)) {
104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Setting LTR mode failed");
104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamLTRMode, pParam, sizeof(m_sParamLTRMode));
104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoLTRCount:
104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_PARAM_LTRCOUNT_TYPE* pParam =
105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_VIDEO_PARAM_LTRCOUNT_TYPE*)paramData;
105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRCount)) {
105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Setting LTR count failed");
105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
105561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamLTRCount, pParam, sizeof(m_sParamLTRCount));
105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1058826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoMaxAllowedBitrateCheck:
106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    handle->m_max_allowed_bitrate_check =
106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ((pParam->bEnable == OMX_TRUE) ? true : false);
106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_HIGH("set_parameter: max allowed bitrate check %s",
106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            ((pParam->bEnable == OMX_TRUE) ? "enabled" : "disabled"));
106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexParamVideoMaxAllowedBitrateCheck "
107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            " called on wrong port(%lu)", pParam->nPortIndex);
107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1075826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexEnableSliceDeliveryMode:
107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!handle->venc_set_param(paramData,
108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode)) {
108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Request for setting slice delivery mode failed");
108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableSliceDeliveryMode "
108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            "called on wrong port(%lu)", pParam->nPortIndex);
108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1093826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexEnableH263PlusPType:
109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("OMX_QcomIndexEnableH263PlusPType");
109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!handle->venc_set_param(paramData,
110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexEnableH263PlusPType)) {
110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Request for setting PlusPType failed");
110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableH263PlusPType "
110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            "called on wrong port(%lu)", pParam->nPortIndex);
110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoSliceFMO:
111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %d\n", paramIndex);
111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorUnsupportedIndex;
111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
111947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
112147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
112247e37c4428509524ee576920a98381f3e4872493Nick Pelly
1123826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::update_profile_level()
1124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U32 eProfile, eLevel;
1126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!handle->venc_get_profile_level(&eProfile,&eLevel)) {
112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("\nFailed to update the profile_level\n");
112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamProfileLevel.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile;
113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamProfileLevel.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel;
113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\
113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
113761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile;
113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel;
113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("\n MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile,
114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamMPEG4.eLevel);
114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)eProfile;
114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)eLevel;
114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("\n H263 profile = %d, level = %d", m_sParamH263.eProfile,
114661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamH263.eLevel);
114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
114861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile;
115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel;
115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile,
115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamAVC.eLevel);
115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return true;
1155826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
115647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::SetConfig
115947e37c4428509524ee576920a98381f3e4872493Nick Pelly
116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Set Config method implementation
116247e37c4428509524ee576920a98381f3e4872493Nick Pelly
116361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
116547e37c4428509524ee576920a98381f3e4872493Nick Pelly
116661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if successful.
116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
116947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::set_config(OMX_IN OMX_HANDLETYPE      hComp,
117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE configIndex,
117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR        configData)
117247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (configData == NULL) {
117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: param is null");
117561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
117647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
117747e37c4428509524ee576920a98381f3e4872493Nick Pelly
117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: config called in Invalid state");
118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
1181826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
1182826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // params will be validated prior to venc_init
118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    switch (configIndex) {
118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoBitrate:
118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_BITRATETYPE* pParam =
118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData);
118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoBitrate (%lu)", pParam->nEncodeBitrate);
119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData, OMX_IndexConfigVideoBitrate) != true) {
119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoBitrate failed");
119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigBitrate.nEncodeBitrate = pParam->nEncodeBitrate;
119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamBitrate.nTargetBitrate = pParam->nEncodeBitrate;
119961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortDef.format.video.nBitrate = pParam->nEncodeBitrate;
120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex);
120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoFramerate:
120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_FRAMERATETYPE* pParam =
120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData);
121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoFramerate (0x%lx)", pParam->xEncodeFramerate);
121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
121261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData, OMX_IndexConfigVideoFramerate) != true) {
121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoFramerate failed");
121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
121661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigFramerate.xEncodeFramerate = pParam->xEncodeFramerate;
121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortDef.format.video.xFramerate = pParam->xEncodeFramerate;
122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortFormat.xFramerate = pParam->xEncodeFramerate;
122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex);
122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
122661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoIntraperiod:
122961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_INTRAPERIODTYPE* pParam =
123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData);
123247e37c4428509524ee576920a98381f3e4872493Nick Pelly
123361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): QOMX_IndexConfigVideoIntraperiod");
123461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
123561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_720P
123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames > 0) {
123761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("B frames not supported\n");
123861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
123961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
124061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
124161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_HIGH("Old: P/B frames = %lu/%lu, New: P/B frames = %lu/%lu",
124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sIntraperiod.nPFrames, m_sIntraperiod.nBFrames,
124361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nPFrames, pParam->nBFrames);
124461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (m_sIntraperiod.nBFrames != pParam->nBFrames) {
124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("Dynamically changing B-frames not supported");
124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData, (OMX_INDEXTYPE) QOMX_IndexConfigVideoIntraperiod) != true) {
124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting QOMX_IndexConfigVideoIntraperiod failed");
125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
125161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
125261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sIntraperiod.nPFrames = pParam->nPFrames;
125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sIntraperiod.nBFrames = pParam->nBFrames;
125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sIntraperiod.nIDRPeriod = pParam->nIDRPeriod;
125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sParamMPEG4.nPFrames = pParam->nPFrames;
125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (m_sParamMPEG4.eProfile != OMX_VIDEO_MPEG4ProfileSimple)
125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamMPEG4.nBFrames = pParam->nBFrames;
126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        else
126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamMPEG4.nBFrames = 0;
126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingH263) {
126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sParamH263.nPFrames = pParam->nPFrames;
126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
126561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sParamAVC.nPFrames = pParam->nPFrames;
126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (m_sParamAVC.eProfile != OMX_VIDEO_AVCProfileBaseline)
126761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamAVC.nBFrames = pParam->nBFrames;
126861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        else
126961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamAVC.nBFrames = 0;
127061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
127261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: (QOMX_IndexConfigVideoIntraperiod) Unsupported port index: %lu", pParam->nPortIndex);
127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
127661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
127847e37c4428509524ee576920a98381f3e4872493Nick Pelly
127961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoIntraVOPRefresh:
128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
128161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_INTRAREFRESHVOPTYPE* pParam =
128261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_CONFIG_INTRAREFRESHVOPTYPE*>(configData);
128361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoIntraVOPRefresh");
128561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData,
128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                OMX_IndexConfigVideoIntraVOPRefresh) != true) {
128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoIntraVOPRefresh failed");
128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
129061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
129161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigIntraRefreshVOP.IntraRefreshVOP = pParam->IntraRefreshVOP;
129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
129461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex);
129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
129661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
129761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigCommonRotate:
130161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
130261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_ROTATIONTYPE *pParam =
130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData);
130461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_S32 nRotation;
130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex != PORT_INDEX_IN) {
130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %lu", pParam->nPortIndex);
130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
130961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
131061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( pParam->nRotation == 0   ||
131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nRotation == 90  ||
131261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nRotation == 180 ||
131361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nRotation == 270 ) {
131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_HIGH("\nset_config: Rotation Angle %lu", pParam->nRotation);
131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: un supported Rotation %lu", pParam->nRotation);
131761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
131861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
131961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                nRotation = pParam->nRotation - m_sConfigFrameRotation.nRotation;
132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (nRotation < 0)
132161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    nRotation = -nRotation;
132261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (nRotation == 90 || nRotation == 270) {
132361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_HIGH("\nset_config: updating device Dims");
132461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData,
132561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                OMX_IndexConfigCommonRotate) != true) {
132661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonRotate failed");
132761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
132861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
132961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_U32 nFrameWidth;
133061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
133161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("\nset_config: updating port Dims");
133261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
133361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        nFrameWidth = m_sInPortDef.format.video.nFrameWidth;
133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sInPortDef.format.video.nFrameWidth =
133561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.format.video.nFrameHeight;
133661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sInPortDef.format.video.nFrameHeight = nFrameWidth;
133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sOutPortDef.format.video.nFrameWidth  =
133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.format.video.nFrameWidth;
134061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sOutPortDef.format.video.nFrameHeight =
134161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.format.video.nFrameHeight;
134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sConfigFrameRotation.nRotation = pParam->nRotation;
134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigFrameRotation.nRotation = pParam->nRotation;
134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexConfigVideoFramePackingArrangement:
135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_QcomIndexConfigVideoFramePackingArrangement");
135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingAVC) {
135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_QCOM_FRAME_PACK_ARRANGEMENT *configFmt =
135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (OMX_QCOM_FRAME_PACK_ARRANGEMENT *) configData;
135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    extra_data_handle.set_frame_pack_data(configFmt);
135661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: FramePackingData not supported for non AVC compression");
135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
136161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoLTRPeriod:
136261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
136361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE*)configData;
136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRPeriod)) {
136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Setting LTR period failed");
136661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
136761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
136861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sConfigLTRPeriod, pParam, sizeof(m_sConfigLTRPeriod));
136961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
137061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoLTRUse:
137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
137361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_CONFIG_LTRUSE_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRUSE_TYPE*)configData;
137461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRUse)) {
137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("\nERROR: Setting LTR use failed");
137661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
137761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sConfigLTRUse, pParam, sizeof(m_sConfigLTRUse));
137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
138061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoLTRMark:
138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
138361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_CONFIG_LTRMARK_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRMARK_TYPE*)configData;
138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("Setting ltr mark is not supported");
138561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorUnsupportedSetting;
138661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
138761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
138861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoAVCIntraPeriod:
138961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD*) configData;
139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_config: OMX_IndexConfigVideoAVCIntraPeriod");
139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_IndexConfigVideoAVCIntraPeriod)) {
139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoAVCIntraPeriod failed");
139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sConfigAVCIDRPeriod, pParam, sizeof(m_sConfigAVCIDRPeriod));
139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex);
140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
14026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    }
140347e37c4428509524ee576920a98381f3e4872493Nick Pelly
140461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
140547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
140647e37c4428509524ee576920a98381f3e4872493Nick Pelly
140747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ComponentDeInit
141047e37c4428509524ee576920a98381f3e4872493Nick Pelly
141161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
141261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Destroys the component and release memory allocated to the heap.
141347e37c4428509524ee576920a98381f3e4872493Nick Pelly
141461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
141561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
141647e37c4428509524ee576920a98381f3e4872493Nick Pelly
141761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
141947e37c4428509524ee576920a98381f3e4872493Nick Pelly
142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
142147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::component_deinit(OMX_IN OMX_HANDLETYPE hComp)
142247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U32 i = 0;
142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_HIGH("\n omx_venc(): Inside component_deinit()");
142561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (OMX_StateLoaded != m_state) {
142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("WARNING:Rxd DeInit,OMX not in LOADED state %d\n",\
142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_state);
142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr) {
143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("Freeing the Output Memory\n");
143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i< m_sOutPortDef.nBufferCountActual; i++ ) {
143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_output_buffer (&m_out_mem_ptr[i]);
143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        free(m_out_mem_ptr);
143561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_out_mem_ptr = NULL;
143647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
143747e37c4428509524ee576920a98381f3e4872493Nick Pelly
143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if the input buffers have to be cleaned up*/
143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr
1440826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            && !meta_mode_enable
1442826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan       ) {
144461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("Freeing the Input Memory\n");
144561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i<m_sInPortDef.nBufferCountActual; i++ ) {
144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_input_buffer (&m_inp_mem_ptr[i]);
144761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
144847e37c4428509524ee576920a98381f3e4872493Nick Pelly
144947e37c4428509524ee576920a98381f3e4872493Nick Pelly
145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        free(m_inp_mem_ptr);
145161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = NULL;
145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
145347e37c4428509524ee576920a98381f3e4872493Nick Pelly
145461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Reset counters in mesg queues
145561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_ftb_q.m_size=0;
145661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_cmd_q.m_size=0;
145761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_q.m_size=0;
145861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_ftb_q.m_read = m_ftb_q.m_write =0;
145961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_cmd_q.m_read = m_cmd_q.m_write =0;
146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_q.m_read = m_etb_q.m_write =0;
146147e37c4428509524ee576920a98381f3e4872493Nick Pelly
146247e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_
146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Clear the strong reference
146461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_HIGH("Calling m_heap_ptr.clear()\n");
146561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_heap_ptr.clear();
146647e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_
146761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_HIGH("Calling venc_close()\n");
146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    handle->venc_close();
146961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_HIGH("Deleting HANDLE[%p]\n", handle);
147061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    delete (handle);
147161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_HIGH("OMX_Venc:Component Deinit\n");
147261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
147347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
147447e37c4428509524ee576920a98381f3e4872493Nick Pelly
147547e37c4428509524ee576920a98381f3e4872493Nick Pelly
147647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_stop( void)
147747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
147861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_stop();
147947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
148047e37c4428509524ee576920a98381f3e4872493Nick Pelly
148147e37c4428509524ee576920a98381f3e4872493Nick Pelly
148247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_pause(void)
148347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
148461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_pause();
148547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
148647e37c4428509524ee576920a98381f3e4872493Nick Pelly
148747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_start(void)
148847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
148961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_start();
149047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
149147e37c4428509524ee576920a98381f3e4872493Nick Pelly
149247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_flush(unsigned port)
149347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
149461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_flush(port);
149547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
149647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_resume(void)
149747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_resume();
149947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
150047e37c4428509524ee576920a98381f3e4872493Nick Pelly
1501826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 omx_venc::dev_start_done(void)
150247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
150361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_start_done();
1504826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1505826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
15066eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOMX_U32 omx_venc::dev_set_message_thread_id(pthread_t tid)
1507826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
150861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_set_message_thread_id(tid);
1509826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1510826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1511826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index)
1512826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
151361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_use_buf(buf_addr,port,index);
151447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
151547e37c4428509524ee576920a98381f3e4872493Nick Pelly
151647e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_free_buf(void *buf_addr,unsigned port)
151747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_free_buf(buf_addr,port);
151947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
152047e37c4428509524ee576920a98381f3e4872493Nick Pelly
1521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_empty_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd)
152247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return  handle->venc_empty_buf(buffer, pmem_data_buf,index,fd);
152447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
152547e37c4428509524ee576920a98381f3e4872493Nick Pelly
1526826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_fill_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd)
152747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_fill_buf(buffer, pmem_data_buf,index,fd);
152947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
153047e37c4428509524ee576920a98381f3e4872493Nick Pelly
1531826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_get_seq_hdr(void *buffer, unsigned size, unsigned *hdrlen)
1532826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
153361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_get_seq_hdr(buffer, size, hdrlen);
1534826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1535826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
15366eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_get_capability_ltrcount(OMX_U32 *min, OMX_U32 *max, OMX_U32 *step_size)
15376eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
15386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_ERROR("Get Capability LTR Count is not supported");
154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return false;
15416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
154261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_get_capability_ltrcount(min, max, step_size);
15436eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
15446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
15456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
1546826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start()
1547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_start();
1549826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1550826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop()
1552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_stop();
1554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start_done()
1557826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_start_done();
1559826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1560826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop_done()
1562826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_stop_done();
1564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
156547e37c4428509524ee576920a98381f3e4872493Nick Pelly
156647e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_get_buf_req(OMX_U32 *min_buff_count,
156761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *actual_buff_count,
156861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *buff_size,
156961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 port)
157047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
157161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_get_buf_req(min_buff_count,
157261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            actual_buff_count,
157361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            buff_size,
157461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            port);
157547e37c4428509524ee576920a98381f3e4872493Nick Pelly
157647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
157747e37c4428509524ee576920a98381f3e4872493Nick Pelly
157847e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_set_buf_req(OMX_U32 *min_buff_count,
157961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *actual_buff_count,
158061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *buff_size,
158161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 port)
158247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
158361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_set_buf_req(min_buff_count,
158461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            actual_buff_count,
158561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            buff_size,
158661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            port);
158747e37c4428509524ee576920a98381f3e4872493Nick Pelly
158847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
158947e37c4428509524ee576920a98381f3e4872493Nick Pelly
15906eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_is_video_session_supported(OMX_U32 width, OMX_U32 height)
15916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
15926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
159361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_is_video_session_supported(width,height);
15946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
159561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_LOW("Check against video capability not supported");
159661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return true;
15976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
15986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
15996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
16006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
16016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalint omx_venc::dev_handle_extradata(void *buffer, int index)
16026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
160361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->handle_extradata(buffer, index);
160461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
160561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
160661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_venc::dev_set_format(int color)
160761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
160861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_set_format(color);
16096eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
16106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
16116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
161247e37c4428509524ee576920a98381f3e4872493Nick Pellyint omx_venc::async_message_process (void *context, void* message)
161347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
161461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_video* omx = NULL;
161561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_msg *m_sVenc_msg = NULL;
161661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_BUFFERHEADERTYPE* omxhdr = NULL;
161761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_buffer *temp_buff = NULL;
161861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
161961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (context == NULL || message == NULL) {
162061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("\nERROR: omx_venc::async_message_process invalid i/p params");
162161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return -1;
162247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sVenc_msg = (struct venc_msg *)message;
162447e37c4428509524ee576920a98381f3e4872493Nick Pelly
162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx = reinterpret_cast<omx_video*>(context);
162661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_sVenc_msg->statuscode != VEN_S_SUCCESS) {
162861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("\nERROR: async_msg_process() - Error statuscode = %lu\n",
162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sVenc_msg->statuscode);
163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx->omx_report_error();
163147e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
163361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_LOW("\n omx_venc::async_message_process- msgcode = %d\n",
163461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sVenc_msg->msgcode);
163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    switch (m_sVenc_msg->msgcode) {
163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_START:
163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,\
163861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_START_DONE);
163961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
164061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_STOP:
164161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,\
164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_STOP_DONE);
164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_RESUME:
164561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,\
164661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_RESUME_DONE);
164761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
164861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_PAUSE:
164961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,\
165061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_PAUSE_DONE);
165161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_FLUSH_INPUT_DONE:
165361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
165461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,\
165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH);
165661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_FLUSH_OUPUT_DONE:
165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,\
165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH);
166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_INPUT_BUFFER_DONE:
166261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omxhdr = (OMX_BUFFERHEADERTYPE* )\
166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                     m_sVenc_msg->buf.clientdata;
166461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (omxhdr == NULL ||
166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (((OMX_U32)(omxhdr - omx->m_inp_mem_ptr) > omx->m_sInPortDef.nBufferCountActual) &&
166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                     ((OMX_U32)(omxhdr - omx->meta_buffer_hdr) > omx->m_sInPortDef.nBufferCountActual))) {
166861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omxhdr = NULL;
166961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sVenc_msg->statuscode = VEN_S_EFAIL;
167061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
167161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
167261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_
167361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->omx_release_meta_buffer(omxhdr);
167461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
167561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event ((unsigned int)omxhdr,m_sVenc_msg->statuscode,
167661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EBD);
167761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_OUTPUT_BUFFER_DONE:
167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omxhdr = (OMX_BUFFERHEADERTYPE*)m_sVenc_msg->buf.clientdata;
168061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
168161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( (omxhdr != NULL) &&
168261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    ((OMX_U32)(omxhdr - omx->m_out_mem_ptr)  < omx->m_sOutPortDef.nBufferCountActual)) {
168361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_sVenc_msg->buf.len <=  omxhdr->nAllocLen) {
168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nFilledLen = m_sVenc_msg->buf.len;
168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nOffset = m_sVenc_msg->buf.offset;
168661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nTimeStamp = m_sVenc_msg->buf.timestamp;
168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n o/p TS = %u", (OMX_U32)m_sVenc_msg->buf.timestamp);
168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nFlags = m_sVenc_msg->buf.flags;
168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
169061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Use buffer case*/
169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (omx->output_use_buffer && !omx->m_use_output_pmem) {
169261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_LOW("\n memcpy() for o/p Heap UseBuffer");
169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        memcpy(omxhdr->pBuffer,
169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (m_sVenc_msg->buf.ptrbuffer),
169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                m_sVenc_msg->buf.len);
169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nFilledLen = 0;
169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omxhdr = NULL;
170361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sVenc_msg->statuscode = VEN_S_EFAIL;
170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event ((unsigned int)omxhdr,m_sVenc_msg->statuscode,
170661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_FBD);
170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_NEED_OUTPUT_BUFFER:
170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //TBD what action needs to be done here??
171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
17116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_LTRUSE_FAILED:
171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("LTRUSE Failed!");
171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,
171561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_LTRUSE_FAILED);
171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
17176eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return 0;
172247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
1723c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan
1724c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavanbool omx_venc::dev_color_align(OMX_BUFFERHEADERTYPE *buffer,
1725c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                OMX_U32 width, OMX_U32 height)
1726c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan{
1727c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    return handle->venc_color_align(buffer, width,height);
1728c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan}
1729