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