omx_video_encoder.cpp revision 417bd6d3d293ef616a5a33741cfd6ac8c50f685f
147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*--------------------------------------------------------------------------
2e4010605f233a213cf0d972397bb33c34c364227Patrick TjinCopyright (c) 2010-2015, 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
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (codec_type == OMX_VIDEO_CodingMPEG4) {
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_MPEG4ProfileSimple;
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_MPEG4Level0;
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingH263) {
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_H263ProfileBaseline;
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_H263Level10;
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingAVC) {
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_AVCProfileBaseline;
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_AVCLevel1;
3505aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingVP8) {
3517beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_VP8ProfileMain;
3527beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_VP8Level_Version0;
353f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    } else if (codec_type == OMX_VIDEO_CodingHEVC) {
354f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_sParamProfileLevel.eProfile = (OMX_U32) OMX_VIDEO_HEVCProfileMain;
355f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_sParamProfileLevel.eLevel = (OMX_U32) OMX_VIDEO_HEVCMainTierLevel1;
35647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
35747e37c4428509524ee576920a98381f3e4872493Nick Pelly
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the video parameters for input port
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sInPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.nPortIndex= (OMX_U32) PORT_INDEX_IN;
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.bEnabled = OMX_TRUE;
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.bPopulated = OMX_FALSE;
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.eDomain = OMX_PortDomainVideo;
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.eDir = OMX_DirInput;
3658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sInPortDef.format.video.cMIMEType = (char *)"YUV420";
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH;
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT;
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nStride = OMX_CORE_QCIF_WIDTH;
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nSliceHeight = OMX_CORE_QCIF_HEIGHT;
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.nBitrate = 64000;
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.xFramerate = 15 << 16;
3720b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE)
373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        QOMX_DEFAULT_COLOR_FMT;
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingUnused;
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_get_buf_req(&m_sInPortDef.nBufferCountMin,
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sInPortDef.nBufferCountActual,
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sInPortDef.nBufferSize,
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sInPortDef.nPortIndex) != true) {
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorUndefined;
381c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni        goto init_error;
38247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the video parameters for output port
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sOutPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.bEnabled = OMX_TRUE;
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.bPopulated = OMX_FALSE;
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.eDomain = OMX_PortDomainVideo;
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.eDir = OMX_DirOutput;
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.nFrameWidth = OMX_CORE_QCIF_WIDTH;
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.nFrameHeight = OMX_CORE_QCIF_HEIGHT;
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.nBitrate = 64000;
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.xFramerate = 15 << 16;
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortDef.format.video.eColorFormat =  OMX_COLOR_FormatUnused;
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (codec_type == OMX_VIDEO_CodingMPEG4) {
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingMPEG4;
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingH263) {
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingH263;
4007beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    } else if (codec_type == OMX_VIDEO_CodingAVC) {
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingAVC;
4025aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingVP8) {
4035aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingVP8;
404f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    } else if (codec_type == OMX_VIDEO_CodingHEVC) {
405f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_sOutPortDef.format.video.eCompressionFormat =  OMX_VIDEO_CodingHEVC;
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
4077beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sOutPortDef.nBufferCountActual,
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_sOutPortDef.nBufferSize,
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sOutPortDef.nPortIndex) != true) {
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorUndefined;
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the video color format for input port
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sInPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_IN;
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.nIndex = 0;
4190b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE)
420e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        QOMX_DEFAULT_COLOR_FMT;
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInPortFormat.eCompressionFormat = OMX_VIDEO_CodingUnused;
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Initialize the compression format for output port
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sOutPortFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE);
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortFormat.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortFormat.nIndex = 0;
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutPortFormat.eColorFormat = OMX_COLOR_FormatUnused;
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (codec_type == OMX_VIDEO_CodingMPEG4) {
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingMPEG4;
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingH263) {
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingH263;
4337beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    } else if (codec_type == OMX_VIDEO_CodingAVC) {
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingAVC;
4355aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan    } else if (codec_type == OMX_VIDEO_CodingVP8) {
4365aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingVP8;
437f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    } else if (codec_type == OMX_VIDEO_CodingHEVC) {
438f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_sOutPortFormat.eCompressionFormat =  OMX_VIDEO_CodingHEVC;
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // mandatory Indices for kronos test suite
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sInBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sInBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_IN;
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sOutBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sOutBufSupplier.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    OMX_INIT_STRUCT(&m_sParamInitqp, QOMX_EXTNINDEX_VIDEO_INITIALQP);
4518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sParamInitqp.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // mp4 specific init
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamMPEG4, OMX_VIDEO_PARAM_MPEG4TYPE);
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.eLevel = OMX_VIDEO_MPEG4Level0;
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nSliceHeaderSpacing = 0;
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bSVH = OMX_FALSE;
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bGov = OMX_FALSE;
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1);  // 2 second intra period for default outport fps
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bACPred = OMX_TRUE;
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nTimeIncRes = 30; // delta = 2 @ 15 fps
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nAllowedPictureTypes = 2; // pframe and iframe
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.nHeaderExtension = 1; // number of video packet headers per vop
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamMPEG4.bReversibleVLC = OMX_FALSE;
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // h263 specific init
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamH263, OMX_VIDEO_PARAM_H263TYPE);
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nBFrames = 0;
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.eProfile = OMX_VIDEO_H263ProfileBaseline;
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.eLevel = OMX_VIDEO_H263Level10;
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.bPLUSPTYPEAllowed = OMX_FALSE;
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nAllowedPictureTypes = 2;
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.bForceRoundingTypeToZero = OMX_TRUE;
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nPictureHeaderRepetition = 0;
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamH263.nGOBHeaderInterval = 1;
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // h264 specific init
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamAVC, OMX_VIDEO_PARAM_AVCTYPE);
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nSliceHeaderSpacing = 0;
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nPFrames = (m_sOutPortFormat.xFramerate * 2 - 1); // 2 second intra period for default outport fps
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nBFrames = 0;
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bUseHadamard = OMX_FALSE;
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nRefIdx10ActiveMinus1 = 1;
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nRefIdx11ActiveMinus1 = 0;
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableUEP = OMX_FALSE;
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableFMO = OMX_FALSE;
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableASO = OMX_FALSE;
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEnableRS = OMX_FALSE;
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.eProfile = OMX_VIDEO_AVCProfileBaseline;
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.eLevel = OMX_VIDEO_AVCLevel1;
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nAllowedPictureTypes = 2;
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bFrameMBsOnly = OMX_FALSE;
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bMBAFF = OMX_FALSE;
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bEntropyCodingCABAC = OMX_FALSE;
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bWeightedPPrediction = OMX_FALSE;
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nWeightedBipredicitonMode = 0;
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bconstIpred = OMX_FALSE;
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bDirect8x8Inference = OMX_FALSE;
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.bDirectSpatialTemporal = OMX_FALSE;
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.nCabacInitIdc = 0;
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamAVC.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable;
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
5087beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    // VP8 specific init
5097beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    OMX_INIT_STRUCT(&m_sParamVP8, OMX_VIDEO_PARAM_VP8TYPE);
5107beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    m_sParamVP8.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
5117beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    m_sParamVP8.eProfile = OMX_VIDEO_VP8ProfileMain;
5127beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    m_sParamVP8.eLevel = OMX_VIDEO_VP8Level_Version0;
5137beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    m_sParamVP8.nDCTPartitions = 0;
5147beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    m_sParamVP8.bErrorResilientMode = OMX_FALSE;
5157beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano
516f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    // HEVC specific init
517f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    OMX_INIT_STRUCT(&m_sParamHEVC, OMX_VIDEO_PARAM_HEVCTYPE);
518f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_sParamHEVC.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
519f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_sParamHEVC.eProfile =  OMX_VIDEO_HEVCProfileMain;
520f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_sParamHEVC.eLevel =  OMX_VIDEO_HEVCMainTierLevel1;
521f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_INIT_STRUCT(&m_sParamLTRMode, QOMX_VIDEO_PARAM_LTRMODE_TYPE);
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamLTRMode.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamLTRMode.eLTRMode = QOMX_VIDEO_LTRMode_Disable;
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
526f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    OMX_INIT_STRUCT(&m_sParamLTRCount, QOMX_VIDEO_PARAM_LTRCOUNT_TYPE);
527f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_sParamLTRCount.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
528f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_sParamLTRCount.nCount = 0;
529f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
5308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    OMX_INIT_STRUCT(&m_sConfigDeinterlace, OMX_VIDEO_CONFIG_DEINTERLACE);
5318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sConfigDeinterlace.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
5328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sConfigDeinterlace.nEnable = OMX_FALSE;
5338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
5348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    OMX_INIT_STRUCT(&m_sHierLayers, QOMX_VIDEO_HIERARCHICALLAYERS);
5358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sHierLayers.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
5368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sHierLayers.nNumLayers = 0;
5378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_sHierLayers.eHierarchicalCodingType = QOMX_HIERARCHICALCODING_P;
5388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
539e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_INIT_STRUCT(&m_sMBIStatistics, OMX_QOMX_VIDEO_MBI_STATISTICS);
540e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    m_sMBIStatistics.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
541e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    m_sMBIStatistics.eMBIStatisticsType = QOMX_MBI_STATISTICS_MODE_DEFAULT;
542e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_state                   = OMX_StateLoaded;
54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sExtraData = 0;
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (pipe(fds)) {
5488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: pipe creation failed");
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (fds[0] == 0 || fds[1] == 0) {
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pipe(fds)) {
5538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: pipe creation failed");
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorInsufficientResources;
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eRet == OMX_ErrorNone) {
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pipe_in = fds[0];
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pipe_out = fds[1];
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        msg_thread_created = true;
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        r = pthread_create(&msg_thread_id,0, message_thread, this);
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (r < 0) {
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            msg_thread_created = false;
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            async_thread_created = true;
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            r = pthread_create(&async_thread_id,0, venc_dev::async_venc_message_thread, this);
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (r < 0) {
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInsufficientResources;
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                async_thread_created = false;
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dev_set_message_thread_id(async_thread_id);
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
57647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
57747e37c4428509524ee576920a98381f3e4872493Nick Pelly
578f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    if (perfmode) {
579f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        QOMX_EXTNINDEX_VIDEO_PERFMODE pParam;
580f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        pParam.nPerfMode = perfmode;
581f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("Perfmode = 0x%x", pParam.nPerfMode);
582f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (!handle->venc_set_config(&pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoVencPerfMode))
583f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_ERROR("Failed setting PerfMode to %d", pParam.nPerfMode);
584f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
585f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
5868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_INFO("Component_init : %s : return = 0x%x", m_nkind, eRet);
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
588c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarniinit_error:
589c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni    handle->venc_close();
590c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni    delete handle;
591c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni    handle = NULL;
592c63a274a815a5d76f8815f48b3be767d3eb8a414Ashray Kulkarni    return eRet;
59347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
59447e37c4428509524ee576920a98381f3e4872493Nick Pelly
59547e37c4428509524ee576920a98381f3e4872493Nick Pelly
59647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::Setparameter
59947e37c4428509524ee576920a98381f3e4872493Nick Pelly
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Set Parameter method implementation.
60247e37c4428509524ee576920a98381f3e4872493Nick Pelly
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
60547e37c4428509524ee576920a98381f3e4872493Nick Pelly
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if successful.
60847e37c4428509524ee576920a98381f3e4872493Nick Pelly
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
61047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::set_parameter(OMX_IN OMX_HANDLETYPE     hComp,
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE paramIndex,
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR        paramData)
61347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
6148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
61647e37c4428509524ee576920a98381f3e4872493Nick Pelly
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
6198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Set Param in Invalid State");
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (paramData == NULL) {
6238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData");
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*set_parameter can be called in loaded state
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      or disabled port */
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateLoaded
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            || m_sInPortDef.bEnabled == OMX_FALSE
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            || m_sOutPortDef.bEnabled == OMX_FALSE) {
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("Set Parameter called in valid state");
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
6348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State");
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
6388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    switch ((int)paramIndex) {
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPortDefinition:
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
64116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_PORTDEFINITIONTYPE);
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_PORTDEFINITIONTYPE *portDefn;
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData;
6448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPortDefinition H= %d, W = %d",
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (int)portDefn->format.video.nFrameHeight,
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (int)portDefn->format.video.nFrameWidth);
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (PORT_INDEX_IN == portDefn->nPortIndex) {
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!dev_is_video_session_supported(portDefn->format.video.nFrameWidth,
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                portDefn->format.video.nFrameHeight)) {
6518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("video session not supported");
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        omx_report_unsupported_setting();
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
6558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("i/p actual cnt requested = %u", (unsigned int)portDefn->nBufferCountActual);
6568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("i/p min cnt requested = %u", (unsigned int)portDefn->nBufferCountMin);
6578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("i/p buffersize requested = %u", (unsigned int)portDefn->nBufferSize);
658417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                    if (portDefn->nBufferCountActual > MAX_NUM_INPUT_BUFFERS) {
659417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                        DEBUG_PRINT_ERROR("ERROR: (In_PORT) actual count (%u) exceeds max(%u)",
660417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                                (unsigned int)portDefn->nBufferCountActual, (unsigned int)MAX_NUM_INPUT_BUFFERS);
661417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                        return OMX_ErrorUnsupportedSetting;
662417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                    }
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) {
6648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: (In_PORT) Min buffers (%u) > actual count (%u)",
6658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                (unsigned int)portDefn->nBufferCountMin, (unsigned int)portDefn->nBufferCountActual);
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) {
6698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: venc_set_param input failed");
6703b53b32d6a823b7a36d4abe626c0c2f726e286ecPraveen Chavan                        return handle->hw_overload ? OMX_ErrorInsufficientResources :
6713b53b32d6a823b7a36d4abe626c0c2f726e286ecPraveen Chavan                                OMX_ErrorUnsupportedSetting;
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
6748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("i/p previous actual cnt = %u", (unsigned int)m_sInPortDef.nBufferCountActual);
6758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("i/p previous min cnt = %u", (unsigned int)m_sInPortDef.nBufferCountMin);
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(&m_sInPortDef, portDefn,sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
677826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
678826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
6790b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    if (portDefn->format.video.eColorFormat ==
6800b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                            (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) {
6810b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        m_sInPortDef.format.video.eColorFormat = (OMX_COLOR_FORMATTYPE)
682e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            QOMX_DEFAULT_COLOR_FMT;
68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (!mUseProxyColorFormat) {
68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!c2d_conv.init()) {
6858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("C2D init failed");
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                return OMX_ErrorUnsupportedSetting;
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
6888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_HIGH("C2D init is successful");
68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = true;
69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ;
69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else
69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = false;
694826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Query Input Buffer Requirements*/
69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    dev_get_buf_req   (&m_sInPortDef.nBufferCountMin,
69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sInPortDef.nBufferCountActual,
69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sInPortDef.nBufferSize,
69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.nPortIndex);
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Query ouput Buffer Requirements*/
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    dev_get_buf_req   (&m_sOutPortDef.nBufferCountMin,
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferCountActual,
70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferSize,
70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex);
70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sInPortDef.nBufferCountActual = portDefn->nBufferCountActual;
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (PORT_INDEX_OUT == portDefn->nPortIndex) {
7088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("o/p actual cnt requested = %u", (unsigned int)portDefn->nBufferCountActual);
7098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("o/p min cnt requested = %u", (unsigned int)portDefn->nBufferCountMin);
7108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("o/p buffersize requested = %u", (unsigned int)portDefn->nBufferSize);
711417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
712417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                    if (portDefn->nBufferCountActual > MAX_NUM_OUTPUT_BUFFERS) {
713417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                        DEBUG_PRINT_ERROR("ERROR: (Out_PORT) actual count (%u) exceeds max(%u)",
714417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                                (unsigned int)portDefn->nBufferCountActual, (unsigned int)MAX_NUM_OUTPUT_BUFFERS);
715417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                        return OMX_ErrorUnsupportedSetting;
716417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                    }
71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portDefn->nBufferCountMin > portDefn->nBufferCountActual) {
7188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: (Out_PORT) Min buffers (%u) > actual count (%u)",
7198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                (unsigned int)portDefn->nBufferCountMin, (unsigned int)portDefn->nBufferCountActual);
72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,OMX_IndexParamPortDefinition) != true) {
7238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: venc_set_param output failed");
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
726e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    memcpy(&m_sOutPortDef,portDefn,sizeof(struct OMX_PARAM_PORTDEFINITIONTYPE));
7276eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Query ouput Buffer Requirements*/
72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferCountActual,
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferSize,
73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex);
7336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    update_profile_level(); //framerate , bitrate
73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
7368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("o/p previous actual cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountActual);
7378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("o/p previous min cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountMin);
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortDef.nBufferCountActual = portDefn->nBufferCountActual;
73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Set_parameter: Bad Port idx %d",
74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (int)portDefn->nPortIndex);
74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sConfigFramerate.xEncodeFramerate = portDefn->format.video.xFramerate;
74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sConfigBitrate.nEncodeBitrate = portDefn->format.video.nBitrate;
74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamBitrate.nTargetBitrate = portDefn->format.video.nBitrate;
74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
74947e37c4428509524ee576920a98381f3e4872493Nick Pelly
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoPortFormat:
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
75216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PORTFORMATTYPE);
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt =
75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData;
7558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d",
75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        portFmt->eColorFormat);
75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //set the driver with the corresponding values
75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (PORT_INDEX_IN == portFmt->nPortIndex) {
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,OMX_IndexParamVideoPortFormat) != true) {
76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
7638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoPortFormat %d",
76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            portFmt->eColorFormat);
76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    update_profile_level(); //framerate
76647e37c4428509524ee576920a98381f3e4872493Nick Pelly
767826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (portFmt->eColorFormat ==
76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque) {
7700b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        m_sInPortFormat.eColorFormat = (OMX_COLOR_FORMATTYPE)
771e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            QOMX_DEFAULT_COLOR_FMT;
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (!mUseProxyColorFormat) {
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!c2d_conv.init()) {
7748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("C2D init failed");
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                return OMX_ErrorUnsupportedSetting;
77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
7778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_HIGH("C2D init is successful");
77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = true;
78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_input_msg_id = OMX_COMPONENT_GENERATE_ETB_OPQ;
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else
782826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    {
78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sInPortFormat.eColorFormat = portFmt->eColorFormat;
7859262c4fed09839e7e6afc21d6406a9e261c1dba6Praveen Chavan                        m_sInPortDef.format.video.eColorFormat = portFmt->eColorFormat;
78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_input_msg_id = OMX_COMPONENT_GENERATE_ETB;
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mUseProxyColorFormat = false;
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sInPortFormat.xFramerate = portFmt->xFramerate;
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //TODO if no use case for O/P port,delet m_sOutPortFormat
79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoInit:
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            { //TODO, do we need this index set param
79616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE* pParam = (OMX_PORT_PARAM_TYPE*)(paramData);
7988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Set OMX_IndexParamVideoInit called");
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
80147e37c4428509524ee576920a98381f3e4872493Nick Pelly
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoBitrate:
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
80416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_BITRATETYPE);
80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData;
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoBitrate");
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(paramData,OMX_IndexParamVideoBitrate) != true) {
80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamBitrate.nTargetBitrate = pParam->nTargetBitrate;
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamBitrate.eControlRate = pParam->eControlRate;
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                update_profile_level(); //bitrate
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sConfigBitrate.nEncodeBitrate = pParam->nTargetBitrate;
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sInPortDef.format.video.nBitrate = pParam->nTargetBitrate;
81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sOutPortDef.format.video.nBitrate = pParam->nTargetBitrate;
8168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("bitrate = %u", (unsigned int)m_sOutPortDef.format.video.nBitrate);
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoMpeg4:
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
82116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_MPEG4TYPE);
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData;
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_MPEG4TYPE mp4_param;
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&mp4_param, pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE));
82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoMpeg4");
82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->eProfile == OMX_VIDEO_MPEG4ProfileAdvancedSimple) {
8278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_
8288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (pParam->nBFrames || bframes)
829e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        mp4_param.nBFrames = 1;
830e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    else
831e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        mp4_param.nBFrames = 0;
8328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("MPEG4: %u BFrames are being set", (unsigned int)mp4_param.nBFrames);
8338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
8368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: B frames not supported");
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        mp4_param.nBFrames = 0;
83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(&mp4_param,OMX_IndexParamVideoMpeg4) != true) {
84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamMPEG4,pParam, sizeof(struct OMX_VIDEO_PARAM_MPEG4TYPE));
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nPFrames = m_sParamMPEG4.nPFrames;
8458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (pParam->nBFrames || bframes)
8468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sIntraperiod.nBFrames = m_sParamMPEG4.nBFrames = mp4_param.nBFrames;
8478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                else
848e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    m_sIntraperiod.nBFrames = m_sParamMPEG4.nBFrames;
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoH263:
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData;
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoH263");
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(paramData,OMX_IndexParamVideoH263) != true) {
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamH263,pParam, sizeof(struct OMX_VIDEO_PARAM_H263TYPE));
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nPFrames = m_sParamH263.nPFrames;
86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nBFrames = m_sParamH263.nBFrames;
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoAvc:
86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
86516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_AVCTYPE);
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData;
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_AVCTYPE avc_param;
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&avc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_AVCTYPE));
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoAvc");
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
871e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                avc_param.nBFrames = 0;
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ((pParam->eProfile == OMX_VIDEO_AVCProfileHigh)||
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (pParam->eProfile == OMX_VIDEO_AVCProfileMain)) {
874e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
876e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        avc_param.nBFrames = pParam->nBFrames;
877e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_LOW("B frames set using Client setparam to %d",
878e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            avc_param.nBFrames);
87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
880e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
881e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    if (bframes ) {
882e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        avc_param.nBFrames = bframes;
883e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_LOW("B frames set using setprop to %d",
884e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            avc_param.nBFrames);
8858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    }
8868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
887e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_HIGH("AVC: BFrames: %u", (unsigned int)avc_param.nBFrames);
8888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    avc_param.bEntropyCodingCABAC = (OMX_BOOL)(avc_param.bEntropyCodingCABAC && entropy);
8898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    avc_param.nCabacInitIdc = entropy ? avc_param.nCabacInitIdc : 0;
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames) {
8928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("Warning: B frames not supported");
89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
895e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(&avc_param,OMX_IndexParamVideoAvc) != true) {
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamAVC,pParam, sizeof(struct OMX_VIDEO_PARAM_AVCTYPE));
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sIntraperiod.nPFrames = m_sParamAVC.nPFrames;
9018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (pParam->nBFrames || bframes)
9028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sIntraperiod.nBFrames = m_sParamAVC.nBFrames = avc_param.nBFrames;
9038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                else
904e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    m_sIntraperiod.nBFrames = m_sParamAVC.nBFrames;
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
9077beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8:
9087beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            {
90916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_VP8TYPE);
9107beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData;
9117beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                OMX_VIDEO_PARAM_VP8TYPE vp8_param;
9127beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoVp8");
9137beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                if (pParam->nDCTPartitions != m_sParamVP8.nDCTPartitions ||
9147beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                    pParam->bErrorResilientMode != m_sParamVP8.bErrorResilientMode) {
9157beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                    DEBUG_PRINT_ERROR("VP8 doesn't support nDCTPartitions or bErrorResilientMode");
9167beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                }
9177beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                memcpy(&vp8_param, pParam, sizeof( struct OMX_VIDEO_PARAM_VP8TYPE));
9187beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                if (handle->venc_set_param(&vp8_param, (OMX_INDEXTYPE)OMX_IndexParamVideoVp8) != true) {
9197beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                    return OMX_ErrorUnsupportedSetting;
9207beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                }
9217beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                memcpy(&m_sParamVP8,pParam, sizeof(struct OMX_VIDEO_PARAM_VP8TYPE));
9227beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                break;
9237beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            }
924f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case (OMX_INDEXTYPE)OMX_IndexParamVideoHevc:
925f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
92616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_HEVCTYPE);
927f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_VIDEO_PARAM_HEVCTYPE* pParam = (OMX_VIDEO_PARAM_HEVCTYPE*)paramData;
928f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_VIDEO_PARAM_HEVCTYPE hevc_param;
929f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoHevc");
930f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(&hevc_param, pParam, sizeof( struct OMX_VIDEO_PARAM_HEVCTYPE));
931f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (handle->venc_set_param(&hevc_param, (OMX_INDEXTYPE)OMX_IndexParamVideoHevc) != true) {
932f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_ERROR("Failed : set_parameter: OMX_IndexParamVideoHevc");
933f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    return OMX_ErrorUnsupportedSetting;
934f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
935f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(&m_sParamHEVC, pParam, sizeof(struct OMX_VIDEO_PARAM_HEVCTYPE));
936f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
937f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoProfileLevelCurrent:
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
94016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE);
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoProfileLevelCurrent");
94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (handle->venc_set_param(pParam,OMX_IndexParamVideoProfileLevelCurrent) != true) {
9448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("set_parameter: OMX_IndexParamVideoProfileLevelCurrent failed for Profile: %u "
9458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "Level :%u", (unsigned int)pParam->eProfile, (unsigned int)pParam->eLevel);
94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamProfileLevel.eProfile = pParam->eProfile;
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamProfileLevel.eLevel = pParam->eLevel;
95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)m_sParamProfileLevel.eProfile;
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)m_sParamProfileLevel.eLevel;
9558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile,
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamMPEG4.eLevel);
95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)m_sParamProfileLevel.eProfile;
96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)m_sParamProfileLevel.eLevel;
9618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("H263 profile = %d, level = %d", m_sParamH263.eProfile,
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamH263.eLevel);
96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile;
96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel;
9678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("AVC profile = %d, level = %d", m_sParamAVC.eProfile,
9688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            m_sParamAVC.eLevel);
9698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc.secure",\
9708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
9718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)m_sParamProfileLevel.eProfile;
9728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)m_sParamProfileLevel.eLevel;
97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile,
97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamAVC.eLevel);
97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
9767beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",\
9777beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                            OMX_MAX_STRINGNAME_SIZE)) {
9787beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                    m_sParamVP8.eProfile = (OMX_VIDEO_VP8PROFILETYPE)m_sParamProfileLevel.eProfile;
9797beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                    m_sParamVP8.eLevel = (OMX_VIDEO_VP8LEVELTYPE)m_sParamProfileLevel.eLevel;
9808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("VP8 profile = %d, level = %d", m_sParamVP8.eProfile,
9817beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                            m_sParamVP8.eLevel);
9827beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                }
983f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc",\
984f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            OMX_MAX_STRINGNAME_SIZE)) {
985f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    m_sParamHEVC.eProfile = (OMX_VIDEO_HEVCPROFILETYPE)m_sParamProfileLevel.eProfile;
986f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    m_sParamHEVC.eLevel = (OMX_VIDEO_HEVCLEVELTYPE)m_sParamProfileLevel.eLevel;
987f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_LOW("HEVC profile = %d, level = %d", m_sParamHEVC.eProfile,
988f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            m_sParamHEVC.eLevel);
989f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
990f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamStandardComponentRole:
99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
99516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_COMPONENTROLETYPE);
99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_COMPONENTROLETYPE *comp_role;
99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData;
9988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamStandardComponentRole %s",
99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        comp_role->cRole);
100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ((m_state == OMX_StateLoaded)&&
100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) {
100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("Set Parameter called in valid state");
100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
10058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Set Parameter called in Invalid State");
100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorIncorrectStateOperation;
100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
10138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole);
10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
10158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    }
10168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc.secure",OMX_MAX_STRINGNAME_SIZE)) {
10178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (!strncmp((char*)comp_role->cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
10188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
10198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    } else {
102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s\n", comp_role->cRole);
102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
10278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole);
102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUnsupportedSetting;
102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.h263",OMX_MAX_STRINGNAME_SIZE);
103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
10348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole);
103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
10386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) {
104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) {
104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE);
104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
10438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole);
104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedSetting;
104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
10476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
1048f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc",OMX_MAX_STRINGNAME_SIZE)) {
1049f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    if (!strncmp((const char*)comp_role->cRole,"video_encoder.hevc",OMX_MAX_STRINGNAME_SIZE)) {
1050f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        strlcpy((char*)m_cRole,"video_encoder.hevc",OMX_MAX_STRINGNAME_SIZE);
1051f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    } else {
1052f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown Index %s", comp_role->cRole);
1053f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        eRet = OMX_ErrorUnsupportedSetting;
1054f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    }
1055f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
1056f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %s", m_nkind);
105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorInvalidComponentName;
106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
106347e37c4428509524ee576920a98381f3e4872493Nick Pelly
106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPriorityMgmt:
106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
106616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PRIORITYMGMTTYPE);
106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt");
106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_state != OMX_StateLoaded) {
10698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Set Parameter called in Invalid State");
107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorIncorrectStateOperation;
107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PRIORITYMGMTTYPE *priorityMgmtype = (OMX_PRIORITYMGMTTYPE*) paramData;
10738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamPriorityMgmt %u",
10748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)priorityMgmtype->nGroupID);
107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
10768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: priorityMgmtype %u",
10778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)priorityMgmtype->nGroupPriority);
107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sPriorityMgmt.nGroupID = priorityMgmtype->nGroupID;
108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sPriorityMgmt.nGroupPriority = priorityMgmtype->nGroupPriority;
108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
108447e37c4428509524ee576920a98381f3e4872493Nick Pelly
108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamCompBufferSupplier:
108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
108716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_BUFFERSUPPLIERTYPE);
108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier");
108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData;
10908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamCompBufferSupplier %d",
109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        bufferSupplierType->eBufferSupplier);
109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (bufferSupplierType->nPortIndex == 0 || bufferSupplierType->nPortIndex ==1)
109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sInBufSupplier.eBufferSupplier = bufferSupplierType->eBufferSupplier;
109447e37c4428509524ee576920a98381f3e4872493Nick Pelly
109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else
109647e37c4428509524ee576920a98381f3e4872493Nick Pelly
109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
109847e37c4428509524ee576920a98381f3e4872493Nick Pelly
109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
110047e37c4428509524ee576920a98381f3e4872493Nick Pelly
110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoQuantization:
110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
110416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_QUANTIZATIONTYPE);
11058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_IndexParamVideoQuantization");
110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData;
110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (session_qp->nPortIndex == PORT_INDEX_OUT) {
110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData, OMX_IndexParamVideoQuantization) != true) {
110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQuantization.nQpI = session_qp->nQpI;
111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQuantization.nQpP = session_qp->nQpP;
11138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sSessionQuantization.nQpB = session_qp->nQpB;
111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
11158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port Index for Session QP setting");
111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
112047e37c4428509524ee576920a98381f3e4872493Nick Pelly
112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoQPRange:
112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
112316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE);
11248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexParamVideoQPRange");
112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData;
112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (qp_range->nPortIndex == PORT_INDEX_OUT) {
112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_param(paramData,
112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexParamVideoQPRange) != true) {
112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQPRange.minQP= qp_range->minQP;
113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sSessionQPRange.maxQP= qp_range->maxQP;
113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
11348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port Index for QP range setting");
113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
113761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
11396eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexPortDefn:
114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
114216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_PARAM_PORTDEFINITIONTYPE);
114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PARAM_PORTDEFINITIONTYPE* pParam =
114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_QCOM_PARAM_PORTDEFINITIONTYPE*)paramData;
114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_parameter: OMX_QcomIndexPortDefn");
114661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_IN) {
114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid &&
114861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nMemRegion < OMX_QCOM_MemRegionMax) {
114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_input_pmem = OMX_TRUE;
115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_input_pmem = OMX_FALSE;
115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (pParam->nPortIndex == (OMX_U32)PORT_INDEX_OUT) {
115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nMemRegion > OMX_QCOM_MemRegionInvalid &&
115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nMemRegion < OMX_QCOM_MemRegionMax) {
115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_output_pmem = OMX_TRUE;
115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_use_output_pmem = OMX_FALSE;
115961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: SetParameter called on unsupported Port Index for QcomPortDefn");
116261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
116361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
116561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1166826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoErrorCorrection:
116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
116916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE);
11708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection");
117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* pParam =
117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData;
117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData, OMX_IndexParamVideoErrorCorrection)) {
11748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Request for setting Error Resilience failed");
117561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sErrorCorrection,pParam, sizeof(m_sErrorCorrection));
117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoIntraRefresh:
118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
118216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_INTRAREFRESHTYPE);
11838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_param:OMX_IndexParamVideoIntraRefresh");
118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_INTRAREFRESHTYPE* pParam =
118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData;
118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData,OMX_IndexParamVideoIntraRefresh)) {
11878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Request for setting intra refresh failed");
118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sIntraRefresh, pParam, sizeof(m_sIntraRefresh));
119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
11948e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava        case OMX_QcomIndexParamVideoMetaBufferMode:
1195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            {
119616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, StoreMetaDataInBuffersParams);
119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                StoreMetaDataInBuffersParams *pParam =
119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (StoreMetaDataInBuffersParams*)paramData;
11998e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava                DEBUG_PRINT_HIGH("set_parameter:OMX_QcomIndexParamVideoMetaBufferMode: "
12008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        "port_index = %u, meta_mode = %d", (unsigned int)pParam->nPortIndex, pParam->bStoreMetaData);
120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_IN) {
120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->bStoreMetaData != meta_mode_enable) {
120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (!handle->venc_set_meta_mode(pParam->bStoreMetaData)) {
12048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_ERROR("ERROR: set Metabuffer mode %d fail",
120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pParam->bStoreMetaData);
120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            return OMX_ErrorUnsupportedSetting;
120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        meta_mode_enable = pParam->bStoreMetaData;
120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (meta_mode_enable) {
121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sInPortDef.nBufferCountActual = m_sInPortDef.nBufferCountMin;
121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (handle->venc_set_param(&m_sInPortDef,OMX_IndexParamPortDefinition) != true) {
12128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: venc_set_param input failed");
121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                return OMX_ErrorUnsupportedSetting;
121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
121661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            /*TODO: reset encoder driver Meta mode*/
121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            dev_get_buf_req   (&m_sOutPortDef.nBufferCountMin,
121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferCountActual,
121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    &m_sOutPortDef.nBufferSize,
122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    m_sOutPortDef.nPortIndex);
122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
12238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else if (pParam->nPortIndex == PORT_INDEX_OUT && secure_session) {
12248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (pParam->bStoreMetaData != meta_mode_enable) {
12258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        if (!handle->venc_set_meta_mode(pParam->bStoreMetaData)) {
12268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_ERROR("\nERROR: set Metabuffer mode %d fail",
12278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                    pParam->bStoreMetaData);
12288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            return OMX_ErrorUnsupportedSetting;
12298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        }
12308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        meta_mode_enable = pParam->bStoreMetaData;
12318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    }
123261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
123361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("set_parameter: metamode is "
123461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            "valid for input port only");
123561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
1237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
123861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
1239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
12406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_)
124161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamIndexExtraDataType:
124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
124316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_INDEXEXTRADATATYPE);
124461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_parameter: OMX_QcomIndexParamIndexExtraDataType");
124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData;
12468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                bool enable = false;
12478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 mask = 0;
12488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) {
125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
1251e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        mask = VENC_EXTRADATA_SLICEINFO;
12528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("SliceInfo extradata %s",
125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
1255e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    } else {
12568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("set_parameter: Slice information is "
12578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                "valid for output port only");
12588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
12598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        break;
1260e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    }
12618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderMBInfo) {
12628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
1263e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        mask = VENC_EXTRADATA_MBINFO;
12648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
12658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_HIGH("MBInfo extradata %s",
12668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
12678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    } else {
12688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("set_parameter: MB information is "
12698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                "valid for output port only");
12708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
12718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        break;
127261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
1273e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataFrameDimension) {
1274e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    if (pParam->nPortIndex == PORT_INDEX_IN) {
1275e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            mask = VENC_EXTRADATA_FRAMEDIMENSION;
1276e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_HIGH("Frame dimension extradata %s",
1277e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
1278e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    } else {
1279e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_ERROR("set_parameter: Frame Dimension is "
1280e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                "valid for input port only");
1281e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        eRet = OMX_ErrorUnsupportedIndex;
1282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        break;
1283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    }
1284e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_QTIIndexParamVQZipSEIExtraData) {
1285e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    if (pParam->nPortIndex == PORT_INDEX_IN) {
1286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        mask = VENC_EXTRADATA_VQZIP;
1287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_HIGH("VQZIP extradata %s",
1288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
1289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    } else {
1290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_ERROR("set_parameter: VQZIP is "
1291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                "valid for input port only");
1292e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        eRet = OMX_ErrorUnsupportedIndex;
1293e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        break;
1294e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    }
129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
1296e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
12976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) {
129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (pParam->bEnabled == OMX_TRUE)
13018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            mask = VEN_EXTRADATA_LTRINFO;
13028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("LTRInfo extradata %s",
130461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                ((pParam->bEnabled == OMX_TRUE) ? "enabled" : "disabled"));
130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("set_parameter: LTR information is "
130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                "valid for output port only");
130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
13098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        break;
131061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
13126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
131361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("set_parameter: unsupported extrdata index (%x)",
131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nIndex);
131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
13178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    break;
13188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
13198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
13208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
13218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (pParam->bEnabled == OMX_TRUE)
13228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sExtraData |= mask;
13238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                else
13248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sExtraData &= ~mask;
13258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
13268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                enable = !!(m_sExtraData & mask);
13278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (handle->venc_set_param(&enable,
13288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE)pParam->nIndex) != true) {
13298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting Extradata (%x) failed", pParam->nIndex);
13308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
1331e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1332e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1333e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (pParam->nPortIndex == PORT_INDEX_IN) {
1334e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    m_sInPortDef.nPortIndex = PORT_INDEX_IN;
1335e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    dev_get_buf_req(&m_sInPortDef.nBufferCountMin,
1336e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            &m_sInPortDef.nBufferCountActual,
1337e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            &m_sInPortDef.nBufferSize,
1338e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            m_sInPortDef.nPortIndex);
1339e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_HIGH("updated in_buf_req: buffer cnt=%u, "
1340e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            "count min=%u, buffer size=%u",
1341e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (unsigned int)m_sOutPortDef.nBufferCountActual,
1342e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (unsigned int)m_sOutPortDef.nBufferCountMin,
1343e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (unsigned int)m_sOutPortDef.nBufferSize);
1344e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
13458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
13468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sOutPortDef.nPortIndex = PORT_INDEX_OUT;
13478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    dev_get_buf_req(&m_sOutPortDef.nBufferCountMin,
13488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            &m_sOutPortDef.nBufferCountActual,
13498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            &m_sOutPortDef.nBufferSize,
13508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            m_sOutPortDef.nPortIndex);
13518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("updated out_buf_req: buffer cnt=%u, "
13528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "count min=%u, buffer size=%u",
13538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferCountActual,
13548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferCountMin,
13558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferSize);
135661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoLTRMode:
136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
136116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_PARAM_LTRMODE_TYPE);
136261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_PARAM_LTRMODE_TYPE* pParam =
136361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_VIDEO_PARAM_LTRMODE_TYPE*)paramData;
136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRMode)) {
13658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting LTR mode failed");
136661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
136761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
136861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamLTRMode, pParam, sizeof(m_sParamLTRMode));
136961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
137061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoLTRCount:
137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
137316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_PARAM_LTRCOUNT_TYPE);
137461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_PARAM_LTRCOUNT_TYPE* pParam =
137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_VIDEO_PARAM_LTRCOUNT_TYPE*)paramData;
137661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_param(paramData, (OMX_INDEXTYPE)QOMX_IndexParamVideoLTRCount)) {
13778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting LTR count failed");
137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
138061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sParamLTRCount, pParam, sizeof(m_sParamLTRCount));
138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1383826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoMaxAllowedBitrateCheck:
138561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
138616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE);
138761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
138861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
138961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    handle->m_max_allowed_bitrate_check =
139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ((pParam->bEnable == OMX_TRUE) ? true : false);
139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_HIGH("set_parameter: max allowed bitrate check %s",
139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            ((pParam->bEnable == OMX_TRUE) ? "enabled" : "disabled"));
139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexParamVideoMaxAllowedBitrateCheck "
13968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            " called on wrong port(%u)", (unsigned int)pParam->nPortIndex);
139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1401826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexEnableSliceDeliveryMode:
140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
140416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE);
140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
140661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
140761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!handle->venc_set_param(paramData,
140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode)) {
141061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Request for setting slice delivery mode failed");
141161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
141261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
141361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
141461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableSliceDeliveryMode "
14158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "called on wrong port(%u)", (unsigned int)pParam->nPortIndex);
141661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
141761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
141961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1420826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexEnableH263PlusPType:
142261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
142316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE);
142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
142561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (QOMX_EXTNINDEX_PARAMTYPE*)paramData;
142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("OMX_QcomIndexEnableH263PlusPType");
142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (!handle->venc_set_param(paramData,
142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexEnableH263PlusPType)) {
143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Request for setting PlusPType failed");
143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexEnableH263PlusPType "
14358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "called on wrong port(%u)", (unsigned int)pParam->nPortIndex);
14368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorBadPortIndex;
14378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
14388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
14398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
14408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamSequenceHeaderWithIDR:
14418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
144216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, PrependSPSPPSToIDRFramesParams);
14438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if(!handle->venc_set_param(paramData,
14448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR)) {
14458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("%s: %s",
14468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "OMX_QComIndexParamSequenceHeaderWithIDR:",
14478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "request for inband sps/pps failed.");
14488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
14498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
1450e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                memcpy((void *) &m_sPrependSPSPPS, &paramData, sizeof(m_sPrependSPSPPS));
14518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
14528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
14538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamH264AUDelimiter:
14548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
145516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_CONFIG_H264_AUD);
14568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if(!handle->venc_set_param(paramData,
14578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE)OMX_QcomIndexParamH264AUDelimiter)) {
14588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("%s: %s",
14598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "OMX_QComIndexParamh264AUDelimiter:",
14608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            "request for AU Delimiters failed.");
14618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
14628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
14638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
14648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
1465e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexParamMBIStatisticsMode:
1466e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
146716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QOMX_VIDEO_MBI_STATISTICS);
1468e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if(!handle->venc_set_param(paramData,
1469e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (OMX_INDEXTYPE)OMX_QcomIndexParamMBIStatisticsMode)) {
1470e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("%s: %s",
1471e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            "OMX_QcomIndexParamMBIStatisticsMode:",
1472e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            "MBI Statistics mode setting failed.");
1473e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorUnsupportedSetting;
1474e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1475e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
1476e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
14778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan       case OMX_QcomIndexHierarchicalStructure:
14788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           {
147916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_HIERARCHICALLAYERS);
14808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                QOMX_VIDEO_HIERARCHICALLAYERS* pParam =
14818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    (QOMX_VIDEO_HIERARCHICALLAYERS*)paramData;
14828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMX_QcomIndexHierarchicalStructure");
14838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
14848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (!handle->venc_set_param(paramData,
14858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                (OMX_INDEXTYPE)OMX_QcomIndexHierarchicalStructure)) {
14868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Request for setting PlusPType failed");
14878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
14888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    }
1489f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if((pParam->eHierarchicalCodingType == QOMX_HIERARCHICALCODING_B) && pParam->nNumLayers)
1490f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    hier_b_enabled = true;
14918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sHierLayers.nNumLayers = pParam->nNumLayers;
14928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_sHierLayers.eHierarchicalCodingType = pParam->eHierarchicalCodingType;
14938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
14948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_QcomIndexHierarchicalStructure called on wrong port(%u)",
14958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                          (unsigned int)pParam->nPortIndex);
149661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
149761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
14998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
15008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           }
15018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamPerfLevel:
15028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
150316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PERF_LEVEL);
15048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!handle->venc_set_param(paramData,
15058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE) OMX_QcomIndexParamPerfLevel)) {
15068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting performance level");
15078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
15088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
15098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
15108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
15118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamH264VUITimingInfo:
15128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
151316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO);
15148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!handle->venc_set_param(paramData,
15158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE) OMX_QcomIndexParamH264VUITimingInfo)) {
15168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting VUI timing info");
15178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
15188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
15198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
15208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
15218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamPeakBitrate:
15228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
152316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE);
15248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!handle->venc_set_param(paramData,
15258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE) OMX_QcomIndexParamPeakBitrate)) {
15268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting peak bitrate");
15278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
15288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
15298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
15308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan             }
15318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan       case QOMX_IndexParamVideoInitialQp:
15328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
153316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_INITIALQP);
15348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if(!handle->venc_set_param(paramData,
15358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE)QOMX_IndexParamVideoInitialQp)) {
15368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Request to Enable initial QP failed");
15378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
15388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
15398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                memcpy(&m_sParamInitqp, paramData, sizeof(m_sParamInitqp));
15408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
15418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
15428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamSetMVSearchrange:
15438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
15448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!handle->venc_set_param(paramData,
15458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_INDEXTYPE) OMX_QcomIndexParamSetMVSearchrange)) {
15468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting Searchrange");
15478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
15488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
15498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
155061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
1551f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case OMX_QcomIndexParamVideoHybridHierpMode:
1552f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
155316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE);
1554f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan               if(!handle->venc_set_param(paramData,
1555f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                         (OMX_INDEXTYPE)OMX_QcomIndexParamVideoHybridHierpMode)) {
1556f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                   DEBUG_PRINT_ERROR("Request to Enable Hybrid Hier-P failed");
1557f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                   return OMX_ErrorUnsupportedSetting;
1558f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
1559f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
1560f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
1561e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexParamBatchSize:
1562e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
156316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_U32TYPE);
1564e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if(!handle->venc_set_param(paramData,
1565e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                         (OMX_INDEXTYPE)OMX_QcomIndexParamBatchSize)) {
1566e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   DEBUG_PRINT_ERROR("Attempting to set batch size failed");
1567e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   return OMX_ErrorUnsupportedSetting;
1568e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1569e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
1570e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1571e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexConfigH264EntropyCodingCabac:
1572e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
157316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_H264ENTROPYCODINGTYPE);
1574e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if(!handle->venc_set_param(paramData,
1575e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                         (OMX_INDEXTYPE)OMX_QcomIndexConfigH264EntropyCodingCabac)) {
1576e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   DEBUG_PRINT_ERROR("Attempting to set Entropy failed");
1577e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   return OMX_ErrorUnsupportedSetting;
1578e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1579e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               break;
1580e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1581e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QTIIndexParamVQZIPSEIType:
1582e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
158316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE);
1584e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!handle->venc_set_param(paramData,
1585e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (OMX_INDEXTYPE) OMX_QTIIndexParamVQZIPSEIType)) {
1586e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("ERROR: Setting VQZIP SEI type");
1587e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorUnsupportedSetting;
1588e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1589e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                m_sExtraData |= VENC_EXTRADATA_VQZIP;
1590e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
1591e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1592e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexParamVencAspectRatio:
1593e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
159416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_VENC_SAR);
1595e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!handle->venc_set_param(paramData,
1596e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        (OMX_INDEXTYPE)OMX_QcomIndexParamVencAspectRatio)) {
1597e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexParamVencAspectRatio failed");
1598e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorUnsupportedSetting;
1599e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1600e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                memcpy(&m_sSar, paramData, sizeof(m_sSar));
1601e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
1602e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1603e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QTIIndexParamVideoEnableRoiInfo:
1604e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
1605e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!handle->venc_set_param(paramData,
1606e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (OMX_INDEXTYPE)OMX_QTIIndexParamVideoEnableRoiInfo)) {
1607e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("ERROR: Setting OMX_QTIIndexParamVideoEnableRoiInfo failed");
1608e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorUnsupportedSetting;
1609e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1610e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
1611e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
161261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoSliceFMO:
161361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
161461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
16158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Setparameter: unknown param %d", paramIndex);
161661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorUnsupportedIndex;
161761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
161861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
161947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
162061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
162147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
162247e37c4428509524ee576920a98381f3e4872493Nick Pelly
1623826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::update_profile_level()
1624826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U32 eProfile, eLevel;
1626826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!handle->venc_get_profile_level(&eProfile,&eLevel)) {
16288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Failed to update the profile_level");
162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
163161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamProfileLevel.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile;
163361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sParamProfileLevel.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel;
163461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.mpeg4",\
163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamMPEG4.eProfile = (OMX_VIDEO_MPEG4PROFILETYPE)eProfile;
163861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamMPEG4.eLevel = (OMX_VIDEO_MPEG4LEVELTYPE)eLevel;
16398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("MPEG4 profile = %d, level = %d", m_sParamMPEG4.eProfile,
164061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamMPEG4.eLevel);
164161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.h263",\
164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamH263.eProfile = (OMX_VIDEO_H263PROFILETYPE)eProfile;
164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamH263.eLevel = (OMX_VIDEO_H263LEVELTYPE)eLevel;
16458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("H263 profile = %d, level = %d", m_sParamH263.eProfile,
164661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamH263.eLevel);
164761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc",\
164861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
164961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile;
165061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel;
16518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("AVC profile = %d, level = %d", m_sParamAVC.eProfile,
16528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_sParamAVC.eLevel);
16538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    } else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.avc.secure",\
16548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
16558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        m_sParamAVC.eProfile = (OMX_VIDEO_AVCPROFILETYPE)eProfile;
16568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        m_sParamAVC.eLevel = (OMX_VIDEO_AVCLEVELTYPE)eLevel;
165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("\n AVC profile = %d, level = %d", m_sParamAVC.eProfile,
165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sParamAVC.eLevel);
165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
16607beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.vp8",\
16617beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                OMX_MAX_STRINGNAME_SIZE)) {
16627beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        m_sParamVP8.eProfile = (OMX_VIDEO_VP8PROFILETYPE)eProfile;
16637beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        m_sParamVP8.eLevel = (OMX_VIDEO_VP8LEVELTYPE)eLevel;
16648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("VP8 profile = %d, level = %d", m_sParamVP8.eProfile,
16657beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                m_sParamVP8.eLevel);
16667beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano    }
1667f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    else if (!strncmp((char *)m_nkind, "OMX.qcom.video.encoder.hevc",\
1668f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_MAX_STRINGNAME_SIZE)) {
1669f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_sParamHEVC.eProfile = (OMX_VIDEO_HEVCPROFILETYPE)eProfile;
1670f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_sParamHEVC.eLevel = (OMX_VIDEO_HEVCLEVELTYPE)eLevel;
1671f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("HEVC profile = %d, level = %d", m_sParamHEVC.eProfile,
1672f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_sParamHEVC.eLevel);
1673f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
1674f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
167561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return true;
1676826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
167747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::SetConfig
168047e37c4428509524ee576920a98381f3e4872493Nick Pelly
168161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
168261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Set Config method implementation
168347e37c4428509524ee576920a98381f3e4872493Nick Pelly
168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
168647e37c4428509524ee576920a98381f3e4872493Nick Pelly
168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if successful.
168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
169047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::set_config(OMX_IN OMX_HANDLETYPE      hComp,
169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE configIndex,
169261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR        configData)
169347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
16948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (configData == NULL) {
169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: param is null");
169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
169847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
169947e37c4428509524ee576920a98381f3e4872493Nick Pelly
170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: config called in Invalid state");
170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
1703826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
1704826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // params will be validated prior to venc_init
17068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    switch ((int)configIndex) {
170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoBitrate:
170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
170916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_BITRATETYPE);
171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_BITRATETYPE* pParam =
171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData);
17128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoBitrate (%u)", (unsigned int)pParam->nEncodeBitrate);
171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
171561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData, OMX_IndexConfigVideoBitrate) != true) {
171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoBitrate failed");
171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigBitrate.nEncodeBitrate = pParam->nEncodeBitrate;
172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sParamBitrate.nTargetBitrate = pParam->nEncodeBitrate;
172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortDef.format.video.nBitrate = pParam->nEncodeBitrate;
172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
17248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex);
172561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
172861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoFramerate:
173061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
173116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_FRAMERATETYPE);
173261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_FRAMERATETYPE* pParam =
173361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData);
17348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoFramerate (0x%x)", (unsigned int)pParam->xEncodeFramerate);
173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
173761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData, OMX_IndexConfigVideoFramerate) != true) {
173861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoFramerate failed");
173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigFramerate.xEncodeFramerate = pParam->xEncodeFramerate;
174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortDef.format.video.xFramerate = pParam->xEncodeFramerate;
174461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sOutPortFormat.xFramerate = pParam->xEncodeFramerate;
174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
17468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex);
174761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
174861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
174961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
175061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
175161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
175261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoIntraperiod:
175361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
175416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_INTRAPERIODTYPE);
175561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_INTRAPERIODTYPE* pParam =
175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData);
175747e37c4428509524ee576920a98381f3e4872493Nick Pelly
175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): QOMX_IndexConfigVideoIntraperiod");
175961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef MAX_RES_720P
176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nBFrames > 0) {
17628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("B frames not supported");
176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
176461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
17668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("Old: P/B frames = %u/%u, New: P/B frames = %u/%u",
17678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sIntraperiod.nPFrames, (unsigned int)m_sIntraperiod.nBFrames,
17688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)pParam->nPFrames, (unsigned int)pParam->nBFrames);
176961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (m_sIntraperiod.nBFrames != pParam->nBFrames) {
1770f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        if(hier_b_enabled && m_state == OMX_StateLoaded) {
1771f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_INFO("B-frames setting is supported if HierB is enabled");
1772f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        }
1773f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        else {
1774e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            DEBUG_PRINT_HIGH("Dynamically changing B-frames not supported");
1775e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            return OMX_ErrorUnsupportedSetting;
1776e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        }
1777f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    }
177861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData, (OMX_INDEXTYPE) QOMX_IndexConfigVideoIntraperiod) != true) {
177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting QOMX_IndexConfigVideoIntraperiod failed");
178061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sIntraperiod.nPFrames = pParam->nPFrames;
178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sIntraperiod.nBFrames = pParam->nBFrames;
178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sIntraperiod.nIDRPeriod = pParam->nIDRPeriod;
178561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
178661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
178761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sParamMPEG4.nPFrames = pParam->nPFrames;
178861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (m_sParamMPEG4.eProfile != OMX_VIDEO_MPEG4ProfileSimple)
178961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamMPEG4.nBFrames = pParam->nBFrames;
179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        else
179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamMPEG4.nBFrames = 0;
179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingH263) {
179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sParamH263.nPFrames = pParam->nPFrames;
179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sParamAVC.nPFrames = pParam->nPFrames;
17968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        if ((m_sParamAVC.eProfile != OMX_VIDEO_AVCProfileBaseline) &&
17978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (m_sParamAVC.eProfile != (OMX_VIDEO_AVCPROFILETYPE) QOMX_VIDEO_AVCProfileConstrainedBaseline))
179861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamAVC.nBFrames = pParam->nBFrames;
179961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        else
180061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sParamAVC.nBFrames = 0;
180161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
180261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
18038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: (QOMX_IndexConfigVideoIntraperiod) Unsupported port index: %u", (unsigned int)pParam->nPortIndex);
180461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
180561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
180661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
180761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
180861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
180947e37c4428509524ee576920a98381f3e4872493Nick Pelly
181061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoIntraVOPRefresh:
181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
181216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_INTRAREFRESHVOPTYPE);
181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_INTRAREFRESHVOPTYPE* pParam =
181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_CONFIG_INTRAREFRESHVOPTYPE*>(configData);
181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
181661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_IndexConfigVideoIntraVOPRefresh");
181761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData,
181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                OMX_IndexConfigVideoIntraVOPRefresh) != true) {
182061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoIntraVOPRefresh failed");
182161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
182261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
182361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
182461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigIntraRefreshVOP.IntraRefreshVOP = pParam->IntraRefreshVOP;
182561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
18268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex);
182761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
182861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
182961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
183261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigCommonRotate:
183361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
183416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE);
183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_ROTATIONTYPE *pParam =
183661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData);
183761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_S32 nRotation;
183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
1839f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (pParam->nPortIndex != PORT_INDEX_OUT) {
18408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Unsupported port index: %u", (unsigned int)pParam->nPortIndex);
184161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadPortIndex;
184261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
184361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( pParam->nRotation == 0   ||
184461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nRotation == 90  ||
184561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nRotation == 180 ||
184661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nRotation == 270 ) {
18478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("set_config: Rotation Angle %u", (unsigned int)pParam->nRotation);
184861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
18498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: un supported Rotation %u", (unsigned int)pParam->nRotation);
185061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
185161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
185261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                nRotation = pParam->nRotation - m_sConfigFrameRotation.nRotation;
185361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (nRotation < 0)
185461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    nRotation = -nRotation;
185561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (nRotation == 90 || nRotation == 270) {
18568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("set_config: updating device Dims");
185761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (handle->venc_set_config(configData,
185861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                OMX_IndexConfigCommonRotate) != true) {
185961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: Set OMX_IndexConfigCommonRotate failed");
186061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        return OMX_ErrorUnsupportedSetting;
186161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
186261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_U32 nFrameWidth;
1863f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        OMX_U32 nFrameHeight;
186461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
18658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_HIGH("set_config: updating port Dims");
186661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
1867f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        nFrameWidth = m_sOutPortDef.format.video.nFrameWidth;
1868f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        nFrameHeight = m_sOutPortDef.format.video.nFrameHeight;
1869f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        m_sOutPortDef.format.video.nFrameWidth  = nFrameHeight;
1870f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        m_sOutPortDef.format.video.nFrameHeight = nFrameWidth;
187161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sConfigFrameRotation.nRotation = pParam->nRotation;
187261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
187361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
187461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_sConfigFrameRotation.nRotation = pParam->nRotation;
187561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
187661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
187761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
187861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexConfigVideoFramePackingArrangement:
187961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
188061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("set_config(): OMX_QcomIndexConfigVideoFramePackingArrangement");
188161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_sOutPortFormat.eCompressionFormat == OMX_VIDEO_CodingAVC) {
188216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                    VALIDATE_OMX_PARAM_DATA(configData, OMX_QCOM_FRAME_PACK_ARRANGEMENT);
188361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_QCOM_FRAME_PACK_ARRANGEMENT *configFmt =
188461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        (OMX_QCOM_FRAME_PACK_ARRANGEMENT *) configData;
188561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    extra_data_handle.set_frame_pack_data(configFmt);
188661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
188761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: FramePackingData not supported for non AVC compression");
188861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
188961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
189061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
189161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoLTRPeriod:
189261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
189316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE);
189461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE*)configData;
189561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRPeriod)) {
18968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting LTR period failed");
189761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
189861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
189961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sConfigLTRPeriod, pParam, sizeof(m_sConfigLTRPeriod));
190061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
190161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
19028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
19038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan       case OMX_IndexConfigVideoVp8ReferenceFrame:
19048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           {
190516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_VP8REFERENCEFRAMETYPE);
19068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               OMX_VIDEO_VP8REFERENCEFRAMETYPE* pParam = (OMX_VIDEO_VP8REFERENCEFRAMETYPE*) configData;
19078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE) OMX_IndexConfigVideoVp8ReferenceFrame)) {
19088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                   DEBUG_PRINT_ERROR("ERROR: Setting VP8 reference frame");
19098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                   return OMX_ErrorUnsupportedSetting;
19108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               }
19118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               memcpy(&m_sConfigVp8ReferenceFrame, pParam, sizeof(m_sConfigVp8ReferenceFrame));
19128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               break;
19138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           }
19148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
1915e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin       case QOMX_IndexConfigVideoLTRUse:
191661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
191716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_CONFIG_LTRUSE_TYPE);
191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_CONFIG_LTRUSE_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRUSE_TYPE*)configData;
1919f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRUse)) {
19208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting LTR use failed");
192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sConfigLTRUse, pParam, sizeof(m_sConfigLTRUse));
192461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
192561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
192661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoLTRMark:
192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
192816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_CONFIG_LTRMARK_TYPE);
192961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_CONFIG_LTRMARK_TYPE* pParam = (QOMX_VIDEO_CONFIG_LTRMARK_TYPE*)configData;
1930f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRMark)) {
1931f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting LTR mark failed");
1932e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorUnsupportedSetting;
1933f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
193461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
193561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoAVCIntraPeriod:
193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
193816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_AVCINTRAPERIOD);
193961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam = (OMX_VIDEO_CONFIG_AVCINTRAPERIOD*) configData;
194061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("set_config: OMX_IndexConfigVideoAVCIntraPeriod");
194161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_IndexConfigVideoAVCIntraPeriod)) {
194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigVideoAVCIntraPeriod failed");
194361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
194461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(&m_sConfigAVCIDRPeriod, pParam, sizeof(m_sConfigAVCIDRPeriod));
194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
19488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_IndexConfigCommonDeinterlace:
19498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
195016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_DEINTERLACE);
19518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_VIDEO_CONFIG_DEINTERLACE *pParam = (OMX_VIDEO_CONFIG_DEINTERLACE*) configData;
19528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("set_config: OMX_IndexConfigCommonDeinterlace");
19538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_IndexConfigCommonDeinterlace)) {
19548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting OMX_IndexConfigCommonDeinterlace failed");
19558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
19568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
19578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                memcpy(&m_sConfigDeinterlace, pParam, sizeof(m_sConfigDeinterlace));
19588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
19598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
1960f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case OMX_QcomIndexConfigVideoVencPerfMode:
1961f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
196216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_EXTNINDEX_VIDEO_PERFMODE);
1963f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                QOMX_EXTNINDEX_VIDEO_PERFMODE* pParam = (QOMX_EXTNINDEX_VIDEO_PERFMODE*)configData;
1964f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoVencPerfMode)) {
1965f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigVideoVencPerfMode failed");
1966f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    return OMX_ErrorUnsupportedSetting;
1967eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan                }
1968eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan                break;
1969eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan            }
1970e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexConfigMaxHierPLayers:
1971e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        {
197216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan            VALIDATE_OMX_PARAM_DATA(configData, QOMX_EXTNINDEX_VIDEO_MAX_HIER_P_LAYERS);
1973e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            QOMX_EXTNINDEX_VIDEO_MAX_HIER_P_LAYERS* pParam =
1974e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                (QOMX_EXTNINDEX_VIDEO_MAX_HIER_P_LAYERS*)configData;
1975e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigMaxHierPLayers)) {
1976e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigMaxHierPLayers failed");
1977e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                return OMX_ErrorUnsupportedSetting;
1978e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1979e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            memcpy(&m_sMaxHPlayers, pParam, sizeof(m_sMaxHPlayers));
1980e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            break;
1981e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
1982e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexConfigBaseLayerId:
1983e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        {
198416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan            VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID);
1985e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID* pParam =
1986e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                (OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID*) configData;
1987e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigBaseLayerId)) {
1988e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigBaseLayerId failed");
1989e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                return OMX_ErrorUnsupportedSetting;
1990e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1991e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            memcpy(&m_sBaseLayerID, pParam, sizeof(m_sBaseLayerID));
1992e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            break;
1993e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
1994e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexConfigQp:
1995e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        {
199616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan            VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_QP);
1997e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_SKYPE_VIDEO_CONFIG_QP* pParam =
1998e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                (OMX_SKYPE_VIDEO_CONFIG_QP*) configData;
1999e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (!handle->venc_set_config(pParam, (OMX_INDEXTYPE)OMX_QcomIndexConfigQp)) {
2000e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_ERROR("ERROR: Setting OMX_QcomIndexConfigQp failed");
2001e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                return OMX_ErrorUnsupportedSetting;
2002e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
2003e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            memcpy(&m_sConfigQP, pParam, sizeof(m_sConfigQP));
2004e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            break;
2005e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
2006eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan        case OMX_IndexConfigPriority:
2007eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan            {
200816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_PARAM_U32TYPE);
2009eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan                if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_IndexConfigPriority)) {
2010eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan                    DEBUG_PRINT_ERROR("Failed to set OMX_IndexConfigPriority");
2011eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan                    return OMX_ErrorUnsupportedSetting;
2012dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan                }
2013dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan                break;
2014dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan            }
2015dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan        case OMX_IndexConfigOperatingRate:
2016dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan            {
201716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_PARAM_U32TYPE);
2018dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan                if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_IndexConfigOperatingRate)) {
2019dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan                    DEBUG_PRINT_ERROR("Failed to set OMX_IndexConfigOperatingRate");
2020dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan                    return handle->hw_overload ? OMX_ErrorInsufficientResources :
2021dce0acfcb3cdf6eceef84f22def392cc6d4557abPraveen Chavan                            OMX_ErrorUnsupportedSetting;
2022f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
2023f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
2024f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
2025e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QTIIndexConfigVideoRoiInfo:
2026e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
202716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_QTI_VIDEO_CONFIG_ROIINFO);
2028e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!handle->venc_set_config(configData, (OMX_INDEXTYPE)OMX_QTIIndexConfigVideoRoiInfo)) {
2029e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("Failed to set OMX_QTIIndexConfigVideoRoiInfo");
2030e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorUnsupportedSetting;
2031e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
2032e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
2033e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
203461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
203561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex);
203661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
20376eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    }
203847e37c4428509524ee576920a98381f3e4872493Nick Pelly
203961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
204047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
204147e37c4428509524ee576920a98381f3e4872493Nick Pelly
204247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
204361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
204461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ComponentDeInit
204547e37c4428509524ee576920a98381f3e4872493Nick Pelly
204661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
204761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Destroys the component and release memory allocated to the heap.
204847e37c4428509524ee576920a98381f3e4872493Nick Pelly
204961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
205061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
205147e37c4428509524ee576920a98381f3e4872493Nick Pelly
205261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
205361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
205447e37c4428509524ee576920a98381f3e4872493Nick Pelly
205561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
205647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_venc::component_deinit(OMX_IN OMX_HANDLETYPE hComp)
205747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
20588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) hComp;
205961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U32 i = 0;
20608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_venc(): Inside component_deinit()");
206161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (OMX_StateLoaded != m_state) {
20628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("WARNING:Rxd DeInit,OMX not in LOADED state %d",\
206361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_state);
206461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
206561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr) {
20668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Freeing the Output Memory");
206761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i< m_sOutPortDef.nBufferCountActual; i++ ) {
2068417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            if (BITMASK_PRESENT(&m_out_bm_count, i)) {
2069417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                BITMASK_CLEAR(&m_out_bm_count, i);
2070417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                free_output_buffer (&m_out_mem_ptr[i]);
2071417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            }
2072417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
2073417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            if (release_output_done()) {
2074417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                break;
2075417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            }
207661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
207761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        free(m_out_mem_ptr);
207861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_out_mem_ptr = NULL;
207947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
208047e37c4428509524ee576920a98381f3e4872493Nick Pelly
208161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if the input buffers have to be cleaned up*/
208261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr
2083826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
208461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            && !meta_mode_enable
2085826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
208661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan       ) {
20878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Freeing the Input Memory");
208861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i<m_sInPortDef.nBufferCountActual; i++ ) {
2089417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            if (BITMASK_PRESENT(&m_inp_bm_count, i)) {
2090417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                BITMASK_CLEAR(&m_inp_bm_count, i);
2091417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                free_input_buffer (&m_inp_mem_ptr[i]);
2092417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            }
2093417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
2094417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            if (release_input_done()) {
2095417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                break;
2096417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            }
209761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
209847e37c4428509524ee576920a98381f3e4872493Nick Pelly
209947e37c4428509524ee576920a98381f3e4872493Nick Pelly
210061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        free(m_inp_mem_ptr);
210161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = NULL;
210261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
210347e37c4428509524ee576920a98381f3e4872493Nick Pelly
210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Reset counters in mesg queues
210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_ftb_q.m_size=0;
210661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_cmd_q.m_size=0;
210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_q.m_size=0;
210861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_ftb_q.m_read = m_ftb_q.m_write =0;
210961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_cmd_q.m_read = m_cmd_q.m_write =0;
211061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_q.m_read = m_etb_q.m_write =0;
211147e37c4428509524ee576920a98381f3e4872493Nick Pelly
211247e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_
211361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Clear the strong reference
21148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("Calling m_heap_ptr.clear()");
211561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_heap_ptr.clear();
211647e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_
21178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("Calling venc_close()");
21182162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    if (handle) {
21192162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan        handle->venc_close();
21202162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan        DEBUG_PRINT_HIGH("Deleting HANDLE[%p]", handle);
21212162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan        delete (handle);
21222162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan        handle = NULL;
21232162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    }
21248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_INFO("Component Deinit");
212561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
212647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
212747e37c4428509524ee576920a98381f3e4872493Nick Pelly
212847e37c4428509524ee576920a98381f3e4872493Nick Pelly
212947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_stop( void)
213047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
213161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_stop();
213247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
213347e37c4428509524ee576920a98381f3e4872493Nick Pelly
213447e37c4428509524ee576920a98381f3e4872493Nick Pelly
213547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_pause(void)
213647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
213761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_pause();
213847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
213947e37c4428509524ee576920a98381f3e4872493Nick Pelly
214047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_start(void)
214147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
214261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_start();
214347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
214447e37c4428509524ee576920a98381f3e4872493Nick Pelly
214547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_flush(unsigned port)
214647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
214761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_flush(port);
214847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
214947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_U32 omx_venc::dev_resume(void)
215047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
215161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_resume();
215247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
215347e37c4428509524ee576920a98381f3e4872493Nick Pelly
2154826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_U32 omx_venc::dev_start_done(void)
215547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
215661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_start_done();
2157826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2158826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
21596eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOMX_U32 omx_venc::dev_set_message_thread_id(pthread_t tid)
2160826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_set_message_thread_id(tid);
2162826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2163826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
2164826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_use_buf(void *buf_addr,unsigned port,unsigned index)
2165826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
216661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_use_buf(buf_addr,port,index);
216747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
216847e37c4428509524ee576920a98381f3e4872493Nick Pelly
216947e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_free_buf(void *buf_addr,unsigned port)
217047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
217161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_free_buf(buf_addr,port);
217247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
217347e37c4428509524ee576920a98381f3e4872493Nick Pelly
2174826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_empty_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd)
217547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
2176f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    bool bret = false;
2177f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    bret = handle->venc_empty_buf(buffer, pmem_data_buf,index,fd);
2178f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    hw_overload = handle->hw_overload;
2179f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    return bret;
218047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
218147e37c4428509524ee576920a98381f3e4872493Nick Pelly
2182826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_fill_buf(void *buffer, void *pmem_data_buf,unsigned index,unsigned fd)
218347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
218461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_fill_buf(buffer, pmem_data_buf,index,fd);
218547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
218647e37c4428509524ee576920a98381f3e4872493Nick Pelly
2187f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavanbool omx_venc::dev_get_seq_hdr(void *buffer, unsigned size, unsigned *hdrlen)
2188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
218961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_get_seq_hdr(buffer, size, hdrlen);
2190826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
21926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_get_capability_ltrcount(OMX_U32 *min, OMX_U32 *max, OMX_U32 *step_size)
21936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
21946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
21958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) min;
21968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) max;
21978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) step_size;
219861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_ERROR("Get Capability LTR Count is not supported");
219961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return false;
22006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
220161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_get_capability_ltrcount(min, max, step_size);
22026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
22036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
22046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
22058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_performance_level(OMX_U32 *perflevel)
22068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
22078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_
22088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return handle->venc_get_performance_level(perflevel);
22098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
22108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("Get performance level is not supported");
22118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return false;
22128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
22138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
22148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
22158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_vui_timing_info(OMX_U32 *enabled)
22168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
22178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_
22188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return handle->venc_get_vui_timing_info(enabled);
22198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
22208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("Get vui timing information is not supported");
22218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return false;
22228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
22238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
22248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_venc::dev_get_vqzip_sei_info(OMX_U32 *enabled)
2226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
2227e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    return handle->venc_get_vqzip_sei_info(enabled);
2228e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}
2229e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
22308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_peak_bitrate(OMX_U32 *peakbitrate)
22318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
22328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8974_
22338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return handle->venc_get_peak_bitrate(peakbitrate);
22348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
22358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("Get peak bitrate is not supported");
22368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return false;
22378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
22388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
22398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2240e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_venc::dev_get_batch_size(OMX_U32 *size)
2241e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
2242e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
2243e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    return handle->venc_get_batch_size(size);
2244e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else
2245e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    DEBUG_PRINT_ERROR("Get batch size is not supported");
2246e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    return false;
2247e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
2248e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}
2249e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start()
2251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
225261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_start();
2253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
2255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop()
2256826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
225761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_stop();
2258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2259826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
2260826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_start_done()
2261826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
226261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_start_done();
2263826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2264826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
2265826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevbool omx_venc::dev_loaded_stop_done()
2266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
226761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_loaded_stop_done();
2268826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
226947e37c4428509524ee576920a98381f3e4872493Nick Pelly
227047e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_get_buf_req(OMX_U32 *min_buff_count,
227161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *actual_buff_count,
227261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *buff_size,
227361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 port)
227447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
227561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_get_buf_req(min_buff_count,
227661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            actual_buff_count,
227761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            buff_size,
227861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            port);
227947e37c4428509524ee576920a98381f3e4872493Nick Pelly
228047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
228147e37c4428509524ee576920a98381f3e4872493Nick Pelly
228247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_venc::dev_set_buf_req(OMX_U32 *min_buff_count,
228361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *actual_buff_count,
228461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 *buff_size,
228561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 port)
228647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
228761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_set_buf_req(min_buff_count,
228861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            actual_buff_count,
228961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            buff_size,
229061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            port);
229147e37c4428509524ee576920a98381f3e4872493Nick Pelly
229247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
229347e37c4428509524ee576920a98381f3e4872493Nick Pelly
22946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_venc::dev_is_video_session_supported(OMX_U32 width, OMX_U32 height)
22956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
22966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
229761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_is_video_session_supported(width,height);
22986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
229961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_LOW("Check against video capability not supported");
230061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return true;
23016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
23026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
23036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
2304e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinint omx_venc::dev_handle_output_extradata(void *buffer)
2305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
2306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    return handle->handle_output_extradata(buffer);
2307e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}
2308e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2309e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinint omx_venc::dev_handle_input_extradata(void *buffer, int fd)
2310e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
2311e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    return handle->handle_input_extradata(buffer, fd);
2312e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}
2313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2314e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinvoid omx_venc::dev_set_extradata_cookie(void *cookie)
23156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
2316e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    handle->mInputExtradata.setCookieForConfig(cookie);
231761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
231861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
231961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_venc::dev_set_format(int color)
232061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
232161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return handle->venc_set_format(color);
23226eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
23236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
232447e37c4428509524ee576920a98381f3e4872493Nick Pellyint omx_venc::async_message_process (void *context, void* message)
232547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
232661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_video* omx = NULL;
232761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_msg *m_sVenc_msg = NULL;
232861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_BUFFERHEADERTYPE* omxhdr = NULL;
232961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_buffer *temp_buff = NULL;
233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
233161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (context == NULL || message == NULL) {
23328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_venc::async_message_process invalid i/p params");
233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return -1;
233447e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
233561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_sVenc_msg = (struct venc_msg *)message;
233647e37c4428509524ee576920a98381f3e4872493Nick Pelly
233761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx = reinterpret_cast<omx_video*>(context);
233861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
233961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_sVenc_msg->statuscode != VEN_S_SUCCESS) {
23408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: async_msg_process() - Error statuscode = %lu",
234161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sVenc_msg->statuscode);
2342f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if(m_sVenc_msg->msgcode == VEN_MSG_HW_OVERLOAD) {
2343e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            omx->post_event (0, m_sVenc_msg->statuscode,\
2344e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD);
2345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        } else {
2346e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            omx->post_event (0, m_sVenc_msg->statuscode,\
2347e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    OMX_COMPONENT_GENERATE_HARDWARE_ERROR);
2348e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
234947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
235061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
23518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("omx_venc::async_message_process- msgcode = %lu",
235261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sVenc_msg->msgcode);
235361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    switch (m_sVenc_msg->msgcode) {
235461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_START:
23558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event (0,m_sVenc_msg->statuscode,\
235661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_START_DONE);
235761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
235861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_STOP:
23598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event (0,m_sVenc_msg->statuscode,\
236061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_STOP_DONE);
236161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
236261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_RESUME:
23638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event (0,m_sVenc_msg->statuscode,\
236461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_RESUME_DONE);
236561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
236661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_PAUSE:
23678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event (0,m_sVenc_msg->statuscode,\
236861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_PAUSE_DONE);
236961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
237061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_FLUSH_INPUT_DONE:
237161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
23728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event (0,m_sVenc_msg->statuscode,\
237361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH);
237461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
237561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_FLUSH_OUPUT_DONE:
23768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event (0,m_sVenc_msg->statuscode,\
237761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH);
237861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
237961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_INPUT_BUFFER_DONE:
238061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omxhdr = (OMX_BUFFERHEADERTYPE* )\
238161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                     m_sVenc_msg->buf.clientdata;
238261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
238361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (omxhdr == NULL ||
238461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (((OMX_U32)(omxhdr - omx->m_inp_mem_ptr) > omx->m_sInPortDef.nBufferCountActual) &&
238561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                     ((OMX_U32)(omxhdr - omx->meta_buffer_hdr) > omx->m_sInPortDef.nBufferCountActual))) {
238661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omxhdr = NULL;
238761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sVenc_msg->statuscode = VEN_S_EFAIL;
238861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
238961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
239061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_
239161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->omx_release_meta_buffer(omxhdr);
239261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
23938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event ((unsigned long)omxhdr,m_sVenc_msg->statuscode,
239461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EBD);
239561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
239661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_OUTPUT_BUFFER_DONE:
239761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omxhdr = (OMX_BUFFERHEADERTYPE*)m_sVenc_msg->buf.clientdata;
239861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
239961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( (omxhdr != NULL) &&
240061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    ((OMX_U32)(omxhdr - omx->m_out_mem_ptr)  < omx->m_sOutPortDef.nBufferCountActual)) {
240161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_sVenc_msg->buf.len <=  omxhdr->nAllocLen) {
240261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nFilledLen = m_sVenc_msg->buf.len;
240361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nOffset = m_sVenc_msg->buf.offset;
240461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nTimeStamp = m_sVenc_msg->buf.timestamp;
24058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("o/p TS = %u", (unsigned int)m_sVenc_msg->buf.timestamp);
240661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nFlags = m_sVenc_msg->buf.flags;
240761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
240861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*Use buffer case*/
240961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (omx->output_use_buffer && !omx->m_use_output_pmem) {
24108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_LOW("memcpy() for o/p Heap UseBuffer");
241161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        memcpy(omxhdr->pBuffer,
241261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (m_sVenc_msg->buf.ptrbuffer),
241361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                m_sVenc_msg->buf.len);
241461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
241661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omxhdr->nFilledLen = 0;
241761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
241861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omxhdr = NULL;
242161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_sVenc_msg->statuscode = VEN_S_EFAIL;
242261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
24238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            omx->post_event ((unsigned long)omxhdr,m_sVenc_msg->statuscode,
242461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_FBD);
242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_NEED_OUTPUT_BUFFER:
242761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //TBD what action needs to be done here??
242861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
24296eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case VEN_MSG_LTRUSE_FAILED:
243161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("LTRUSE Failed!");
243261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->post_event (NULL,m_sVenc_msg->statuscode,
243361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_LTRUSE_FAILED);
243461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
24356eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
243661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
24378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_HIGH("Unknown msg received : %lu", m_sVenc_msg->msgcode);
243861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
243961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
244061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return 0;
244147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
2442c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan
2443c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavanbool omx_venc::dev_color_align(OMX_BUFFERHEADERTYPE *buffer,
2444c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                OMX_U32 width, OMX_U32 height)
2445c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan{
24468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(secure_session) {
24478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Cannot align colors in secure session.");
24488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        return OMX_FALSE;
24498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
2450c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    return handle->venc_color_align(buffer, width,height);
2451c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan}
24528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
24538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::is_secure_session()
24548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
24558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return secure_session;
24568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
24578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
24588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_venc::dev_get_output_log_flag()
24598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
24608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return handle->venc_get_output_log_flag();
24618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
24628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
24638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_venc::dev_output_log_buffers(const char *buffer, int bufferlen)
24648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
24658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return handle->venc_output_log_buffers(buffer, bufferlen);
24668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
24678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
24688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_venc::dev_extradata_log_buffers(char *buffer)
24698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan{
24708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    return handle->venc_extradata_log_buffers(buffer);
24718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}
2472