147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*-------------------------------------------------------------------------- 2f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh BeharaCopyright (c) 2010-2017, The Linux Foundation. All rights reserved. 347e37c4428509524ee576920a98381f3e4872493Nick Pelly 447e37c4428509524ee576920a98381f3e4872493Nick PellyRedistribution and use in source and binary forms, with or without 547e37c4428509524ee576920a98381f3e4872493Nick Pellymodification, are permitted provided that the following conditions are met: 647e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions of source code must retain the above copyright 747e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer. 847e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions in binary form must reproduce the above copyright 947e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer in the 1047e37c4428509524ee576920a98381f3e4872493Nick Pelly documentation and/or other materials provided with the distribution. 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation nor 1247e37c4428509524ee576920a98381f3e4872493Nick Pelly the names of its contributors may be used to endorse or promote 1347e37c4428509524ee576920a98381f3e4872493Nick Pelly products derived from this software without specific prior written 1447e37c4428509524ee576920a98381f3e4872493Nick Pelly permission. 1547e37c4428509524ee576920a98381f3e4872493Nick Pelly 1647e37c4428509524ee576920a98381f3e4872493Nick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1747e37c4428509524ee576920a98381f3e4872493Nick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1847e37c4428509524ee576920a98381f3e4872493Nick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1947e37c4428509524ee576920a98381f3e4872493Nick PellyNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2047e37c4428509524ee576920a98381f3e4872493Nick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2147e37c4428509524ee576920a98381f3e4872493Nick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2247e37c4428509524ee576920a98381f3e4872493Nick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2347e37c4428509524ee576920a98381f3e4872493Nick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2447e37c4428509524ee576920a98381f3e4872493Nick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2547e37c4428509524ee576920a98381f3e4872493Nick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2647e37c4428509524ee576920a98381f3e4872493Nick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2747e37c4428509524ee576920a98381f3e4872493Nick Pelly--------------------------------------------------------------------------*/ 2847e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "omx_video_encoder.h" 2947e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <string.h> 3047e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <stdio.h> 31e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <fcntl.h> 32e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <dlfcn.h> 33826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 34826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h> 35826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <cutils/properties.h> 38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 39826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef _ANDROID_ 40826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <glib.h> 41826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define strlcpy g_strlcpy 42826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 4347e37c4428509524ee576920a98381f3e4872493Nick Pelly/*---------------------------------------------------------------------------- 4461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Preprocessor Definitions and Constants 4561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * -------------------------------------------------------------------------*/ 4647e37c4428509524ee576920a98381f3e4872493Nick Pelly 4747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_SPEC_VERSION 0x00000101 4847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_INIT_STRUCT(_s_, _name_) \ 4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset((_s_), 0x0, sizeof(_name_)); \ 5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan(_s_)->nSize = sizeof(_name_); \ 5161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan(_s_)->nVersion.nVersion = OMX_SPEC_VERSION 5247e37c4428509524ee576920a98381f3e4872493Nick Pelly 5347e37c4428509524ee576920a98381f3e4872493Nick Pellyextern int m_pipe; 548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstatic int bframes; 558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstatic int entropy; 56f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavanstatic int perfmode; 5747e37c4428509524ee576920a98381f3e4872493Nick Pelly// factory function executed by the core to create instances 5847e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid *get_omx_component_factory_fn(void) 5947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 6061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return(new omx_venc); 6147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 6247e37c4428509524ee576920a98381f3e4872493Nick Pelly 63e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinomx_venc::perf_control::perf_control() 64e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 65e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lib = NULL; 66e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lock_acquire = NULL; 67e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lock_release = NULL; 68e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_handle = 0; 69e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 70e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 71e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinomx_venc::perf_control::~perf_control() 72e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 73e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_perf_handle != 0 && m_perf_lock_release) { 74e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lock_release(m_perf_handle); 75e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 76e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_perf_lib) { 77e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin dlclose(m_perf_lib); 78e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 79e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 80e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 81e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinvoid omx_venc::perf_control::send_hint_to_mpctl(bool state) 82e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 83e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (load_lib() == false) { 84e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return; 85e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 86e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* 0x4601 maps to video encode callback in 87e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * perflock, 46 is the enum number, 01 is 88e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * the state being sent when perflock 89e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * acquire succeeds 90e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin */ 91e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int arg = 0x4601; 92e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 93e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_perf_lock_acquire && state == true) { 94e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_handle = m_perf_lock_acquire(0, 0, &arg, sizeof(arg) / sizeof(int)); 95e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_INFO("Video encode perflock acquired,handle=%d",m_perf_handle); 96e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (m_perf_lock_release && state == false) { 97e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lock_release(m_perf_handle); 98e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_INFO("Video encode perflock released"); 99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_venc::perf_control::load_lib() 103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin char perf_lib_path[PROPERTY_VALUE_MAX] = {0}; 105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_perf_lib) 106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return true; 107e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if ((property_get("ro.vendor.extension_library", perf_lib_path, NULL) <= 0)) { 109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("vendor library not set in ro.vendor.extension_library"); 110e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin goto handle_err; 111e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 112e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if ((m_perf_lib = dlopen(perf_lib_path, RTLD_NOW)) == NULL) { 113e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Failed to open %s : %s",perf_lib_path, dlerror()); 114e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin goto handle_err; 115e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 116e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lock_acquire = (perf_lock_acquire_t)dlsym(m_perf_lib, "perf_lock_acq"); 117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_perf_lock_acquire == NULL) { 118e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Failed to load symbol: perf_lock_acq"); 119e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin goto handle_err; 120e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 121e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_lock_release = (perf_lock_release_t)dlsym(m_perf_lib, "perf_lock_rel"); 122e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_perf_lock_release == NULL) { 123e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Failed to load symbol: perf_lock_rel"); 124e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin goto handle_err; 125e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 126e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 127e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return true; 128e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 129e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinhandle_err: 130e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if(m_perf_lib != NULL) { 131e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin dlclose(m_perf_lib); 132e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 133e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return false; 134e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 135e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 13647e37c4428509524ee576920a98381f3e4872493Nick Pelly//constructor 13747e37c4428509524ee576920a98381f3e4872493Nick Pelly 13847e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_venc::omx_venc() 13947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 140826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_mode_enable = false; 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(meta_buffer_hdr,0,sizeof(meta_buffer_hdr)); 14361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(meta_buffers,0,sizeof(meta_buffers)); 14461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(opaque_buffer_hdr,0,sizeof(opaque_buffer_hdr)); 14561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = false; 14661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan get_syntaxhdr_enable = false; 147826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 1488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bframes = entropy = 0; 1498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char property_value[PROPERTY_VALUE_MAX] = {0}; 1508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.debug.level", property_value, "1"); 1518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan debug_level = atoi(property_value); 1528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 1538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.debug.bframes", property_value, "0"); 1548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bframes = atoi(property_value); 1558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 1568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_get("vidc.debug.entropy", property_value, "1"); 1578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan entropy = !!atoi(property_value); 1588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan property_value[0] = '\0'; 159f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan property_get("vidc.debug.perf.mode", property_value, "0"); 160f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan perfmode = atoi(property_value); 161f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan property_value[0] = '\0'; 162c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni handle = NULL; 163e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_control.send_hint_to_mpctl(true); 16447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 16547e37c4428509524ee576920a98381f3e4872493Nick Pelly 16647e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_venc::~omx_venc() 16747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan get_syntaxhdr_enable = false; 169e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_perf_control.send_hint_to_mpctl(false); 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //nothing to do 17147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 17247e37c4428509524ee576920a98381f3e4872493Nick Pelly 17347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ComponentInit 17647e37c4428509524ee576920a98381f3e4872493Nick Pelly 17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Initialize the component. 17947e37c4428509524ee576920a98381f3e4872493Nick Pelly 18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ctxt -- Context information related to the self. 18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan id -- Event identifier. This could be any of the following: 18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1. Command completion event 18461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2. Buffer done callback event 18561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3. Frame done callback event 18647e37c4428509524ee576920a98381f3e4872493Nick Pelly 18761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 18947e37c4428509524ee576920a98381f3e4872493Nick Pelly 19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 19147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) 19247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 19347e37c4428509524ee576920a98381f3e4872493Nick Pelly 19461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 19561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int fds[2]; 19761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int r; 19861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 19961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CODINGTYPE codec_type; 20061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_venc(): Inside component_init()"); 20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Copy the role information which provides the decoder m_nkind 20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_nkind,role,OMX_MAX_STRINGNAME_SIZE); 2048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan secure_session = false; 20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char *)m_nkind,"OMX.qcom.video.encoder.mpeg4",\ 20761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.mpeg4",\ 20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE); 21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingMPEG4; 21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\ 21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE); 21461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingH263; 21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\ 21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 21761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 21861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type = OMX_VIDEO_CodingAVC; 2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc.secure",\ 2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 2218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 2228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan codec_type = OMX_VIDEO_CodingAVC; 2238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan secure_session = true; 22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2256eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.vp8", \ 22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)m_cRole, "video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE); 2295aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan codec_type = OMX_VIDEO_CodingVP8; 23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2316eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 232f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.hevc", \ 233f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 234f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); 235f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan codec_type = OMX_VIDEO_CodingHEVC; 236f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.hevc.secure", \ 237f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 238f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan strlcpy((char *)m_cRole, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); 239f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan codec_type = OMX_VIDEO_CodingHEVC; 240f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan secure_session = true; 241f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 2428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unknown Component"); 24361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidComponentName; 24461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 24547e37c4428509524ee576920a98381f3e4872493Nick Pelly 24661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet != OMX_ErrorNone) { 24761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 24861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef ENABLE_GET_SYNTAX_HDR 25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan get_syntaxhdr_enable = true; 25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Get syntax header enabled"); 2526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 25347e37c4428509524ee576920a98381f3e4872493Nick Pelly 25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan handle = new venc_dev(this); 25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle == NULL) { 2578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: handle is NULL"); 25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 25947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 26161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_open(codec_type) != true) { 2628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_open failed"); 263c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni eRet = OMX_ErrorInsufficientResources; 264c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni goto init_error; 26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 26661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Intialise the OMX layer variables 26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&m_pCallbacks,0,sizeof(OMX_CALLBACKTYPE)); 26961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPortParam, OMX_PORT_PARAM_TYPE); 27161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam.nPorts = 0x2; 27261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam.nStartPortNumber = (OMX_U32) PORT_INDEX_IN; 27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPortParam_audio, OMX_PORT_PARAM_TYPE); 27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_audio.nPorts = 0; 27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_audio.nStartPortNumber = 0; 27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 27861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPortParam_img, OMX_PORT_PARAM_TYPE); 27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_img.nPorts = 0; 28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPortParam_img.nStartPortNumber = 0; 28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamBitrate, OMX_VIDEO_PARAM_BITRATETYPE); 28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.eControlRate = OMX_Video_ControlRateVariableSkipFrames; 28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = 64000; 28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigBitrate, OMX_VIDEO_CONFIG_BITRATETYPE); 28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = 64000; 29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigFramerate, OMX_CONFIG_FRAMERATETYPE); 29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.xEncodeFramerate = 30 << 16; 29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigIntraRefreshVOP, OMX_CONFIG_INTRAREFRESHVOPTYPE); 29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigIntraRefreshVOP.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigIntraRefreshVOP.IntraRefreshVOP = OMX_FALSE; 29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sConfigFrameRotation, OMX_CONFIG_ROTATIONTYPE); 300f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sConfigFrameRotation.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nRotation = 0; 30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sSessionQuantization, OMX_VIDEO_PARAM_QUANTIZATIONTYPE); 30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpI = 9; 30661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpP = 6; 30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpB = 2; 30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sSessionQPRange, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE); 31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.minQP = 2; 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingAVC) 31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.maxQP = 51; 31447e37c4428509524ee576920a98381f3e4872493Nick Pelly else 31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.maxQP = 31; 31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sAVCSliceFMO, OMX_VIDEO_PARAM_AVCSLICEFMO); 31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.eSliceMode = OMX_VIDEO_SLICEMODE_AVCDefault; 32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.nNumSliceGroups = 0; 32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sAVCSliceFMO.nSliceGroupMapType = 0; 32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamProfileLevel, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sIntraperiod, QOMX_VIDEO_INTRAPERIODTYPE); 32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = (m_sConfigFramerate.xEncodeFramerate * 2) - 1; 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sErrorCorrection, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE); 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableDataPartitioning = OMX_FALSE; 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableHEC = OMX_FALSE; 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableResync = OMX_FALSE; 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.bEnableRVLC = OMX_FALSE; 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sErrorCorrection.nResynchMarkerSpacing = 0; 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sIntraRefresh, OMX_VIDEO_PARAM_INTRAREFRESHTYPE); 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraRefresh.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraRefresh.eRefreshMode = OMX_VIDEO_IntraRefreshMax; 34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 341f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon OMX_INIT_STRUCT(&m_sConfigIntraRefresh, OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE); 342f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon m_sConfigIntraRefresh.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 343f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon m_sConfigIntraRefresh.nRefreshPeriod = 0; 344f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon 345ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan OMX_INIT_STRUCT(&m_sConfigColorAspects, DescribeColorAspectsParams); 346ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan m_sConfigColorAspects.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 347ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan m_sConfigColorAspects.sAspects.mRange = ColorAspects::RangeUnspecified; 348ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan m_sConfigColorAspects.sAspects.mPrimaries = ColorAspects::PrimariesUnspecified; 349ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan m_sConfigColorAspects.sAspects.mMatrixCoeffs = ColorAspects::MatrixUnspecified; 350ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan m_sConfigColorAspects.sAspects.mTransfer = ColorAspects::TransferUnspecified; 351ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan 35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingMPEG4) { 35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_MPEG4ProfileSimple; 35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_MPEG4Level0; 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingH263) { 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_H263ProfileBaseline; 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_H263Level10; 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingAVC) { 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_AVCProfileBaseline; 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_AVCLevel1; 3615aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingVP8) { 3627beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_VP8ProfileMain; 3637beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_VP8Level_Version0; 364f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (codec_type == OMX_VIDEO_CodingHEVC) { 365f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_HEVCProfileMain; 366f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_HEVCMainTierLevel1; 36747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 36847e37c4428509524ee576920a98381f3e4872493Nick Pelly 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the video parameters for input port 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sInPortDef, OMX_PARAM_PORTDEFINITIONTYPE); 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nPortIndex= (OMX_U32) PORT_INDEX_IN; 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bEnabled = OMX_TRUE; 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bPopulated = OMX_FALSE; 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.eDomain = OMX_PortDomainVideo; 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.eDir = OMX_DirInput; 3768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sInPortDef.format.video.cMIMEType = (char *)"YUV420"; 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH; 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT; 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nStride = OMX_CORE_QCIF_WIDTH; 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nSliceHeight = OMX_CORE_QCIF_HEIGHT; 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nBitrate = 64000; 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.xFramerate = 15 << 16; 3830b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE) 384e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin QOMX_DEFAULT_COLOR_FMT; 38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_buf_req(&m_sInPortDef.nBufferCountMin, 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferCountActual, 38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferSize, 39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nPortIndex) != true) { 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUndefined; 392c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni goto init_error; 39347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the video parameters for output port 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE); 39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bEnabled = OMX_TRUE; 39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bPopulated = OMX_FALSE; 40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.eDomain = OMX_PortDomainVideo; 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.eDir = OMX_DirOutput; 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH; 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT; 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nBitrate = 64000; 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.xFramerate = 15 << 16; 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eColorFormat = OMX_COLOR_FormatUnused; 40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingMPEG4) { 40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingH263) { 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingH263; 4117beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingAVC) { 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; 4135aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingVP8) { 4145aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingVP8; 415f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (codec_type == OMX_VIDEO_CodingHEVC) { 416f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sOutPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingHEVC; 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 4187beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano 41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex) != true) { 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUndefined; 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the video color format for input port 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE); 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_IN; 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.nIndex = 0; 4300b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE) 431e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin QOMX_DEFAULT_COLOR_FMT; 43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.eCompressionFormat = OMX_VIDEO_CodingUnused; 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Initialize the compression format for output port 43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sOutPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE); 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.nIndex = 0; 43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eColorFormat = OMX_COLOR_FormatUnused; 44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (codec_type == OMX_VIDEO_CodingMPEG4) { 44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingMPEG4; 44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingH263) { 44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingH263; 4447beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (codec_type == OMX_VIDEO_CodingAVC) { 44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingAVC; 4465aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan } else if (codec_type == OMX_VIDEO_CodingVP8) { 4475aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingVP8; 448f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (codec_type == OMX_VIDEO_CodingHEVC) { 449f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sOutPortFormat.eCompressionFormat = OMX_VIDEO_CodingHEVC; 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // mandatory Indices for kronos test suite 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sPriorityMgmt, OMX_PRIORITYMGMTTYPE); 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sInBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE); 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_IN; 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sOutBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE); 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_INIT_STRUCT(&m_sParamInitqp, QOMX_EXTNINDEX_VIDEO_INITIALQP); 4628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamInitqp.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // mp4 specific init 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamMPEG4, OMX_VIDEO_PARAM_MPEG4TYPE); 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eProfile = OMX_VIDEO_MPEG4ProfileSimple; 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel = OMX_VIDEO_MPEG4Level0; 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nSliceHeaderSpacing = 0; 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bSVH = OMX_FALSE; 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bGov = OMX_FALSE; 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bACPred = OMX_TRUE; 47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nTimeIncRes = 30; // delta = 2 @ 15 fps 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nAllowedPictureTypes = 2; // pframe and iframe 47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nHeaderExtension = 1; // number of video packet headers per vop 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.bReversibleVLC = OMX_FALSE; 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // h263 specific init 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamH263, OMX_VIDEO_PARAM_H263TYPE); 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps 48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nBFrames = 0; 48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eProfile = OMX_VIDEO_H263ProfileBaseline; 48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel = OMX_VIDEO_H263Level10; 48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.bPLUSPTYPEAllowed = OMX_FALSE; 48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nAllowedPictureTypes = 2; 48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.bForceRoundingTypeToZero = OMX_TRUE; 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPictureHeaderRepetition = 0; 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nGOBHeaderInterval = 1; 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // h264 specific init 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamAVC, OMX_VIDEO_PARAM_AVCTYPE); 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nSliceHeaderSpacing = 0; 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nBFrames = 0; 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bUseHadamard = OMX_FALSE; 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nRefIdx10ActiveMinus1 = 1; 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nRefIdx11ActiveMinus1 = 0; 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableUEP = OMX_FALSE; 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableFMO = OMX_FALSE; 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableASO = OMX_FALSE; 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEnableRS = OMX_FALSE; 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eProfile = OMX_VIDEO_AVCProfileBaseline; 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel = OMX_VIDEO_AVCLevel1; 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nAllowedPictureTypes = 2; 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bFrameMBsOnly = OMX_FALSE; 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bMBAFF = OMX_FALSE; 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bEntropyCodingCABAC = OMX_FALSE; 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bWeightedPPrediction = OMX_FALSE; 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nWeightedBipredicitonMode = 0; 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bconstIpred = OMX_FALSE; 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bDirect8x8Inference = OMX_FALSE; 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.bDirectSpatialTemporal = OMX_FALSE; 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nCabacInitIdc = 0; 51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable; 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 5197beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano // VP8 specific init 5207beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_INIT_STRUCT(&m_sParamVP8, OMX_VIDEO_PARAM_VP8TYPE); 5217beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 5227beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eProfile = OMX_VIDEO_VP8ProfileMain; 5237beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel = OMX_VIDEO_VP8Level_Version0; 5247beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.nDCTPartitions = 0; 5257beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.bErrorResilientMode = OMX_FALSE; 5267beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano 527f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan // HEVC specific init 528f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_INIT_STRUCT(&m_sParamHEVC, OMX_VIDEO_PARAM_HEVCTYPE); 529f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 530f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eProfile = OMX_VIDEO_HEVCProfileMain; 531f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eLevel = OMX_VIDEO_HEVCMainTierLevel1; 532f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INIT_STRUCT(&m_sParamLTRMode, QOMX_VIDEO_PARAM_LTRMODE_TYPE); 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamLTRMode.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamLTRMode.eLTRMode = QOMX_VIDEO_LTRMode_Disable; 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 537f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_INIT_STRUCT(&m_sParamLTRCount, QOMX_VIDEO_PARAM_LTRCOUNT_TYPE); 538f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamLTRCount.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 539f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamLTRCount.nCount = 0; 540f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 5418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_INIT_STRUCT(&m_sConfigDeinterlace, OMX_VIDEO_CONFIG_DEINTERLACE); 5428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sConfigDeinterlace.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 5438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sConfigDeinterlace.nEnable = OMX_FALSE; 5448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 5458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_INIT_STRUCT(&m_sHierLayers, QOMX_VIDEO_HIERARCHICALLAYERS); 5468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sHierLayers.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 5478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sHierLayers.nNumLayers = 0; 5488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sHierLayers.eHierarchicalCodingType = QOMX_HIERARCHICALCODING_P; 5498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 550e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_INIT_STRUCT(&m_sMBIStatistics, OMX_QOMX_VIDEO_MBI_STATISTICS); 551e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sMBIStatistics.nPortIndex = (OMX_U32) PORT_INDEX_OUT; 552e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sMBIStatistics.eMBIStatisticsType = QOMX_MBI_STATISTICS_MODE_DEFAULT; 553e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 5548a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar OMX_INIT_STRUCT(&m_sParamTemporalLayers, OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE); 5558a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar m_sParamTemporalLayers.eSupportedPatterns = OMX_VIDEO_AndroidTemporalLayeringPatternAndroid; 5568a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar 5578a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar OMX_INIT_STRUCT(&m_sConfigTemporalLayers, OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE); 558bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch 55970929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan OMX_INIT_STRUCT(&m_sParamAVTimerTimestampMode, QOMX_ENABLETYPE); 56070929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan m_sParamAVTimerTimestampMode.bEnable = OMX_FALSE; 56170929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_state = OMX_StateLoaded; 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sExtraData = 0; 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pipe(fds)) { 5678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: pipe creation failed"); 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (fds[0] == 0 || fds[1] == 0) { 57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pipe(fds)) { 5728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: pipe creation failed"); 57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pipe_in = fds[0]; 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pipe_out = fds[1]; 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan msg_thread_created = true; 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan r = pthread_create(&msg_thread_id,0, message_thread, this); 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (r < 0) { 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan msg_thread_created = false; 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan async_thread_created = true; 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan r = pthread_create(&async_thread_id,0, venc_dev::async_venc_message_thread, this); 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (r < 0) { 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan async_thread_created = false; 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_set_message_thread_id(async_thread_id); 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 59547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 59647e37c4428509524ee576920a98381f3e4872493Nick Pelly 597f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (perfmode) { 598f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan QOMX_EXTNINDEX_VIDEO_PERFMODE pParam; 599f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pParam.nPerfMode = perfmode; 600f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("Perfmode = 0x%x", pParam.nPerfMode); 601f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!handle->venc_set_config(&pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoVencPerfMode)) 602f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Failed setting PerfMode to %d", pParam.nPerfMode); 603f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 604f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 6058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_INFO("Component_init : %s : return = 0x%x", m_nkind, eRet); 606b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 607b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan { 608b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan VendorExtensionStore *extStore = const_cast<VendorExtensionStore *>(&mVendorExtensionStore); 609b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan init_vendor_extensions(*extStore); 610b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan mVendorExtensionStore.dumpExtensions((const char *)m_nkind); 611b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan } 612b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 614c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarniinit_error: 615c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni handle->venc_close(); 616c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni delete handle; 617c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni handle = NULL; 618c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni return eRet; 61947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 62047e37c4428509524ee576920a98381f3e4872493Nick Pelly 62147e37c4428509524ee576920a98381f3e4872493Nick Pelly 62247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::Setparameter 62547e37c4428509524ee576920a98381f3e4872493Nick Pelly 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Set Parameter method implementation. 62847e37c4428509524ee576920a98381f3e4872493Nick Pelly 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 63147e37c4428509524ee576920a98381f3e4872493Nick Pelly 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if successful. 63447e37c4428509524ee576920a98381f3e4872493Nick Pelly 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 63647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE hComp, 63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE paramIndex, 63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR paramData) 63947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 6408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 64247e37c4428509524ee576920a98381f3e4872493Nick Pelly 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 6458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set Param in Invalid State"); 64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (paramData == NULL) { 6498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData"); 65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*set_parameter can be called in loaded state 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan or disabled port */ 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateLoaded 65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || m_sInPortDef.bEnabled == OMX_FALSE 65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || m_sOutPortDef.bEnabled == OMX_FALSE) { 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Set Parameter called in valid state"); 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 6608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State"); 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 6648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan switch ((int)paramIndex) { 66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPortDefinition: 66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 66716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_PORTDEFINITIONTYPE); 66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE *portDefn; 66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData; 6708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPortDefinition H= %d, W = %d", 67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (int)portDefn->format.video.nFrameHeight, 67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (int)portDefn->format.video.nFrameWidth); 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (PORT_INDEX_IN == portDefn->nPortIndex) { 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!dev_is_video_session_supported(portDefn->format.video.nFrameWidth, 67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->format.video.nFrameHeight)) { 6778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("video session not supported"); 67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_unsupported_setting(); 67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 6818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p actual cnt requested = %u", (unsigned int)portDefn->nBufferCountActual); 6828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p min cnt requested = %u", (unsigned int)portDefn->nBufferCountMin); 6838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p buffersize requested = %u", (unsigned int)portDefn->nBufferSize); 684417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (portDefn->nBufferCountActual > MAX_NUM_INPUT_BUFFERS) { 685417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan DEBUG_PRINT_ERROR("ERROR: (In_PORT) actual count (%u) exceeds max(%u)", 686417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan (unsigned int)portDefn->nBufferCountActual, (unsigned int)MAX_NUM_INPUT_BUFFERS); 687417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan return OMX_ErrorUnsupportedSetting; 688417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan } 689b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan if (m_inp_mem_ptr && 690b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan (portDefn->nBufferCountActual != m_sInPortDef.nBufferCountActual || 691b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan portDefn->nBufferSize != m_sInPortDef.nBufferSize)) { 692b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan DEBUG_PRINT_ERROR("ERROR: (In_PORT) buffer count/size can change only if port is unallocated !"); 693b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan return OMX_ErrorInvalidState; 694b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan } 69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) { 6968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: (In_PORT) Min buffers (%u) > actual count (%u)", 6978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)portDefn->nBufferCountMin, (unsigned int)portDefn->nBufferCountActual); 69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) { 7018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_set_param input failed"); 7023b53b32d6a823b7a36d4abe626c0c2f726e286ecPraveen Chavan return handle->hw_overload ? OMX_ErrorInsufficientResources : 7033b53b32d6a823b7a36d4abe626c0c2f726e286ecPraveen Chavan OMX_ErrorUnsupportedSetting; 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 7068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p previous actual cnt = %u", (unsigned int)m_sInPortDef.nBufferCountActual); 7078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("i/p previous min cnt = %u", (unsigned int)m_sInPortDef.nBufferCountMin); 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sInPortDef, portDefn,sizeof(OMX_PARAM_PORTDEFINITIONTYPE)); 709826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 710826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 7110b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan if (portDefn->format.video.eColorFormat == 7120b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) { 7130b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE) 714e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin QOMX_DEFAULT_COLOR_FMT; 71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat) { 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.init()) { 7178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("C2D init failed"); 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 7208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("C2D init is successful"); 72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = true; 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = false; 726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Query Input Buffer Requirements*/ 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sInPortDef.nBufferCountMin, 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferCountActual, 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sInPortDef.nBufferSize, 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nPortIndex); 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Query ouput Buffer Requirements*/ 73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sOutPortDef.nBufferCountMin, 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nBufferCountActual = portDefn->nBufferCountActual; 73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (PORT_INDEX_OUT == portDefn->nPortIndex) { 7408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p actual cnt requested = %u", (unsigned int)portDefn->nBufferCountActual); 7418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p min cnt requested = %u", (unsigned int)portDefn->nBufferCountMin); 7428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p buffersize requested = %u", (unsigned int)portDefn->nBufferSize); 743417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan 744417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (portDefn->nBufferCountActual > MAX_NUM_OUTPUT_BUFFERS) { 745417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan DEBUG_PRINT_ERROR("ERROR: (Out_PORT) actual count (%u) exceeds max(%u)", 746417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan (unsigned int)portDefn->nBufferCountActual, (unsigned int)MAX_NUM_OUTPUT_BUFFERS); 747417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan return OMX_ErrorUnsupportedSetting; 748417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan } 749b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan if (m_out_mem_ptr && 750b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan (portDefn->nBufferCountActual != m_sOutPortDef.nBufferCountActual || 751b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan portDefn->nBufferSize != m_sOutPortDef.nBufferSize)) { 752b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan DEBUG_PRINT_ERROR("ERROR: (Out_PORT) buffer count/size can change only if port is unallocated !"); 753b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan return OMX_ErrorInvalidState; 754b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan } 755b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) { 7578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: (Out_PORT) Min buffers (%u) > actual count (%u)", 7588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)portDefn->nBufferCountMin, (unsigned int)portDefn->nBufferCountActual); 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) { 7628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_set_param output failed"); 76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 765e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(&m_sOutPortDef,portDefn,sizeof(struct OMX_PARAM_PORTDEFINITIONTYPE)); 7666eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Query ouput Buffer Requirements*/ 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 7726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan update_profile_level(); //framerate , bitrate 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 7758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p previous actual cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountActual); 7768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p previous min cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountMin); 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferCountActual = portDefn->nBufferCountActual; 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set_parameter: Bad Port idx %d", 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (int)portDefn->nPortIndex); 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.xEncodeFramerate = portDefn->format.video.xFramerate; 78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = portDefn->format.video.nBitrate; 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = portDefn->format.video.nBitrate; 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 78847e37c4428509524ee576920a98381f3e4872493Nick Pelly 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoPortFormat: 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 79116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PORTFORMATTYPE); 79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt = 79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData; 7948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d", 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portFmt->eColorFormat); 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //set the driver with the corresponding values 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (PORT_INDEX_IN == portFmt->nPortIndex) { 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamVideoPortFormat) != true) { 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 8028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d", 80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portFmt->eColorFormat); 80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan update_profile_level(); //framerate 80547e37c4428509524ee576920a98381f3e4872493Nick Pelly 806826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portFmt->eColorFormat == 80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) { 8090b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE) 810e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin QOMX_DEFAULT_COLOR_FMT; 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat) { 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.init()) { 8138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("C2D init failed"); 81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 8168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("C2D init is successful"); 81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = true; 81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ; 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 821826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.eColorFormat = portFmt->eColorFormat; 8249262c4fed09839e7e6afc21d6406a9e261c1dba6Praveen Chavan m_sInPortDef.format.video.eColorFormat = portFmt->eColorFormat; 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_input_msg_id = OMX_COMPONENT_GENERATE_ETB; 82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mUseProxyColorFormat = false; 82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortFormat.xFramerate = portFmt->xFramerate; 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TODO if no use case for O/P port,delet m_sOutPortFormat 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoInit: 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { //TODO, do we need this index set param 83516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE* pParam = (OMX_PORT_PARAM_TYPE*)(paramData); 8378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Set OMX_IndexParamVideoInit called"); 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84047e37c4428509524ee576920a98381f3e4872493Nick Pelly 84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoBitrate: 84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 84316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_BITRATETYPE); 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData; 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoBitrate"); 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamVideoBitrate) != true) { 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = pParam->nTargetBitrate; 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.eControlRate = pParam->eControlRate; 85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan update_profile_level(); //bitrate 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = pParam->nTargetBitrate; 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.format.video.nBitrate = pParam->nTargetBitrate; 85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nBitrate = pParam->nTargetBitrate; 8558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("bitrate = %u", (unsigned int)m_sOutPortDef.format.video.nBitrate); 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoMpeg4: 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 86016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_MPEG4TYPE); 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData; 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE mp4_param; 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&mp4_param, pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE)); 86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoMpeg4"); 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) { 8668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_ 8678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nBFrames || bframes) 868e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mp4_param.nBFrames = 1; 869e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin else 870e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mp4_param.nBFrames = 0; 8718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("MPEG4: %u BFrames are being set", (unsigned int)mp4_param.nBFrames); 8728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 8758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported"); 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mp4_param.nBFrames = 0; 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&mp4_param,OMX_IndexParamVideoMpeg4) != true) { 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamMPEG4,pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE)); 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = m_sParamMPEG4.nPFrames; 8848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nBFrames || bframes) 8858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sIntraperiod.nBFrames = m_sParamMPEG4.nBFrames = mp4_param.nBFrames; 8868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan else 887e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sIntraperiod.nBFrames = m_sParamMPEG4.nBFrames; 88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoH263: 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData; 89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoH263"); 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData,OMX_IndexParamVideoH263) != true) { 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamH263,pParam, sizeof(struct OMX_VIDEO_PARAM_H263TYPE)); 89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = m_sParamH263.nPFrames; 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nBFrames = m_sParamH263.nBFrames; 90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoAvc: 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 90416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_AVCTYPE); 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData; 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE avc_param; 90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&avc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_AVCTYPE)); 90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoAvc"); 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 910e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin avc_param.nBFrames = 0; 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((pParam->eProfile == OMX_VIDEO_AVCProfileHigh)|| 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (pParam->eProfile == OMX_VIDEO_AVCProfileMain)) { 913e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 915e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin avc_param.nBFrames = pParam->nBFrames; 916e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("B frames set using Client setparam to %d", 917e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin avc_param.nBFrames); 91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 919e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 920e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (bframes ) { 921e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin avc_param.nBFrames = bframes; 922e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("B frames set using setprop to %d", 923e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin avc_param.nBFrames); 9248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 9258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 926e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("AVC: BFrames: %u", (unsigned int)avc_param.nBFrames); 9278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan avc_param.bEntropyCodingCABAC = (OMX_BOOL)(avc_param.bEntropyCodingCABAC && entropy); 9288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan avc_param.nCabacInitIdc = entropy ? avc_param.nCabacInitIdc : 0; 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames) { 9318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Warning: B frames not supported"); 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 934e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&avc_param,OMX_IndexParamVideoAvc) != true) { 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamAVC,pParam, sizeof(struct OMX_VIDEO_PARAM_AVCTYPE)); 93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = m_sParamAVC.nPFrames; 9408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nBFrames || bframes) 9418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sIntraperiod.nBFrames = m_sParamAVC.nBFrames = avc_param.nBFrames; 9428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan else 943e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sIntraperiod.nBFrames = m_sParamAVC.nBFrames; 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 9467beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8: 9477beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano { 94816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_VP8TYPE); 9497beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData; 9507beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_VIDEO_PARAM_VP8TYPE vp8_param; 9517beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoVp8"); 9527beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano if (pParam->nDCTPartitions != m_sParamVP8.nDCTPartitions || 9537beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano pParam->bErrorResilientMode != m_sParamVP8.bErrorResilientMode) { 9547beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano DEBUG_PRINT_ERROR("VP8 doesn't support nDCTPartitions or bErrorResilientMode"); 9557beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 9567beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano memcpy(&vp8_param, pParam, sizeof( struct OMX_VIDEO_PARAM_VP8TYPE)); 9577beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano if (handle->venc_set_param(&vp8_param, (OMX_INDEXTYPE)OMX_IndexParamVideoVp8) != true) { 9587beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano return OMX_ErrorUnsupportedSetting; 9597beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 9607beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano memcpy(&m_sParamVP8,pParam, sizeof(struct OMX_VIDEO_PARAM_VP8TYPE)); 9617beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano break; 9627beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 963f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case (OMX_INDEXTYPE)OMX_IndexParamVideoHevc: 964f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 96516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_HEVCTYPE); 966f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_VIDEO_PARAM_HEVCTYPE* pParam = (OMX_VIDEO_PARAM_HEVCTYPE*)paramData; 967f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_VIDEO_PARAM_HEVCTYPE hevc_param; 968f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoHevc"); 969f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(&hevc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_HEVCTYPE)); 970f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (handle->venc_set_param(&hevc_param, (OMX_INDEXTYPE)OMX_IndexParamVideoHevc) != true) { 971f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Failed : set_parameter: OMX_IndexParamVideoHevc"); 972f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorUnsupportedSetting; 973f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 974f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(&m_sParamHEVC, pParam, sizeof(struct OMX_VIDEO_PARAM_HEVCTYPE)); 975f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 976f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelCurrent: 97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 97916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData; 98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoProfileLevelCurrent"); 98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(pParam,OMX_IndexParamVideoProfileLevelCurrent) != true) { 9838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: OMX_IndexParamVideoProfileLevelCurrent failed for Profile: %u " 9848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "Level :%u", (unsigned int)pParam->eProfile, (unsigned int)pParam->eLevel); 98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = pParam->eProfile; 98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = pParam->eLevel; 98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\ 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)m_sParamProfileLevel.eProfile; 99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)m_sParamProfileLevel.eLevel; 9948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile, 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel); 99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\ 99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)m_sParamProfileLevel.eProfile; 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)m_sParamProfileLevel.eLevel; 10008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("H263 profile = %d, level = %d", m_sParamH263.eProfile, 100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel); 100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\ 100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile; 100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel; 10068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("AVC profile = %d, level = %d", m_sParamAVC.eProfile, 10078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamAVC.eLevel); 10088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc.secure",\ 10098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 10108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile; 10118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel; 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile, 101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel); 101461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 10157beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",\ 10167beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_MAX_STRINGNAME_SIZE)) { 10177beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eProfile = (OMX_VIDEO_VP8PROFILETYPE)m_sParamProfileLevel.eProfile; 10187beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel = (OMX_VIDEO_VP8LEVELTYPE)m_sParamProfileLevel.eLevel; 10198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("VP8 profile = %d, level = %d", m_sParamVP8.eProfile, 10207beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel); 10217beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 1022f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc",\ 1023f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 1024f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eProfile = (OMX_VIDEO_HEVCPROFILETYPE)m_sParamProfileLevel.eProfile; 1025f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eLevel = (OMX_VIDEO_HEVCLEVELTYPE)m_sParamProfileLevel.eLevel; 1026f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("HEVC profile = %d, level = %d", m_sParamHEVC.eProfile, 1027f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eLevel); 1028f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1029f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamStandardComponentRole: 103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 103416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_COMPONENTROLETYPE); 103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_COMPONENTROLETYPE *comp_role; 103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData; 10378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamStandardComponentRole %s", 103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role->cRole); 103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_state == OMX_StateLoaded)&& 104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) { 104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Set Parameter called in valid state"); 104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Set Parameter called in Invalid State"); 104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole); 10538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 10548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 10558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc.secure",OMX_MAX_STRINGNAME_SIZE)) { 10568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 10578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole); 106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE); 106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole); 106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedSetting; 106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE); 107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole); 107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 10776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) { 107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) { 108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char*)m_cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE); 108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole); 108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedSetting; 108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 10866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 1087f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc",OMX_MAX_STRINGNAME_SIZE)) { 1088f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!strncmp((const char*)comp_role->cRole,"video_encoder.hevc",OMX_MAX_STRINGNAME_SIZE)) { 1089f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan strlcpy((char*)m_cRole,"video_encoder.hevc",OMX_MAX_STRINGNAME_SIZE); 1090f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 1091f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole); 1092f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan eRet = OMX_ErrorUnsupportedSetting; 1093f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1094f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1095f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 10978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %s", m_nkind); 109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidComponentName; 109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110247e37c4428509524ee576920a98381f3e4872493Nick Pelly 110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPriorityMgmt: 110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 110516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PRIORITYMGMTTYPE); 110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt"); 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state != OMX_StateLoaded) { 11088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State"); 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PRIORITYMGMTTYPE *priorityMgmtype = (OMX_PRIORITYMGMTTYPE*) paramData; 11128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt %u", 11138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)priorityMgmtype->nGroupID); 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 11158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: priorityMgmtype %u", 11168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)priorityMgmtype->nGroupPriority); 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPriorityMgmt.nGroupID = priorityMgmtype->nGroupID; 111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sPriorityMgmt.nGroupPriority = priorityMgmtype->nGroupPriority; 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112347e37c4428509524ee576920a98381f3e4872493Nick Pelly 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamCompBufferSupplier: 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 112616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_BUFFERSUPPLIERTYPE); 112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier"); 112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData; 11298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier %d", 113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferSupplierType->eBufferSupplier); 113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferSupplierType->nPortIndex == 0 || bufferSupplierType->nPortIndex ==1) 113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInBufSupplier.eBufferSupplier = bufferSupplierType->eBufferSupplier; 113347e37c4428509524ee576920a98381f3e4872493Nick Pelly 113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 113547e37c4428509524ee576920a98381f3e4872493Nick Pelly 113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 113747e37c4428509524ee576920a98381f3e4872493Nick Pelly 113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 113947e37c4428509524ee576920a98381f3e4872493Nick Pelly 114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoQuantization: 114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 114316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_QUANTIZATIONTYPE); 11448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoQuantization"); 114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData; 114661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (session_qp->nPortIndex == PORT_INDEX_OUT) { 114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData, OMX_IndexParamVideoQuantization) != true) { 114861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpI = session_qp->nQpI; 115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQuantization.nQpP = session_qp->nQpP; 11528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sSessionQuantization.nQpB = session_qp->nQpB; 115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 11548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port Index for Session QP setting"); 115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 115947e37c4428509524ee576920a98381f3e4872493Nick Pelly 116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoQPRange: 116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 116216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE); 11638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexParamVideoQPRange"); 116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData; 116561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qp_range->nPortIndex == PORT_INDEX_OUT) { 116661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(paramData, 116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexParamVideoQPRange) != true) { 116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.minQP= qp_range->minQP; 117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sSessionQPRange.maxQP= qp_range->maxQP; 117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 11738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port Index for QP range setting"); 117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 117561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 11786eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexPortDefn: 118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 118116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_PARAM_PORTDEFINITIONTYPE); 118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PARAM_PORTDEFINITIONTYPE* pParam = 118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_QCOM_PARAM_PORTDEFINITIONTYPE*)paramData; 118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexPortDefn"); 118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_IN) { 118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid && 118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMemRegion < OMX_QCOM_MemRegionMax) { 118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem = OMX_TRUE; 118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem = OMX_FALSE; 119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_OUT) { 119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid && 119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMemRegion < OMX_QCOM_MemRegionMax) { 119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_output_pmem = OMX_TRUE; 119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_output_pmem = OMX_FALSE; 119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: SetParameter called on unsupported Port Index for QcomPortDefn"); 120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoErrorCorrection: 120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 120816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE); 12098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection"); 121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* pParam = 121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData; 121261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, OMX_IndexParamVideoErrorCorrection)) { 12138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting Error Resilience failed"); 121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sErrorCorrection,pParam, sizeof(m_sErrorCorrection)); 121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoIntraRefresh: 122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 122116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_INTRAREFRESHTYPE); 12228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_param:OMX_IndexParamVideoIntraRefresh"); 122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_INTRAREFRESHTYPE* pParam = 122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData; 122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData,OMX_IndexParamVideoIntraRefresh)) { 12268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting intra refresh failed"); 122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sIntraRefresh, pParam, sizeof(m_sIntraRefresh)); 123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 12338e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava case OMX_QcomIndexParamVideoMetaBufferMode: 1234826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev { 123516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, StoreMetaDataInBuffersParams); 123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan StoreMetaDataInBuffersParams *pParam = 123761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (StoreMetaDataInBuffersParams*)paramData; 12388e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava DEBUG_PRINT_HIGH("set_parameter:OMX_QcomIndexParamVideoMetaBufferMode: " 12398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "port_index = %u, meta_mode = %d", (unsigned int)pParam->nPortIndex, pParam->bStoreMetaData); 124061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_IN) { 124161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->bStoreMetaData != meta_mode_enable) { 124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_meta_mode(pParam->bStoreMetaData)) { 12438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: set Metabuffer mode %d fail", 124461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->bStoreMetaData); 124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_mode_enable = pParam->bStoreMetaData; 124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) { 124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.nBufferCountActual = m_sInPortDef.nBufferCountMin; 125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_param(&m_sInPortDef,OMX_IndexParamPortDefinition) != true) { 12518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: venc_set_param input failed"); 125261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*TODO: reset encoder driver Meta mode*/ 125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sOutPortDef.nBufferCountMin, 125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 12628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (pParam->nPortIndex == PORT_INDEX_OUT && secure_session) { 12638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->bStoreMetaData != meta_mode_enable) { 12648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_meta_mode(pParam->bStoreMetaData)) { 12658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("\nERROR: set Metabuffer mode %d fail", 12668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bStoreMetaData); 12678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 12688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 12698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan meta_mode_enable = pParam->bStoreMetaData; 12708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 127261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: metamode is " 127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for input port only"); 127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1276826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 1278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 12796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_) 128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamIndexExtraDataType: 128161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 128216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_INDEXEXTRADATATYPE); 128361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_parameter: OMX_QcomIndexParamIndexExtraDataType"); 128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData; 12858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool enable = false; 12868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 mask = 0; 12878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) { 128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 1290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mask = VENC_EXTRADATA_SLICEINFO; 12918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("SliceInfo extradata %s", 129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 1294e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 12958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: Slice information is " 12968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "valid for output port only"); 12978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 12988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 1299e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 13008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderMBInfo) { 13018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 1302e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mask = VENC_EXTRADATA_MBINFO; 13038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 13048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("MBInfo extradata %s", 13058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 13068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 13078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: MB information is " 13088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "valid for output port only"); 13098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 13108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1312e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataFrameDimension) { 1313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (pParam->nPortIndex == PORT_INDEX_IN) { 1314e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mask = VENC_EXTRADATA_FRAMEDIMENSION; 1315e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("Frame dimension extradata %s", 1316e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 1317e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 1318e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("set_parameter: Frame Dimension is " 1319e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "valid for input port only"); 1320e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin eRet = OMX_ErrorUnsupportedIndex; 1321e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1322e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1323e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_QTIIndexParamVQZipSEIExtraData) { 1324e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (pParam->nPortIndex == PORT_INDEX_IN) { 1325e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mask = VENC_EXTRADATA_VQZIP; 1326e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("VQZIP extradata %s", 1327e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 1328e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 1329e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("set_parameter: VQZIP is " 1330e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "valid for input port only"); 1331e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin eRet = OMX_ErrorUnsupportedIndex; 1332e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1333e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1335e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 13366eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) { 133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->bEnabled == OMX_TRUE) 13408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan mask = VEN_EXTRADATA_LTRINFO; 13418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("LTRInfo extradata %s", 134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled")); 134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: LTR information is " 134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for output port only"); 134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 13488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 13516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("set_parameter: unsupported extrdata index (%x)", 135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nIndex); 135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 13568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 13578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 13588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 13598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 13608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->bEnabled == OMX_TRUE) 13618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sExtraData |= mask; 13628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan else 13638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sExtraData &= ~mask; 13648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 13658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan enable = !!(m_sExtraData & mask); 13668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (handle->venc_set_param(&enable, 13678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE)pParam->nIndex) != true) { 13688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Extradata (%x) failed", pParam->nIndex); 13698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 1370e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1371e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 1372e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (pParam->nPortIndex == PORT_INDEX_IN) { 1373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sInPortDef.nPortIndex = PORT_INDEX_IN; 1374e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin dev_get_buf_req(&m_sInPortDef.nBufferCountMin, 1375e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_sInPortDef.nBufferCountActual, 1376e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_sInPortDef.nBufferSize, 1377e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sInPortDef.nPortIndex); 1378e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("updated in_buf_req: buffer cnt=%u, " 1379e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "count min=%u, buffer size=%u", 1380e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (unsigned int)m_sOutPortDef.nBufferCountActual, 1381e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (unsigned int)m_sOutPortDef.nBufferCountMin, 1382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (unsigned int)m_sOutPortDef.nBufferSize); 1383e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 13848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 13858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sOutPortDef.nPortIndex = PORT_INDEX_OUT; 13868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_get_buf_req(&m_sOutPortDef.nBufferCountMin, 13878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan &m_sOutPortDef.nBufferCountActual, 13888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan &m_sOutPortDef.nBufferSize, 13898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sOutPortDef.nPortIndex); 13908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%u, " 13918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "count min=%u, buffer size=%u", 13928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferCountActual, 13938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferCountMin, 13948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferSize); 139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRMode: 139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 140016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_PARAM_LTRMODE_TYPE); 140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRMODE_TYPE* pParam = 140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRMODE_TYPE*)paramData; 140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRMode)) { 14048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting LTR mode failed"); 140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 140661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 140761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamLTRMode, pParam, sizeof(m_sParamLTRMode)); 140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 141061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRCount: 141161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 141216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_PARAM_LTRCOUNT_TYPE); 141361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_PARAM_LTRCOUNT_TYPE* pParam = 141461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_VIDEO_PARAM_LTRCOUNT_TYPE*)paramData; 141561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRCount)) { 14168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting LTR count failed"); 141761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 141961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sParamLTRCount, pParam, sizeof(m_sParamLTRCount)); 142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1422826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoMaxAllowedBitrateCheck: 142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 142516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE); 142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan handle->m_max_allowed_bitrate_check = 143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnable == OMX_TRUE) ? true : false); 143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_parameter: max allowed bitrate check %s", 143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((pParam->bEnable == OMX_TRUE) ? "enabled" : "disabled")); 143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexParamVideoMaxAllowedBitrateCheck " 14358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan " called on wrong port(%u)", (unsigned int)pParam->nPortIndex); 143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 143761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1440826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableSliceDeliveryMode: 144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 144316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE); 144461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 144561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 144761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, 144861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode)) { 144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting slice delivery mode failed"); 145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 145161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 145361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableSliceDeliveryMode " 14548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "called on wrong port(%u)", (unsigned int)pParam->nPortIndex); 145561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 145661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 145761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 145861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1459826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexEnableH263PlusPType: 146161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 146216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE); 146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 146461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (QOMX_EXTNINDEX_PARAMTYPE*)paramData; 146561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("OMX_QcomIndexEnableH263PlusPType"); 146661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 146761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_param(paramData, 146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexEnableH263PlusPType)) { 146961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting PlusPType failed"); 147061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 147161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 147261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 147361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableH263PlusPType " 14748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "called on wrong port(%u)", (unsigned int)pParam->nPortIndex); 14758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorBadPortIndex; 14768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 14788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamSequenceHeaderWithIDR: 14808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 148116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, PrependSPSPPSToIDRFramesParams); 14828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!handle->venc_set_param(paramData, 14838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR)) { 14848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("%s: %s", 14858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "OMX_QComIndexParamSequenceHeaderWithIDR:", 14868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "request for inband sps/pps failed."); 14878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 14888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 1489e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy((void *) &m_sPrependSPSPPS, ¶mData, sizeof(m_sPrependSPSPPS)); 14908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 14918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamH264AUDelimiter: 14938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 149416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_CONFIG_H264_AUD); 14958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!handle->venc_set_param(paramData, 14968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexParamH264AUDelimiter)) { 14978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("%s: %s", 14988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "OMX_QComIndexParamh264AUDelimiter:", 14998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "request for AU Delimiters failed."); 15008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 15038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 1504e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamMBIStatisticsMode: 1505e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 150616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QOMX_VIDEO_MBI_STATISTICS); 1507e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if(!handle->venc_set_param(paramData, 1508e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_INDEXTYPE)OMX_QcomIndexParamMBIStatisticsMode)) { 1509e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("%s: %s", 1510e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "OMX_QcomIndexParamMBIStatisticsMode:", 1511e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "MBI Statistics mode setting failed."); 1512e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1513e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1514e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1515e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 15168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexHierarchicalStructure: 15178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 151816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_HIERARCHICALLAYERS); 15198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan QOMX_VIDEO_HIERARCHICALLAYERS* pParam = 15208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (QOMX_VIDEO_HIERARCHICALLAYERS*)paramData; 15218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_QcomIndexHierarchicalStructure"); 15228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 15238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_param(paramData, 15248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexHierarchicalStructure)) { 15258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Request for setting PlusPType failed"); 15268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 1528f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if((pParam->eHierarchicalCodingType == QOMX_HIERARCHICALCODING_B) && pParam->nNumLayers) 1529f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan hier_b_enabled = true; 15308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sHierLayers.nNumLayers = pParam->nNumLayers; 15318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sHierLayers.eHierarchicalCodingType = pParam->eHierarchicalCodingType; 15328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 15338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexHierarchicalStructure called on wrong port(%u)", 15348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->nPortIndex); 153561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 153661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 153761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 15388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 15398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamPerfLevel: 15418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 154216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PERF_LEVEL); 15438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_param(paramData, 15448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE) OMX_QcomIndexParamPerfLevel)) { 15458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting performance level"); 15468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 15498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamH264VUITimingInfo: 15518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 155216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO); 15538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_param(paramData, 15548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE) OMX_QcomIndexParamH264VUITimingInfo)) { 15558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting VUI timing info"); 15568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 15598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamPeakBitrate: 15618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 156216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE); 15638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_param(paramData, 15648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE) OMX_QcomIndexParamPeakBitrate)) { 15658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting peak bitrate"); 15668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 15698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case QOMX_IndexParamVideoInitialQp: 15718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 157216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_INITIALQP); 15738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!handle->venc_set_param(paramData, 15748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE)QOMX_IndexParamVideoInitialQp)) { 15758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Request to Enable initial QP failed"); 15768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(&m_sParamInitqp, paramData, sizeof(m_sParamInitqp)); 15798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 15808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamSetMVSearchrange: 15828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 15838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_param(paramData, 15848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_INDEXTYPE) OMX_QcomIndexParamSetMVSearchrange)) { 15858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting Searchrange"); 15868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 15878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 15888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 158961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1590f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_QcomIndexParamVideoHybridHierpMode: 1591f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 159216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE); 1593f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if(!handle->venc_set_param(paramData, 1594f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (OMX_INDEXTYPE)OMX_QcomIndexParamVideoHybridHierpMode)) { 1595f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Request to Enable Hybrid Hier-P failed"); 1596f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorUnsupportedSetting; 1597f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1598f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 1599f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1600e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamBatchSize: 1601e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 160216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_U32TYPE); 1603e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if(!handle->venc_set_param(paramData, 1604e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_INDEXTYPE)OMX_QcomIndexParamBatchSize)) { 1605e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Attempting to set batch size failed"); 1606e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1607e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1608e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1609e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1610e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexConfigH264EntropyCodingCabac: 1611e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 161216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_H264ENTROPYCODINGTYPE); 1613e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if(!handle->venc_set_param(paramData, 1614e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_INDEXTYPE)OMX_QcomIndexConfigH264EntropyCodingCabac)) { 1615e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Attempting to set Entropy failed"); 1616e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1617e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1618e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1619e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1620e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QTIIndexParamVQZIPSEIType: 1621e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 162216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE); 1623e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!handle->venc_set_param(paramData, 1624e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_INDEXTYPE) OMX_QTIIndexParamVQZIPSEIType)) { 1625e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("ERROR: Setting VQZIP SEI type"); 1626e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1627e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1628e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sExtraData |= VENC_EXTRADATA_VQZIP; 1629e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1630e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1631e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamVencAspectRatio: 1632e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 163316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_VENC_SAR); 1634e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!handle->venc_set_param(paramData, 1635e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_INDEXTYPE)OMX_QcomIndexParamVencAspectRatio)) { 1636e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexParamVencAspectRatio failed"); 1637e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1638e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1639e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(&m_sSar, paramData, sizeof(m_sSar)); 1640e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1641e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1642e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QTIIndexParamVideoEnableRoiInfo: 1643e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 1644e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!handle->venc_set_param(paramData, 1645e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_INDEXTYPE)OMX_QTIIndexParamVideoEnableRoiInfo)) { 1646e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("ERROR: Setting OMX_QTIIndexParamVideoEnableRoiInfo failed"); 1647e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1648e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1649e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1650e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 16518a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar case OMX_IndexParamAndroidVideoTemporalLayering: 1652bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch { 16538a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE); 1654bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch if (!handle->venc_set_param(paramData, 16558a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar (OMX_INDEXTYPE)OMX_IndexParamAndroidVideoTemporalLayering)) { 1656bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch DEBUG_PRINT_ERROR("Failed to configure temporal layers"); 1657bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch return OMX_ErrorUnsupportedSetting; 1658bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch } 1659bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch // save the actual configuration applied 1660bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch memcpy(&m_sParamTemporalLayers, paramData, sizeof(m_sParamTemporalLayers)); 1661bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch // keep the config data in sync 16628a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar m_sConfigTemporalLayers.ePattern = m_sParamTemporalLayers.ePattern; 16638a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar m_sConfigTemporalLayers.nBLayerCountActual = m_sParamTemporalLayers.nBLayerCountActual; 16648a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar m_sConfigTemporalLayers.nPLayerCountActual = m_sParamTemporalLayers.nPLayerCountActual; 16658a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar m_sConfigTemporalLayers.bBitrateRatiosSpecified = m_sParamTemporalLayers.bBitrateRatiosSpecified; 16668a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar memcpy(&m_sConfigTemporalLayers.nBitrateRatios[0], 16678a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar &m_sParamTemporalLayers.nBitrateRatios[0], 1668bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS * sizeof(OMX_U32)); 1669bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch break; 1670bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch } 167170929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan case OMX_QTIIndexParamEnableAVTimerTimestamps: 167270929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan { 167370929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_ENABLETYPE); 167470929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan if (!handle->venc_set_param(paramData, 167570929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan (OMX_INDEXTYPE)OMX_QTIIndexParamEnableAVTimerTimestamps)) { 167670929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_QTIIndexParamEnableAVTimerTimestamps failed"); 167770929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan return OMX_ErrorUnsupportedSetting; 167870929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan } 167970929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan memcpy(&m_sParamAVTimerTimestampMode, paramData, sizeof(QOMX_ENABLETYPE)); 168070929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan break; 168170929c9d4f5f9a789c39d272581c72d3fa6aefe5Praveen Chavan } 168261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoSliceFMO: 168361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 16858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %d", paramIndex); 168661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 168947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 169061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 169147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 169247e37c4428509524ee576920a98381f3e4872493Nick Pelly 1693826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::update_profile_level() 1694826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 eProfile, eLevel; 1696826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_get_profile_level(&eProfile,&eLevel)) { 16988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to update the profile_level"); 169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile; 170361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamProfileLevel.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel; 170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\ 170661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile; 170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel; 17098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile, 171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.eLevel); 171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\ 171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)eProfile; 171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)eLevel; 17158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("H263 profile = %d, level = %d", m_sParamH263.eProfile, 171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.eLevel); 171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\ 171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile; 172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel; 17218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("AVC profile = %d, level = %d", m_sParamAVC.eProfile, 17228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamAVC.eLevel); 17238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc.secure",\ 17248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 17258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile; 17268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel; 172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile, 172861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.eLevel); 172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17307beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.vp8",\ 17317beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_MAX_STRINGNAME_SIZE)) { 17327beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eProfile = (OMX_VIDEO_VP8PROFILETYPE)eProfile; 17337beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel = (OMX_VIDEO_VP8LEVELTYPE)eLevel; 17348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("VP8 profile = %d, level = %d", m_sParamVP8.eProfile, 17357beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano m_sParamVP8.eLevel); 17367beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 1737f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.hevc",\ 1738f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_MAX_STRINGNAME_SIZE)) { 1739f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eProfile = (OMX_VIDEO_HEVCPROFILETYPE)eProfile; 1740f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eLevel = (OMX_VIDEO_HEVCLEVELTYPE)eLevel; 1741f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("HEVC profile = %d, level = %d", m_sParamHEVC.eProfile, 1742f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sParamHEVC.eLevel); 1743f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1744f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 1746826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 174747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 174861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 174961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::SetConfig 175047e37c4428509524ee576920a98381f3e4872493Nick Pelly 175161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 175261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Set Config method implementation 175347e37c4428509524ee576920a98381f3e4872493Nick Pelly 175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 175561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 175647e37c4428509524ee576920a98381f3e4872493Nick Pelly 175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if successful. 175961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 176047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::set_config(OMX_IN OMX_HANDLETYPE hComp, 176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE configIndex, 176261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR configData) 176347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 17648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (configData == NULL) { 176661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: param is null"); 176761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 176847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 176947e37c4428509524ee576920a98381f3e4872493Nick Pelly 177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 177161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: config called in Invalid state"); 177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 1773826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 1774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // params will be validated prior to venc_init 17768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan switch ((int)configIndex) { 177761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoBitrate: 177861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 177916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_BITRATETYPE); 178061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_BITRATETYPE* pParam = 178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData); 17828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoBitrate (%u)", (unsigned int)pParam->nEncodeBitrate); 178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 178561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, OMX_IndexConfigVideoBitrate) != true) { 178661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoBitrate failed"); 178761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 178861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 178961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigBitrate.nEncodeBitrate = pParam->nEncodeBitrate; 179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamBitrate.nTargetBitrate = pParam->nEncodeBitrate; 179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.nBitrate = pParam->nEncodeBitrate; 179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 17948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex); 179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 179661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 179861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoFramerate: 180061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 180116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_FRAMERATETYPE); 180261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_FRAMERATETYPE* pParam = 180361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData); 18048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoFramerate (0x%x)", (unsigned int)pParam->xEncodeFramerate); 180561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 180661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 180761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, OMX_IndexConfigVideoFramerate) != true) { 180861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoFramerate failed"); 180961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 181061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 181261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFramerate.xEncodeFramerate = pParam->xEncodeFramerate; 181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.format.video.xFramerate = pParam->xEncodeFramerate; 181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortFormat.xFramerate = pParam->xEncodeFramerate; 181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex); 181761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 182061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 182161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 182261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoIntraperiod: 182361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 182416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_INTRAPERIODTYPE); 182561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_INTRAPERIODTYPE* pParam = 182661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData); 182747e37c4428509524ee576920a98381f3e4872493Nick Pelly 182861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): QOMX_IndexConfigVideoIntraperiod"); 182961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_720P 183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nBFrames > 0) { 18328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("B frames not supported"); 183361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 183461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 18368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Old: P/B frames = %u/%u, New: P/B frames = %u/%u", 18378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sIntraperiod.nPFrames, (unsigned int)m_sIntraperiod.nBFrames, 18388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->nPFrames, (unsigned int)pParam->nBFrames); 183961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sIntraperiod.nBFrames != pParam->nBFrames) { 1840f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if(hier_b_enabled && m_state == OMX_StateLoaded) { 1841f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_INFO("B-frames setting is supported if HierB is enabled"); 1842f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1843f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else { 1844e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("Dynamically changing B-frames not supported"); 1845e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 1846e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 1847f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 184861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, (OMX_INDEXTYPE) QOMX_IndexConfigVideoIntraperiod) != true) { 184961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting QOMX_IndexConfigVideoIntraperiod failed"); 185061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 185161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 185261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nPFrames = pParam->nPFrames; 185361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nBFrames = pParam->nBFrames; 185461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sIntraperiod.nIDRPeriod = pParam->nIDRPeriod; 185561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 185661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 185761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nPFrames = pParam->nPFrames; 185861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sParamMPEG4.eProfile != OMX_VIDEO_MPEG4ProfileSimple) 185961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nBFrames = pParam->nBFrames; 186061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 186161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamMPEG4.nBFrames = 0; 186261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingH263) { 186361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamH263.nPFrames = pParam->nPFrames; 186461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 186561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nPFrames = pParam->nPFrames; 18668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((m_sParamAVC.eProfile != OMX_VIDEO_AVCProfileBaseline) && 1867544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar (m_sParamAVC.eProfile != (OMX_VIDEO_AVCPROFILETYPE) OMX_VIDEO_AVCProfileConstrainedBaseline) && 18688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (m_sParamAVC.eProfile != (OMX_VIDEO_AVCPROFILETYPE) QOMX_VIDEO_AVCProfileConstrainedBaseline)) 186961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nBFrames = pParam->nBFrames; 187061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 187161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sParamAVC.nBFrames = 0; 187261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 187361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: (QOMX_IndexConfigVideoIntraperiod) Unsupported port index: %u", (unsigned int)pParam->nPortIndex); 187561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 187661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 187761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 187861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 187961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 188047e37c4428509524ee576920a98381f3e4872493Nick Pelly 188161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoIntraVOPRefresh: 188261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 188316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_INTRAREFRESHVOPTYPE); 188461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_INTRAREFRESHVOPTYPE* pParam = 188561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_INTRAREFRESHVOPTYPE*>(configData); 188661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 188761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoIntraVOPRefresh"); 188861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 188961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, 189061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IndexConfigVideoIntraVOPRefresh) != true) { 189161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoIntraVOPRefresh failed"); 189261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 189361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 189461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 189561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigIntraRefreshVOP.IntraRefreshVOP = pParam->IntraRefreshVOP; 189661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex); 189861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 189961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 190061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 190161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 190261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 190361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigCommonRotate: 190461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 190516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE); 190661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_ROTATIONTYPE *pParam = 190761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData); 190861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S32 nRotation; 190961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1910f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (pParam->nPortIndex != PORT_INDEX_OUT) { 19118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex); 191261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 191361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 191461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pParam->nRotation == 0 || 191561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nRotation == 90 || 191661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nRotation == 180 || 191761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nRotation == 270 ) { 19188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("set_config: Rotation Angle %u", (unsigned int)pParam->nRotation); 191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 19208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: un supported Rotation %u", (unsigned int)pParam->nRotation); 192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nRotation = pParam->nRotation - m_sConfigFrameRotation.nRotation; 192461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nRotation < 0) 192561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nRotation = -nRotation; 192661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nRotation == 90 || nRotation == 270) { 19278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("set_config: updating device Dims"); 192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->venc_set_config(configData, 192961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IndexConfigCommonRotate) != true) { 193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonRotate failed"); 193161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 193261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 193361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 nFrameWidth; 1934f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_U32 nFrameHeight; 193561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 19368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("set_config: updating port Dims"); 193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1938f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan nFrameWidth = m_sOutPortDef.format.video.nFrameWidth; 1939f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan nFrameHeight = m_sOutPortDef.format.video.nFrameHeight; 1940f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sOutPortDef.format.video.nFrameWidth = nFrameHeight; 1941f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_sOutPortDef.format.video.nFrameHeight = nFrameWidth; 194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nRotation = pParam->nRotation; 194361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 194461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sConfigFrameRotation.nRotation = pParam->nRotation; 194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 19474cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan 19484cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan // Update output-port resolution (since it might have been flipped by rotation) 19494cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan if (handle->venc_get_dimensions(PORT_INDEX_OUT, 19504cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan &m_sOutPortDef.format.video.nFrameWidth, 19514cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan &m_sOutPortDef.format.video.nFrameHeight)) { 19524cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan DEBUG_PRINT_HIGH("set Rotation: updated dimensions = %u x %u", 19534cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan m_sOutPortDef.format.video.nFrameWidth, 19544cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan m_sOutPortDef.format.video.nFrameHeight); 19554cde8d5ef09e0be475e9d3ae5ff6b8b81e631f76Praveen Chavan } 195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexConfigVideoFramePackingArrangement: 195961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 196061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("set_config(): OMX_QcomIndexConfigVideoFramePackingArrangement"); 196161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingAVC) { 196216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_QCOM_FRAME_PACK_ARRANGEMENT); 196361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_FRAME_PACK_ARRANGEMENT *configFmt = 196461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_QCOM_FRAME_PACK_ARRANGEMENT *) configData; 196561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan extra_data_handle.set_frame_pack_data(configFmt); 196661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 196761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FramePackingData not supported for non AVC compression"); 196861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 196961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 197061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 197161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRPeriod: 197261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 197316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE); 197461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE*)configData; 197561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRPeriod)) { 19768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting LTR period failed"); 197761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 197861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 197961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sConfigLTRPeriod, pParam, sizeof(m_sConfigLTRPeriod)); 198061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 198161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 19828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 19838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_IndexConfigVideoVp8ReferenceFrame: 19848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 198516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_VP8REFERENCEFRAMETYPE); 19868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_VIDEO_VP8REFERENCEFRAMETYPE* pParam = (OMX_VIDEO_VP8REFERENCEFRAMETYPE*) configData; 19878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE) OMX_IndexConfigVideoVp8ReferenceFrame)) { 19888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting VP8 reference frame"); 19898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 19908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 19918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(&m_sConfigVp8ReferenceFrame, pParam, sizeof(m_sConfigVp8ReferenceFrame)); 19928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 19938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 19948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 1995e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case QOMX_IndexConfigVideoLTRUse: 199661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 199716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_CONFIG_LTRUSE_TYPE); 199861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRUSE_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRUSE_TYPE*)configData; 1999f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRUse)) { 20008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting LTR use failed"); 200161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 200261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 200361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sConfigLTRUse, pParam, sizeof(m_sConfigLTRUse)); 200461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 200561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 200661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoLTRMark: 200761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 200816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_CONFIG_LTRMARK_TYPE); 200961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_CONFIG_LTRMARK_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRMARK_TYPE*)configData; 2010f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRMark)) { 2011f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting LTR mark failed"); 2012e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 2013f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 201461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 201561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 201661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoAVCIntraPeriod: 201761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 201816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_AVCINTRAPERIOD); 201961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD*) configData; 202061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("set_config: OMX_IndexConfigVideoAVCIntraPeriod"); 202161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_IndexConfigVideoAVCIntraPeriod)) { 202261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoAVCIntraPeriod failed"); 202361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedSetting; 202461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 202561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(&m_sConfigAVCIDRPeriod, pParam, sizeof(m_sConfigAVCIDRPeriod)); 202661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 202761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 20288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_IndexConfigCommonDeinterlace: 20298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 203016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_DEINTERLACE); 20318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_VIDEO_CONFIG_DEINTERLACE *pParam = (OMX_VIDEO_CONFIG_DEINTERLACE*) configData; 20328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("set_config: OMX_IndexConfigCommonDeinterlace"); 20338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_IndexConfigCommonDeinterlace)) { 20348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigCommonDeinterlace failed"); 20358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorUnsupportedSetting; 20368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 20378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(&m_sConfigDeinterlace, pParam, sizeof(m_sConfigDeinterlace)); 20388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 20398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2040f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_QcomIndexConfigVideoVencPerfMode: 2041f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 204216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_EXTNINDEX_VIDEO_PERFMODE); 2043f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan QOMX_EXTNINDEX_VIDEO_PERFMODE* pParam = (QOMX_EXTNINDEX_VIDEO_PERFMODE*)configData; 2044f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoVencPerfMode)) { 2045f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigVideoVencPerfMode failed"); 2046f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorUnsupportedSetting; 2047eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan } 2048eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan break; 2049eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan } 2050bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch case OMX_QcomIndexConfigNumHierPLayers: 2051e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 2052bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch VALIDATE_OMX_PARAM_DATA(configData, QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS); 2053bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS* pParam = 2054bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch (QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS*)configData; 2055bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigNumHierPLayers)) { 2056bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigNumHierPLayers failed"); 2057e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 2058e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2059bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch memcpy(&m_sHPlayers, pParam, sizeof(m_sHPlayers)); 2060e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2061e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2062e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexConfigBaseLayerId: 2063e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 206416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID); 2065e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID* pParam = 2066e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID*) configData; 2067e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigBaseLayerId)) { 2068e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigBaseLayerId failed"); 2069e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 2070e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2071e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(&m_sBaseLayerID, pParam, sizeof(m_sBaseLayerID)); 2072e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2073e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2074e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexConfigQp: 2075e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 207616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_QP); 2077e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SKYPE_VIDEO_CONFIG_QP* pParam = 2078e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_SKYPE_VIDEO_CONFIG_QP*) configData; 2079e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigQp)) { 2080e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigQp failed"); 2081e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 2082e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2083e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(&m_sConfigQP, pParam, sizeof(m_sConfigQP)); 2084e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2085e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2086eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan case OMX_IndexConfigPriority: 2087eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan { 208816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_PARAM_U32TYPE); 2089eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_IndexConfigPriority)) { 2090eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan DEBUG_PRINT_ERROR("Failed to set OMX_IndexConfigPriority"); 2091eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan return OMX_ErrorUnsupportedSetting; 2092dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan } 2093dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan break; 2094dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan } 2095dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan case OMX_IndexConfigOperatingRate: 2096dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan { 209716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_PARAM_U32TYPE); 2098dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_IndexConfigOperatingRate)) { 2099dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan DEBUG_PRINT_ERROR("Failed to set OMX_IndexConfigOperatingRate"); 2100dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan return handle->hw_overload ? OMX_ErrorInsufficientResources : 2101dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan OMX_ErrorUnsupportedSetting; 2102f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 2103f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 2104f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 2105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QTIIndexConfigVideoRoiInfo: 2106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 210716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_QTI_VIDEO_CONFIG_ROIINFO); 2108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_QTIIndexConfigVideoRoiInfo)) { 2109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Failed to set OMX_QTIIndexConfigVideoRoiInfo"); 2110e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorUnsupportedSetting; 2111e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2112e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2113e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2114f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon case OMX_IndexConfigAndroidIntraRefresh: 2115f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon { 2116f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE); 2117f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE* pParam = 2118f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon (OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE*) configData; 2119f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon if (m_state == OMX_StateLoaded 2120f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon || m_sInPortDef.bEnabled == OMX_FALSE 2121f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon || m_sOutPortDef.bEnabled == OMX_FALSE) { 2122f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_IndexConfigAndroidIntraRefresh)) { 2123f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon DEBUG_PRINT_ERROR("Failed to set OMX_IndexConfigVideoIntraRefreshType"); 2124f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon return OMX_ErrorUnsupportedSetting; 2125f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon } 2126f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon m_sConfigIntraRefresh.nRefreshPeriod = pParam->nRefreshPeriod; 2127f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon } else { 2128f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigAndroidIntraRefresh supported only at start of session"); 2129f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon return OMX_ErrorUnsupportedSetting; 2130f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon } 2131f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon break; 2132f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon } 21338a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar case OMX_IndexConfigAndroidVideoTemporalLayering: 2134bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch { 21358a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE); 2136bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch DEBUG_PRINT_ERROR("Setting/modifying Temporal layers at run-time is not supported !"); 2137bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch return OMX_ErrorUnsupportedSetting; 2138bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch } 2139ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan case OMX_QTIIndexConfigDescribeColorAspects: 2140ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan { 2141ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, DescribeColorAspectsParams); 2142939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan DescribeColorAspectsParams *params = (DescribeColorAspectsParams *)configData; 2143939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan print_debug_color_aspects(&(params->sAspects), "set_config"); 214464b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan 214564b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan // WA: Android client does not set the correct color-aspects (from dataspace). 214664b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan // Such a dataspace change is detected and set while in executing. This leads to 214764b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan // a race condition where client is trying to set (wrong) color and component trying 214864b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan // to set (right) color from ETB. 214964b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan // Hence ignore this config in Executing state till the framework starts setting right color. 215064b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan if (m_state == OMX_StateExecuting) { 215164b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan DEBUG_PRINT_HIGH("Ignoring ColorSpace setting in Executing state"); 215264b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan return OMX_ErrorUnsupportedSetting; 215364b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan } 215464b05f1905eb7c5f992cde3c3dcc9e7996d57a0bPraveen Chavan 2155ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_QTIIndexConfigDescribeColorAspects)) { 2156ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan DEBUG_PRINT_ERROR("Failed to set OMX_QTIIndexConfigDescribeColorAspects"); 2157ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan return OMX_ErrorUnsupportedSetting; 2158ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan } 2159ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan memcpy(&m_sConfigColorAspects, configData, sizeof(m_sConfigColorAspects)); 2160ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan break; 2161ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan } 2162b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan case OMX_IndexConfigAndroidVendorExtension: 2163b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan { 2164b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE); 2165b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 2166b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *ext = 2167b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan reinterpret_cast<OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *>(configData); 2168b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan VALIDATE_OMX_VENDOR_EXTENSION_PARAM_DATA(ext); 2169b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 2170b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan return set_vendor_extension_config(ext); 2171b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan } 2172b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 217361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 217461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex); 217561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 21766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 217747e37c4428509524ee576920a98381f3e4872493Nick Pelly 217861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 217947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 218047e37c4428509524ee576920a98381f3e4872493Nick Pelly 218147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 218261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 218361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ComponentDeInit 218447e37c4428509524ee576920a98381f3e4872493Nick Pelly 218561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 218661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Destroys the component and release memory allocated to the heap. 218747e37c4428509524ee576920a98381f3e4872493Nick Pelly 218861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 218961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 219047e37c4428509524ee576920a98381f3e4872493Nick Pelly 219161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 219261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 219347e37c4428509524ee576920a98381f3e4872493Nick Pelly 219461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 219547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_venc::component_deinit(OMX_IN OMX_HANDLETYPE hComp) 219647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 21978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) hComp; 219861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 i = 0; 21998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_venc(): Inside component_deinit()"); 220061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (OMX_StateLoaded != m_state) { 22018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("WARNING:Rxd DeInit,OMX not in LOADED state %d",\ 220261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_state); 220361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 220431cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara 220531cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara auto_lock l(m_buf_lock); 220661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 22078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing the Output Memory"); 220861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sOutPortDef.nBufferCountActual; i++ ) { 2209417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (BITMASK_PRESENT(&m_out_bm_count, i)) { 2210417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_CLEAR(&m_out_bm_count, i); 221131cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara if (BITMASK_PRESENT(&m_client_out_bm_count, i)) 221231cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara BITMASK_CLEAR(&m_client_out_bm_count, i); 2213417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan free_output_buffer (&m_out_mem_ptr[i]); 2214417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan } 2215417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan 2216417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (release_output_done()) { 2217417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan break; 2218417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan } 221961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 222061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_out_mem_ptr); 222161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = NULL; 222247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 222347e37c4428509524ee576920a98381f3e4872493Nick Pelly 222461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if the input buffers have to be cleaned up*/ 222561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr 2226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 222761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && !meta_mode_enable 2228826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 222961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) { 22308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing the Input Memory"); 223161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i<m_sInPortDef.nBufferCountActual; i++ ) { 2232417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (BITMASK_PRESENT(&m_inp_bm_count, i)) { 2233417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_CLEAR(&m_inp_bm_count, i); 22349f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara if (BITMASK_PRESENT(&m_client_in_bm_count, i)) 22359f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara BITMASK_CLEAR(&m_client_in_bm_count, i); 2236417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan free_input_buffer (&m_inp_mem_ptr[i]); 2237417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan } 2238417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan 2239417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (release_input_done()) { 2240417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan break; 2241417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan } 224261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 224347e37c4428509524ee576920a98381f3e4872493Nick Pelly 224447e37c4428509524ee576920a98381f3e4872493Nick Pelly 224561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_inp_mem_ptr); 224661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = NULL; 224761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 224847e37c4428509524ee576920a98381f3e4872493Nick Pelly 224961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Reset counters in mesg queues 225061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.m_size=0; 225161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cmd_q.m_size=0; 225261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.m_size=0; 225361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.m_read = m_ftb_q.m_write =0; 225461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cmd_q.m_read = m_cmd_q.m_write =0; 225561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.m_read = m_etb_q.m_write =0; 225647e37c4428509524ee576920a98381f3e4872493Nick Pelly 225747e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_ 225861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Clear the strong reference 22598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Calling m_heap_ptr.clear()"); 226061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_heap_ptr.clear(); 226147e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_ 22628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Calling venc_close()"); 22632162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan if (handle) { 22642162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan handle->venc_close(); 22652162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan DEBUG_PRINT_HIGH("Deleting HANDLE[%p]", handle); 22662162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan delete (handle); 22672162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan handle = NULL; 22682162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan } 22698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_INFO("Component Deinit"); 227061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 227147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 227247e37c4428509524ee576920a98381f3e4872493Nick Pelly 227347e37c4428509524ee576920a98381f3e4872493Nick Pelly 227447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_stop( void) 227547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 227661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_stop(); 227747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 227847e37c4428509524ee576920a98381f3e4872493Nick Pelly 227947e37c4428509524ee576920a98381f3e4872493Nick Pelly 228047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_pause(void) 228147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 228261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_pause(); 228347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 228447e37c4428509524ee576920a98381f3e4872493Nick Pelly 228547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_start(void) 228647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 228761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_start(); 228847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 228947e37c4428509524ee576920a98381f3e4872493Nick Pelly 229047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_flush(unsigned port) 229147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 229261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_flush(port); 229347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 229447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_resume(void) 229547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 229661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_resume(); 229747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 229847e37c4428509524ee576920a98381f3e4872493Nick Pelly 2299826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 omx_venc::dev_start_done(void) 230047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_start_done(); 2302826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2303826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 23046eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOMX_U32 omx_venc::dev_set_message_thread_id(pthread_t tid) 2305826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 230661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_set_message_thread_id(tid); 2307826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2308826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2309826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index) 2310826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 231161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_use_buf(buf_addr,port,index); 231247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 231347e37c4428509524ee576920a98381f3e4872493Nick Pelly 231447e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_free_buf(void *buf_addr,unsigned port) 231547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 231661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_free_buf(buf_addr,port); 231747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 231847e37c4428509524ee576920a98381f3e4872493Nick Pelly 2319826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_empty_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd) 232047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 2321f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool bret = false; 2322f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bret = handle->venc_empty_buf(buffer, pmem_data_buf,index,fd); 2323f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan hw_overload = handle->hw_overload; 2324f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return bret; 232547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 232647e37c4428509524ee576920a98381f3e4872493Nick Pelly 2327826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_fill_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd) 232847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 232961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_fill_buf(buffer, pmem_data_buf,index,fd); 233047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 233147e37c4428509524ee576920a98381f3e4872493Nick Pelly 2332f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavanbool omx_venc::dev_get_seq_hdr(void *buffer, unsigned size, unsigned *hdrlen) 2333826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 233461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_get_seq_hdr(buffer, size, hdrlen); 2335826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2336826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 23376eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_get_capability_ltrcount(OMX_U32 *min, OMX_U32 *max, OMX_U32 *step_size) 23386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 23396eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 23408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) min; 23418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) max; 23428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) step_size; 234361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Get Capability LTR Count is not supported"); 234461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 23456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 234661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_get_capability_ltrcount(min, max, step_size); 23476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 23486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 23496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 23508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_performance_level(OMX_U32 *perflevel) 23518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 23528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_ 23538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return handle->venc_get_performance_level(perflevel); 23548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else 23558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Get performance level is not supported"); 23568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return false; 23578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 23588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 23598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 23608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_vui_timing_info(OMX_U32 *enabled) 23618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 23628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_ 23638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return handle->venc_get_vui_timing_info(enabled); 23648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else 23658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Get vui timing information is not supported"); 23668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return false; 23678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 23688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 23698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2370e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_venc::dev_get_vqzip_sei_info(OMX_U32 *enabled) 2371e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 2372e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return handle->venc_get_vqzip_sei_info(enabled); 2373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 2374e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 23758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_peak_bitrate(OMX_U32 *peakbitrate) 23768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 23778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_ 23788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return handle->venc_get_peak_bitrate(peakbitrate); 23798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else 23808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Get peak bitrate is not supported"); 23818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return false; 23828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 23838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 23848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_venc::dev_get_batch_size(OMX_U32 *size) 2386e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 2387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_ 2388e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return handle->venc_get_batch_size(size); 2389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else 2390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Get batch size is not supported"); 2391e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return false; 2392e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 2393e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 2394e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2395bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetschbool omx_venc::dev_get_temporal_layer_caps(OMX_U32 *nMaxLayers, 2396bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch OMX_U32 *nMaxBLayers) { 2397bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch return handle->venc_get_temporal_layer_caps(nMaxLayers, nMaxBLayers); 2398bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch} 2399bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch 2400826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start() 2401826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 240261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_start(); 2403826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2404826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2405826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop() 2406826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 240761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_stop(); 2408826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2409826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2410826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start_done() 2411826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 241261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_start_done(); 2413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2414826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 2415826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop_done() 2416826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 241761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_loaded_stop_done(); 2418826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 241947e37c4428509524ee576920a98381f3e4872493Nick Pelly 242047e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_get_buf_req(OMX_U32 *min_buff_count, 242161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *actual_buff_count, 242261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *buff_size, 242361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port) 242447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_get_buf_req(min_buff_count, 242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan actual_buff_count, 242761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buff_size, 242861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan port); 242947e37c4428509524ee576920a98381f3e4872493Nick Pelly 243047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 243147e37c4428509524ee576920a98381f3e4872493Nick Pelly 243247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_set_buf_req(OMX_U32 *min_buff_count, 243361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *actual_buff_count, 243461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 *buff_size, 243561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port) 243647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_set_buf_req(min_buff_count, 243861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan actual_buff_count, 243961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buff_size, 244061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan port); 244147e37c4428509524ee576920a98381f3e4872493Nick Pelly 244247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 244347e37c4428509524ee576920a98381f3e4872493Nick Pelly 24446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_is_video_session_supported(OMX_U32 width, OMX_U32 height) 24456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 24466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 244761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_is_video_session_supported(width,height); 24486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 244961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Check against video capability not supported"); 245061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return true; 24516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 24526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 24536eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 2454e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinint omx_venc::dev_handle_output_extradata(void *buffer) 2455e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 2456e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return handle->handle_output_extradata(buffer); 2457e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 2458e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2459e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinint omx_venc::dev_handle_input_extradata(void *buffer, int fd) 2460e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 2461e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return handle->handle_input_extradata(buffer, fd); 2462e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 2463e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2464e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinvoid omx_venc::dev_set_extradata_cookie(void *cookie) 24656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 2466e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin handle->mInputExtradata.setCookieForConfig(cookie); 246761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 246861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 246961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_venc::dev_set_format(int color) 247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 247161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return handle->venc_set_format(color); 24726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 24736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 247447e37c4428509524ee576920a98381f3e4872493Nick Pellyint omx_venc::async_message_process (void *context, void* message) 247547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video* omx = NULL; 247761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_msg *m_sVenc_msg = NULL; 247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* omxhdr = NULL; 247961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_buffer *temp_buff = NULL; 248061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 248161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (context == NULL || message == NULL) { 24828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_venc::async_message_process invalid i/p params"); 248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -1; 248447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg = (struct venc_msg *)message; 248647e37c4428509524ee576920a98381f3e4872493Nick Pelly 248761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx = reinterpret_cast<omx_video*>(context); 248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 248961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sVenc_msg->statuscode != VEN_S_SUCCESS) { 24908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: async_msg_process() - Error statuscode = %lu", 249161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->statuscode); 2492f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if(m_sVenc_msg->msgcode == VEN_MSG_HW_OVERLOAD) { 2493e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx->post_event (0, m_sVenc_msg->statuscode,\ 2494e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD); 2495e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 2496e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx->post_event (0, m_sVenc_msg->statuscode,\ 2497e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_COMPONENT_GENERATE_HARDWARE_ERROR); 2498e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 249947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 250061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 25018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_venc::async_message_process- msgcode = %lu", 250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->msgcode); 250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (m_sVenc_msg->msgcode) { 250461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_START: 25058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event (0,m_sVenc_msg->statuscode,\ 250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_START_DONE); 250761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 250861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_STOP: 25098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event (0,m_sVenc_msg->statuscode,\ 251061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_STOP_DONE); 251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_RESUME: 25138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event (0,m_sVenc_msg->statuscode,\ 251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_RESUME_DONE); 251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 251661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_PAUSE: 25178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event (0,m_sVenc_msg->statuscode,\ 251861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_PAUSE_DONE); 251961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_FLUSH_INPUT_DONE: 252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 25228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event (0,m_sVenc_msg->statuscode,\ 252361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH); 252461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 252561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_FLUSH_OUPUT_DONE: 25268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event (0,m_sVenc_msg->statuscode,\ 252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH); 252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 252961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_INPUT_BUFFER_DONE: 253061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = (OMX_BUFFERHEADERTYPE* )\ 253161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->buf.clientdata; 253261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (omxhdr == NULL || 253461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (((OMX_U32)(omxhdr - omx->m_inp_mem_ptr) > omx->m_sInPortDef.nBufferCountActual) && 253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ((OMX_U32)(omxhdr - omx->meta_buffer_hdr) > omx->m_sInPortDef.nBufferCountActual))) { 253661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = NULL; 253761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->statuscode = VEN_S_EFAIL; 253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 254061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_ 254161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->omx_release_meta_buffer(omxhdr); 254261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 25438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event ((unsigned long)omxhdr,m_sVenc_msg->statuscode, 254461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EBD); 254561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 254661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_OUTPUT_BUFFER_DONE: 2547f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara { 254861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = (OMX_BUFFERHEADERTYPE*)m_sVenc_msg->buf.clientdata; 2549f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara OMX_U32 bufIndex = (OMX_U32)(omxhdr - omx->m_out_mem_ptr); 255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (omxhdr != NULL) && 2552f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara (bufIndex < omx->m_sOutPortDef.nBufferCountActual)) { 2553f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara auto_lock l(omx->m_buf_lock); 2554f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara if (BITMASK_ABSENT(&(omx->m_out_bm_count), bufIndex)) { 2555f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara DEBUG_PRINT_ERROR("Recieved FBD for buffer that is already freed !"); 2556f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara break; 2557f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara } 2558f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara if (!omx->is_secure_session() && (m_sVenc_msg->buf.len <= omxhdr->nAllocLen)) { 255961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nFilledLen = m_sVenc_msg->buf.len; 256061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nOffset = m_sVenc_msg->buf.offset; 256161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nTimeStamp = m_sVenc_msg->buf.timestamp; 25628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p TS = %u", (unsigned int)m_sVenc_msg->buf.timestamp); 256361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nFlags = m_sVenc_msg->buf.flags; 256461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Use buffer case*/ 256631cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara if (BITMASK_PRESENT(&(omx->m_client_out_bm_count), bufIndex) && 256731cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara omx->output_use_buffer && !omx->m_use_output_pmem && !omx->is_secure_session()) { 25688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("memcpy() for o/p Heap UseBuffer"); 256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(omxhdr->pBuffer, 257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sVenc_msg->buf.ptrbuffer), 257161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->buf.len); 257261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 257461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr->nFilledLen = 0; 257561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 257761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 257861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omxhdr = NULL; 257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sVenc_msg->statuscode = VEN_S_EFAIL; 258061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 25818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan omx->post_event ((unsigned long)omxhdr,m_sVenc_msg->statuscode, 258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FBD); 258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 2584f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara } 258561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_NEED_OUTPUT_BUFFER: 258661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TBD what action needs to be done here?? 258761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 25886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case VEN_MSG_LTRUSE_FAILED: 259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("LTRUSE Failed!"); 259161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->post_event (NULL,m_sVenc_msg->statuscode, 259261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_LTRUSE_FAILED); 259361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 25946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 259561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 25968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Unknown msg received : %lu", m_sVenc_msg->msgcode); 259761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 259861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 259961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 260047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 2601c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan 2602c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavanbool omx_venc::dev_color_align(OMX_BUFFERHEADERTYPE *buffer, 2603c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan OMX_U32 width, OMX_U32 height) 2604c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan{ 26058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(secure_session) { 26068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Cannot align colors in secure session."); 26078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_FALSE; 26088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2609c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan return handle->venc_color_align(buffer, width,height); 2610c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan} 26118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 26128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::is_secure_session() 26138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 26148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return secure_session; 26158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 26168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 26178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_output_log_flag() 26188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 26198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return handle->venc_get_output_log_flag(); 26208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 26218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 26228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_venc::dev_output_log_buffers(const char *buffer, int bufferlen) 26238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 26248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return handle->venc_output_log_buffers(buffer, bufferlen); 26258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 26268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 26278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_venc::dev_extradata_log_buffers(char *buffer) 26288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{ 26298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return handle->venc_extradata_log_buffers(buffer); 26308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan} 2631