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