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