omx_video_encoder.cpp revision 3145f89c1398e32bb7fc6cc03866388f42d2bad3
147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*--------------------------------------------------------------------------
23145f89c1398e32bb7fc6cc03866388f42d2bad3Deva RamasubramanianCopyright (c) 2010-2012, 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.
1147e37c4428509524ee576920a98381f3e4872493Nick Pelly    * Neither the name of Code Aurora 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/*----------------------------------------------------------------------------
4347e37c4428509524ee576920a98381f3e4872493Nick Pelly* Preprocessor Definitions and Constants
4447e37c4428509524ee576920a98381f3e4872493Nick Pelly* -------------------------------------------------------------------------*/
4547e37c4428509524ee576920a98381f3e4872493Nick Pelly
4647e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_SPEC_VERSION 0x00000101
4747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_INIT_STRUCT(_s_, _name_)            \
4847e37c4428509524ee576920a98381f3e4872493Nick Pelly   memset((_s_), 0x0, sizeof(_name_));          \
4947e37c4428509524ee576920a98381f3e4872493Nick Pelly   (_s_)->nSize = sizeof(_name_);               \
5047e37c4428509524ee576920a98381f3e4872493Nick Pelly   (_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{
5747e37c4428509524ee576920a98381f3e4872493Nick Pelly  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_
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  meta_mode_enable = false;
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  memset(meta_buffer_hdr,0,sizeof(meta_buffer_hdr));
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  memset(meta_buffers,0,sizeof(meta_buffers));
687eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George  memset(opaque_buffer_hdr,0,sizeof(opaque_buffer_hdr));
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  mUseProxyColorFormat = false;
70826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
7147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
7247e37c4428509524ee576920a98381f3e4872493Nick Pelly
7347e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_venc::~omx_venc()
7447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
7547e37c4428509524ee576920a98381f3e4872493Nick Pelly  //nothing to do
7647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
7747e37c4428509524ee576920a98381f3e4872493Nick Pelly
7847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
7947e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION
8047e37c4428509524ee576920a98381f3e4872493Nick Pelly  omx_venc::ComponentInit
8147e37c4428509524ee576920a98381f3e4872493Nick Pelly
8247e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
8347e37c4428509524ee576920a98381f3e4872493Nick Pelly  Initialize the component.
8447e37c4428509524ee576920a98381f3e4872493Nick Pelly
8547e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
8647e37c4428509524ee576920a98381f3e4872493Nick Pelly  ctxt -- Context information related to the self.
8747e37c4428509524ee576920a98381f3e4872493Nick Pelly  id   -- Event identifier. This could be any of the following:
8847e37c4428509524ee576920a98381f3e4872493Nick Pelly          1. Command completion event
8947e37c4428509524ee576920a98381f3e4872493Nick Pelly          2. Buffer done callback event
9047e37c4428509524ee576920a98381f3e4872493Nick Pelly          3. Frame done callback event
9147e37c4428509524ee576920a98381f3e4872493Nick Pelly
9247e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
9347e37c4428509524ee576920a98381f3e4872493Nick Pelly  None.
9447e37c4428509524ee576920a98381f3e4872493Nick Pelly
9547e37c4428509524ee576920a98381f3e4872493Nick Pelly========================================================================== */
9647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::component_init(OMX_STRING role)
9747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
9847e37c4428509524ee576920a98381f3e4872493Nick Pelly
9947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_ERRORTYPE eRet = OMX_ErrorNone;
10047e37c4428509524ee576920a98381f3e4872493Nick Pelly
10147e37c4428509524ee576920a98381f3e4872493Nick Pelly  int fds[2];
10247e37c4428509524ee576920a98381f3e4872493Nick Pelly  int r;
10347e37c4428509524ee576920a98381f3e4872493Nick Pelly
10447e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_VIDEO_CODINGTYPE codec_type;
10547e37c4428509524ee576920a98381f3e4872493Nick Pelly
10647e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("\n omx_venc(): Inside component_init()");
10747e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Copy the role information which provides the decoder m_nkind
108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  strlcpy((char *)m_nkind,role,OMX_MAX_STRINGNAME_SIZE);
10947e37c4428509524ee576920a98381f3e4872493Nick Pelly
11047e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(!strncmp((char *)m_nkind,"OMX.qcom.video.encoder.mpeg4",\
11147e37c4428509524ee576920a98381f3e4872493Nick Pelly              OMX_MAX_STRINGNAME_SIZE))
11247e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
113826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    strlcpy((char *)m_cRole, "video_encoder.mpeg4",\
11447e37c4428509524ee576920a98381f3e4872493Nick Pelly            OMX_MAX_STRINGNAME_SIZE);
11547e37c4428509524ee576920a98381f3e4872493Nick Pelly    codec_type = OMX_VIDEO_CodingMPEG4;
11647e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
11747e37c4428509524ee576920a98381f3e4872493Nick Pelly  else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
11847e37c4428509524ee576920a98381f3e4872493Nick Pelly                   OMX_MAX_STRINGNAME_SIZE))
11947e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
120826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    strlcpy((char *)m_cRole, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE);
12147e37c4428509524ee576920a98381f3e4872493Nick Pelly    codec_type = OMX_VIDEO_CodingH263;
12247e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
12347e37c4428509524ee576920a98381f3e4872493Nick Pelly  else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
12447e37c4428509524ee576920a98381f3e4872493Nick Pelly                   OMX_MAX_STRINGNAME_SIZE))
12547e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    strlcpy((char *)m_cRole, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
12747e37c4428509524ee576920a98381f3e4872493Nick Pelly    codec_type = OMX_VIDEO_CodingAVC;
12847e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
1297783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian  else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc.secure",\
1307783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian                   OMX_MAX_STRINGNAME_SIZE))
1317783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian  {
1327783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian    strlcpy((char *)m_cRole, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
1337783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian    codec_type = OMX_VIDEO_CodingAVC;
1347783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian    secure_session = true;
1357783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian  }
13647e37c4428509524ee576920a98381f3e4872493Nick Pelly  else
13747e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
13847e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("\nERROR: Unknown Component\n");
13947e37c4428509524ee576920a98381f3e4872493Nick Pelly    eRet = OMX_ErrorInvalidComponentName;
14047e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
14147e37c4428509524ee576920a98381f3e4872493Nick Pelly
14247e37c4428509524ee576920a98381f3e4872493Nick Pelly
14347e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(eRet != OMX_ErrorNone)
14447e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
14547e37c4428509524ee576920a98381f3e4872493Nick Pelly    return eRet;
14647e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
14747e37c4428509524ee576920a98381f3e4872493Nick Pelly
148826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  handle = new venc_dev(this);
14947e37c4428509524ee576920a98381f3e4872493Nick Pelly
15047e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(handle == NULL)
15147e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
15247e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("\nERROR: handle is NULL");
15347e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorInsufficientResources;
15447e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
15547e37c4428509524ee576920a98381f3e4872493Nick Pelly
15647e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(handle->venc_open(codec_type) != true)
15747e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
15847e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("\nERROR: venc_open failed");
15947e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorInsufficientResources;
16047e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
16147e37c4428509524ee576920a98381f3e4872493Nick Pelly
16247e37c4428509524ee576920a98381f3e4872493Nick Pelly  //Intialise the OMX layer variables
16347e37c4428509524ee576920a98381f3e4872493Nick Pelly  memset(&m_pCallbacks,0,sizeof(OMX_CALLBACKTYPE));
16447e37c4428509524ee576920a98381f3e4872493Nick Pelly
16547e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sPortParam, OMX_PORT_PARAM_TYPE);
16647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sPortParam.nPorts = 0x2;
16747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sPortParam.nStartPortNumber = (OMX_U32) PORT_INDEX_IN;
16847e37c4428509524ee576920a98381f3e4872493Nick Pelly
16947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sPortParam_audio, OMX_PORT_PARAM_TYPE);
17047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sPortParam_audio.nPorts = 0;
17147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sPortParam_audio.nStartPortNumber = 0;
17247e37c4428509524ee576920a98381f3e4872493Nick Pelly
17347e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sPortParam_img, OMX_PORT_PARAM_TYPE);
17447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sPortParam_img.nPorts = 0;
17547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sPortParam_img.nStartPortNumber = 0;
17647e37c4428509524ee576920a98381f3e4872493Nick Pelly
17747e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sParamBitrate, OMX_VIDEO_PARAM_BITRATETYPE);
17847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamBitrate.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
17947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamBitrate.eControlRate = OMX_Video_ControlRateVariableSkipFrames;
18047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamBitrate.nTargetBitrate = 64000;
18147e37c4428509524ee576920a98381f3e4872493Nick Pelly
18247e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sConfigBitrate, OMX_VIDEO_CONFIG_BITRATETYPE);
18347e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigBitrate.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
18447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigBitrate.nEncodeBitrate = 64000;
18547e37c4428509524ee576920a98381f3e4872493Nick Pelly
18647e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sConfigFramerate, OMX_CONFIG_FRAMERATETYPE);
18747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigFramerate.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
18847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigFramerate.xEncodeFramerate = 30 << 16;
18947e37c4428509524ee576920a98381f3e4872493Nick Pelly
19047e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sConfigIntraRefreshVOP, OMX_CONFIG_INTRAREFRESHVOPTYPE);
19147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigIntraRefreshVOP.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
19247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigIntraRefreshVOP.IntraRefreshVOP = OMX_FALSE;
19347e37c4428509524ee576920a98381f3e4872493Nick Pelly
19447e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sConfigFrameRotation, OMX_CONFIG_ROTATIONTYPE);
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sConfigFrameRotation.nPortIndex = (OMX_U32) PORT_INDEX_IN;
19647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sConfigFrameRotation.nRotation = 0;
19747e37c4428509524ee576920a98381f3e4872493Nick Pelly
19847e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sSessionQuantization, OMX_VIDEO_PARAM_QUANTIZATIONTYPE);
19947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sSessionQuantization.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
20047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sSessionQuantization.nQpI = 9;
20147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sSessionQuantization.nQpP = 6;
20247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sSessionQuantization.nQpB = 2;
20347e37c4428509524ee576920a98381f3e4872493Nick Pelly
20447e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sAVCSliceFMO, OMX_VIDEO_PARAM_AVCSLICEFMO);
20547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sAVCSliceFMO.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
20647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sAVCSliceFMO.eSliceMode = OMX_VIDEO_SLICEMODE_AVCDefault;
20747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sAVCSliceFMO.nNumSliceGroups = 0;
20847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sAVCSliceFMO.nSliceGroupMapType = 0;
20947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sParamProfileLevel, OMX_VIDEO_PARAM_PROFILELEVELTYPE);
21047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamProfileLevel.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
21147e37c4428509524ee576920a98381f3e4872493Nick Pelly
212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_INIT_STRUCT(&m_sIntraperiod, QOMX_VIDEO_INTRAPERIODTYPE);
213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sIntraperiod.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
214826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sIntraperiod.nPFrames = (m_sConfigFramerate.xEncodeFramerate * 2) - 1;
215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_INIT_STRUCT(&m_sErrorCorrection, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE);
217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sErrorCorrection.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
218826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sErrorCorrection.bEnableDataPartitioning = OMX_FALSE;
219826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sErrorCorrection.bEnableHEC = OMX_FALSE;
220826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sErrorCorrection.bEnableResync = OMX_FALSE;
221826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sErrorCorrection.bEnableRVLC = OMX_FALSE;
222826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sErrorCorrection.nResynchMarkerSpacing = 0;
223826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_INIT_STRUCT(&m_sIntraRefresh, OMX_VIDEO_PARAM_INTRAREFRESHTYPE);
225826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sIntraRefresh.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sIntraRefresh.eRefreshMode = OMX_VIDEO_IntraRefreshMax;
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
22847e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(codec_type == OMX_VIDEO_CodingMPEG4)
22947e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
23047e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_MPEG4ProfileSimple;
23147e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_MPEG4Level0;
23247e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
23347e37c4428509524ee576920a98381f3e4872493Nick Pelly  else if(codec_type == OMX_VIDEO_CodingH263)
23447e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
23547e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_H263ProfileBaseline;
23647e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_H263Level10;
23747e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
23847e37c4428509524ee576920a98381f3e4872493Nick Pelly  else if(codec_type == OMX_VIDEO_CodingAVC)
23947e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
24047e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_AVCProfileBaseline;
24147e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_AVCLevel1;
24247e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
24347e37c4428509524ee576920a98381f3e4872493Nick Pelly
24447e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Initialize the video parameters for input port
24547e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sInPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
24647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.nPortIndex= (OMX_U32) PORT_INDEX_IN;
24747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.bEnabled = OMX_TRUE;
24847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.bPopulated = OMX_FALSE;
24947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.eDomain = OMX_PortDomainVideo;
25047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.eDir = OMX_DirInput;
25147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.cMIMEType = "YUV420";
25247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH;
25347e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT;
254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sInPortDef.format.video.nStride = OMX_CORE_QCIF_WIDTH;
255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sInPortDef.format.video.nSliceHeight = OMX_CORE_QCIF_HEIGHT;
25647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.nBitrate = 64000;
25747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.xFramerate = 15 << 16;
25847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.eColorFormat =  OMX_COLOR_FormatYUV420SemiPlanar;
25947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingUnused;
26047e37c4428509524ee576920a98381f3e4872493Nick Pelly
26147e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(dev_get_buf_req(&m_sInPortDef.nBufferCountMin,
26247e37c4428509524ee576920a98381f3e4872493Nick Pelly                     &m_sInPortDef.nBufferCountActual,
26347e37c4428509524ee576920a98381f3e4872493Nick Pelly                     &m_sInPortDef.nBufferSize,
26447e37c4428509524ee576920a98381f3e4872493Nick Pelly                     m_sInPortDef.nPortIndex) != true)
26547e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
26647e37c4428509524ee576920a98381f3e4872493Nick Pelly    eRet = OMX_ErrorUndefined;
26747e37c4428509524ee576920a98381f3e4872493Nick Pelly
26847e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
26947e37c4428509524ee576920a98381f3e4872493Nick Pelly
27047e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Initialize the video parameters for output port
27147e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
27247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
27347e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.bEnabled = OMX_TRUE;
27447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.bPopulated = OMX_FALSE;
27547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.eDomain = OMX_PortDomainVideo;
27647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.eDir = OMX_DirOutput;
27747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH;
27847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT;
27947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.format.video.nBitrate = 64000;
28047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.format.video.xFramerate = 15 << 16;
28147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortDef.format.video.eColorFormat =  OMX_COLOR_FormatUnused;
28247e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(codec_type == OMX_VIDEO_CodingMPEG4)
28347e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
28447e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingMPEG4;
28547e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
28647e37c4428509524ee576920a98381f3e4872493Nick Pelly  else if(codec_type == OMX_VIDEO_CodingH263)
28747e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
28847e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingH263;
28947e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
29047e37c4428509524ee576920a98381f3e4872493Nick Pelly  else
29147e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
29247e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingAVC;
29347e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
29447e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
29547e37c4428509524ee576920a98381f3e4872493Nick Pelly                     &m_sOutPortDef.nBufferCountActual,
29647e37c4428509524ee576920a98381f3e4872493Nick Pelly                     &m_sOutPortDef.nBufferSize,
29747e37c4428509524ee576920a98381f3e4872493Nick Pelly                     m_sOutPortDef.nPortIndex) != true)
29847e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
29947e37c4428509524ee576920a98381f3e4872493Nick Pelly    eRet = OMX_ErrorUndefined;
30047e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
30147e37c4428509524ee576920a98381f3e4872493Nick Pelly
30247e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Initialize the video color format for input port
30347e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
30447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_IN;
30547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortFormat.nIndex = 0;
30647e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortFormat.eColorFormat =  OMX_COLOR_FormatYUV420SemiPlanar;
30747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInPortFormat.eCompressionFormat = OMX_VIDEO_CodingUnused;
30847e37c4428509524ee576920a98381f3e4872493Nick Pelly
30947e37c4428509524ee576920a98381f3e4872493Nick Pelly
31047e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Initialize the compression format for output port
31147e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sOutPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
31247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
31347e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortFormat.nIndex = 0;
31447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutPortFormat.eColorFormat = OMX_COLOR_FormatUnused;
31547e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(codec_type == OMX_VIDEO_CodingMPEG4)
31647e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
31747e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingMPEG4;
31847e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
31947e37c4428509524ee576920a98381f3e4872493Nick Pelly  else if(codec_type == OMX_VIDEO_CodingH263)
32047e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
32147e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingH263;
32247e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
32347e37c4428509524ee576920a98381f3e4872493Nick Pelly  else
32447e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
32547e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingAVC;
32647e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
32747e37c4428509524ee576920a98381f3e4872493Nick Pelly
32847e37c4428509524ee576920a98381f3e4872493Nick Pelly  // mandatory Indices for kronos test suite
32947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
33047e37c4428509524ee576920a98381f3e4872493Nick Pelly
33147e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sInBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
33247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sInBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_IN;
33347e37c4428509524ee576920a98381f3e4872493Nick Pelly
33447e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sOutBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
33547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sOutBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
33647e37c4428509524ee576920a98381f3e4872493Nick Pelly
33747e37c4428509524ee576920a98381f3e4872493Nick Pelly
33847e37c4428509524ee576920a98381f3e4872493Nick Pelly  // mp4 specific init
33947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sParamMPEG4, OMX_VIDEO_PARAM_MPEG4TYPE);
34047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
34147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
34247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.eLevel = OMX_VIDEO_MPEG4Level0;
34347e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.nSliceHeaderSpacing = 0;
34447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.bSVH = OMX_FALSE;
34547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.bGov = OMX_FALSE;
346826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamMPEG4.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1);  // 2 second intra period for default outport fps
34747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.bACPred = OMX_TRUE;
34847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.nTimeIncRes = 30; // delta = 2 @ 15 fps
34947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.nAllowedPictureTypes = 2; // pframe and iframe
35047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.nHeaderExtension = 1; // number of video packet headers per vop
35147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamMPEG4.bReversibleVLC = OMX_FALSE;
35247e37c4428509524ee576920a98381f3e4872493Nick Pelly
35347e37c4428509524ee576920a98381f3e4872493Nick Pelly  // h263 specific init
35447e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_INIT_STRUCT(&m_sParamH263, OMX_VIDEO_PARAM_H263TYPE);
35547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamH263.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
356826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamH263.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps
35747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamH263.nBFrames = 0;
35847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamH263.eProfile = OMX_VIDEO_H263ProfileBaseline;
35947e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamH263.eLevel = OMX_VIDEO_H263Level10;
36047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamH263.bPLUSPTYPEAllowed = OMX_FALSE;
36147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamH263.nAllowedPictureTypes = 2;
362826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamH263.bForceRoundingTypeToZero = OMX_TRUE;
363826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamH263.nPictureHeaderRepetition = 0;
364826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamH263.nGOBHeaderInterval = 1;
36547e37c4428509524ee576920a98381f3e4872493Nick Pelly
36647e37c4428509524ee576920a98381f3e4872493Nick Pelly  // h264 specific init
367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_INIT_STRUCT(&m_sParamAVC, OMX_VIDEO_PARAM_AVCTYPE);
36847e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamAVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
369826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nSliceHeaderSpacing = 0;
370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps
37147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamAVC.nBFrames = 0;
372826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bUseHadamard = OMX_FALSE;
373826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nRefFrames = 1;
374826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nRefIdx10ActiveMinus1 = 1;
375826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nRefIdx11ActiveMinus1 = 0;
376826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bEnableUEP = OMX_FALSE;
377826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bEnableFMO = OMX_FALSE;
378826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bEnableASO = OMX_FALSE;
379826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bEnableRS = OMX_FALSE;
38047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamAVC.eProfile = OMX_VIDEO_AVCProfileBaseline;
38147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamAVC.eLevel = OMX_VIDEO_AVCLevel1;
38247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sParamAVC.nAllowedPictureTypes = 2;
383826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bFrameMBsOnly = OMX_FALSE;
384826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bMBAFF = OMX_FALSE;
385826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bEntropyCodingCABAC = OMX_FALSE;
386826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bWeightedPPrediction = OMX_FALSE;
387826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nWeightedBipredicitonMode = 0;
388826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bconstIpred = OMX_FALSE;
389826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bDirect8x8Inference = OMX_FALSE;
390826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.bDirectSpatialTemporal = OMX_FALSE;
391826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.nCabacInitIdc = 0;
392826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamAVC.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable;
39347e37c4428509524ee576920a98381f3e4872493Nick Pelly
39447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_state                   = OMX_StateLoaded;
395826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sExtraData = 0;
396826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sDebugSliceinfo = 0;
397826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
398826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  char value[PROPERTY_VALUE_MAX] = {0};
399826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  property_get("vidc.venc.debug.sliceinfo", value, "0");
400826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sDebugSliceinfo = (OMX_U32)atoi(value);
401826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  DEBUG_PRINT_HIGH("vidc.venc.debug.sliceinfo value is %d", m_sDebugSliceinfo);
402826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
40347e37c4428509524ee576920a98381f3e4872493Nick Pelly
40447e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(eRet == OMX_ErrorNone)
40547e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
40647e37c4428509524ee576920a98381f3e4872493Nick Pelly    if(pipe(fds))
40747e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
40847e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_ERROR("ERROR: pipe creation failed\n");
40947e37c4428509524ee576920a98381f3e4872493Nick Pelly      eRet = OMX_ErrorInsufficientResources;
41047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
41147e37c4428509524ee576920a98381f3e4872493Nick Pelly    else
41247e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
41347e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(fds[0] == 0 || fds[1] == 0)
41447e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
41547e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(pipe(fds))
41647e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
41747e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: pipe creation failed\n");
41847e37c4428509524ee576920a98381f3e4872493Nick Pelly          eRet = OMX_ErrorInsufficientResources;
41947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
42047e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
42147e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(eRet == OMX_ErrorNone)
42247e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
42347e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_pipe_in = fds[0];
42447e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_pipe_out = fds[1];
42547e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
42647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
42747e37c4428509524ee576920a98381f3e4872493Nick Pelly    r = pthread_create(&msg_thread_id,0,message_thread,this);
42847e37c4428509524ee576920a98381f3e4872493Nick Pelly
42947e37c4428509524ee576920a98381f3e4872493Nick Pelly    if(r < 0)
43047e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
43147e37c4428509524ee576920a98381f3e4872493Nick Pelly      eRet = OMX_ErrorInsufficientResources;
43247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
43347e37c4428509524ee576920a98381f3e4872493Nick Pelly    else
43447e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
43547e37c4428509524ee576920a98381f3e4872493Nick Pelly      r = pthread_create(&async_thread_id,0,async_venc_message_thread,this);
43647e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(r < 0)
43747e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
43847e37c4428509524ee576920a98381f3e4872493Nick Pelly        eRet = OMX_ErrorInsufficientResources;
43947e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
44047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
44147e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
44247e37c4428509524ee576920a98381f3e4872493Nick Pelly
44347e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("\n Component_init return value = 0x%x", eRet);
44447e37c4428509524ee576920a98381f3e4872493Nick Pelly  return eRet;
44547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
44647e37c4428509524ee576920a98381f3e4872493Nick Pelly
44747e37c4428509524ee576920a98381f3e4872493Nick Pelly
44847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
44947e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION
45047e37c4428509524ee576920a98381f3e4872493Nick Pelly  omx_venc::Setparameter
45147e37c4428509524ee576920a98381f3e4872493Nick Pelly
45247e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
45347e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX Set Parameter method implementation.
45447e37c4428509524ee576920a98381f3e4872493Nick Pelly
45547e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
45647e37c4428509524ee576920a98381f3e4872493Nick Pelly  <TBD>.
45747e37c4428509524ee576920a98381f3e4872493Nick Pelly
45847e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
45947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX Error None if successful.
46047e37c4428509524ee576920a98381f3e4872493Nick Pelly
46147e37c4428509524ee576920a98381f3e4872493Nick Pelly========================================================================== */
46247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE     hComp,
46347e37c4428509524ee576920a98381f3e4872493Nick Pelly                                       OMX_IN OMX_INDEXTYPE paramIndex,
46447e37c4428509524ee576920a98381f3e4872493Nick Pelly                                       OMX_IN OMX_PTR        paramData)
46547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
46647e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_ERRORTYPE eRet = OMX_ErrorNone;
46747e37c4428509524ee576920a98381f3e4872493Nick Pelly
46847e37c4428509524ee576920a98381f3e4872493Nick Pelly
46947e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(m_state == OMX_StateInvalid)
47047e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
47147e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("ERROR: Set Param in Invalid State\n");
47247e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorInvalidState;
47347e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
47447e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(paramData == NULL)
47547e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
47647e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData \n");
47747e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorBadParameter;
47847e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
47947e37c4428509524ee576920a98381f3e4872493Nick Pelly
48047e37c4428509524ee576920a98381f3e4872493Nick Pelly  /*set_parameter can be called in loaded state
48147e37c4428509524ee576920a98381f3e4872493Nick Pelly  or disabled port */
48247e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(m_state == OMX_StateLoaded
48347e37c4428509524ee576920a98381f3e4872493Nick Pelly     || m_sInPortDef.bEnabled == OMX_FALSE
48447e37c4428509524ee576920a98381f3e4872493Nick Pelly     || m_sOutPortDef.bEnabled == OMX_FALSE)
48547e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
48647e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_LOW("Set Parameter called in valid state");
48747e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
48847e37c4428509524ee576920a98381f3e4872493Nick Pelly  else
48947e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
49047e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State\n");
49147e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorIncorrectStateOperation;
49247e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
49347e37c4428509524ee576920a98381f3e4872493Nick Pelly
49447e37c4428509524ee576920a98381f3e4872493Nick Pelly  switch(paramIndex)
49547e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
49647e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamPortDefinition:
49747e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
49847e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_PARAM_PORTDEFINITIONTYPE *portDefn;
49947e37c4428509524ee576920a98381f3e4872493Nick Pelly      portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData;
50047e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPortDefinition H= %d, W = %d\n",
50147e37c4428509524ee576920a98381f3e4872493Nick Pelly           (int)portDefn->format.video.nFrameHeight,
50247e37c4428509524ee576920a98381f3e4872493Nick Pelly           (int)portDefn->format.video.nFrameWidth);
50347e37c4428509524ee576920a98381f3e4872493Nick Pelly
50447e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(PORT_INDEX_IN == portDefn->nPortIndex)
50547e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
50647e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n i/p actual cnt requested = %d\n", portDefn->nBufferCountActual);
50747e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n i/p min cnt requested = %d\n", portDefn->nBufferCountMin);
50847e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n i/p buffersize requested = %d\n", portDefn->nBufferSize);
50947e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true)
51047e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
51147e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("\nERROR: venc_set_param input failed");
51247e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
51347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
51447e37c4428509524ee576920a98381f3e4872493Nick Pelly
51547e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n i/p previous actual cnt = %d\n", m_sInPortDef.nBufferCountActual);
51647e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n i/p previous min cnt = %d\n", m_sInPortDef.nBufferCountMin);
517826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        memcpy(&m_sInPortDef, portDefn,sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
518826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
519826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
520826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if (portDefn->format.video.eColorFormat == (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) {
521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sInPortDef.format.video.eColorFormat =
522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                OMX_COLOR_FormatYUV420SemiPlanar;
5237783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian            if(secure_session) {
5247783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              secure_color_format = (int) QOMX_COLOR_FormatAndroidOpaque;
5257783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              mUseProxyColorFormat = false;
5267783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              m_input_msg_id = OMX_COMPONENT_GENERATE_ETB;
5277783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian            } else if(!mUseProxyColorFormat){
5287eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George              if (!c2d_conv.init()) {
5297eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George                DEBUG_PRINT_ERROR("\n C2D init failed");
5307eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George                return OMX_ErrorUnsupportedSetting;
5317eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George              }
5327eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George              DEBUG_PRINT_ERROR("\nC2D init is successful");
5337783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              mUseProxyColorFormat = true;
5347783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ;
5357eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George            }
5367eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George        } else
5377eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George          mUseProxyColorFormat = false;
538826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
53947e37c4428509524ee576920a98381f3e4872493Nick Pelly        /*Query Input Buffer Requirements*/
54047e37c4428509524ee576920a98381f3e4872493Nick Pelly        dev_get_buf_req   (&m_sInPortDef.nBufferCountMin,
54147e37c4428509524ee576920a98381f3e4872493Nick Pelly                           &m_sInPortDef.nBufferCountActual,
54247e37c4428509524ee576920a98381f3e4872493Nick Pelly                           &m_sInPortDef.nBufferSize,
54347e37c4428509524ee576920a98381f3e4872493Nick Pelly                           m_sInPortDef.nPortIndex);
54447e37c4428509524ee576920a98381f3e4872493Nick Pelly
54547e37c4428509524ee576920a98381f3e4872493Nick Pelly        /*Query ouput Buffer Requirements*/
54647e37c4428509524ee576920a98381f3e4872493Nick Pelly        dev_get_buf_req   (&m_sOutPortDef.nBufferCountMin,
54747e37c4428509524ee576920a98381f3e4872493Nick Pelly                           &m_sOutPortDef.nBufferCountActual,
54847e37c4428509524ee576920a98381f3e4872493Nick Pelly                           &m_sOutPortDef.nBufferSize,
54947e37c4428509524ee576920a98381f3e4872493Nick Pelly                           m_sOutPortDef.nPortIndex);
55047e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sInPortDef.nBufferCountActual = portDefn->nBufferCountActual;
55147e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
55247e37c4428509524ee576920a98381f3e4872493Nick Pelly      else if(PORT_INDEX_OUT == portDefn->nPortIndex)
55347e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
55447e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n o/p actual cnt requested = %d\n", portDefn->nBufferCountActual);
55547e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n o/p min cnt requested = %d\n", portDefn->nBufferCountMin);
55647e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n o/p buffersize requested = %d\n", portDefn->nBufferSize);
55747e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true)
55847e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
55947e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("\nERROR: venc_set_param output failed");
56047e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
56147e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
562826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        memcpy(&m_sOutPortDef,portDefn,sizeof(struct OMX_PARAM_PORTDEFINITIONTYPE));
563826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        update_profile_level(); //framerate , bitrate
56447e37c4428509524ee576920a98381f3e4872493Nick Pelly
56547e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n o/p previous actual cnt = %d\n", m_sOutPortDef.nBufferCountActual);
56647e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n o/p previous min cnt = %d\n", m_sOutPortDef.nBufferCountMin);
56747e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sOutPortDef.nBufferCountActual = portDefn->nBufferCountActual;
56847e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
56947e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
57047e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
57147e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: Set_parameter: Bad Port idx %d",
57247e37c4428509524ee576920a98381f3e4872493Nick Pelly                    (int)portDefn->nPortIndex);
57347e37c4428509524ee576920a98381f3e4872493Nick Pelly        eRet = OMX_ErrorBadPortIndex;
57447e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
57547e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sConfigFramerate.xEncodeFramerate = portDefn->format.video.xFramerate;
57647e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sConfigBitrate.nEncodeBitrate = portDefn->format.video.nBitrate;
57747e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sParamBitrate.nTargetBitrate = portDefn->format.video.nBitrate;
57847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
57947e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
58047e37c4428509524ee576920a98381f3e4872493Nick Pelly
58147e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoPortFormat:
58247e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
58347e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt =
58447e37c4428509524ee576920a98381f3e4872493Nick Pelly      (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData;
58547e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d\n",
58647e37c4428509524ee576920a98381f3e4872493Nick Pelly                  portFmt->eColorFormat);
58747e37c4428509524ee576920a98381f3e4872493Nick Pelly      //set the driver with the corresponding values
58847e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(PORT_INDEX_IN == portFmt->nPortIndex)
58947e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
59047e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_param(paramData,OMX_IndexParamVideoPortFormat) != true)
59147e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
59247e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
59347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
59447e37c4428509524ee576920a98381f3e4872493Nick Pelly
59547e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d\n",
59647e37c4428509524ee576920a98381f3e4872493Nick Pelly            portFmt->eColorFormat);
597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        update_profile_level(); //framerate
59847e37c4428509524ee576920a98381f3e4872493Nick Pelly
599826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if (portFmt->eColorFormat ==
601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) {
602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sInPortFormat.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
6037783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian            if(secure_session) {
6047783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              secure_color_format = (int) QOMX_COLOR_FormatAndroidOpaque;
6057783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              mUseProxyColorFormat = false;
6067783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              m_input_msg_id = OMX_COMPONENT_GENERATE_ETB;
6077783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian            } else if(!mUseProxyColorFormat){
6087eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George              if (!c2d_conv.init()) {
6097eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George                DEBUG_PRINT_ERROR("\n C2D init failed");
6107eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George                return OMX_ErrorUnsupportedSetting;
6117eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George              }
6127eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George              DEBUG_PRINT_ERROR("\nC2D init is successful");
6137783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              mUseProxyColorFormat = true;
6147783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian              m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ;
6157eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George            }
616826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
617826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        else
618826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
619826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
620826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sInPortFormat.eColorFormat = portFmt->eColorFormat;
6217eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George            m_input_msg_id = OMX_COMPONENT_GENERATE_ETB;
6227eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George            mUseProxyColorFormat = false;
623826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
62447e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sInPortFormat.xFramerate = portFmt->xFramerate;
62547e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
62647e37c4428509524ee576920a98381f3e4872493Nick Pelly      //TODO if no use case for O/P port,delet m_sOutPortFormat
62747e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
62847e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
62947e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoInit:
63047e37c4428509524ee576920a98381f3e4872493Nick Pelly    {  //TODO, do we need this index set param
63147e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_PORT_PARAM_TYPE* pParam = (OMX_PORT_PARAM_TYPE*)(paramData);
63247e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("\n Set OMX_IndexParamVideoInit called");
63347e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
63447e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
63547e37c4428509524ee576920a98381f3e4872493Nick Pelly
63647e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoBitrate:
63747e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
63847e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData;
63947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoBitrate");
64047e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(handle->venc_set_param(paramData,OMX_IndexParamVideoBitrate) != true)
64147e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
64247e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorUnsupportedSetting;
64347e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
64447e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sParamBitrate.nTargetBitrate = pParam->nTargetBitrate;
64547e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sParamBitrate.eControlRate = pParam->eControlRate;
646826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      update_profile_level(); //bitrate
64747e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sConfigBitrate.nEncodeBitrate = pParam->nTargetBitrate;
64847e37c4428509524ee576920a98381f3e4872493Nick Pelly	  m_sInPortDef.format.video.nBitrate = pParam->nTargetBitrate;
64947e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sOutPortDef.format.video.nBitrate = pParam->nTargetBitrate;
65047e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("\nbitrate = %u", m_sOutPortDef.format.video.nBitrate);
65147e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
65247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
65347e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoMpeg4:
65447e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
65547e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData;
656826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      OMX_VIDEO_PARAM_MPEG4TYPE mp4_param;
657826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&mp4_param, pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE));
65847e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoMpeg4");
659826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple)
660826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
661826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
662826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->nBFrames)
663826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
664826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported");
665826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          mp4_param.nBFrames = 1;
666826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
667826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
668826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->nBFrames)
669826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
670826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
671826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          mp4_param.nBFrames = 0;
672826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
673826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
674826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
675826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else
676826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
677826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->nBFrames)
678826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
679826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
680826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          mp4_param.nBFrames = 0;
681826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
682826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
683826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(handle->venc_set_param(&mp4_param,OMX_IndexParamVideoMpeg4) != true)
68447e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
68547e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorUnsupportedSetting;
68647e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
687826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&m_sParamMPEG4,pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE));
68847e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
68947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
69047e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoH263:
69147e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
69247e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData;
69347e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoH263");
69447e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(handle->venc_set_param(paramData,OMX_IndexParamVideoH263) != true)
69547e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
69647e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorUnsupportedSetting;
69747e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
698826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&m_sParamH263,pParam, sizeof(struct OMX_VIDEO_PARAM_H263TYPE));
69947e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
70047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
70147e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoAvc:
70247e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
70347e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData;
704826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      OMX_VIDEO_PARAM_AVCTYPE avc_param;
705826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&avc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_AVCTYPE));
70647e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoAvc");
707826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
708826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if((pParam->eProfile == OMX_VIDEO_AVCProfileHigh)||
709826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         (pParam->eProfile == OMX_VIDEO_AVCProfileMain))
710826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
711826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
712826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->nBFrames)
713826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
714826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_HIGH("INFO: Only 1 Bframe is supported");
715826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          avc_param.nBFrames = 1;
716826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
717826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->nRefFrames != 2)
718826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
719826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("Warning: 2 RefFrames are needed, changing RefFrames from %d to 2", pParam->nRefFrames);
720826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          avc_param.nRefFrames = 2;
721826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
722826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
723826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       if(pParam->nBFrames)
724826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       {
725826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         avc_param.nBFrames = 0;
727826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       }
728826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       if(pParam->nRefFrames != 1)
729826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       {
730826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         DEBUG_PRINT_ERROR("Warning: Only 1 RefFrame is supported, changing RefFrame from %d to 1)", pParam->nRefFrames);
731826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         avc_param.nRefFrames = 1;
732826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       }
733826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
734826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
735826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else
736826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
737826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       if(pParam->nRefFrames != 1)
738826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       {
739826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         DEBUG_PRINT_ERROR("Warning: Only 1 RefFrame is supported, changing RefFrame from %d to 1)", pParam->nRefFrames);
740826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         avc_param.nRefFrames = 1;
741826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       }
742826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       if(pParam->nBFrames)
743826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       {
744826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         DEBUG_PRINT_ERROR("Warning: B frames not supported\n");
745826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         avc_param.nBFrames = 0;
746826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       }
747826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
748826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(handle->venc_set_param(&avc_param,OMX_IndexParamVideoAvc) != true)
74947e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
75047e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorUnsupportedSetting;
75147e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
7523145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian
753826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&m_sParamAVC,pParam, sizeof(struct OMX_VIDEO_PARAM_AVCTYPE));
75447e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
75547e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
75647e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoProfileLevelCurrent:
75747e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
75847e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
75947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoProfileLevelCurrent");
760826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(handle->venc_set_param(pParam,OMX_IndexParamVideoProfileLevelCurrent) != true)
76147e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
762826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("set_parameter: OMX_IndexParamVideoProfileLevelCurrent failed for Profile: %d "
763826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          "Level :%d", pParam->eProfile, pParam->eLevel);
76447e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorUnsupportedSetting;
76547e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
76647e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sParamProfileLevel.eProfile = pParam->eProfile;
76747e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sParamProfileLevel.eLevel = pParam->eLevel;
76847e37c4428509524ee576920a98381f3e4872493Nick Pelly
76947e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\
77047e37c4428509524ee576920a98381f3e4872493Nick Pelly          OMX_MAX_STRINGNAME_SIZE))
77147e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
77247e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)m_sParamProfileLevel.eProfile;
77347e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)m_sParamProfileLevel.eLevel;
77447e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_LOW("\n MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile,
77547e37c4428509524ee576920a98381f3e4872493Nick Pelly              m_sParamMPEG4.eLevel);
77647e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
77747e37c4428509524ee576920a98381f3e4872493Nick Pelly      else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
77847e37c4428509524ee576920a98381f3e4872493Nick Pelly          OMX_MAX_STRINGNAME_SIZE))
77947e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
78047e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)m_sParamProfileLevel.eProfile;
78147e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)m_sParamProfileLevel.eLevel;
78247e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_LOW("\n H263 profile = %d, level = %d", m_sParamH263.eProfile,
78347e37c4428509524ee576920a98381f3e4872493Nick Pelly              m_sParamH263.eLevel);
78447e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
785826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
786826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          OMX_MAX_STRINGNAME_SIZE))
78747e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
78847e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile;
78947e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel;
79047e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile,
79147e37c4428509524ee576920a98381f3e4872493Nick Pelly              m_sParamAVC.eLevel);
79247e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
79347e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
79447e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
79547e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamStandardComponentRole:
79647e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
79747e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_PARAM_COMPONENTROLETYPE *comp_role;
79847e37c4428509524ee576920a98381f3e4872493Nick Pelly      comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData;
79947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamStandardComponentRole %s\n",
80047e37c4428509524ee576920a98381f3e4872493Nick Pelly                  comp_role->cRole);
80147e37c4428509524ee576920a98381f3e4872493Nick Pelly
80247e37c4428509524ee576920a98381f3e4872493Nick Pelly      if((m_state == OMX_StateLoaded)&&
80347e37c4428509524ee576920a98381f3e4872493Nick Pelly          !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING))
80447e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
80547e37c4428509524ee576920a98381f3e4872493Nick Pelly         DEBUG_PRINT_LOW("Set Parameter called in valid state");
80647e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
80747e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
80847e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
80947e37c4428509524ee576920a98381f3e4872493Nick Pelly         DEBUG_PRINT_ERROR("Set Parameter called in Invalid State\n");
81047e37c4428509524ee576920a98381f3e4872493Nick Pelly         return OMX_ErrorIncorrectStateOperation;
81147e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
81247e37c4428509524ee576920a98381f3e4872493Nick Pelly
81347e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE))
81447e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
81547e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE))
81647e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
817826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
81847e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
81947e37c4428509524ee576920a98381f3e4872493Nick Pelly        else
82047e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
82147e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
82247e37c4428509524ee576920a98381f3e4872493Nick Pelly          eRet =OMX_ErrorUnsupportedSetting;
82347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
82447e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
82547e37c4428509524ee576920a98381f3e4872493Nick Pelly      else if(!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE))
82647e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
82747e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(!strncmp((const char*)comp_role->cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE))
82847e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
829826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          strlcpy((char*)m_cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
83047e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
83147e37c4428509524ee576920a98381f3e4872493Nick Pelly        else
83247e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
83347e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
83447e37c4428509524ee576920a98381f3e4872493Nick Pelly          eRet = OMX_ErrorUnsupportedSetting;
83547e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
83647e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
83747e37c4428509524ee576920a98381f3e4872493Nick Pelly      else if(!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE))
83847e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
83947e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(!strncmp((const char*)comp_role->cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE))
84047e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
841826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          strlcpy((char*)m_cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE);
84247e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
84347e37c4428509524ee576920a98381f3e4872493Nick Pelly        else
84447e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
84547e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
84647e37c4428509524ee576920a98381f3e4872493Nick Pelly          eRet =OMX_ErrorUnsupportedSetting;
84747e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
84847e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
84947e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
85047e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
85147e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %s\n", m_nkind);
85247e37c4428509524ee576920a98381f3e4872493Nick Pelly        eRet = OMX_ErrorInvalidComponentName;
85347e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
85447e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
85547e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
85647e37c4428509524ee576920a98381f3e4872493Nick Pelly
85747e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamPriorityMgmt:
85847e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
85947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt");
86047e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(m_state != OMX_StateLoaded)
86147e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
86247e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State\n");
86347e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorIncorrectStateOperation;
86447e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
86547e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_PRIORITYMGMTTYPE *priorityMgmtype = (OMX_PRIORITYMGMTTYPE*) paramData;
86647e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt %d\n",
86747e37c4428509524ee576920a98381f3e4872493Nick Pelly                  priorityMgmtype->nGroupID);
86847e37c4428509524ee576920a98381f3e4872493Nick Pelly
86947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: priorityMgmtype %d\n",
87047e37c4428509524ee576920a98381f3e4872493Nick Pelly                  priorityMgmtype->nGroupPriority);
87147e37c4428509524ee576920a98381f3e4872493Nick Pelly
87247e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sPriorityMgmt.nGroupID = priorityMgmtype->nGroupID;
87347e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sPriorityMgmt.nGroupPriority = priorityMgmtype->nGroupPriority;
87447e37c4428509524ee576920a98381f3e4872493Nick Pelly
87547e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
87647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
87747e37c4428509524ee576920a98381f3e4872493Nick Pelly
87847e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamCompBufferSupplier:
87947e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
88047e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier");
88147e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData;
88247e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier %d\n",
88347e37c4428509524ee576920a98381f3e4872493Nick Pelly                  bufferSupplierType->eBufferSupplier);
88447e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(bufferSupplierType->nPortIndex == 0 || bufferSupplierType->nPortIndex ==1)
88547e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sInBufSupplier.eBufferSupplier = bufferSupplierType->eBufferSupplier;
88647e37c4428509524ee576920a98381f3e4872493Nick Pelly
88747e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
88847e37c4428509524ee576920a98381f3e4872493Nick Pelly
88947e37c4428509524ee576920a98381f3e4872493Nick Pelly        eRet = OMX_ErrorBadPortIndex;
89047e37c4428509524ee576920a98381f3e4872493Nick Pelly
89147e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
89247e37c4428509524ee576920a98381f3e4872493Nick Pelly
89347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
89447e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexParamVideoQuantization:
89547e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
89647e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoQuantization\n");
89747e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData;
89847e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(session_qp->nPortIndex == PORT_INDEX_OUT)
89947e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
90047e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_param(paramData, OMX_IndexParamVideoQuantization) != true)
90147e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
90247e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
90347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
90447e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sSessionQuantization.nQpI = session_qp->nQpI;
90547e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sSessionQuantization.nQpP = session_qp->nQpP;
90647e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
90747e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
90847e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
90947e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("\nERROR: Unsupported port Index for Session QP setting\n");
91047e37c4428509524ee576920a98381f3e4872493Nick Pelly        eRet = OMX_ErrorBadPortIndex;
91147e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
91247e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
91347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
91447e37c4428509524ee576920a98381f3e4872493Nick Pelly
91547e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_QcomIndexPortDefn:
91647e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
91747e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_QCOM_PARAM_PORTDEFINITIONTYPE* pParam =
91847e37c4428509524ee576920a98381f3e4872493Nick Pelly          (OMX_QCOM_PARAM_PORTDEFINITIONTYPE*)paramData;
91947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexPortDefn");
92047e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(pParam->nPortIndex == (OMX_U32)PORT_INDEX_IN)
92147e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
92247e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(pParam->nMemRegion > OMX_QCOM_MemRegionInvalid &&
92347e37c4428509524ee576920a98381f3e4872493Nick Pelly          pParam->nMemRegion < OMX_QCOM_MemRegionMax)
92447e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
92547e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_use_input_pmem = OMX_TRUE;
92647e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
92747e37c4428509524ee576920a98381f3e4872493Nick Pelly        else
92847e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
92947e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_use_input_pmem = OMX_FALSE;
93047e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
93147e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
93247e37c4428509524ee576920a98381f3e4872493Nick Pelly      else if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_OUT)
93347e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
93447e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(pParam->nMemRegion > OMX_QCOM_MemRegionInvalid &&
93547e37c4428509524ee576920a98381f3e4872493Nick Pelly          pParam->nMemRegion < OMX_QCOM_MemRegionMax)
93647e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
93747e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_use_output_pmem = OMX_TRUE;
93847e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
93947e37c4428509524ee576920a98381f3e4872493Nick Pelly        else
94047e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
94147e37c4428509524ee576920a98381f3e4872493Nick Pelly          m_use_output_pmem = OMX_FALSE;
94247e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
94347e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
94447e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
94547e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
94647e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: SetParameter called on unsupported Port Index for QcomPortDefn");
94747e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorBadPortIndex;
94847e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
94947e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
95047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
951826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
952826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_IndexParamVideoErrorCorrection:
953826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
954826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	    DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection\n");
955826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* pParam =
956826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData;
957826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(!handle->venc_set_param(paramData, OMX_IndexParamVideoErrorCorrection))
958826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
959826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("\nERROR: Request for setting Error Resilience failed");
960826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorUnsupportedSetting;
961826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
962826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&m_sErrorCorrection,pParam, sizeof(m_sErrorCorrection));
963826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      break;
964826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
965826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_IndexParamVideoIntraRefresh:
96647e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
967826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      DEBUG_PRINT_LOW("set_param:OMX_IndexParamVideoIntraRefresh\n");
968826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      OMX_VIDEO_PARAM_INTRAREFRESHTYPE* pParam =
969826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData;
970826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(!handle->venc_set_param(paramData,OMX_IndexParamVideoIntraRefresh))
97147e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
972826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("\nERROR: Request for setting intra refresh failed");
973826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorUnsupportedSetting;
974826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
975826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      memcpy(&m_sIntraRefresh, pParam, sizeof(m_sIntraRefresh));
976826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      break;
977826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
978826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
979826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_QcomIndexParamVideoEncodeMetaBufferMode:
980826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
981826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      StoreMetaDataInBuffersParams *pParam =
982826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        (StoreMetaDataInBuffersParams*)paramData;
983826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(pParam->nPortIndex == PORT_INDEX_IN)
984826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
985826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->bStoreMetaData != meta_mode_enable)
98647e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
987826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if(!handle->venc_set_meta_mode(pParam->bStoreMetaData))
988826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          {
989826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            DEBUG_PRINT_ERROR("\nERROR: set Metabuffer mode %d fail",
990826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                         pParam->bStoreMetaData);
991826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            return OMX_ErrorUnsupportedSetting;
992826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          }
993826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          meta_mode_enable = pParam->bStoreMetaData;
994826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if(meta_mode_enable) {
995b88cb6921518253c26b91aa4db1eb1a96cf80577Haynes Mathew George            m_sInPortDef.nBufferCountActual = 4;
996826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            if(handle->venc_set_param(&m_sInPortDef,OMX_IndexParamPortDefinition) != true)
997826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            {
998826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              DEBUG_PRINT_ERROR("\nERROR: venc_set_param input failed");
999826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              return OMX_ErrorUnsupportedSetting;
1000826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
1001826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          } else {
1002826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            /*TODO: reset encoder driver Meta mode*/
1003826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            dev_get_buf_req   (&m_sOutPortDef.nBufferCountMin,
1004826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               &m_sOutPortDef.nBufferCountActual,
1005826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               &m_sOutPortDef.nBufferSize,
1006826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               m_sOutPortDef.nPortIndex);
1007826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          }
1008826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1009826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1010826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      break;
1011826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
1012826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
1013826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef MAX_RES_720P
1014826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_QcomIndexParamIndexExtraDataType:
1015826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
1016826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexParamIndexExtraDataType");
1017826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData;
1018826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo)
1019826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1020826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if (pParam->nPortIndex == PORT_INDEX_OUT)
1021826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1022826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if (pParam->bEnabled == OMX_TRUE)
1023826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sExtraData |= VEN_EXTRADATA_SLICEINFO;
1024826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          else
1025826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sExtraData &= ~VEN_EXTRADATA_SLICEINFO;
1026826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_HIGH("set_param: m_sExtraData=%x", m_sExtraData);
1027826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if(handle->venc_set_param(&m_sExtraData,
1028826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) != true)
1029826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          {
1030826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            DEBUG_PRINT_ERROR("ERROR: Setting "
1031826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev               "OMX_QcomIndexParamIndexExtraDataType failed");
1032826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            return OMX_ErrorUnsupportedSetting;
1033826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          }
1034826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          else
1035826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          {
1036826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sOutPortDef.nPortIndex = PORT_INDEX_OUT;
1037826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
1038826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            &m_sOutPortDef.nBufferCountActual,
1039826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            &m_sOutPortDef.nBufferSize,
1040826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                             m_sOutPortDef.nPortIndex);
1041826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%d, "
1042826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                "count min=%d, buffer size=%d",
1043826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                m_sOutPortDef.nBufferCountActual,
1044826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                m_sOutPortDef.nBufferCountMin,
1045826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                m_sOutPortDef.nBufferSize);
1046826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          }
1047826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1048826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        else
1049826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1050826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("set_parameter: slice information is "
1051826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              "valid for output port only");
1052826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          eRet = OMX_ErrorUnsupportedIndex;
105347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
105447e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
105547e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
105647e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
1057826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("set_parameter: unsupported index (%x), "
1058826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            "only slice information extradata is supported", pParam->nIndex);
1059826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        eRet = OMX_ErrorUnsupportedIndex;
106047e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
106147e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
106247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
1063826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
1064826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_QcomIndexParamVideoMaxAllowedBitrateCheck:
106547e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
1066826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      QOMX_EXTNINDEX_PARAMTYPE* pParam =
1067826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
1068826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(pParam->nPortIndex == PORT_INDEX_OUT)
1069826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1070826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        handle->m_max_allowed_bitrate_check =
1071826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           ((pParam->bEnable == OMX_TRUE) ? true : false);
1072826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_HIGH("set_parameter: max allowed bitrate check %s",
1073826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           ((pParam->bEnable == OMX_TRUE) ? "enabled" : "disabled"));
1074826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1075826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else
1076826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1077826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexParamVideoMaxAllowedBitrateCheck "
1078826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           " called on wrong port(%d)", pParam->nPortIndex);
1079826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorBadPortIndex;
1080826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
108147e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
108247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
1083826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
1084826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_QcomIndexEnableSliceDeliveryMode:
108547e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
1086826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      QOMX_EXTNINDEX_PARAMTYPE* pParam =
1087826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
1088826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(pParam->nPortIndex == PORT_INDEX_OUT)
1089826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1090826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(!handle->venc_set_param(paramData,
1091826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode))
1092826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1093826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("ERROR: Request for setting slice delivery mode failed");
1094826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          return OMX_ErrorUnsupportedSetting;
1095826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1096826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1097826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else
1098826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1099826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableSliceDeliveryMode "
1100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           "called on wrong port(%d)", pParam->nPortIndex);
1101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorBadPortIndex;
1102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
110347e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
110447e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
1105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
11063145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian  case OMX_QcomIndexParamSequenceHeaderWithIDR:
11073145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian    {
11083145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian      if(!handle->venc_set_param(paramData,
11093145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian            (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR))
11103145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian      {
11113145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian        DEBUG_PRINT_ERROR("ERROR: Request for setting inband sps/pps failed");
11123145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian        return OMX_ErrorUnsupportedSetting;
11133145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian      }
11143145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian      break;
11153145f89c1398e32bb7fc6cc03866388f42d2bad3Deva Ramasubramanian    }
1116826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_IndexParamVideoSliceFMO:
111747e37c4428509524ee576920a98381f3e4872493Nick Pelly  default:
111847e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
111947e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %d\n", paramIndex);
112047e37c4428509524ee576920a98381f3e4872493Nick Pelly      eRet = OMX_ErrorUnsupportedIndex;
112147e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
112247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
112347e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
112447e37c4428509524ee576920a98381f3e4872493Nick Pelly  return eRet;
112547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
112647e37c4428509524ee576920a98381f3e4872493Nick Pelly
1127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::update_profile_level()
1128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_U32 eProfile, eLevel;
1130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  if(!handle->venc_get_profile_level(&eProfile,&eLevel))
1132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  {
1133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    DEBUG_PRINT_ERROR("\nFailed to update the profile_level\n");
1134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    return false;
1135826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  }
1136826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamProfileLevel.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile;
1138826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  m_sParamProfileLevel.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel;
1139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1140826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\
1141826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              OMX_MAX_STRINGNAME_SIZE))
1142826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  {
1143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile;
1144826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel;
1145826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    DEBUG_PRINT_LOW("\n MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile,
1146826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                    m_sParamMPEG4.eLevel);
1147826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  }
1148826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
1149826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                   OMX_MAX_STRINGNAME_SIZE))
1150826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  {
1151826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)eProfile;
1152826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)eLevel;
1153826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    DEBUG_PRINT_LOW("\n H263 profile = %d, level = %d", m_sParamH263.eProfile,
1154826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                    m_sParamH263.eLevel);
1155826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  }
1156826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
1157826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                   OMX_MAX_STRINGNAME_SIZE))
1158826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  {
1159826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile;
1160826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel;
1161826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile,
1162826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                    m_sParamAVC.eLevel);
1163826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  }
1164826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return true;
1165826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
116647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
116747e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION
116847e37c4428509524ee576920a98381f3e4872493Nick Pelly  omx_video::SetConfig
116947e37c4428509524ee576920a98381f3e4872493Nick Pelly
117047e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
117147e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX Set Config method implementation
117247e37c4428509524ee576920a98381f3e4872493Nick Pelly
117347e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
117447e37c4428509524ee576920a98381f3e4872493Nick Pelly  <TBD>.
117547e37c4428509524ee576920a98381f3e4872493Nick Pelly
117647e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
117747e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX Error None if successful.
117847e37c4428509524ee576920a98381f3e4872493Nick Pelly========================================================================== */
117947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::set_config(OMX_IN OMX_HANDLETYPE      hComp,
118047e37c4428509524ee576920a98381f3e4872493Nick Pelly                                     OMX_IN OMX_INDEXTYPE configIndex,
118147e37c4428509524ee576920a98381f3e4872493Nick Pelly                                     OMX_IN OMX_PTR        configData)
118247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
118347e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(configData == NULL)
118447e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
118547e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("ERROR: param is null");
118647e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorBadParameter;
118747e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
118847e37c4428509524ee576920a98381f3e4872493Nick Pelly
118947e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(m_state == OMX_StateInvalid)
119047e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
119147e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("ERROR: config called in Invalid state");
119247e37c4428509524ee576920a98381f3e4872493Nick Pelly    return OMX_ErrorIncorrectStateOperation;
119347e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
119447e37c4428509524ee576920a98381f3e4872493Nick Pelly
119547e37c4428509524ee576920a98381f3e4872493Nick Pelly  // params will be validated prior to venc_init
119647e37c4428509524ee576920a98381f3e4872493Nick Pelly  switch(configIndex)
119747e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
119847e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexConfigVideoBitrate:
119947e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
120047e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_VIDEO_CONFIG_BITRATETYPE* pParam =
120147e37c4428509524ee576920a98381f3e4872493Nick Pelly        reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData);
120247e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("\n omx_venc:: set_config(): OMX_IndexConfigVideoBitrate");
120347e37c4428509524ee576920a98381f3e4872493Nick Pelly
120447e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(pParam->nPortIndex == PORT_INDEX_OUT)
120547e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
120647e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_config(configData, OMX_IndexConfigVideoBitrate) != true)
120747e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
120847e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoBitrate failed");
120947e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
121047e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
121147e37c4428509524ee576920a98381f3e4872493Nick Pelly
121247e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sConfigBitrate.nEncodeBitrate = pParam->nEncodeBitrate;
121347e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sParamBitrate.nTargetBitrate = pParam->nEncodeBitrate;
121447e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sOutPortDef.format.video.nBitrate = pParam->nEncodeBitrate;
121547e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
121647e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
121747e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
121847e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", pParam->nPortIndex);
121947e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorBadPortIndex;
122047e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
122147e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
122247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
122347e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexConfigVideoFramerate:
122447e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
122547e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_CONFIG_FRAMERATETYPE* pParam =
122647e37c4428509524ee576920a98381f3e4872493Nick Pelly        reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData);
122747e37c4428509524ee576920a98381f3e4872493Nick Pelly      DEBUG_PRINT_LOW("\n omx_venc:: set_config(): OMX_IndexConfigVideoFramerate");
122847e37c4428509524ee576920a98381f3e4872493Nick Pelly
122947e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(pParam->nPortIndex == PORT_INDEX_OUT)
123047e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
123147e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_config(configData, OMX_IndexConfigVideoFramerate) != true)
123247e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
123347e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoFramerate failed");
123447e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
123547e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
123647e37c4428509524ee576920a98381f3e4872493Nick Pelly
123747e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sConfigFramerate.xEncodeFramerate = pParam->xEncodeFramerate;
123847e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sOutPortDef.format.video.xFramerate = pParam->xEncodeFramerate;
123947e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sOutPortFormat.xFramerate = pParam->xEncodeFramerate;
124047e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
124147e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
124247e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
124347e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", pParam->nPortIndex);
124447e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorBadPortIndex;
124547e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
124647e37c4428509524ee576920a98381f3e4872493Nick Pelly
124747e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
124847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
1249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case QOMX_IndexConfigVideoIntraperiod:
1250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
1251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      QOMX_VIDEO_INTRAPERIODTYPE* pParam =
1252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData);
1253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(pParam->nPortIndex == PORT_INDEX_OUT)
1255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1256826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
1257826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(pParam->nBFrames > 0)
1258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1259826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("B frames not supported\n");
1260826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          return OMX_ErrorUnsupportedSetting;
1261826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1262826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
1263826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(handle->venc_set_config(configData, (OMX_INDEXTYPE) QOMX_IndexConfigVideoIntraperiod) != true)
1264826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1265826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("ERROR: Setting QOMX_IndexConfigVideoIntraperiod failed");
1266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          return OMX_ErrorUnsupportedSetting;
1267826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1268826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        m_sIntraperiod.nPFrames = pParam->nPFrames;
1269826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        m_sIntraperiod.nBFrames = pParam->nBFrames;
1270826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        m_sIntraperiod.nIDRPeriod = pParam->nIDRPeriod;
1271826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1272826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        if(m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingMPEG4)
1273826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          m_sParamMPEG4.nPFrames = pParam->nPFrames;
1275826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if(m_sParamMPEG4.eProfile != OMX_VIDEO_MPEG4ProfileSimple)
1276826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sParamMPEG4.nBFrames = pParam->nBFrames;
1277826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          else
1278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sParamMPEG4.nBFrames = 0;
1279826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1280826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        else if(m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingH263)
1281826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1282826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          m_sParamH263.nPFrames = pParam->nPFrames;
1283826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1284826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        else
1285826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        {
1286826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          m_sParamAVC.nPFrames = pParam->nPFrames;
1287826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if(m_sParamAVC.eProfile != OMX_VIDEO_AVCProfileBaseline)
1288826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sParamAVC.nBFrames = pParam->nBFrames;
1289826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          else
1290826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            m_sParamAVC.nBFrames = 0;
1291826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
1292826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1293826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else
1294826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1295826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("ERROR: (QOMX_IndexConfigVideoIntraperiod) Unsupported port index: %u", pParam->nPortIndex);
1296826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorBadPortIndex;
1297826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1298826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1299826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      break;
1300826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
1301826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
130247e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexConfigVideoIntraVOPRefresh:
130347e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
130447e37c4428509524ee576920a98381f3e4872493Nick Pelly      OMX_CONFIG_INTRAREFRESHVOPTYPE* pParam =
130547e37c4428509524ee576920a98381f3e4872493Nick Pelly        reinterpret_cast<OMX_CONFIG_INTRAREFRESHVOPTYPE*>(configData);
130647e37c4428509524ee576920a98381f3e4872493Nick Pelly
130747e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(pParam->nPortIndex == PORT_INDEX_OUT)
130847e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
130947e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(handle->venc_set_config(configData,
131047e37c4428509524ee576920a98381f3e4872493Nick Pelly            OMX_IndexConfigVideoIntraVOPRefresh) != true)
131147e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
131247e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoIntraVOPRefresh failed");
131347e37c4428509524ee576920a98381f3e4872493Nick Pelly          return OMX_ErrorUnsupportedSetting;
131447e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
131547e37c4428509524ee576920a98381f3e4872493Nick Pelly
131647e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sConfigIntraRefreshVOP.IntraRefreshVOP = pParam->IntraRefreshVOP;
131747e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
131847e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
131947e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
132047e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", pParam->nPortIndex);
132147e37c4428509524ee576920a98381f3e4872493Nick Pelly        return OMX_ErrorBadPortIndex;
132247e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
132347e37c4428509524ee576920a98381f3e4872493Nick Pelly
132447e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
132547e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
132647e37c4428509524ee576920a98381f3e4872493Nick Pelly  case OMX_IndexConfigCommonRotate:
132747e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
1328826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      OMX_CONFIG_ROTATIONTYPE *pParam =
1329826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev         reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData);
1330826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      OMX_S32 nRotation;
1331826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1332826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(pParam->nPortIndex != PORT_INDEX_IN){
1333826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", pParam->nPortIndex);
1334826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           return OMX_ErrorBadPortIndex;
1335826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1336826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if( pParam->nRotation == 0   ||
1337826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          pParam->nRotation == 90  ||
1338826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          pParam->nRotation == 180 ||
1339826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          pParam->nRotation == 270 ) {
1340826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_HIGH("\nset_config: Rotation Angle %u", pParam->nRotation);
1341826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      } else {
1342826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_ERROR("ERROR: un supported Rotation %u", pParam->nRotation);
1343826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          return OMX_ErrorUnsupportedSetting;
1344826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1345826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      nRotation = pParam->nRotation - m_sConfigFrameRotation.nRotation;
1346826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(nRotation < 0)
1347826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        nRotation = -nRotation;
1348826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(nRotation == 90 || nRotation == 270) {
1349826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          DEBUG_PRINT_HIGH("\nset_config: updating device Dims");
1350826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          if(handle->venc_set_config(configData,
1351826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev             OMX_IndexConfigCommonRotate) != true) {
1352826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev             DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonRotate failed");
1353826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev             return OMX_ErrorUnsupportedSetting;
1354826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          } else {
1355826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  OMX_U32 nFrameWidth;
1356826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  DEBUG_PRINT_HIGH("\nset_config: updating port Dims");
1358826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1359826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  nFrameWidth = m_sInPortDef.format.video.nFrameWidth;
1360826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	          m_sInPortDef.format.video.nFrameWidth =
1361826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                      m_sInPortDef.format.video.nFrameHeight;
1362826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  m_sInPortDef.format.video.nFrameHeight = nFrameWidth;
1363826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1364826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  m_sOutPortDef.format.video.nFrameWidth  =
1365826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                      m_sInPortDef.format.video.nFrameWidth;
1366826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  m_sOutPortDef.format.video.nFrameHeight =
1367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                      m_sInPortDef.format.video.nFrameHeight;
1368826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                  m_sConfigFrameRotation.nRotation = pParam->nRotation;
1369826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev           }
1370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       } else {
1371826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          m_sConfigFrameRotation.nRotation = pParam->nRotation;
1372826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1373826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      break;
1374826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
1375826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  case OMX_QcomIndexConfigVideoFramePackingArrangement:
1376826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
1377826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      if(m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingAVC)
1378826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1379826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_QCOM_FRAME_PACK_ARRANGEMENT *configFmt =
1380826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev          (OMX_QCOM_FRAME_PACK_ARRANGEMENT *) configData;
1381826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        extra_data_handle.set_frame_pack_data(configFmt);
1382826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
1383826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      else
1384826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      {
1385826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        DEBUG_PRINT_ERROR("ERROR: FramePackingData not supported for non AVC compression");
1386826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      }
138747e37c4428509524ee576920a98381f3e4872493Nick Pelly      break;
138847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
138947e37c4428509524ee576920a98381f3e4872493Nick Pelly  default:
139047e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex);
139147e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
139247e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
139347e37c4428509524ee576920a98381f3e4872493Nick Pelly
139447e37c4428509524ee576920a98381f3e4872493Nick Pelly  return OMX_ErrorNone;
139547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
139647e37c4428509524ee576920a98381f3e4872493Nick Pelly
139747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
139847e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION
139947e37c4428509524ee576920a98381f3e4872493Nick Pelly  omx_venc::ComponentDeInit
140047e37c4428509524ee576920a98381f3e4872493Nick Pelly
140147e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
140247e37c4428509524ee576920a98381f3e4872493Nick Pelly  Destroys the component and release memory allocated to the heap.
140347e37c4428509524ee576920a98381f3e4872493Nick Pelly
140447e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
140547e37c4428509524ee576920a98381f3e4872493Nick Pelly  <TBD>.
140647e37c4428509524ee576920a98381f3e4872493Nick Pelly
140747e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
140847e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX Error None if everything successful.
140947e37c4428509524ee576920a98381f3e4872493Nick Pelly
141047e37c4428509524ee576920a98381f3e4872493Nick Pelly========================================================================== */
141147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::component_deinit(OMX_IN OMX_HANDLETYPE hComp)
141247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
141347e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_U32 i = 0;
141447e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("\n omx_venc(): Inside component_deinit()");
141547e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(OMX_StateLoaded != m_state)
141647e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
141747e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("WARNING:Rxd DeInit,OMX not in LOADED state %d\n",\
141847e37c4428509524ee576920a98381f3e4872493Nick Pelly                      m_state);
141947e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
142047e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(m_out_mem_ptr)
142147e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
142247e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_LOW("Freeing the Output Memory\n");
142347e37c4428509524ee576920a98381f3e4872493Nick Pelly    for(i=0; i< m_sOutPortDef.nBufferCountActual; i++ )
142447e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
142547e37c4428509524ee576920a98381f3e4872493Nick Pelly      free_output_buffer (&m_out_mem_ptr[i]);
142647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
142747e37c4428509524ee576920a98381f3e4872493Nick Pelly    free(m_out_mem_ptr);
142847e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_out_mem_ptr = NULL;
142947e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
143047e37c4428509524ee576920a98381f3e4872493Nick Pelly
143147e37c4428509524ee576920a98381f3e4872493Nick Pelly  /*Check if the input buffers have to be cleaned up*/
1432826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  if(m_inp_mem_ptr
1433826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
1434826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev     && !meta_mode_enable
1435826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
1436826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev     )
143747e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
143847e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_LOW("Freeing the Input Memory\n");
143947e37c4428509524ee576920a98381f3e4872493Nick Pelly    for(i=0; i<m_sInPortDef.nBufferCountActual; i++ )
144047e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
144147e37c4428509524ee576920a98381f3e4872493Nick Pelly      free_input_buffer (&m_inp_mem_ptr[i]);
144247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
144347e37c4428509524ee576920a98381f3e4872493Nick Pelly
144447e37c4428509524ee576920a98381f3e4872493Nick Pelly
144547e37c4428509524ee576920a98381f3e4872493Nick Pelly    free(m_inp_mem_ptr);
144647e37c4428509524ee576920a98381f3e4872493Nick Pelly    m_inp_mem_ptr = NULL;
144747e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
144847e37c4428509524ee576920a98381f3e4872493Nick Pelly
144947e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Reset counters in mesg queues
145047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_ftb_q.m_size=0;
145147e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_cmd_q.m_size=0;
145247e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_etb_q.m_size=0;
145347e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_ftb_q.m_read = m_ftb_q.m_write =0;
145447e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_cmd_q.m_read = m_cmd_q.m_write =0;
145547e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_etb_q.m_read = m_etb_q.m_write =0;
145647e37c4428509524ee576920a98381f3e4872493Nick Pelly
145747e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_
145847e37c4428509524ee576920a98381f3e4872493Nick Pelly  // Clear the strong reference
145947e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("Calling m_heap_ptr.clear()\n");
146047e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_heap_ptr.clear();
146147e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_
146247e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("Calling venc_close()\n");
146347e37c4428509524ee576920a98381f3e4872493Nick Pelly  handle->venc_close();
146447e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("Deleting HANDLE[%p]\n", handle);
146547e37c4428509524ee576920a98381f3e4872493Nick Pelly  delete (handle);
146647e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_HIGH("OMX_Venc:Component Deinit\n");
146747e37c4428509524ee576920a98381f3e4872493Nick Pelly  return OMX_ErrorNone;
146847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
146947e37c4428509524ee576920a98381f3e4872493Nick Pelly
147047e37c4428509524ee576920a98381f3e4872493Nick Pelly
147147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_stop( void)
147247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
147347e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_stop();
147447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
147547e37c4428509524ee576920a98381f3e4872493Nick Pelly
147647e37c4428509524ee576920a98381f3e4872493Nick Pelly
147747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_pause(void)
147847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
147947e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_pause();
148047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
148147e37c4428509524ee576920a98381f3e4872493Nick Pelly
148247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_start(void)
148347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
148447e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_start();
148547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
148647e37c4428509524ee576920a98381f3e4872493Nick Pelly
148747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_flush(unsigned port)
148847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
148947e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_flush(port);
149047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
149147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_resume(void)
149247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
149347e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_resume();
149447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
149547e37c4428509524ee576920a98381f3e4872493Nick Pelly
1496826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 omx_venc::dev_start_done(void)
149747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
1498826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_start_done();
1499826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1500826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1501826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 omx_venc::dev_stop_done(void)
1502826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1503826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_stop_done();
1504826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1505826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1506826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index)
1507826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1508826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_use_buf(buf_addr,port,index);
150947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
151047e37c4428509524ee576920a98381f3e4872493Nick Pelly
151147e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_free_buf(void *buf_addr,unsigned port)
151247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
151347e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_free_buf(buf_addr,port);
151447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
151547e37c4428509524ee576920a98381f3e4872493Nick Pelly
1516826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_empty_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd)
151747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
1518826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return  handle->venc_empty_buf(buffer, pmem_data_buf,index,fd);
151947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
152047e37c4428509524ee576920a98381f3e4872493Nick Pelly
1521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_fill_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd)
152247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
1523826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_fill_buf(buffer, pmem_data_buf,index,fd);
152447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
152547e37c4428509524ee576920a98381f3e4872493Nick Pelly
1526826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_get_seq_hdr(void *buffer, unsigned size, unsigned *hdrlen)
1527826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1528826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_get_seq_hdr(buffer, size, hdrlen);
1529826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1530826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1531826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start()
1532826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1533826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_loaded_start();
1534826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1535826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1536826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop()
1537826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1538826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_loaded_stop();
1539826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1540826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1541826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start_done()
1542826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1543826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_loaded_start_done();
1544826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
1545826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1546826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop_done()
1547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
1548826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  return handle->venc_loaded_stop_done();
1549826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
155047e37c4428509524ee576920a98381f3e4872493Nick Pelly
155147e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_get_buf_req(OMX_U32 *min_buff_count,
155247e37c4428509524ee576920a98381f3e4872493Nick Pelly                               OMX_U32 *actual_buff_count,
155347e37c4428509524ee576920a98381f3e4872493Nick Pelly                               OMX_U32 *buff_size,
155447e37c4428509524ee576920a98381f3e4872493Nick Pelly                               OMX_U32 port)
155547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
155647e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_get_buf_req(min_buff_count,
155747e37c4428509524ee576920a98381f3e4872493Nick Pelly                                  actual_buff_count,
155847e37c4428509524ee576920a98381f3e4872493Nick Pelly                                  buff_size,
155947e37c4428509524ee576920a98381f3e4872493Nick Pelly                                  port);
156047e37c4428509524ee576920a98381f3e4872493Nick Pelly
156147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
156247e37c4428509524ee576920a98381f3e4872493Nick Pelly
156347e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_set_buf_req(OMX_U32 *min_buff_count,
156447e37c4428509524ee576920a98381f3e4872493Nick Pelly                               OMX_U32 *actual_buff_count,
156547e37c4428509524ee576920a98381f3e4872493Nick Pelly                               OMX_U32 *buff_size,
156647e37c4428509524ee576920a98381f3e4872493Nick Pelly                               OMX_U32 port)
156747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
156847e37c4428509524ee576920a98381f3e4872493Nick Pelly  return handle->venc_set_buf_req(min_buff_count,
156947e37c4428509524ee576920a98381f3e4872493Nick Pelly                                  actual_buff_count,
157047e37c4428509524ee576920a98381f3e4872493Nick Pelly                                  buff_size,
157147e37c4428509524ee576920a98381f3e4872493Nick Pelly                                  port);
157247e37c4428509524ee576920a98381f3e4872493Nick Pelly
157347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
157447e37c4428509524ee576920a98381f3e4872493Nick Pelly
157547e37c4428509524ee576920a98381f3e4872493Nick Pellyint omx_venc::async_message_process (void *context, void* message)
157647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
157747e37c4428509524ee576920a98381f3e4872493Nick Pelly  omx_video* omx = NULL;
157847e37c4428509524ee576920a98381f3e4872493Nick Pelly  struct venc_msg *m_sVenc_msg = NULL;
157947e37c4428509524ee576920a98381f3e4872493Nick Pelly  OMX_BUFFERHEADERTYPE* omxhdr = NULL;
158047e37c4428509524ee576920a98381f3e4872493Nick Pelly  struct venc_buffer *temp_buff = NULL;
158147e37c4428509524ee576920a98381f3e4872493Nick Pelly
158247e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(context == NULL || message == NULL)
158347e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
158447e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("\nERROR: omx_venc::async_message_process invalid i/p params");
158547e37c4428509524ee576920a98381f3e4872493Nick Pelly    return -1;
158647e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
158747e37c4428509524ee576920a98381f3e4872493Nick Pelly  m_sVenc_msg = (struct venc_msg *)message;
158847e37c4428509524ee576920a98381f3e4872493Nick Pelly
158947e37c4428509524ee576920a98381f3e4872493Nick Pelly  omx = reinterpret_cast<omx_video*>(context);
159047e37c4428509524ee576920a98381f3e4872493Nick Pelly
159147e37c4428509524ee576920a98381f3e4872493Nick Pelly  if(m_sVenc_msg->statuscode != VEN_S_SUCCESS)
159247e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
159347e37c4428509524ee576920a98381f3e4872493Nick Pelly    DEBUG_PRINT_ERROR("\nERROR: async_msg_process() - Error statuscode = %d\n",
159447e37c4428509524ee576920a98381f3e4872493Nick Pelly        m_sVenc_msg->statuscode);
159547e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->omx_report_error();
159647e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
159747e37c4428509524ee576920a98381f3e4872493Nick Pelly
159847e37c4428509524ee576920a98381f3e4872493Nick Pelly  DEBUG_PRINT_LOW("\n omx_venc::async_message_process- msgcode = %d\n",
159947e37c4428509524ee576920a98381f3e4872493Nick Pelly               m_sVenc_msg->msgcode);
160047e37c4428509524ee576920a98381f3e4872493Nick Pelly  switch(m_sVenc_msg->msgcode)
160147e37c4428509524ee576920a98381f3e4872493Nick Pelly  {
160247e37c4428509524ee576920a98381f3e4872493Nick Pelly
160347e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_START:
160447e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event (NULL,m_sVenc_msg->statuscode,\
160547e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_START_DONE);
160647e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
160747e37c4428509524ee576920a98381f3e4872493Nick Pelly
160847e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_STOP:
160947e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event (NULL,m_sVenc_msg->statuscode,\
161047e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_STOP_DONE);
161147e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
161247e37c4428509524ee576920a98381f3e4872493Nick Pelly
161347e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_RESUME:
161447e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event (NULL,m_sVenc_msg->statuscode,\
161547e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_RESUME_DONE);
161647e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
161747e37c4428509524ee576920a98381f3e4872493Nick Pelly
161847e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_PAUSE:
161947e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event (NULL,m_sVenc_msg->statuscode,\
162047e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_PAUSE_DONE);
162147e37c4428509524ee576920a98381f3e4872493Nick Pelly
162247e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
162347e37c4428509524ee576920a98381f3e4872493Nick Pelly
162447e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_FLUSH_INPUT_DONE:
162547e37c4428509524ee576920a98381f3e4872493Nick Pelly
162647e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event (NULL,m_sVenc_msg->statuscode,\
162747e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH);
162847e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
162947e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_FLUSH_OUPUT_DONE:
163047e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event (NULL,m_sVenc_msg->statuscode,\
163147e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH);
163247e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
163347e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_INPUT_BUFFER_DONE:
163447e37c4428509524ee576920a98381f3e4872493Nick Pelly    omxhdr = (OMX_BUFFERHEADERTYPE* )\
163547e37c4428509524ee576920a98381f3e4872493Nick Pelly             m_sVenc_msg->buf.clientdata;
163647e37c4428509524ee576920a98381f3e4872493Nick Pelly
163747e37c4428509524ee576920a98381f3e4872493Nick Pelly    if(omxhdr == NULL ||
16387eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George       (((OMX_U32)(omxhdr - omx->m_inp_mem_ptr) > omx->m_sInPortDef.nBufferCountActual) &&
16397eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George        ((OMX_U32)(omxhdr - omx->meta_buffer_hdr) > omx->m_sInPortDef.nBufferCountActual)))
164047e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
164147e37c4428509524ee576920a98381f3e4872493Nick Pelly      omxhdr = NULL;
164247e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sVenc_msg->statuscode = VEN_S_EFAIL;
164347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
16447eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George
1645826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
16467eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George      omx->omx_release_meta_buffer(omxhdr);
1647826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
164847e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event ((unsigned int)omxhdr,m_sVenc_msg->statuscode,
164947e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_EBD);
165047e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
165147e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_OUTPUT_BUFFER_DONE:
165247e37c4428509524ee576920a98381f3e4872493Nick Pelly
165347e37c4428509524ee576920a98381f3e4872493Nick Pelly    omxhdr = (OMX_BUFFERHEADERTYPE*)m_sVenc_msg->buf.clientdata;
165447e37c4428509524ee576920a98381f3e4872493Nick Pelly
165547e37c4428509524ee576920a98381f3e4872493Nick Pelly    if( (omxhdr != NULL) &&
165647e37c4428509524ee576920a98381f3e4872493Nick Pelly        ((OMX_U32)(omxhdr - omx->m_out_mem_ptr)  < omx->m_sOutPortDef.nBufferCountActual))
165747e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
165847e37c4428509524ee576920a98381f3e4872493Nick Pelly      if(m_sVenc_msg->buf.len <=  omxhdr->nAllocLen)
165947e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
166047e37c4428509524ee576920a98381f3e4872493Nick Pelly        omxhdr->nFilledLen = m_sVenc_msg->buf.len;
166147e37c4428509524ee576920a98381f3e4872493Nick Pelly        omxhdr->nOffset = m_sVenc_msg->buf.offset;
166247e37c4428509524ee576920a98381f3e4872493Nick Pelly        omxhdr->nTimeStamp = m_sVenc_msg->buf.timestamp;
166347e37c4428509524ee576920a98381f3e4872493Nick Pelly        DEBUG_PRINT_LOW("\n o/p TS = %u", (OMX_U32)m_sVenc_msg->buf.timestamp);
166447e37c4428509524ee576920a98381f3e4872493Nick Pelly        omxhdr->nFlags = m_sVenc_msg->buf.flags;
166547e37c4428509524ee576920a98381f3e4872493Nick Pelly
166647e37c4428509524ee576920a98381f3e4872493Nick Pelly        /*Use buffer case*/
166747e37c4428509524ee576920a98381f3e4872493Nick Pelly        if(omx->output_use_buffer && !omx->m_use_output_pmem)
166847e37c4428509524ee576920a98381f3e4872493Nick Pelly        {
166947e37c4428509524ee576920a98381f3e4872493Nick Pelly          DEBUG_PRINT_LOW("\n memcpy() for o/p Heap UseBuffer");
167047e37c4428509524ee576920a98381f3e4872493Nick Pelly          memcpy(omxhdr->pBuffer,
167147e37c4428509524ee576920a98381f3e4872493Nick Pelly                 (m_sVenc_msg->buf.ptrbuffer),
167247e37c4428509524ee576920a98381f3e4872493Nick Pelly                  m_sVenc_msg->buf.len);
167347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
167447e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
167547e37c4428509524ee576920a98381f3e4872493Nick Pelly      else
167647e37c4428509524ee576920a98381f3e4872493Nick Pelly      {
167747e37c4428509524ee576920a98381f3e4872493Nick Pelly        omxhdr->nFilledLen = 0;
167847e37c4428509524ee576920a98381f3e4872493Nick Pelly      }
167947e37c4428509524ee576920a98381f3e4872493Nick Pelly
168047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
168147e37c4428509524ee576920a98381f3e4872493Nick Pelly    else
168247e37c4428509524ee576920a98381f3e4872493Nick Pelly    {
168347e37c4428509524ee576920a98381f3e4872493Nick Pelly      omxhdr = NULL;
168447e37c4428509524ee576920a98381f3e4872493Nick Pelly      m_sVenc_msg->statuscode = VEN_S_EFAIL;
168547e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
168647e37c4428509524ee576920a98381f3e4872493Nick Pelly
168747e37c4428509524ee576920a98381f3e4872493Nick Pelly    omx->post_event ((unsigned int)omxhdr,m_sVenc_msg->statuscode,
168847e37c4428509524ee576920a98381f3e4872493Nick Pelly                     OMX_COMPONENT_GENERATE_FBD);
168947e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
169047e37c4428509524ee576920a98381f3e4872493Nick Pelly  case VEN_MSG_NEED_OUTPUT_BUFFER:
169147e37c4428509524ee576920a98381f3e4872493Nick Pelly    //TBD what action needs to be done here??
169247e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
169347e37c4428509524ee576920a98381f3e4872493Nick Pelly  default:
169447e37c4428509524ee576920a98381f3e4872493Nick Pelly    break;
169547e37c4428509524ee576920a98381f3e4872493Nick Pelly  }
169647e37c4428509524ee576920a98381f3e4872493Nick Pelly  return 0;
169747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
16987783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanianbool omx_venc::is_secure_session()
16997783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian{
17007783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian  return secure_session;
17017783f07680c4e868295efbd0cf55a1622a106522Deva Ramasubramanian}
1702