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