147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*--------------------------------------------------------------------------
2f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh BeharaCopyright (c) 2010-2017, 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/*============================================================================
2947e37c4428509524ee576920a98381f3e4872493Nick Pelly                            O p e n M A X   w r a p p e r s
3047e37c4428509524ee576920a98381f3e4872493Nick Pelly                             O p e n  M A X   C o r e
3147e37c4428509524ee576920a98381f3e4872493Nick Pelly
3247e37c4428509524ee576920a98381f3e4872493Nick Pelly*//** @file omx_video_base.cpp
3347e37c4428509524ee576920a98381f3e4872493Nick Pelly  This module contains the implementation of the OpenMAX core & component.
3447e37c4428509524ee576920a98381f3e4872493Nick Pelly
3547e37c4428509524ee576920a98381f3e4872493Nick Pelly*//*========================================================================*/
3647e37c4428509524ee576920a98381f3e4872493Nick Pelly
3747e37c4428509524ee576920a98381f3e4872493Nick Pelly//////////////////////////////////////////////////////////////////////////////
3847e37c4428509524ee576920a98381f3e4872493Nick Pelly//                             Include Files
3947e37c4428509524ee576920a98381f3e4872493Nick Pelly//////////////////////////////////////////////////////////////////////////////
4047e37c4428509524ee576920a98381f3e4872493Nick Pelly
41f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define __STDC_FORMAT_MACROS //enables the format specifiers in inttypes.h
42f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#include <inttypes.h>
4347e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <string.h>
4447e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "omx_video_base.h"
4547e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <stdlib.h>
4647e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <errno.h>
4747e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <fcntl.h>
4847e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <unistd.h>
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <sys/prctl.h>
50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <gralloc_priv.h>
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
54826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef _ANDROID_
55826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <glib.h>
56826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define strlcpy g_strlcpy
57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
5847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H264_SUPPORTED_WIDTH (480)
5947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H264_SUPPORTED_HEIGHT (368)
6047e37c4428509524ee576920a98381f3e4872493Nick Pelly
6147e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_SUPPORTED_WIDTH (480)
6247e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_SUPPORTED_HEIGHT (368)
6347e37c4428509524ee576920a98381f3e4872493Nick Pelly
6447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SP_MP_START_CODE        0xC5000000
6547e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SP_MP_START_CODE_MASK   0xFF000000
6647e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_AP_START_CODE           0x00000100
6747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_AP_START_CODE_MASK      0xFFFFFF00
6847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_C_PROFILE_MASK   0xF0
6947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_B_LEVEL_MASK     0xE0000000
7047e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SIMPLE_PROFILE          0
7147e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_MAIN_PROFILE            1
7247e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_ADVANCE_PROFILE         3
7347e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SIMPLE_PROFILE_LOW_LEVEL  0
7447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SIMPLE_PROFILE_MED_LEVEL  2
7547e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_C_LEN            4
7647e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_C_POS            8
7747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_A_POS            12
7847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_B_POS            24
7947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SEQ_LAYER_SIZE          36
8047e37c4428509524ee576920a98381f3e4872493Nick Pelly
818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define SZ_4K                       0x1000
828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define SZ_1M                       0x100000
838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
84e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef ION_FLAG_CP_BITSTREAM
85e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define ION_FLAG_CP_BITSTREAM 0
86e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
87e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
88e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef ION_FLAG_CP_PIXEL
89e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define ION_FLAG_CP_PIXEL 0
90e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
91e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
92e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#undef MEM_HEAP_ID
93e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
94e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef MASTER_SIDE_CP
95e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
96e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MEM_HEAP_ID ION_SECURE_HEAP_ID
97e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_ALIGN SZ_4K
98e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_INPUT_BUFFER (ION_SECURE | ION_FLAG_CP_PIXEL)
99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_OUTPUT_BUFFER (ION_SECURE | ION_FLAG_CP_BITSTREAM)
100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else //SLAVE_SIDE_CP
102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MEM_HEAP_ID ION_CP_MM_HEAP_ID
104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_ALIGN SZ_1M
105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_INPUT_BUFFER ION_SECURE
106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_OUTPUT_BUFFER ION_SECURE
107e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavantypedef struct OMXComponentCapabilityFlagsType {
11147e37c4428509524ee576920a98381f3e4872493Nick Pelly    ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS
11216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan    OMX_U32 nSize;
11316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan    OMX_VERSIONTYPE nVersion;
11447e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iIsOMXComponentMultiThreaded;
11547e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
11647e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
11747e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
11847e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsPartialFrames;
11947e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentUsesNALStartCodes;
12047e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
12147e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentUsesFullAVCFrames;
12247e37c4428509524ee576920a98381f3e4872493Nick Pelly
12347e37c4428509524ee576920a98381f3e4872493Nick Pelly} OMXComponentCapabilityFlagsType;
12447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
12647e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid* message_thread(void *input)
12747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_video* omx = reinterpret_cast<omx_video*>(input);
12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char id;
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int n;
13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
132e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    fd_set readFds;
133e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int res = 0;
134e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct timeval tv;
135e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
136e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    DEBUG_PRINT_HIGH("omx_venc: message thread start");
13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    prctl(PR_SET_NAME, (unsigned long)"VideoEncMsgThread", 0, 0, 0);
138e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    while (!omx->msg_thread_stop) {
139e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
140e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        tv.tv_sec = 2;
141e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        tv.tv_usec = 0;
142e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
143e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        FD_ZERO(&readFds);
144e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        FD_SET(omx->m_pipe_in, &readFds);
145e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
146e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        res = select(omx->m_pipe_in + 1, &readFds, NULL, NULL, &tv);
147e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (res < 0) {
148e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_ERROR("select() ERROR: %s", strerror(errno));
149e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            continue;
150e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        } else if (res == 0 /*timeout*/ || omx->msg_thread_stop) {
151e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            continue;
152e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
153e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        n = read(omx->m_pipe_in, &id, 1);
15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (0 == n) {
15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
15847e37c4428509524ee576920a98381f3e4872493Nick Pelly
15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (1 == n) {
16061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->process_event_cb(omx, id);
16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
16247e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef QLE_BUILD
16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (n < 0) break;
16447e37c4428509524ee576920a98381f3e4872493Nick Pelly#else
165e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if ((n < 0) && (errno != EINTR)) {
166e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_LOW("ERROR: read from pipe failed, ret %d errno %d", n, errno);
167e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            break;
168e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
16947e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif
17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
171e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    DEBUG_PRINT_HIGH("omx_venc: message thread stop");
17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return 0;
17347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
17447e37c4428509524ee576920a98381f3e4872493Nick Pelly
17547e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid post_message(omx_video *omx, unsigned char id)
17647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
1778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("omx_venc: post_message %d", id);
178e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int ret_value;
179e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    ret_value = write(omx->m_pipe_out, &id, 1);
180e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (ret_value <= 0) {
181e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        DEBUG_PRINT_ERROR("post_message to pipe failed : %s", strerror(errno));
182e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    } else {
183e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        DEBUG_PRINT_LOW("post_message to pipe done %d",ret_value);
184e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
18547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
18647e37c4428509524ee576920a98381f3e4872493Nick Pelly
18747e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx_cmd_queue destructor
18847e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::~omx_cmd_queue()
18947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Nothing to do
19147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
19247e37c4428509524ee576920a98381f3e4872493Nick Pelly
19347e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue constructor
19447e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::omx_cmd_queue(): m_read(0),m_write(0),m_size(0)
19547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(m_q,0,sizeof(omx_event)*OMX_CORE_CONTROL_CMDQ_SIZE);
19747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
19847e37c4428509524ee576920a98381f3e4872493Nick Pelly
19947e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue insert
2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::insert_entry(unsigned long p1, unsigned long p2, unsigned long id)
20147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool ret = true;
20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_size < OMX_CORE_CONTROL_CMDQ_SIZE) {
20461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_q[m_write].id       = id;
20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_q[m_write].param1   = p1;
20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_q[m_write].param2   = p2;
20761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_write++;
20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_size ++;
20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_write >= OMX_CORE_CONTROL_CMDQ_SIZE) {
21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_write = 0;
21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = false;
2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR!!! Command Queue Full");
21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
21747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
21847e37c4428509524ee576920a98381f3e4872493Nick Pelly
21947e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue pop
2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::pop_entry(unsigned long *p1, unsigned long *p2, unsigned long *id)
22147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool ret = true;
22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_size > 0) {
22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *id = m_q[m_read].id;
22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *p1 = m_q[m_read].param1;
22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *p2 = m_q[m_read].param2;
22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Move the read pointer ahead
22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ++m_read;
22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        --m_size;
23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_read >= OMX_CORE_CONTROL_CMDQ_SIZE) {
23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_read = 0;
23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
23361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = false;
23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
23661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
23747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
23847e37c4428509524ee576920a98381f3e4872493Nick Pelly
23947e37c4428509524ee576920a98381f3e4872493Nick Pelly// Retrieve the first mesg type in the queue
24047e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned omx_video::omx_cmd_queue::get_q_msg_type()
24147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return m_q[m_read].id;
24347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
24447e37c4428509524ee576920a98381f3e4872493Nick Pelly
24547e37c4428509524ee576920a98381f3e4872493Nick Pelly
24647e37c4428509524ee576920a98381f3e4872493Nick Pelly
24747e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_
24847e37c4428509524ee576920a98381f3e4872493Nick PellyVideoHeap::VideoHeap(int fd, size_t size, void* base)
24947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // dup file descriptor, map once, use pmem
25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    init(dup(fd), base, size, 0 , MEM_DEVICE);
25247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
25347e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_
25447e37c4428509524ee576920a98381f3e4872493Nick Pelly
25547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::omx_venc
25847e37c4428509524ee576920a98381f3e4872493Nick Pelly
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Constructor
26147e37c4428509524ee576920a98381f3e4872493Nick Pelly
26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None
26447e37c4428509524ee576920a98381f3e4872493Nick Pelly
26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
26661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
2686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalomx_video::omx_video():
2698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    c2d_opened(false),
2708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    psource_frame(NULL),
2718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    pdest_frame(NULL),
2728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    secure_session(false),
2738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    mEmptyEosBuffer(NULL),
2742162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    m_pipe_in(-1),
2752162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    m_pipe_out(-1),
27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pInput_pmem(NULL),
27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pOutput_pmem(NULL),
278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pInput_ion(NULL),
28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pOutput_ion(NULL),
281826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_error_propogated(false),
28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_state(OMX_StateInvalid),
28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_app_data(NULL),
28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_use_input_pmem(OMX_FALSE),
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_use_output_pmem(OMX_FALSE),
287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    m_sExtraData(0),
2888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_input_msg_id(OMX_COMPONENT_GENERATE_ETB),
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_inp_mem_ptr(NULL),
29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_out_mem_ptr(NULL),
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    input_flush_progress (false),
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    output_flush_progress (false),
29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    input_use_buffer (false),
29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    output_use_buffer (false),
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_input_buffers(0),
29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_output_buffers(0),
29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_out_bm_count(0),
29831cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara    m_client_out_bm_count(0),
2999f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara    m_client_in_bm_count(0),
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_inp_bm_count(0),
30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_flags(0),
30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_count(0),
30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_fbd_count(0),
304f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_event_port_settings_sent(false),
305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    hw_overload(false),
306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    m_graphicBufferSize(0)
30747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
3088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video(): Inside Constructor()");
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(&m_cmp,0,sizeof(m_cmp));
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(&m_pCallbacks,0,sizeof(m_pCallbacks));
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    async_thread_created = false;
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    msg_thread_created = false;
313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    msg_thread_stop = false;
31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
315f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    mUsesColorConversion = false;
31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_init(&m_lock, NULL);
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_init(&m_cmd_lock,0,0);
318f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_LOW("meta_buffer_hdr = %p", meta_buffer_hdr);
319f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara
320f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara    pthread_mutex_init(&m_buf_lock, NULL);
32147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
32247e37c4428509524ee576920a98381f3e4872493Nick Pelly
32347e37c4428509524ee576920a98381f3e4872493Nick Pelly
32447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::~omx_venc
32747e37c4428509524ee576920a98381f3e4872493Nick Pelly
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Destructor
33047e37c4428509524ee576920a98381f3e4872493Nick Pelly
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None
33347e37c4428509524ee576920a98381f3e4872493Nick Pelly
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
33747e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::~omx_video()
33847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
3398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("~omx_video(): Inside Destructor()");
340e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (msg_thread_created) {
341e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        msg_thread_stop = true;
342e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        post_message(this, OMX_COMPONENT_CLOSE_MSG);
343e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        DEBUG_PRINT_HIGH("omx_video: Waiting on Msg Thread exit");
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_join(msg_thread_id,NULL);
345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
346e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    close(m_pipe_in);
347e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    close(m_pipe_out);
348e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    m_pipe_in = -1;
349e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    m_pipe_out = -1;
3508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video: Waiting on Async Thread exit");
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*For V4L2 based drivers, pthread_join is done in device_close
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * so no need to do it here*/
35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifndef _MSM8974_
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (async_thread_created)
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_join(async_thread_id,NULL);
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_destroy(&m_lock);
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_destroy(&m_cmd_lock);
359f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_HIGH("m_etb_count = %" PRIu64 ", m_fbd_count = %" PRIu64, m_etb_count,
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_fbd_count);
361f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara
362f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara    pthread_mutex_destroy(&m_buf_lock);
3638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video: Destructor exit");
364f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_HIGH("Exiting OMX Video Encoder ...");
36547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
36647e37c4428509524ee576920a98381f3e4872493Nick Pelly
36747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::OMXCntrlProcessMsgCb
37047e37c4428509524ee576920a98381f3e4872493Nick Pelly
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   IL Client callbacks are generated through this routine. The decoder
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   provides the thread context for this routine.
37447e37c4428509524ee576920a98381f3e4872493Nick Pelly
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ctxt -- Context information related to the self.
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   id   -- Event identifier. This could be any of the following:
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   1. Command completion event
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   2. Buffer done callback event
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   3. Frame done callback event
38147e37c4428509524ee576920a98381f3e4872493Nick Pelly
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
38447e37c4428509524ee576920a98381f3e4872493Nick Pelly
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
38647e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid omx_video::process_event_cb(void *ctxt, unsigned char id)
38747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
3888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1; // Parameter - 1
3898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2; // Parameter - 2
3908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident;
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned qsize=0; // qsize
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_video *pThis = (omx_video *) ctxt;
39347e37c4428509524ee576920a98381f3e4872493Nick Pelly
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!pThis) {
3958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR:ProcessMsgCb:Context is incorrect; bailing out");
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return;
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
39847e37c4428509524ee576920a98381f3e4872493Nick Pelly
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Protect the shared queue data structure
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    do {
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Read the message id's from the queue*/
40247e37c4428509524ee576920a98381f3e4872493Nick Pelly
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&pThis->m_lock);
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        qsize = pThis->m_cmd_q.m_size;
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize) {
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pThis->m_cmd_q.pop_entry(&p1,&p2,&ident);
40747e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
40847e37c4428509524ee576920a98381f3e4872493Nick Pelly
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize == 0) {
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            qsize = pThis->m_ftb_q.m_size;
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (qsize) {
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pThis->m_ftb_q.pop_entry(&p1,&p2,&ident);
413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
41447e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
41547e37c4428509524ee576920a98381f3e4872493Nick Pelly
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize == 0) {
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            qsize = pThis->m_etb_q.m_size;
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (qsize) {
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pThis->m_etb_q.pop_entry(&p1,&p2,&ident);
420826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
42147e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
42247e37c4428509524ee576920a98381f3e4872493Nick Pelly
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&pThis->m_lock);
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*process message if we have one*/
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize > 0) {
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            id = ident;
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            switch (id) {
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EVENT:
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        switch (p1) {
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_CommandStateSet:
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_state = (OMX_STATETYPE) p2;
4348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("Process -> state set to %d", pThis->m_state);
43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL);
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_EventError:
4408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: OMX_EventError: p2 = %lu", p2);
4418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                if (p2 == (unsigned)OMX_ErrorHardware) {
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                            OMX_EventError,OMX_ErrorHardware,0,NULL);
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                } else {
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
4468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                            OMX_EventError, p2, 0, 0);
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                }
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_CommandPortDisable:
4528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("Process -> Port %lu set to PORT_STATE_DISABLED" \
4538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                        "state", p2);
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL );
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_CommandPortEnable:
4588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("Process ->Port %lu set PORT_STATE_ENABLED state" \
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        , p2);
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,\
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL );
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            default:
4658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("process_event_cb forwarding EventCmdComplete %lu", p1);
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL );
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
4728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: ProcessMsgCb NULL callbacks");
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_ETB_OPQ:
4768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB_OPQ");
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->empty_this_buffer_opaque((OMX_HANDLETYPE)p1,\
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) {
4798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: ETBProxy() failed!");
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                case OMX_COMPONENT_GENERATE_ETB: {
484f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        OMX_ERRORTYPE iret;
485e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB");
486f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        iret = pThis->empty_this_buffer_proxy((OMX_HANDLETYPE)p1, (OMX_BUFFERHEADERTYPE *)p2);
487f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        if (iret == OMX_ErrorInsufficientResources) {
488f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure due to HW overload");
489f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            pThis->omx_report_hw_overload ();
490f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        } else if (iret != OMX_ErrorNone) {
491f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure");
492e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            pThis->omx_report_error ();
493e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        }
494f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    }
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_FTB:
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if ( pThis->fill_this_buffer_proxy((OMX_HANDLETYPE)p1,\
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) {
5008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: FTBProxy() failed!");
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_COMMAND:
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->send_command_proxy(&pThis->m_cmp,(OMX_COMMANDTYPE)p1,\
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (OMX_U32)p2,(OMX_PTR)NULL);
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EBD:
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if ( pThis->empty_buffer_done(&pThis->m_cmp,
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) {
5138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!");
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_FBD:
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if ( pThis->fill_buffer_done(&pThis->m_cmp,
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) {
5218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!");
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH:
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->input_flush_progress = false;
529f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_HIGH("m_etb_count at i/p flush = %" PRIu64, m_etb_count);
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_etb_count = 0;
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        /*Check if we need generate event for Flush done*/
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_INPUT_FLUSH_PENDING)) {
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_INPUT_FLUSH_PENDING);
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandFlush,
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    PORT_INDEX_IN,NULL );
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_IDLE_PENDING)) {
54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!pThis->output_flush_progress) {
5428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("dev_stop called after input flush complete");
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                if (dev_stop() != 0) {
5448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                    DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in i/p flush!");
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->omx_report_error ();
54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                }
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH:
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->output_flush_progress = false;
556f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_HIGH("m_fbd_count at o/p flush = %" PRIu64, m_fbd_count);
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_fbd_count = 0;
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        /*Check if we need generate event for Flush done*/
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_OUTPUT_FLUSH_PENDING)) {
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_OUTPUT_FLUSH_PENDING);
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandFlush,
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    PORT_INDEX_OUT,NULL );
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags ,OMX_COMPONENT_IDLE_PENDING)) {
5688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_LOW("dev_stop called after Output flush complete");
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!pThis->input_flush_progress) {
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                if (dev_stop() != 0) {
5718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                    DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in o/p flush!");
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->omx_report_error ();
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                }
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_START_DONE:
5808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE msg");
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
5838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Success");
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) {
5858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Move to \
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    executing");
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            // Send the callback now
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING);
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StateExecuting;
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StateExecuting, NULL);
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_PAUSE_PENDING)) {
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (dev_pause()) {
5968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in Start Done!");
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->omx_report_error ();
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_LOADED_START_PENDING)) {
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (dev_loaded_start_done()) {
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_LOW("successful loaded Start Done!");
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            } else {
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: failed in loaded Start Done!");
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->omx_report_error ();
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_START_PENDING);
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
609f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags);
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
6128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_LOW("Event Handler callback is NULL");
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_PAUSE_DONE:
6178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_PAUSE_DONE msg");
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_PAUSE_PENDING)) {
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            //Send the callback now
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->complete_pending_buffer_done_cbs();
6228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_LOW("omx_video::process_event_cb() Sending PAUSE complete after all pending EBD/FBD");
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_PAUSE_PENDING);
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StatePause;
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StatePause, NULL);
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_RESUME_DONE:
6348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_RESUME_DONE msg");
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) {
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            // Send the callback now
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING);
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StateExecuting;
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StateExecuting,NULL);
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_STOP_DONE:
6498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_STOP_DONE msg");
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->complete_pending_buffer_done_cbs();
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_IDLE_PENDING)) {
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            // Send the callback now
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_IDLE_PENDING);
65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StateIdle;
65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp,pThis->m_app_data,
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StateIdle,NULL);
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_LOADED_STOP_PENDING)) {
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (dev_loaded_stop_done()) {
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_LOW("successful loaded Stop Done!");
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            } else {
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: failed in loaded Stop Done!");
66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->omx_report_error ();
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_STOP_PENDING);
66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
669f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags);
67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_HARDWARE_ERROR:
6768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_HARDWARE_ERROR!");
67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->omx_report_error ();
67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
6796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_LTRUSE_FAILED:
68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_LTRUSE_FAILED!");
68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Sending QOMX_ErrorLTRUseFailed, p2 = 0x%x", p2);
68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->m_pCallbacks.EventHandler(
68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                &pThis->m_cmp, pThis->m_app_data,
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                OMX_EventError, QOMX_ErrorLTRUseFailed, NULL, NULL);
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
6896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
690e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                case OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING:
691e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING");
692e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pThis->omx_report_unsupported_setting();
693e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    break;
694e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
695e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                case OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD:
696e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD");
697e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pThis->omx_report_hw_overload();
698e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    break;
699e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                default:
7018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("process_event_cb unknown msg id 0x%02x", id);
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
70547e37c4428509524ee576920a98381f3e4872493Nick Pelly
70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&pThis->m_lock);
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        qsize = pThis->m_cmd_q.m_size + pThis->m_ftb_q.m_size +\
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pThis->m_etb_q.m_size;
70947e37c4428509524ee576920a98381f3e4872493Nick Pelly
71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&pThis->m_lock);
71147e37c4428509524ee576920a98381f3e4872493Nick Pelly
71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } while (qsize>0);
7138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("exited the while loop");
71447e37c4428509524ee576920a98381f3e4872493Nick Pelly
71547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
71647e37c4428509524ee576920a98381f3e4872493Nick Pelly
71747e37c4428509524ee576920a98381f3e4872493Nick Pelly
71847e37c4428509524ee576920a98381f3e4872493Nick Pelly
71947e37c4428509524ee576920a98381f3e4872493Nick Pelly
72047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::GetComponentVersion
72347e37c4428509524ee576920a98381f3e4872493Nick Pelly
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns the component version.
72647e37c4428509524ee576920a98381f3e4872493Nick Pelly
72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   TBD.
72947e37c4428509524ee576920a98381f3e4872493Nick Pelly
73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX_ErrorNone.
73247e37c4428509524ee576920a98381f3e4872493Nick Pelly
73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
73447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_component_version
73547e37c4428509524ee576920a98381f3e4872493Nick Pelly(
73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp,
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_STRING componentName,
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* componentVersion,
73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* specVersion,
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_UUIDTYPE* componentUUID
74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan )
74247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
7438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
7448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)componentName;
7458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)componentVersion;
7468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)componentUUID;
74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
7488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Comp Version in Invalid State");
74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* TBD -- Return the proper version */
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (specVersion) {
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        specVersion->nVersion = OMX_SPEC_VERSION;
75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
75647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
75747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::SendCommand
76047e37c4428509524ee576920a98381f3e4872493Nick Pelly
76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns zero if all the buffers released..
76347e37c4428509524ee576920a98381f3e4872493Nick Pelly
76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
76647e37c4428509524ee576920a98381f3e4872493Nick Pelly
76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
76947e37c4428509524ee576920a98381f3e4872493Nick Pelly
77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
77147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::send_command(OMX_IN OMX_HANDLETYPE hComp,
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_COMMANDTYPE cmd,
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32 param1,
77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR cmdData
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        )
77647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
7778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
7798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Send Command in Invalid State");
78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (cmd == OMX_CommandFlush || cmd == OMX_CommandPortDisable || cmd == OMX_CommandPortEnable) {
7848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if ((param1 != (OMX_U32)PORT_INDEX_IN) && (param1 != (OMX_U32)PORT_INDEX_OUT) && (param1 != (OMX_U32)PORT_INDEX_BOTH)) {
7858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index");
78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadPortIndex;
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (cmd == OMX_CommandMarkBuffer) {
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 != PORT_INDEX_IN) {
7918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index");
79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadPortIndex;
79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!cmdData) {
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->param is null");
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
8008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    post_event((unsigned long)cmd,(unsigned long)param1,OMX_COMPONENT_GENERATE_COMMAND);
80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_wait(&m_cmd_lock);
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
80347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
80447e37c4428509524ee576920a98381f3e4872493Nick Pelly
80547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::SendCommand
80847e37c4428509524ee576920a98381f3e4872493Nick Pelly
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns zero if all the buffers released..
81147e37c4428509524ee576920a98381f3e4872493Nick Pelly
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
81447e37c4428509524ee576920a98381f3e4872493Nick Pelly
81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
81747e37c4428509524ee576920a98381f3e4872493Nick Pelly
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
81947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::send_command_proxy(OMX_IN OMX_HANDLETYPE hComp,
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_COMMANDTYPE cmd,
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32 param1,
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR cmdData
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        )
82447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
8258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
8268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)cmdData;
8278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_STATETYPE eState = (OMX_STATETYPE) param1;
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int bFlag = 1;
83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (cmd == OMX_CommandStateSet) {
83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is Loaded */
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_state == OMX_StateLoaded) {
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateIdle) {
83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //if all buffers are allocated or all ports disabled
83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (allocate_done() ||
84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ( m_sInPortDef.bEnabled == OMX_FALSE && m_sOutPortDef.bEnabled == OMX_FALSE)) {
8418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle");
84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
8438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle-Pending");
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags, OMX_COMPONENT_IDLE_PENDING);
84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    // Skip the event notification
84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Loaded */
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateLoaded) {
8518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Loaded");
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to WaitForResources */
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition */
8608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->WaitForResources");
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Executing */
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
8648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Executing");
86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Pause */
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
8718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Pause");
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Invalid */
87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
8788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Invalid");
87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
8828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->%d Not Handled",\
88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eState);
88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
88647e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is IDLE */
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StateIdle) {
89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateLoaded) {
89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (release_done()) {
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                       Since error is None , we will post an event at the end
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                       of this function definition
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                     */
8988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded");
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (dev_stop() != 0) {
9008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: dev_stop() failed at Idle --> Loaded");
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorHardware;
90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
9048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded-Pending");
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags, OMX_COMPONENT_LOADING_PENDING);
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    // Skip the event notification
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Executing */
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( dev_start() ) {
9138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Exe");
91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING);
9188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Executing");
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dev_start_done();
92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Idle */
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateIdle) {
9268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Idle");
92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to WaitForResources */
93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
9338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->WaitForResources");
93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Pause */
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /*To pause the Video core we need to start the driver*/
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( dev_start() ) {
9428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Pause");
94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING);
9478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Pause");
94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Invalid */
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
9538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Invalid");
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
9578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle --> %d Not Handled",eState);
95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
96047e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
96147e37c4428509524ee576920a98381f3e4872493Nick Pelly
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /******************************/
96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is Executing */
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /******************************/
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StateExecuting) {
96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Idle */
96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateIdle) {
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition
97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                 */
9718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Executing --> Idle");
97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //here this should be Pause-Idle pending and should be cleared when flush is complete and change the state to Idle
97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING);
97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                execute_omx_flush(OMX_ALL);
97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Paused */
97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_pause()) {
9818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in SCP on Exe --> Pause");
98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    post_event(OMX_EventError,OMX_ErrorHardware,\
98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_COMPONENT_GENERATE_EVENT);
98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING);
9878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Executing-->Pause");
98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Loaded */
99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateLoaded) {
9938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Loaded");
99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to WaitForResources */
99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
10008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> WaitForResources");
100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Executing */
100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
10078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Executing");
100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Invalid */
101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Invalid");
101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
10188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> %d Not Handled",eState);
101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
102147e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is Pause  */
102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StatePause) {
102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Executing */
102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateExecuting) {
10288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Pause --> Executing");
102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( dev_resume() ) {
103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    post_event(OMX_EventError,OMX_ErrorHardware,\
103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_COMPONENT_GENERATE_EVENT);
103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING);
10358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Pause-->Executing");
10368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    post_event (0, 0, OMX_COMPONENT_GENERATE_RESUME_DONE);
103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Idle */
104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateIdle) {
104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition */
10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Pause --> Idle");
104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING);
104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                execute_omx_flush(OMX_ALL);
104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to loaded */
105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateLoaded) {
10518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> loaded");
105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
105561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to WaitForResources */
105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> WaitForResources");
105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Pause */
106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
10658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> Pause");
106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Invalid */
107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
10728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> Invalid");
107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
10768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Paused --> %d Not Handled",eState);
107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
107947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is WaitForResources  */
108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StateWaitForResources) {
108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Loaded */
108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateLoaded) {
108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition */
10888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: WaitForResources-->Loaded");
108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to WaitForResources */
109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
10928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->WaitForResources");
109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,
109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Executing */
109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
10998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Executing");
110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Pause */
110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
11068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Pause");
110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Invalid */
111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
11138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Invalid");
111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Loaded -
111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan               is NOT tested by Khronos TS */
111947e37c4428509524ee576920a98381f3e4872493Nick Pelly
112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
11218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: %d --> %d(Not Handled)",m_state,eState);
112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorBadParameter;
112347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /********************************/
112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* Current State is Invalid */
112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*******************************/
112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    else if (m_state == OMX_StateInvalid) {
112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* State Transition from Inavlid to any state */
113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (eState == (OMX_StateLoaded || OMX_StateWaitForResources
113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || OMX_StateIdle || OMX_StateExecuting
113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || OMX_StatePause || OMX_StateInvalid)) {
11338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Invalid -->Loaded");
113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_EventError,OMX_ErrorInvalidState,\
113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInvalidState;
113747e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (cmd == OMX_CommandFlush) {
113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (0 == param1 || OMX_ALL == param1) {
114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_FLUSH_PENDING);
114147e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (1 == param1 || OMX_ALL == param1) {
114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //generate output flush event only.
114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_FLUSH_PENDING);
114547e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
114647e37c4428509524ee576920a98381f3e4872493Nick Pelly
114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        execute_omx_flush(param1);
114847e37c4428509524ee576920a98381f3e4872493Nick Pelly        bFlag = 0;
114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if ( cmd == OMX_CommandPortEnable) {
115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) {
115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sInPortDef.bEnabled = OMX_TRUE;
115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( (m_state == OMX_StateLoaded &&
115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING))
115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || allocate_input_done()) {
115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,PORT_INDEX_IN,
115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
11598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending");
116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_ENABLE_PENDING);
116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
116261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
116361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
116447e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
116561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) {
116661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sOutPortDef.bEnabled = OMX_TRUE;
116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( (m_state == OMX_StateLoaded &&
116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING))
117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || (allocate_output_done())) {
117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,PORT_INDEX_OUT,
117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
11758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending");
117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_ENABLE_PENDING);
117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (cmd == OMX_CommandPortDisable) {
118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) {
118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sInPortDef.bEnabled = OMX_FALSE;
118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle)
118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && release_input_done()) {
118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortDisable,PORT_INDEX_IN,
118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_DISABLE_PENDING);
119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) {
119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    execute_omx_flush(PORT_INDEX_IN);
119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) {
119961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sOutPortDef.bEnabled = OMX_FALSE;
120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle)
120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && release_output_done()) {
120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortDisable,PORT_INDEX_OUT,\
120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_DISABLE_PENDING);
120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) {
120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    execute_omx_flush(PORT_INDEX_OUT);
120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
121247e37c4428509524ee576920a98381f3e4872493Nick Pelly
121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
12168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid Command received other than StateSet (%d)",cmd);
121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorNotImplemented;
121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone && bFlag) {
122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        post_event(cmd,eState,OMX_COMPONENT_GENERATE_EVENT);
122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_post(&m_cmd_lock);
122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
122447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
122547e37c4428509524ee576920a98381f3e4872493Nick Pelly
122647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ExecuteOmxFlush
122947e37c4428509524ee576920a98381f3e4872493Nick Pelly
123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Executes the OMX flush.
123247e37c4428509524ee576920a98381f3e4872493Nick Pelly
123361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
123461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   flushtype - input flush(1)/output flush(0)/ both.
123547e37c4428509524ee576920a98381f3e4872493Nick Pelly
123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
123761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
123847e37c4428509524ee576920a98381f3e4872493Nick Pelly
123961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
124047e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_omx_flush(OMX_U32 flushType)
124147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
12438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_omx_flush -  %u", (unsigned int)flushType);
12446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* XXX: The driver/hardware does not support flushing of individual ports
124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * in all states. So we pretty much need to flush both ports internally,
124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * but client should only get the FLUSH_(INPUT|OUTPUT)_DONE for the one it
124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * requested.  Since OMX_COMPONENT_(OUTPUT|INPUT)_FLUSH_PENDING isn't set,
124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * we automatically omit sending the FLUSH done for the "opposite" port. */
125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
12516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    input_flush_progress = true;
12526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    output_flush_progress = true;
12536eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    bRet = execute_flush_all();
12546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (flushType == 0 || flushType == OMX_ALL) {
125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        input_flush_progress = true;
125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //flush input only
125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = execute_input_flush();
125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (flushType == 1 || flushType == OMX_ALL) {
126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //flush output only
126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        output_flush_progress = true;
126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = execute_output_flush();
126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
12656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
126747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
126847e37c4428509524ee576920a98381f3e4872493Nick Pelly/*=========================================================================
126947e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_output_flush
127047e37c4428509524ee576920a98381f3e4872493Nick Pelly
127147e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
127261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at OUTPUT PORT.
127347e37c4428509524ee576920a98381f3e4872493Nick Pelly
127447e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
127561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone.
127647e37c4428509524ee576920a98381f3e4872493Nick Pelly
127747e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
127861a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false
127947e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/
128047e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_output_flush(void)
128147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
12828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1 = 0; // Parameter - 1
12838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2 = 0; // Parameter - 2
12848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident = 0;
128561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = true;
128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate FBD for all Buffers in the FTBq*/
12888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_output_flush");
128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
129061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_ftb_q.m_size) {
129161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.pop_entry(&p1,&p2,&ident);
129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_FTB ) {
129461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_output_buffers++;
129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
129661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_FBD) {
129761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
130161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
130261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if there are buffers with the Driver*/
130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_flush(PORT_INDEX_OUT)) {
13048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: o/p dev_flush() Failed");
130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
130947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
131047e37c4428509524ee576920a98381f3e4872493Nick Pelly/*=========================================================================
131147e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_input_flush
131247e37c4428509524ee576920a98381f3e4872493Nick Pelly
131347e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
131461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT PORT.
131547e37c4428509524ee576920a98381f3e4872493Nick Pelly
131647e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
131761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone.
131847e37c4428509524ee576920a98381f3e4872493Nick Pelly
131947e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false
132147e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/
132247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_input_flush(void)
132347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
13248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1 = 0; // Parameter - 1
13258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2 = 0; // Parameter - 2
13268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident = 0;
132761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = true;
132861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
132961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate EBD for all Buffers in the ETBq*/
13308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_input_flush");
133161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
133261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
133361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_etb_q.m_size) {
133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.pop_entry(&p1,&p2,&ident);
133561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_ETB) {
133661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_input_buffers++;
133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_EBD) {
133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
134061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_ETB_OPQ) {
134161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2);
134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mUseProxyColorFormat) {
134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (psource_frame) {
134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame);
134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            psource_frame = NULL;
134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        while (m_opq_meta_q.m_size) {
13508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long p1,p2,id;
135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_meta_q.pop_entry(&p1,&p2,&id);
135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,
135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_BUFFERHEADERTYPE  *)p1);
135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (pdest_frame) {
13568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0);
135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pdest_frame = NULL;
135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
136161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if there are buffers with the Driver*/
136261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_flush(PORT_INDEX_IN)) {
13638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: i/p dev_flush() Failed");
136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
136661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
136761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
13686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
13696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
13706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
13716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal/*=========================================================================
13726eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalFUNCTION : execute_flush
13736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
13746eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalDESCRIPTION
137561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT & OUTPUT PORT.
13766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
13776eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalPARAMETERS
137861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone.
13796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
13806eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalRETURN VALUE
138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false
13826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal==========================================================================*/
13836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
13846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_video::execute_flush_all(void)
13856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
13868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1 = 0; // Parameter - 1
13878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2 = 0; // Parameter - 2
13888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident = 0;
138961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = true;
139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
13918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_flush_all");
139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate EBD for all Buffers in the ETBq*/
139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_etb_q.m_size) {
139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.pop_entry(&p1,&p2,&ident);
139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_ETB) {
139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_input_buffers++;
139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_EBD) {
140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
14028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        } else if(ident == OMX_COMPONENT_GENERATE_ETB_OPQ) {
14038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2);
14048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
14058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
14068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(mUseProxyColorFormat) {
14078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if(psource_frame) {
14088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame);
14098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            psource_frame = NULL;
14108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
14118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        while(m_opq_meta_q.m_size) {
14128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long p1,p2,id;
14138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_opq_meta_q.pop_entry(&p1,&p2,&id);
14148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,
14158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (OMX_BUFFERHEADERTYPE  *)p1);
14168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
14178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if(pdest_frame){
14188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0);
14198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            pdest_frame = NULL;
142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
142261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate FBD for all Buffers in the FTBq*/
14248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_output_flush");
142561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_ftb_q.m_size) {
142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.pop_entry(&p1,&p2,&ident);
142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_FTB ) {
142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_output_buffers++;
143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_FBD) {
143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
143561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
143761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if there are buffers with the Driver*/
143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_flush(PORT_INDEX_BOTH)) {
14408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: dev_flush() Failed");
144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
144447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
144547e37c4428509524ee576920a98381f3e4872493Nick Pelly
14466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
144747e37c4428509524ee576920a98381f3e4872493Nick Pelly
144847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::SendCommandEvent
145147e37c4428509524ee576920a98381f3e4872493Nick Pelly
145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
145361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Send the event to decoder pipe.  This is needed to generate the callbacks
145461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   in decoder thread context.
145547e37c4428509524ee576920a98381f3e4872493Nick Pelly
145661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
145761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
145847e37c4428509524ee576920a98381f3e4872493Nick Pelly
145961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
146147e37c4428509524ee576920a98381f3e4872493Nick Pelly
146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
14638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::post_event(unsigned long p1,
14648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        unsigned long p2,
14658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        unsigned long id)
146647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
14678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool bRet =  false;
146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
146961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
147061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
147161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if ((id == OMX_COMPONENT_GENERATE_FTB) ||
147261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_FBD) ||
147361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH)) {
147461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.insert_entry(p1,p2,id);
147561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if ((id == OMX_COMPONENT_GENERATE_ETB) ||
147661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_EBD) ||
147761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH)) {
147861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.insert_entry(p1,p2,id);
147961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_cmd_q.insert_entry(p1,p2,id);
148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bRet = true;
14848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Value of this pointer in post_event %p",this);
148561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    post_message(this, id);
148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
148761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
148861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
148947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
149047e37c4428509524ee576920a98381f3e4872493Nick Pelly
149147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
149261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
149361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::GetParameter
149447e37c4428509524ee576920a98381f3e4872493Nick Pelly
149561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
149661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Get Parameter method implementation
149747e37c4428509524ee576920a98381f3e4872493Nick Pelly
149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
149961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
150047e37c4428509524ee576920a98381f3e4872493Nick Pelly
150161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
150261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Error None if successful.
150347e37c4428509524ee576920a98381f3e4872493Nick Pelly
150461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
150547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_parameter(OMX_IN OMX_HANDLETYPE     hComp,
150661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE paramIndex,
150761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_PTR     paramData)
150847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
15098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
151061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
151161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int height=0,width = 0;
15126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
15138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_parameter:");
151461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
15158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid State");
151661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
151761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (paramData == NULL) {
15198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData");
152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
152161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
15228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    switch ((int)paramIndex) {
152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPortDefinition:
152461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
152516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_PORTDEFINITIONTYPE);
152661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_PORTDEFINITIONTYPE *portDefn;
152761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData;
152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
15298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPortDefinition");
153061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_IN) {
15318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    dev_get_buf_req (&m_sInPortDef.nBufferCountMin,
15328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        &m_sInPortDef.nBufferCountActual,
15338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        &m_sInPortDef.nBufferSize,
15348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_sInPortDef.nPortIndex);
15358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("m_sInPortDef: size = %u, min cnt = %u, actual cnt = %u",
15368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountMin,
15378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sInPortDef.nBufferCountActual);
153861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(portDefn, &m_sInPortDef, sizeof(m_sInPortDef));
153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_
154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (meta_mode_enable) {
154161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        portDefn->nBufferSize = sizeof(encoder_media_buffer_type);
154261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
154361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (mUseProxyColorFormat) {
154461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        portDefn->format.video.eColorFormat =
154561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque;
154661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
1547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_OUT) {
1549f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    if (m_state != OMX_StateExecuting) {
1550e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        dev_get_buf_req (&m_sOutPortDef.nBufferCountMin,
155161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferCountActual,
155261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferSize,
155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex);
1554f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    }
15558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("m_sOutPortDef: size = %u, min cnt = %u, actual cnt = %u",
15568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountMin,
15578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferCountActual);
155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(portDefn, &m_sOutPortDef, sizeof(m_sOutPortDef));
155961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
156061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
156161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
156261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
156461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
156561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoInit:
156661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
156716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
156861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE *portParamType =
156961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_PORT_PARAM_TYPE *) paramData;
15708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoInit");
157161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
157261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(portParamType, &m_sPortParam, sizeof(m_sPortParam));
157361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
15746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal            }
157561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoPortFormat:
157661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
157716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PORTFORMATTYPE);
157861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt =
157961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData;
15808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoPortFormat");
158161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
158261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_IN) {
15838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    unsigned index = portFmt->nIndex;
1584e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1585e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _UBWC_
1586e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //we support following formats
1587e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //index 0 - Compressed (UBWC) Venus flavour of YUV420SP
1588e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //index 1 - Venus flavour of YUV420SP
1589e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //index 2 - Compressed (UBWC) Venus flavour of RGBA8888
1590e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //index 3 - Venus flavour of RGBA8888
1591e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //index 4 - opaque which internally maps to YUV420SP.
1592e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //index 5 - vannilla YUV420SP
1593e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    //this can be extended in the future
1594e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    int supportedFormats[] = {
1595e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        [0] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
1596e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        [1] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
1597e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        [2] = QOMX_COLOR_Format32bitRGBA8888Compressed,
1598e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        [3] = QOMX_COLOR_Format32bitRGBA8888,
1599e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        [4] = QOMX_COLOR_FormatAndroidOpaque,
1600e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        [5] = OMX_COLOR_FormatYUV420SemiPlanar,
1601e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    };
1602e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else
16030b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //we support two formats
16040b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //index 0 - Venus flavour of YUV420SP
16050b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //index 1 - opaque which internally maps to YUV420SP.
16060b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //index 2 - vannilla YUV420SP
16070b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //this can be extended in the future
16080b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    int supportedFormats[] = {
16090b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        [0] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
16100b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        [1] = QOMX_COLOR_FormatAndroidOpaque,
16110b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        [2] = OMX_COLOR_FormatYUV420SemiPlanar,
16120b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    };
1613e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
1614f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    if (index > (sizeof(supportedFormats)/sizeof(*supportedFormats) - 1))
161561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorNoMore;
161661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    else {
161761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        memcpy(portFmt, &m_sInPortFormat, sizeof(m_sInPortFormat));
16180b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        portFmt->nIndex = index; //restore index set from client
16190b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        portFmt->eColorFormat = (OMX_COLOR_FORMATTYPE)supportedFormats[index];
162061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
162161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_OUT) {
162261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(portFmt, &m_sOutPortFormat, sizeof(m_sOutPortFormat));
162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
162461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
162661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
162861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoBitrate:
163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
163116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_BITRATETYPE);
163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData;
16338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoBitrate");
163461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) {
163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(pParam, &m_sParamBitrate, sizeof(m_sParamBitrate));
163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
163861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
163961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
164061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
164161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoMpeg4:
164561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
164616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_MPEG4TYPE);
164761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData;
16488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoMpeg4");
164961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamMPEG4, sizeof(m_sParamMPEG4));
165061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
165161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoH263:
165361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
165416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_H263TYPE);
165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData;
16568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoH263");
165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamH263, sizeof(m_sParamH263));
165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoAvc:
166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
166216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_AVCTYPE);
166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData;
16648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoAvc");
166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamAVC, sizeof(m_sParamAVC));
166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
16687beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8:
16697beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            {
167016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_VP8TYPE);
16717beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData;
16728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoVp8");
16737beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                memcpy(pParam, &m_sParamVP8, sizeof(m_sParamVP8));
16747beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                break;
16757beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            }
1676f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case (OMX_INDEXTYPE)OMX_IndexParamVideoHevc:
1677f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
167816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_HEVCTYPE);
1679f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_VIDEO_PARAM_HEVCTYPE* pParam = (OMX_VIDEO_PARAM_HEVCTYPE*)paramData;
1680f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoHevc");
1681f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(pParam, &m_sParamHEVC, sizeof(m_sParamHEVC));
1682f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
1683f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoProfileLevelQuerySupported:
168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
168616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE);
168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
16888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported");
168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = get_supported_profile_level(pParam);
16908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (eRet && eRet != OMX_ErrorNoMore)
16918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_supported_profile_level %u, %u",
16928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)pParam->eProfile, (unsigned int)pParam->eLevel);
169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoProfileLevelCurrent:
169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
169716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE);
169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
16998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelCurrent");
170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamProfileLevel, sizeof(m_sParamProfileLevel));
170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
170361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Component should support this port definition*/
170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamAudioInit:
170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
170616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE *audioPortParamType = (OMX_PORT_PARAM_TYPE *) paramData;
17088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamAudioInit");
170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(audioPortParamType, &m_sPortParam_audio, sizeof(m_sPortParam_audio));
171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Component should support this port definition*/
171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamImageInit:
171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
171516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE *imagePortParamType = (OMX_PORT_PARAM_TYPE *) paramData;
17178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamImageInit");
171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(imagePortParamType, &m_sPortParam_img, sizeof(m_sPortParam_img));
171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Component should support this port definition*/
172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamOtherInit:
172461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
17258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: get_parameter: OMX_IndexParamOtherInit %08x", paramIndex);
172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet =OMX_ErrorUnsupportedIndex;
172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
172861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamStandardComponentRole:
173061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
173116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_COMPONENTROLETYPE);
173261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_COMPONENTROLETYPE *comp_role;
173361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData;
173461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role->nVersion.nVersion = OMX_SPEC_VERSION;
173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role->nSize = sizeof(*comp_role);
173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
17378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Getparameter: OMX_IndexParamStandardComponentRole %d",paramIndex);
1738ce256dab580d6601e34cf59642f642bd496952aePatrick Tjin                strlcpy((char*)comp_role->cRole,(const char*)m_cRole,OMX_MAX_STRINGNAME_SIZE);
173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Added for parameter test */
174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPriorityMgmt:
174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
174416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PRIORITYMGMTTYPE);
174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PRIORITYMGMTTYPE *priorityMgmType = (OMX_PRIORITYMGMTTYPE *) paramData;
17468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPriorityMgmt");
174761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(priorityMgmType, &m_sPriorityMgmt, sizeof(m_sPriorityMgmt));
174861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
174961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
175061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Added for parameter test */
175161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamCompBufferSupplier:
175261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
175316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_BUFFERSUPPLIERTYPE);
175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData;
17558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamCompBufferSupplier");
175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_IN) {
175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(bufferSupplierType, &m_sInBufSupplier, sizeof(m_sInBufSupplier));
175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_OUT) {
175961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(bufferSupplierType, &m_sOutBufSupplier, sizeof(m_sOutBufSupplier));
176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
176261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
176461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
176661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
176761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoQuantization:
176861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
176916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_QUANTIZATIONTYPE);
177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData;
17718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoQuantization");
177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(session_qp, &m_sSessionQuantization, sizeof(m_sSessionQuantization));
177361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
177461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
177661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoQPRange:
177761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
177816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE);
177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData;
17808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoQPRange");
178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(qp_range, &m_sSessionQPRange, sizeof(m_sSessionQPRange));
178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
178561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoErrorCorrection:
178661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
178716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE);
178861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* errorresilience = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData;
17898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection");
179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                errorresilience->bEnableHEC = m_sErrorCorrection.bEnableHEC;
179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                errorresilience->bEnableResync = m_sErrorCorrection.bEnableResync;
179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                errorresilience->nResynchMarkerSpacing = m_sErrorCorrection.nResynchMarkerSpacing;
179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoIntraRefresh:
179661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
179716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_INTRAREFRESHTYPE);
179861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_INTRAREFRESHTYPE* intrarefresh = (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData;
17998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMX_IndexParamVideoIntraRefresh");
18008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("OMX_IndexParamVideoIntraRefresh GET");
180161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                intrarefresh->eRefreshMode = m_sIntraRefresh.eRefreshMode;
180261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                intrarefresh->nCirMBs = m_sIntraRefresh.nCirMBs;
180361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
180461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
180561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexPortDefn:
180661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //TODO
180761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
180861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_COMPONENT_CAPABILITY_TYPE_INDEX:
180961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
181016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMXComponentCapabilityFlagsType);
181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMXComponentCapabilityFlagsType *pParam = reinterpret_cast<OMXComponentCapabilityFlagsType*>(paramData);
18128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_COMPONENT_CAPABILITY_TYPE_INDEX");
181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iIsOMXComponentMultiThreaded = OMX_TRUE;
181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE;
181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
181661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
181761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentUsesNALStartCodes = OMX_TRUE;
181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsPartialFrames = OMX_FALSE;
181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentCanHandleIncompleteFrames = OMX_FALSE;
182061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentUsesFullAVCFrames = OMX_FALSE;
182161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_use_input_pmem = OMX_TRUE;
182261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("Supporting capability index in encoder node");
182361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
182461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
18256eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_)
182661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamIndexExtraDataType:
182761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
182816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_INDEXEXTRADATATYPE);
182961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamIndexExtraDataType");
183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData;
183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) {
183261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
183361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->bEnabled =
1834e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (OMX_BOOL)(m_sExtraData & VENC_EXTRADATA_SLICEINFO);
183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("Slice Info extradata %d", pParam->bEnabled);
183661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
183761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: slice information is "
183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                "valid for output port only");
1839e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        eRet = OMX_ErrorUnsupportedIndex;
184061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
18418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderMBInfo) {
18428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
18438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        pParam->bEnabled =
1844e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (OMX_BOOL)(m_sExtraData & VENC_EXTRADATA_MBINFO);
18458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_HIGH("MB Info extradata %d", pParam->bEnabled);
18468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    } else {
18478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: MB information is "
18488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                "valid for output port only");
18498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
18508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    }
1851e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataFrameDimension) {
1852e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    if (pParam->nPortIndex == PORT_INDEX_IN) {
1853e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        pParam->bEnabled =
1854e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            (OMX_BOOL)((m_sExtraData & VENC_EXTRADATA_FRAMEDIMENSION) ? 1 : 0);
1855e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_HIGH("Frame dimension extradata %d", pParam->bEnabled);
1856e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    } else {
1857e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        DEBUG_PRINT_ERROR("get_parameter: frame dimension is "
1858e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                "valid for input port only");
1859e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        eRet = OMX_ErrorUnsupportedIndex;
1860e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    }
186161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
18626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
186361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) {
186461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
186561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->bEnabled =
18668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_LTRINFO);
186761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("LTR Info extradata %d", pParam->bEnabled);
186861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
186961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: LTR information is "
187061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                "valid for output port only");
187161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
187261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
187361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
18746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
187561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
187661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("get_parameter: unsupported extradata index (0x%x)",
187761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nIndex);
187861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
187961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
188061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
188161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
188261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoLTRCountRangeSupported:
188361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
188416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_RANGETYPE);
188561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("get_parameter: QOMX_IndexParamVideoLTRCountRangeSupported");
188661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_RANGETYPE *pParam = (QOMX_EXTNINDEX_RANGETYPE *)paramData;
188761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
188861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_U32 min = 0, max = 0, step_size = 0;
188961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (dev_get_capability_ltrcount(&min, &max, &step_size)) {
189061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nMin = min;
189161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nMax = max;
189261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nStepSize = step_size;
189361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
189461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: get_capability_ltrcount failed");
189561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUndefined;
189661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
189761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
189861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("LTR count range is valid for output port only");
189961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
190061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
190161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
190261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
1903f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case OMX_QcomIndexParamVideoLTRCount:
1904f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
190516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE);
1906f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoLTRCount");
1907f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE *pParam =
1908f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        reinterpret_cast<OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE*>(paramData);
1909f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(pParam, &m_sParamLTRCount, sizeof(m_sParamLTRCount));
1910f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
1911f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
1912826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
191361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoSyntaxHdr:
191461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
191516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE);
191661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("QOMX_IndexParamVideoSyntaxHdr");
191761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<QOMX_EXTNINDEX_PARAMTYPE*>(paramData);
191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->pData == NULL) {
192061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("Error: Data buffer is NULL");
192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadParameter;
192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
192461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (get_syntaxhdr_enable == false) {
192561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: get_parameter: Get syntax header disabled");
192661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
192961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_START_PENDING);
193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_loaded_start()) {
193161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("device start successful");
193261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
193361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("device start failed");
193461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_START_PENDING);
193561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorHardware;
193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_get_seq_hdr(pParam->pData,
193861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (unsigned)(pParam->nSize - sizeof(QOMX_EXTNINDEX_PARAMTYPE)),
1939f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            (unsigned *)(void *)&pParam->nDataSize)) {
19408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("get syntax header successful (hdrlen = %u)",
19418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)pParam->nDataSize);
194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    for (unsigned i = 0; i < pParam->nDataSize; i++) {
194361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_LOW("Header[%d] = %x", i, *((char *)pParam->pData + i));
194461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("Error returned from GetSyntaxHeader()");
194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
194861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
194961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING);
195061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_loaded_stop()) {
195161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("device stop successful");
195261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
195361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("device stop failed");
195461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING);
195561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
19598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexHierarchicalStructure:
19608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
196116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_HIERARCHICALLAYERS);
19628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                QOMX_VIDEO_HIERARCHICALLAYERS* hierp = (QOMX_VIDEO_HIERARCHICALLAYERS*) paramData;
19638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexHierarchicalStructure");
19648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                memcpy(hierp, &m_sHierLayers, sizeof(m_sHierLayers));
19658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
19668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
1967e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin         case OMX_QcomIndexParamMBIStatisticsMode:
1968e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
196916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QOMX_VIDEO_MBI_STATISTICS);
1970e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                OMX_QOMX_VIDEO_MBI_STATISTICS* mbi_mode = (OMX_QOMX_VIDEO_MBI_STATISTICS*) paramData;
1971e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamMBIStatisticsMode");
1972e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                memcpy(mbi_mode, &m_sMBIStatistics, sizeof(m_sMBIStatistics));
1973e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
1974e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
19758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamPerfLevel:
19768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
197716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PERF_LEVEL);
19788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 perflevel;
19798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_QCOM_VIDEO_PARAM_PERF_LEVEL *pParam =
19808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PERF_LEVEL*>(paramData);
19818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPerfLevel");
19828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!dev_get_performance_level(&perflevel)) {
19838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d",
19848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        pParam->ePerfLevel);
19858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
19868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel;
19878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
19888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
19898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
19908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamH264VUITimingInfo:
19918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
199216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO);
19938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 enabled;
19948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO *pParam =
19958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO*>(paramData);
19968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamH264VUITimingInfo");
19978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!dev_get_vui_timing_info(&enabled)) {
19988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_vui_Timing_info %d",
19998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        pParam->bEnable);
20008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
20018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pParam->bEnable = (OMX_BOOL)enabled;
20028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
20038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
20048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
2005e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QTIIndexParamVQZIPSEIType:
2006e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
200716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE);
2008e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                OMX_U32 enabled;
2009e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE *pParam =
2010e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    reinterpret_cast<OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE*>(paramData);
2011e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_LOW("get_parameter: OMX_QTIIndexParamVQZIPSEIType");
2012e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!dev_get_vqzip_sei_info(&enabled)) {
2013e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("Invalid entry returned from get_vqzip_sei_type %d",
2014e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        pParam->bEnable);
2015e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                } else {
2016e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pParam->bEnable = (OMX_BOOL)enabled;
2017e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
2018e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
2019e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
20208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamPeakBitrate:
20218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
202216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE);
20238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 peakbitrate;
20248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE *pParam =
20258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE*>(paramData);
20268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPeakBitrate");
20278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!dev_get_peak_bitrate(&peakbitrate)) {
20288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_peak_bitrate %u",
20298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)pParam->nPeakBitrate);
20308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
20318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pParam->nPeakBitrate = peakbitrate;
20328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
20338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
20348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
20358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan         case QOMX_IndexParamVideoInitialQp:
20368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
203716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_INITIALQP);
20388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                 QOMX_EXTNINDEX_VIDEO_INITIALQP* initqp =
20398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                     reinterpret_cast<QOMX_EXTNINDEX_VIDEO_INITIALQP *>(paramData);
20408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                     memcpy(initqp, &m_sParamInitqp, sizeof(m_sParamInitqp));
20418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
20428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
2043e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin         case OMX_QcomIndexParamBatchSize:
2044e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
204516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_U32TYPE);
2046e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                OMX_PARAM_U32TYPE* batch =
2047e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    reinterpret_cast<OMX_PARAM_U32TYPE *>(paramData);
2048e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2049e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamBatchSize");
2050e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!dev_get_batch_size(&batch->nU32)) {
2051e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("Invalid entry returned from dev_get_batch_size %u",
2052e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        (unsigned int)batch->nSize);
2053e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    eRet = OMX_ErrorUnsupportedIndex;
2054e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    break;
2055e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
2056e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2057e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                batch->nPortIndex = PORT_INDEX_IN;
2058e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
2059e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
2060e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexParamSequenceHeaderWithIDR:
2061e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
206216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, PrependSPSPPSToIDRFramesParams);
2063e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                PrependSPSPPSToIDRFramesParams * pParam =
2064e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    reinterpret_cast<PrependSPSPPSToIDRFramesParams *>(paramData);
2065e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamSequenceHeaderWithIDR");
2066e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                memcpy(pParam, &m_sPrependSPSPPS, sizeof(m_sPrependSPSPPS));
2067e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
2068e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
2069e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        case OMX_QcomIndexParamVencAspectRatio:
2070e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            {
207116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_VENC_SAR);
2072e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               QOMX_EXTNINDEX_VIDEO_VENC_SAR * pParam =
2073e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   reinterpret_cast<QOMX_EXTNINDEX_VIDEO_VENC_SAR *>(paramData);
2074e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                memcpy(pParam, &m_sSar, sizeof(m_sSar));
2075e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                break;
2076e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
20778a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar        case OMX_IndexParamAndroidVideoTemporalLayering:
2078bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch            {
20798a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE);
20808a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE *pLayerInfo =
20818a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                        reinterpret_cast<OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE*>(paramData);
20828a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                if (!dev_get_temporal_layer_caps(&m_sParamTemporalLayers.nLayerCountMax,
20838a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                        &m_sParamTemporalLayers.nBLayerCountMax)) {
2084bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                    DEBUG_PRINT_ERROR("Failed to get temporal layer capabilities");
2085bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                    eRet = OMX_ErrorHardware;
2086bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                }
2087bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                memcpy(pLayerInfo, &m_sParamTemporalLayers, sizeof(m_sParamTemporalLayers));
2088bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                break;
2089bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch            }
209061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoSliceFMO:
209161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
209261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
20938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("ERROR: get_parameter: unknown param %08x", paramIndex);
209461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet =OMX_ErrorUnsupportedIndex;
209561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
209661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
209761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
209861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
209961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
210061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
210147e37c4428509524ee576920a98381f3e4872493Nick Pelly
210247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
210347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::GetConfig
210647e37c4428509524ee576920a98381f3e4872493Nick Pelly
210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
210861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Get Config Method implementation.
210947e37c4428509524ee576920a98381f3e4872493Nick Pelly
211061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
211161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
211247e37c4428509524ee576920a98381f3e4872493Nick Pelly
211361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
211461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if successful.
211547e37c4428509524ee576920a98381f3e4872493Nick Pelly
211661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
211747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_config(OMX_IN OMX_HANDLETYPE      hComp,
211861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE configIndex,
211961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_PTR     configData)
212047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
21218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
212261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ////////////////////////////////////////////////////////////////
212361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Supported Config Index           Type
212461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // =============================================================
212561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // OMX_IndexConfigVideoBitrate      OMX_VIDEO_CONFIG_BITRATETYPE
212661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // OMX_IndexConfigVideoFramerate    OMX_CONFIG_FRAMERATETYPE
212761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // OMX_IndexConfigCommonRotate      OMX_CONFIG_ROTATIONTYPE
212861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ////////////////////////////////////////////////////////////////
212961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
213061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (configData == NULL) {
213161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: param is null");
213261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
213361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
213461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
213561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
213661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: can't be in invalid state");
213761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
213861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
213961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
214061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    //@todo need to validate params
21418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    switch ((int)configIndex) {
214261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoBitrate:
214361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
214416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_BITRATETYPE);
214561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_BITRATETYPE* pParam = reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData);
214661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigBitrate, sizeof(m_sConfigBitrate));
214761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
214861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
214961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoFramerate:
215061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
215116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_FRAMERATETYPE);
215261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_FRAMERATETYPE* pParam = reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData);
215361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigFramerate, sizeof(m_sConfigFramerate));
215461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
215561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
215661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigCommonRotate:
215761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
215816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE);
215961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_ROTATIONTYPE* pParam = reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData);
216061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigFrameRotation, sizeof(m_sConfigFrameRotation));
216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
216261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
216361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoIntraperiod:
216461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
21658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_config:QOMX_IndexConfigVideoIntraperiod");
216616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_INTRAPERIODTYPE);
216761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_INTRAPERIODTYPE* pParam = reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData);
216861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sIntraperiod, sizeof(m_sIntraperiod));
216961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
217061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
217161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoAVCIntraPeriod:
217261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
217316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_AVCINTRAPERIOD);
217461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam =
217561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_VIDEO_CONFIG_AVCINTRAPERIOD*>(configData);
217661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoAVCIntraPeriod");
217761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigAVCIDRPeriod, sizeof(m_sConfigAVCIDRPeriod));
217861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
217961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
21808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_IndexConfigCommonDeinterlace:
21818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
218216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_DEINTERLACE);
21838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_VIDEO_CONFIG_DEINTERLACE *pParam =
21848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_VIDEO_CONFIG_DEINTERLACE*>(configData);
21858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_IndexConfigCommonDeinterlace");
21868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                memcpy(pParam, &m_sConfigDeinterlace, sizeof(m_sConfigDeinterlace));
21878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
21888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
21898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan       case OMX_IndexConfigVideoVp8ReferenceFrame:
21908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           {
219116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_VP8REFERENCEFRAMETYPE);
21928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               OMX_VIDEO_VP8REFERENCEFRAMETYPE* pParam =
21938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                   reinterpret_cast<OMX_VIDEO_VP8REFERENCEFRAMETYPE*>(configData);
21948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoVp8ReferenceFrame");
21958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               memcpy(pParam, &m_sConfigVp8ReferenceFrame, sizeof(m_sConfigVp8ReferenceFrame));
21968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               break;
21978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           }
2198f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case OMX_QcomIndexConfigPerfLevel:
2199f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
220016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL);
2201f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_U32 perflevel;
2202f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL *pParam =
2203f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL*>(configData);
2204f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigPerfLevel");
2205f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (!dev_get_performance_level(&perflevel)) {
2206f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d",
2207f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        pParam->ePerfLevel);
2208f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                } else {
2209f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel;
2210f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
2211f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
2212f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
2213bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch       case OMX_QcomIndexConfigNumHierPLayers:
2214e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin           {
2215bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                VALIDATE_OMX_PARAM_DATA(configData, QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS);
2216bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch               QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS* pParam =
2217bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                   reinterpret_cast<QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS*>(configData);
2218bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch               DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigNumHierPLayers");
2219bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch               memcpy(pParam, &m_sHPlayers, sizeof(m_sHPlayers));
2220e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               break;
2221e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin           }
2222e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin       case OMX_QcomIndexConfigQp:
2223e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin           {
222416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_QP);
2225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               OMX_SKYPE_VIDEO_CONFIG_QP* pParam =
2226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   reinterpret_cast<OMX_SKYPE_VIDEO_CONFIG_QP*>(configData);
2227e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigQp");
2228e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               memcpy(pParam, &m_sConfigQP, sizeof(m_sConfigQP));
2229e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               break;
2230e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin           }
2231e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin       case OMX_QcomIndexConfigBaseLayerId:
2232e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin           {
223316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID);
2234e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID* pParam =
2235e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                   reinterpret_cast<OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID*>(configData);
2236e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigBaseLayerId");
2237e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               memcpy(pParam, &m_sBaseLayerID, sizeof(m_sBaseLayerID));
2238e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               break;
2239e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin           }
2240f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon       case OMX_IndexConfigAndroidIntraRefresh:
2241f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon           {
2242f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE);
2243f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE* pParam =
2244f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon                   reinterpret_cast<OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE*>(configData);
2245f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               DEBUG_PRINT_LOW("get_config: OMX_IndexConfigAndroidIntraRefresh");
2246f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               memcpy(pParam, &m_sConfigIntraRefresh, sizeof(m_sConfigIntraRefresh));
2247f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               break;
2248f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon           }
22498a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar        case OMX_IndexParamAndroidVideoTemporalLayering:
2250bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch            {
22518a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE);
22528a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE *layerConfig =
22538a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                        (OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE *)configData;
22548a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar                DEBUG_PRINT_LOW("get_config: OMX_IndexConfigAndroidVideoTemporalLayering");
2255bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                memcpy(configData, &m_sConfigTemporalLayers, sizeof(m_sConfigTemporalLayers));
2256bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                break;
2257bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch            }
2258ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan       case OMX_QTIIndexConfigDescribeColorAspects:
2259ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan            {
2260ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, DescribeColorAspectsParams);
2261ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan                DescribeColorAspectsParams* pParam =
2262ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan                    reinterpret_cast<DescribeColorAspectsParams*>(configData);
2263ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_QTIIndexConfigDescribeColorAspects");
2264c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan                if (pParam->bRequestingDataSpace) {
2265c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan                    DEBUG_PRINT_ERROR("Does not handle dataspace request");
2266c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan                    return OMX_ErrorUnsupportedSetting;
2267c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan                }
2268939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                if (pParam->bDataSpaceChanged == OMX_TRUE) {
2269939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan
2270939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    print_debug_color_aspects(&(pParam->sAspects), "get_config (dataspace changed) Client says");
2271939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    // If the dataspace says RGB, recommend 601-limited;
2272939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    // since that is the destination colorspace that C2D or Venus will convert to.
2273939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    if (pParam->nPixelFormat == HAL_PIXEL_FORMAT_RGBA_8888) {
2274939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        DEBUG_PRINT_INFO("get_config (dataspace changed): ColorSpace: Recommend 601-limited for RGBA8888");
2275939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        pParam->sAspects.mPrimaries = ColorAspects::PrimariesBT601_6_625;
2276939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        pParam->sAspects.mRange = ColorAspects::RangeLimited;
2277939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        pParam->sAspects.mTransfer = ColorAspects::TransferSMPTE170M;
2278939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        pParam->sAspects.mMatrixCoeffs = ColorAspects::MatrixBT601_6;
2279939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    } else {
2280939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        // For IMPLEMENTATION_DEFINED (or anything else), stick to client's defaults.
2281939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                        DEBUG_PRINT_INFO("get_config (dataspace changed): ColorSpace: use client-default for format=%x",
2282939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                                pParam->nPixelFormat);
2283939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    }
2284939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    print_debug_color_aspects(&(pParam->sAspects), "get_config (dataspace changed) recommended");
2285939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                } else {
2286939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    memcpy(pParam, &m_sConfigColorAspects, sizeof(m_sConfigColorAspects));
2287939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                    print_debug_color_aspects(&(pParam->sAspects), "get_config");
2288939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan                }
2289ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan                break;
2290ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan            }
2291b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan        case OMX_IndexConfigAndroidVendorExtension:
2292b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan            {
2293b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE);
2294b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan
2295b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan                OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *ext =
2296b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan                    reinterpret_cast<OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *>(configData);
2297b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan                VALIDATE_OMX_VENDOR_EXTENSION_PARAM_DATA(ext);
2298b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan                return get_vendor_extension_config(ext);
2299b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan            }
2300b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan
230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
230261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex);
230361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorUnsupportedIndex;
230461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
230561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
230647e37c4428509524ee576920a98381f3e4872493Nick Pelly
230747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
230847e37c4428509524ee576920a98381f3e4872493Nick Pelly
2309c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan#define extn_equals(param, extn) (!strcmp(param, extn))
2310c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan
231147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
231261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
231361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::GetExtensionIndex
231447e37c4428509524ee576920a98381f3e4872493Nick Pelly
231561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
231661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX GetExtensionIndex method implementaion.  <TBD>
231747e37c4428509524ee576920a98381f3e4872493Nick Pelly
231861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
231961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
232047e37c4428509524ee576920a98381f3e4872493Nick Pelly
232161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
232261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
232347e37c4428509524ee576920a98381f3e4872493Nick Pelly
232461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
232547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_extension_index(OMX_IN OMX_HANDLETYPE      hComp,
232661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_STRING      paramName,
232761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_OUT OMX_INDEXTYPE* indexType)
232847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
23298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
23318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Extension Index in Invalid State");
233261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
2334826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
2335c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.SliceDeliveryMode")) {
233661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode;
233761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorNone;
233861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
2339826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2340826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
2341c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.google.android.index.storeMetaDataInBuffers")) {
23428e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoMetaBufferMode;
2343826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorNone;
234461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
2345826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2346c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.google.android.index.prependSPSPPSToIDRFrames")) {
23478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR;
23488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        return OMX_ErrorNone;
23498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
2350e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2351c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.video.HierStructure")) {
2352e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexHierarchicalStructure;
2353e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2354e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2355e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2356c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.video.LTRCount")) {
2357e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoLTRCount;
2358e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2359e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2360e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2361c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.video.LTRPeriod")) {
2362e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRPeriod;
2363e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2364e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2365e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2366c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.config.video.LTRUse")) {
2367e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoLTRUse;
2368e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2369e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2370e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2371c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.config.video.LTRMark")) {
2372e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoLTRMark;
2373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2374e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2375e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2376c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.config.video.hierplayers")) {
2377bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigNumHierPLayers;
2378e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2379e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2380e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2381c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.video.baselayerid")) {
2382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigBaseLayerId;
2383e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2384e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2386c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.config.video.qp")) {
2387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigQp;
2388e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2391c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.video.sar")) {
2392e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVencAspectRatio;
2393e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2394e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2395e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
2396c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.video.InputBatch")) {
2397e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamBatchSize;
2398e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2399e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2400c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan
2401c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, OMX_QTI_INDEX_PARAM_VIDEO_ENABLE_ROIINFO)) {
2402e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QTIIndexParamVideoEnableRoiInfo;
2403e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2404e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2405ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan
2406c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, OMX_QTI_INDEX_CONFIG_VIDEO_ROIINFO)) {
2407e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        *indexType = (OMX_INDEXTYPE)OMX_QTIIndexConfigVideoRoiInfo;
2408e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorNone;
2409e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
2410c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan
2411ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan    if (extn_equals(paramName, "OMX.google.android.index.describeColorAspects")) {
2412ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        *indexType = (OMX_INDEXTYPE)OMX_QTIIndexConfigDescribeColorAspects;
2413ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        return OMX_ErrorNone;
2414ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan    }
241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
241647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
241747e37c4428509524ee576920a98381f3e4872493Nick Pelly
241847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::GetState
242147e37c4428509524ee576920a98381f3e4872493Nick Pelly
242261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
242361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns the state information back to the caller.<TBD>
242447e37c4428509524ee576920a98381f3e4872493Nick Pelly
242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
242747e37c4428509524ee576920a98381f3e4872493Nick Pelly
242861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
242961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Error None if everything is successful.
243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
243147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_state(OMX_IN OMX_HANDLETYPE  hComp,
243261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_OUT OMX_STATETYPE* state)
243347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
24348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
243561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    *state = m_state;
24368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_state: Returning the state %d",*state);
243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
243847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
243947e37c4428509524ee576920a98381f3e4872493Nick Pelly
244047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
244161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
244261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::ComponentTunnelRequest
244347e37c4428509524ee576920a98381f3e4872493Nick Pelly
244461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
244561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Component Tunnel Request method implementation. <TBD>
244647e37c4428509524ee576920a98381f3e4872493Nick Pelly
244761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
244861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
244947e37c4428509524ee576920a98381f3e4872493Nick Pelly
245061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
245161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
245247e37c4428509524ee576920a98381f3e4872493Nick Pelly
245361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
24548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE  omx_video::component_tunnel_request(OMX_IN OMX_HANDLETYPE  hComp,
245561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                        port,
245661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE        peerComponent,
245761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                    peerPort,
245861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_TUNNELSETUPTYPE* tunnelSetup)
245947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
24608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) hComp, (void) port, (void) peerComponent, (void) peerPort, (void) tunnelSetup;
24618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("ERROR: component_tunnel_request Not Implemented");
246261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
246347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
246447e37c4428509524ee576920a98381f3e4872493Nick Pelly
246547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
246661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
246761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::UseInputBuffer
246847e37c4428509524ee576920a98381f3e4872493Nick Pelly
246961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper function for Use buffer in the input pin
247147e37c4428509524ee576920a98381f3e4872493Nick Pelly
247261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
247361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
247447e37c4428509524ee576920a98381f3e4872493Nick Pelly
247561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
247747e37c4428509524ee576920a98381f3e4872493Nick Pelly
247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
247947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::use_input_buffer(
248061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
248161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
248261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
248461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes,
248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U8*                   buffer)
248647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
24878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) hComp;
248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
248947e37c4428509524ee576920a98381f3e4872493Nick Pelly
249061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned   i = 0;
249161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *buf_addr = NULL;
249247e37c4428509524ee576920a98381f3e4872493Nick Pelly
24938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("use_input_buffer: port = %u appData = %p bytes = %u buffer = %p",(unsigned int)port,appData,(unsigned int)bytes,buffer);
2494e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (bytes < m_sInPortDef.nBufferSize) {
24958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: use_input_buffer: Size Mismatch!! "
2496e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                "bytes[%u] < Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize);
249761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
249847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
249947e37c4428509524ee576920a98381f3e4872493Nick Pelly
250061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_inp_mem_ptr) {
250161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        input_use_buffer = true;
250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \
250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual);
250461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_inp_mem_ptr == NULL) {
25058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr");
250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
250761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2508f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr);
250961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2510826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual);
251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem == NULL) {
25138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem");
251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2516826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
251761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual);
251861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_ion == NULL) {
25198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion");
252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2523826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
252461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
252561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = -1;
2526826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd =-1;
252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].fd_ion_data.fd =-1;
25298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_ion[i].ion_alloc_data.handle = 0;
2530826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
253161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
253247e37c4428509524ee576920a98381f3e4872493Nick Pelly
253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
253447e37c4428509524ee576920a98381f3e4872493Nick Pelly
253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
253661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_inp_bm_count,i)) {
253761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
253947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
254047e37c4428509524ee576920a98381f3e4872493Nick Pelly
254161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i < m_sInPortDef.nBufferCountActual) {
254247e37c4428509524ee576920a98381f3e4872493Nick Pelly
254361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *bufferHdr = (m_inp_mem_ptr + i);
254461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        BITMASK_SET(&m_inp_bm_count,i);
25459f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara        BITMASK_SET(&m_client_in_bm_count,i);
254647e37c4428509524ee576920a98381f3e4872493Nick Pelly
254761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pBuffer           = (OMX_U8 *)buffer;
254861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nSize             = sizeof(OMX_BUFFERHEADERTYPE);
254961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION;
255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nAllocLen         = m_sInPortDef.nBufferSize;
255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pAppPrivate       = appData;
255261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nInputPortIndex   = PORT_INDEX_IN;
255347e37c4428509524ee576920a98381f3e4872493Nick Pelly
255461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!m_use_input_pmem) {
2555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
25566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
255761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
255861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pInput_ion[i].ion_alloc_data,
2559e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    &m_pInput_ion[i].fd_ion_data,
2560e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    secure_session ? SECURE_FLAGS_INPUT_BUFFER : 0);
25616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
256261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
256361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pInput_ion[i].ion_alloc_data,
2564e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    &m_pInput_ion[i].fd_ion_data, ION_FLAG_CACHED);
25656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
256661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_ion[i].ion_device_fd < 0) {
25678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
256861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd;
2571826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
257261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_pmem[i].fd == 0) {
257461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
257561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
257647e37c4428509524ee576920a98381f3e4872493Nick Pelly
257761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_pmem[i] .fd < 0) {
25788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed");
257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
258061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
2581826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].size = m_sInPortDef.nBufferSize;
258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].offset = 0;
25848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2585d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            m_pInput_pmem[i].buffer = NULL;
25868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
25878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pInput_pmem[i].buffer = (unsigned char *)mmap(
25888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    NULL,m_pInput_pmem[i].size,PROT_READ|PROT_WRITE,
258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    MAP_SHARED,m_pInput_pmem[i].fd,0);
259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2591e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (m_pInput_pmem[i].buffer == MAP_FAILED) {
25928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: mmap() Failed");
2593d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    m_pInput_pmem[i].buffer = NULL;
2594e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    close(m_pInput_pmem[i].fd);
2595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
2596e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    free_ion_memory(&m_pInput_ion[i]);
2597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2598e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorInsufficientResources;
2599e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
26008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
26018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
260261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
260361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *>((*bufferHdr)->pAppPrivate);
26048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (unsigned)pParam->offset);
260561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
260661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (pParam) {
260761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].fd = pParam->pmem_fd;
260861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].offset = pParam->offset;
260961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].size = m_sInPortDef.nBufferSize;
261061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].buffer = (unsigned char *)buffer;
26118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("DBG:: pParam->pmem_fd = %u, pParam->offset = %u",
26128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)pParam->pmem_fd, (unsigned int)pParam->offset);
261361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
261461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM i/p UseBuffer case");
261561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorBadParameter;
261661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
261761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
261847e37c4428509524ee576920a98381f3e4872493Nick Pelly
26198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("use_inp:: bufhdr = %p, pBuffer = %p, m_pInput_pmem[i].buffer = %p",
262047e37c4428509524ee576920a98381f3e4872493Nick Pelly                (*bufferHdr), (*bufferHdr)->pBuffer, m_pInput_pmem[i].buffer);
262161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ( dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true) {
26228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: dev_use_buf() Failed for i/p buf");
262361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
262461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
262561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
26268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: All buffers are already used, invalid use_buf call for "
262761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                "index = %u", i);
262861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorInsufficientResources;
262961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
263061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
263161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
263247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
263347e37c4428509524ee576920a98381f3e4872493Nick Pelly
263447e37c4428509524ee576920a98381f3e4872493Nick Pelly
263547e37c4428509524ee576920a98381f3e4872493Nick Pelly
263647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
263761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
263861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::UseOutputBuffer
263947e37c4428509524ee576920a98381f3e4872493Nick Pelly
264061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
264161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper function for Use buffer in the input pin
264247e37c4428509524ee576920a98381f3e4872493Nick Pelly
264361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
264461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
264547e37c4428509524ee576920a98381f3e4872493Nick Pelly
264661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
264761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
264847e37c4428509524ee576920a98381f3e4872493Nick Pelly
264961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
265047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::use_output_buffer(
265161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
265261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
265361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
265461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
265561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes,
265661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U8*                   buffer)
265747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
26588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)port;
265961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
266061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_BUFFERHEADERTYPE       *bufHdr= NULL; // buffer header
266161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned                         i= 0; // Temporary counter
266261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *buf_addr = NULL;
26636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
266461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int align_size;
26656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
266647e37c4428509524ee576920a98381f3e4872493Nick Pelly
26678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("Inside use_output_buffer()");
2668e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (bytes < m_sOutPortDef.nBufferSize) {
26698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: use_output_buffer: Size Mismatch!! "
2670e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                "bytes[%u] < Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sOutPortDef.nBufferSize);
267161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
267247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
267361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
267461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_out_mem_ptr) {
267561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        output_use_buffer = true;
267661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int nBufHdrSize        = 0;
267761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
26788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Allocating First Output Buffer(%u)",(unsigned int)m_sOutPortDef.nBufferCountActual);
267961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nBufHdrSize        = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE);
268061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*
268161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * Memory for output side involves the following:
268261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 1. Array of Buffer Headers
268361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 2. Bitmask array to hold the buffer allocation details
268461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * In order to minimize the memory management entire allocation
268561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * is done in one step.
268661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         */
268761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //OMX Buffer header
268861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_out_mem_ptr = (OMX_BUFFERHEADERTYPE  *)calloc(nBufHdrSize,1);
268961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_out_mem_ptr == NULL) {
26908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_out_mem_ptr");
269161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
269261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
269361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
269461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sOutPortDef.nBufferCountActual);
269561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_pmem == NULL) {
26968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem");
269761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
269861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2699826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
270061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual);
270161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_ion == NULL) {
27028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion");
270361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
270461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2705826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
270661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_out_mem_ptr) {
270761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bufHdr          =  m_out_mem_ptr;
27088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Memory Allocation Succeeded for OUT port%p",m_out_mem_ptr);
270961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Settting the entire storage nicely
271061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) {
271161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nSize              = sizeof(OMX_BUFFERHEADERTYPE);
271261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nVersion.nVersion  = OMX_SPEC_VERSION;
271361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nAllocLen          = bytes;
271461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nFilledLen         = 0;
271561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pAppPrivate        = appData;
271661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nOutputPortIndex   = PORT_INDEX_OUT;
271761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pBuffer            = NULL;
271861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr++;
271961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = -1;
2720826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
272161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd =-1;
272261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].fd_ion_data.fd=-1;
27238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_ion[i].ion_alloc_data.handle = 0;
2724826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
272561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
272661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
27278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: Output buf mem alloc failed[0x%p]",m_out_mem_ptr);
272861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet =  OMX_ErrorInsufficientResources;
272961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
273061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
273161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
273261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) {
273361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_out_bm_count,i)) {
273461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
273561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
273661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
273761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
273861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
273961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (i < m_sOutPortDef.nBufferCountActual) {
274061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            *bufferHdr = (m_out_mem_ptr + i );
274161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pBuffer = (OMX_U8 *)buffer;
274261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pAppPrivate = appData;
274361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
274461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!m_use_output_pmem) {
2745826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
27466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
27478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                align_size = (m_sOutPortDef.nBufferSize + (SZ_4K - 1)) & ~(SZ_4K - 1);
274861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size,
274961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        &m_pOutput_ion[i].ion_alloc_data,
2750e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        &m_pOutput_ion[i].fd_ion_data,
2751e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        secure_session ? SECURE_FLAGS_OUTPUT_BUFFER : 0);
27526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
275361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(
275461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sOutPortDef.nBufferSize,
275561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        &m_pOutput_ion[i].ion_alloc_data,
2756e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        &m_pOutput_ion[i].fd_ion_data, ION_FLAG_CACHED);
27576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
275861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_ion[i].ion_device_fd < 0) {
27598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
276061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorInsufficientResources;
276161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
276261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd;
2763826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
276461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
276547e37c4428509524ee576920a98381f3e4872493Nick Pelly
276661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem[i].fd == 0) {
276761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
276861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
276947e37c4428509524ee576920a98381f3e4872493Nick Pelly
277061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem[i].fd < 0) {
27718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed");
277261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorInsufficientResources;
277361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
2774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
277561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize;
277661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].offset = 0;
27778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2778d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                m_pOutput_pmem[i].buffer = NULL;
27798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if(!secure_session) {
27806eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
27818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
27828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        align_size,PROT_READ|PROT_WRITE,
278361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        MAP_SHARED,m_pOutput_pmem[i].fd,0);
27846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
27858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
27868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE,
278761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        MAP_SHARED,m_pOutput_pmem[i].fd,0);
27886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2789e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    if (m_pOutput_pmem[i].buffer == MAP_FAILED) {
27908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: mmap() Failed");
2791d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                        m_pOutput_pmem[i].buffer = NULL;
2792e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        close(m_pOutput_pmem[i].fd);
2793826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
2794e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        free_ion_memory(&m_pOutput_ion[i]);
2795826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2796e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        return OMX_ErrorInsufficientResources;
2797e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    }
27988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
279961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
280061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO*>((*bufferHdr)->pAppPrivate);
28018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Inside qcom_ext pParam: %p", pParam);
280261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
280361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam) {
28048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (int)pParam->offset);
280561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].fd = pParam->pmem_fd;
280661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].offset = pParam->offset;
280761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize;
280861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].buffer = (unsigned char *)buffer;
280961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
281061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM o/p UseBuffer case");
281161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadParameter;
281261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
281361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                buf_addr = (unsigned char *)buffer;
281461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
281547e37c4428509524ee576920a98381f3e4872493Nick Pelly
28168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("use_out:: bufhdr = %p, pBuffer = %p, m_pOutput_pmem[i].buffer = %p",
281761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (*bufferHdr), (*bufferHdr)->pBuffer, m_pOutput_pmem[i].buffer);
281861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) {
281961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_use_buf Failed for o/p buf");
282061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
282161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
2822417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
2823417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            BITMASK_SET(&m_out_bm_count,i);
282431cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara            BITMASK_SET(&m_client_out_bm_count,i);
282561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
282661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: All o/p Buffers have been Used, invalid use_buf call for "
282761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    "index = %u", i);
282861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
282947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
283061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
283161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
283247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
283347e37c4428509524ee576920a98381f3e4872493Nick Pelly
283447e37c4428509524ee576920a98381f3e4872493Nick Pelly
283547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
283661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
283761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::UseBuffer
283847e37c4428509524ee576920a98381f3e4872493Nick Pelly
283961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
284061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Use Buffer method implementation.
284147e37c4428509524ee576920a98381f3e4872493Nick Pelly
284261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
284361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
284447e37c4428509524ee576920a98381f3e4872493Nick Pelly
284561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
284661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None , if everything successful.
284747e37c4428509524ee576920a98381f3e4872493Nick Pelly
284861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
284947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::use_buffer(
285061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
285161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
285261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
285361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
285461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes,
285561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U8*                   buffer)
285647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
285761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
285861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
28598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Use Buffer in Invalid State");
286061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
286161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
286231cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara
286331cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara    auto_lock l(m_buf_lock);
286461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (port == PORT_INDEX_IN) {
2865f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara        auto_lock l(m_lock);
286661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = use_input_buffer(hComp,bufferHdr,port,appData,bytes,buffer);
286761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (port == PORT_INDEX_OUT) {
286861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = use_output_buffer(hComp,bufferHdr,port,appData,bytes,buffer);
286961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
28708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port);
287161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
287261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
287361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
287461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
287561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (allocate_done()) {
287661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) {
287761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Send the callback now
287861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING);
287961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandStateSet,OMX_StateIdle,
288061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
288161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
288261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
288361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) {
288461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) {
288561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING);
288661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
288761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_IN,
288861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
288961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
289061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
289161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) {
289261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) {
289361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING);
289461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
289561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_OUT,
289661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
289761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_event_port_settings_sent = false;
289861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
289961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
290061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
290161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
290247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
290347e37c4428509524ee576920a98381f3e4872493Nick Pelly
290447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr)
290547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
290661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int index = 0;
290761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *temp_buff ;
290847e37c4428509524ee576920a98381f3e4872493Nick Pelly
290961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bufferHdr == NULL || m_inp_mem_ptr == NULL) {
291061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: free_input: Invalid bufferHdr[%p] or m_inp_mem_ptr[%p]",
291161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufferHdr, m_inp_mem_ptr);
291261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
291361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
291447e37c4428509524ee576920a98381f3e4872493Nick Pelly
2915f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    index = bufferHdr - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr);
2916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
291761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (meta_mode_enable) {
291861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (index < m_sInPortDef.nBufferCountActual) {
291961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index]));
292061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            memset(&meta_buffers[index], 0, sizeof(meta_buffers[index]));
292161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
292261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!mUseProxyColorFormat)
292361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorNone;
29243b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        else {
292561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            c2d_conv.close();
29263b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            opaque_buffer_hdr[index] = NULL;
29273b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
2928826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
2929826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
293061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sInPortDef.nBufferCountActual && !mUseProxyColorFormat &&
293161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) {
29328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("ERROR: dev_free_buf() Failed for i/p buf");
293361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
293461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
293561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sInPortDef.nBufferCountActual && m_pInput_pmem) {
293614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan
29370e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan        if (mUseProxyColorFormat) {
29380e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan            if (m_opq_pmem_q.m_size) {
29390e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan                unsigned long addr, p1, id;
29400e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan                m_opq_pmem_q.pop_entry(&addr, &p1, &id);
29410e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan                DEBUG_PRINT_LOW("Removed entry in m_opq_pmem_q: address %lu", addr);
29420e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan            }
29430e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan        }
29440e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan
294561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[index].fd > 0 && input_use_buffer == false) {
29468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: i/p AllocateBuffer case");
29478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
2948e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size);
29498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else {
29508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                free(m_pInput_pmem[index].buffer);
29518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
295214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_pInput_pmem[index].buffer = NULL;
295361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pInput_pmem[index].fd);
2954826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
295561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pInput_ion[index]);
2956826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
295761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[index].fd = -1;
295861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_pInput_pmem[index].fd > 0 && (input_use_buffer == true &&
295961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_use_input_pmem == OMX_FALSE)) {
29608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: i/p Heap UseBuffer case");
296161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) {
29628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_free_buf() Failed for i/p buf");
296361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
29648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
2965e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size);
296614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan                m_pInput_pmem[index].buffer = NULL;
29678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
296861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pInput_pmem[index].fd);
2969826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
297061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pInput_ion[index]);
2971826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
297261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[index].fd = -1;
297361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
29748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("FreeBuffer:: fd is invalid or i/p PMEM UseBuffer case");
297561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
297647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
297761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
297847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
297947e37c4428509524ee576920a98381f3e4872493Nick Pelly
298047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr)
298147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
298261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int index = 0;
298361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *temp_buff ;
298461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
298561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bufferHdr == NULL || m_out_mem_ptr == NULL) {
298661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: free_output: Invalid bufferHdr[%p] or m_out_mem_ptr[%p]",
298761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufferHdr, m_out_mem_ptr);
298861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
298961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
299061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    index = bufferHdr - m_out_mem_ptr;
299161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
299261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sOutPortDef.nBufferCountActual &&
299361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) {
299461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf");
299561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
299661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
299761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sOutPortDef.nBufferCountActual && m_pOutput_pmem) {
299861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_pmem[index].fd > 0 && output_use_buffer == false ) {
29998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: o/p AllocateBuffer case");
30008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
30018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                munmap (m_pOutput_pmem[index].buffer,
30028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_pOutput_pmem[index].size);
30038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else {
30048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                char *data = (char*) m_pOutput_pmem[index].buffer;
3005f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                native_handle_t *handle = NULL;
3006f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(&handle, data + sizeof(OMX_U32), sizeof(native_handle_t*));
30078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                native_handle_delete(handle);
30088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                free(m_pOutput_pmem[index].buffer);
30098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
301061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pOutput_pmem[index].fd);
3011826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
301261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pOutput_ion[index]);
3013826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
301461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[index].fd = -1;
301561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if ( m_pOutput_pmem[index].fd > 0 && (output_use_buffer == true
301661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && m_use_output_pmem == OMX_FALSE)) {
30178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: o/p Heap UseBuffer case");
301861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) {
301961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf");
302061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
30218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
30228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                munmap (m_pOutput_pmem[index].buffer,
30238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_pOutput_pmem[index].size);
30248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
302561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pOutput_pmem[index].fd);
3026826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
302761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pOutput_ion[index]);
3028826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
302961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[index].fd = -1;
303061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
30318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: fd is invalid or o/p PMEM UseBuffer case");
303261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
303347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
303461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
303547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
3036826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
3037826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::allocate_input_meta_buffer(
303861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_HANDLETYPE       hComp,
303961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE **bufferHdr,
304061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR              appData,
304161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32              bytes)
3042826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
304361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned index = 0;
30447d6e61888e010bbe79878827a3a593699e9a2595Praveen Chavan    if (!bufferHdr || bytes < sizeof(encoder_media_buffer_type)) {
30458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("wrong params allocate_input_meta_buffer Hdr %p len %u",
30468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                bufferHdr, (unsigned int)bytes);
304761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
304861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
304961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3050f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    if (!m_inp_mem_ptr && !mUseProxyColorFormat) {
305161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = meta_buffer_hdr;
3052f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("use meta_buffer_hdr (%p) as m_inp_mem_ptr = %p",
3053f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                meta_buffer_hdr, m_inp_mem_ptr);
3054f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
305561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (index = 0; ((index < m_sInPortDef.nBufferCountActual) &&
3056f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara                meta_buffer_hdr[index].pBuffer &&
3057f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara                BITMASK_PRESENT(&m_inp_bm_count, index)); index++);
3058f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara
305961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index == m_sInPortDef.nBufferCountActual) {
306061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("All buffers are allocated input_meta_buffer");
306161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
306261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
306361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mUseProxyColorFormat) {
306461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (opaque_buffer_hdr[index]) {
306561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr");
306661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
306761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
306861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (allocate_input_buffer(hComp,&opaque_buffer_hdr[index],
306961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    PORT_INDEX_IN,appData,m_sInPortDef.nBufferSize) != OMX_ErrorNone) {
307061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr");
307161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
307261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
307361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
307461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    BITMASK_SET(&m_inp_bm_count,index);
307561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    *bufferHdr = &meta_buffer_hdr[index];
307661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index]));
307761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].nSize = sizeof(meta_buffer_hdr[index]);
30783957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim    meta_buffer_hdr[index].nAllocLen = sizeof(meta_buffers[index]);
307961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].nVersion.nVersion = OMX_SPEC_VERSION;
308061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].nInputPortIndex = PORT_INDEX_IN;
308161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].pBuffer = (OMX_U8*)&meta_buffers[index];
308261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].pAppPrivate = appData;
308361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mUseProxyColorFormat) {
30848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        m_opq_pmem_q.insert_entry((unsigned long)opaque_buffer_hdr[index],0,0);
30858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_HIGH("opaque_buffer_hdr insert %p", opaque_buffer_hdr[index]);
308661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
308761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
3088826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
3089826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
309047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
309161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
309261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateInputBuffer
309347e37c4428509524ee576920a98381f3e4872493Nick Pelly
309461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
309561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper function for allocate buffer in the input pin
309647e37c4428509524ee576920a98381f3e4872493Nick Pelly
309761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
309861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
309947e37c4428509524ee576920a98381f3e4872493Nick Pelly
310061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
310161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
310247e37c4428509524ee576920a98381f3e4872493Nick Pelly
310361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
310447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::allocate_input_buffer(
310561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
310661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
310761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
310861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
310961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes)
311047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
31118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)port;
311261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
311361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned   i = 0;
311447e37c4428509524ee576920a98381f3e4872493Nick Pelly
31158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("allocate_input_buffer()::");
3116e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (bytes < m_sInPortDef.nBufferSize) {
3117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        DEBUG_PRINT_ERROR("ERROR: Buffer size mismatch error: bytes[%u] < nBufferSize[%u]",
31188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize);
311961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
312047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
312147e37c4428509524ee576920a98381f3e4872493Nick Pelly
312261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_inp_mem_ptr) {
31238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__,
31248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountActual);
312561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \
312661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual);
312761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_inp_mem_ptr == NULL) {
31288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr");
312961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
313061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
313161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3132f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr);
313361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual);
313447e37c4428509524ee576920a98381f3e4872493Nick Pelly
313561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem == NULL) {
31368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem");
313761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
313861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
314061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual);
314161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_ion == NULL) {
31428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion");
314361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
314461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3145826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
314661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
314761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = -1;
3148826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
314961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd =-1;
315061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].fd_ion_data.fd =-1;
31518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_ion[i].ion_alloc_data.handle = 0;
3152826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
315361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
315447e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
315547e37c4428509524ee576920a98381f3e4872493Nick Pelly
315661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
315761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_inp_bm_count,i)) {
315861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
315961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
316047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
316161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i < m_sInPortDef.nBufferCountActual) {
316247e37c4428509524ee576920a98381f3e4872493Nick Pelly
316361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *bufferHdr = (m_inp_mem_ptr + i);
316461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nSize             = sizeof(OMX_BUFFERHEADERTYPE);
316561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION;
316661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nAllocLen         = m_sInPortDef.nBufferSize;
316761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pAppPrivate       = appData;
316861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nInputPortIndex   = PORT_INDEX_IN;
31698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        // make fd available to app layer, help with testing
31708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        (*bufferHdr)->pInputPortPrivate = (OMX_PTR)&m_pInput_pmem[i];
317147e37c4428509524ee576920a98381f3e4872493Nick Pelly
3172826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
31736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
317461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
317561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_pInput_ion[i].ion_alloc_data,
3176e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                &m_pInput_ion[i].fd_ion_data,
3177e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                secure_session ? SECURE_FLAGS_INPUT_BUFFER : 0);
31786eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
317961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
318061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_pInput_ion[i].ion_alloc_data,
3181e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                &m_pInput_ion[i].fd_ion_data, ION_FLAG_CACHED);
31826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
318361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_ion[i].ion_device_fd < 0) {
31848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
318561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
318661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
318861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd;
3189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
319061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
319147e37c4428509524ee576920a98381f3e4872493Nick Pelly
319261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[i].fd == 0) {
319361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
319461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
319547e37c4428509524ee576920a98381f3e4872493Nick Pelly
319661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[i].fd < 0) {
31978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed");
319861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
319961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
320161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].size = m_sInPortDef.nBufferSize;
320261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].offset = 0;
320361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3204d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan        m_pInput_pmem[i].buffer = NULL;
32058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if(!secure_session) {
32068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_pmem[i].buffer = (unsigned char *)mmap(NULL,
32078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pInput_pmem[i].size,PROT_READ|PROT_WRITE,
320861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                MAP_SHARED,m_pInput_pmem[i].fd,0);
3209e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_pInput_pmem[i].buffer == MAP_FAILED) {
32108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: mmap FAILED= %d", errno);
3211d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                m_pInput_pmem[i].buffer = NULL;
3212e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                close(m_pInput_pmem[i].fd);
3213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
3214e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                free_ion_memory(&m_pInput_ion[i]);
3215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
3216e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                return OMX_ErrorInsufficientResources;
3217e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
32188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        } else {
32198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //This should only be used for passing reference to source type and
32208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //secure handle fd struct native_handle_t*
32218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*));
3222d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            if (m_pInput_pmem[i].buffer == NULL) {
3223d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                DEBUG_PRINT_ERROR("%s: failed to allocate native-handle", __func__);
3224d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                return OMX_ErrorInsufficientResources;
3225d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            }
32268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
32276eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
322861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pBuffer           = (OMX_U8 *)m_pInput_pmem[i].buffer;
32298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Virtual address in allocate buffer is %p", m_pInput_pmem[i].buffer);
323061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        BITMASK_SET(&m_inp_bm_count,i);
323161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //here change the I/P param here from buf_adr to pmem
323261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!mUseProxyColorFormat && (dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true)) {
32338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for i/p buf");
323461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
323561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
323661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
32378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: All i/p buffers are allocated, invalid allocate buf call"
32388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                "for index [%d]", i);
323961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorInsufficientResources;
324047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
324147e37c4428509524ee576920a98381f3e4872493Nick Pelly
324261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
324347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
324447e37c4428509524ee576920a98381f3e4872493Nick Pelly
324547e37c4428509524ee576920a98381f3e4872493Nick Pelly
324647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
324761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
324861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateOutputBuffer
324947e37c4428509524ee576920a98381f3e4872493Nick Pelly
325061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
325161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper fn for AllocateBuffer in the output pin
325247e37c4428509524ee576920a98381f3e4872493Nick Pelly
325361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
325461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
325547e37c4428509524ee576920a98381f3e4872493Nick Pelly
325661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
325761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything went well.
325847e37c4428509524ee576920a98381f3e4872493Nick Pelly
325961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
326047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::allocate_output_buffer(
326161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
326261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
326361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
326461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
326561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes)
326647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
32678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)port;
326861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
326961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_BUFFERHEADERTYPE       *bufHdr= NULL; // buffer header
327061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned                         i= 0; // Temporary counter
32716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
327261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int align_size;
32736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
32748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("allocate_output_buffer()for %u bytes", (unsigned int)bytes);
327561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_out_mem_ptr) {
327661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int nBufHdrSize        = 0;
32778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__,
32788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountActual);
327961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nBufHdrSize        = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE);
328061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
328161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*
328261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * Memory for output side involves the following:
328361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 1. Array of Buffer Headers
328461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 2. Bitmask array to hold the buffer allocation details
328561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * In order to minimize the memory management entire allocation
328661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * is done in one step.
328761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         */
328861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_out_mem_ptr = (OMX_BUFFERHEADERTYPE  *)calloc(nBufHdrSize,1);
328947e37c4428509524ee576920a98381f3e4872493Nick Pelly
3290826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
329161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual);
329261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_ion == NULL) {
32938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion");
329461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
329561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3296826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
329761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_pmem = (struct pmem *) calloc(sizeof(struct pmem), m_sOutPortDef.nBufferCountActual);
329861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_pmem == NULL) {
32998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem");
330061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
330161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
330261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_out_mem_ptr && m_pOutput_pmem) {
330361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bufHdr          =  m_out_mem_ptr;
330461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
330561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) {
330661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nSize              = sizeof(OMX_BUFFERHEADERTYPE);
330761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nVersion.nVersion  = OMX_SPEC_VERSION;
330861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Set the values when we determine the right HxW param
33093957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim                bufHdr->nAllocLen          = m_sOutPortDef.nBufferSize;
331061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nFilledLen         = 0;
331161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pAppPrivate        = appData;
331261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nOutputPortIndex   = PORT_INDEX_OUT;
33138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                // make fd available to app layer, help with testing
33148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                bufHdr->pOutputPortPrivate = (OMX_PTR)&m_pOutput_pmem[i];
331561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pBuffer            = NULL;
331661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr++;
331761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = -1;
3318826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
331961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd =-1;
332061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].fd_ion_data.fd=-1;
33218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_ion[i].ion_alloc_data.handle = 0;
3322826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
332361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
332461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
332561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() failed for m_out_mem_ptr/m_pOutput_pmem");
332661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
332761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
332861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
332961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("actual cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountActual);
333161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) {
333261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_out_bm_count,i)) {
33338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Found a Free Output Buffer %d",i);
333461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
333561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
333661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
333761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
333861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (i < m_sOutPortDef.nBufferCountActual) {
3339826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
33406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
334161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            align_size = ((m_sOutPortDef.nBufferSize + 4095)/4096) * 4096;
334261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size,
334361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pOutput_ion[i].ion_alloc_data,
3344e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    &m_pOutput_ion[i].fd_ion_data,
3345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    secure_session ? SECURE_FLAGS_OUTPUT_BUFFER : ION_FLAG_CACHED);
33466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
334761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sOutPortDef.nBufferSize,
334861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pOutput_ion[i].ion_alloc_data,
3349e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    &m_pOutput_ion[i].fd_ion_data, ION_FLAG_CACHED);
33506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
335161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_ion[i].ion_device_fd < 0) {
33528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
335361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
335461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
33556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
335661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd;
3357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
335861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
335961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_pmem[i].fd == 0) {
336061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
336161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
336261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
336361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_pmem[i].fd < 0) {
33648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() failed");
336561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
336661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
3367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
336861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize;
336961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].offset = 0;
33708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
3371d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            m_pOutput_pmem[i].buffer = NULL;
33728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
33736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
33748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
33758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    align_size,PROT_READ|PROT_WRITE,
337661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    MAP_SHARED,m_pOutput_pmem[i].fd,0);
33776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
33788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
33798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE,
338061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    MAP_SHARED,m_pOutput_pmem[i].fd,0);
33816eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
3382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (m_pOutput_pmem[i].buffer == MAP_FAILED) {
33838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: MMAP_FAILED in o/p alloc buffer");
3384d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    m_pOutput_pmem[i].buffer = NULL;
3385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    close (m_pOutput_pmem[i].fd);
3386826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
3387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    free_ion_memory(&m_pOutput_ion[i]);
3388826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
3389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    return OMX_ErrorInsufficientResources;
3390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
33918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
33928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            else {
33938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                //This should only be used for passing reference to source type and
33948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                //secure handle fd struct native_handle_t*
33958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*));
3396d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                if (m_pOutput_pmem[i].buffer == NULL) {
3397d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    DEBUG_PRINT_ERROR("%s: failed to allocate native-handle", __func__);
3398d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    return OMX_ErrorInsufficientResources;
3399d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                }
34008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                native_handle_t *handle = native_handle_create(1, 0);
34018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                handle->data[0] = m_pOutput_pmem[i].fd;
34028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                char *data = (char*) m_pOutput_pmem[i].buffer;
34038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 type = 1;
3404f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(data, &type, sizeof(OMX_U32));
3405f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(data + sizeof(OMX_U32), &handle, sizeof(native_handle_t*));
34068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
340747e37c4428509524ee576920a98381f3e4872493Nick Pelly
340861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            *bufferHdr = (m_out_mem_ptr + i );
340961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pBuffer = (OMX_U8 *)m_pOutput_pmem[i].buffer;
341061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pAppPrivate = appData;
341147e37c4428509524ee576920a98381f3e4872493Nick Pelly
341261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_SET(&m_out_bm_count,i);
341347e37c4428509524ee576920a98381f3e4872493Nick Pelly
341461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) {
34158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for o/p buf");
341661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
341761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
341861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
34198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: All o/p buffers are allocated, invalid allocate buf call"
34208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    "for index [%d] actual: %u", i, (unsigned int)m_sOutPortDef.nBufferCountActual);
342161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
342247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
342347e37c4428509524ee576920a98381f3e4872493Nick Pelly
342461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
342547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
342647e37c4428509524ee576920a98381f3e4872493Nick Pelly
342747e37c4428509524ee576920a98381f3e4872493Nick Pelly
342847e37c4428509524ee576920a98381f3e4872493Nick Pelly// AllocateBuffer  -- API Call
342947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
343061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
343161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::AllocateBuffer
343247e37c4428509524ee576920a98381f3e4872493Nick Pelly
343361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
343461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns zero if all the buffers released..
343547e37c4428509524ee576920a98381f3e4872493Nick Pelly
343661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
343761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
343847e37c4428509524ee576920a98381f3e4872493Nick Pelly
343961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
344061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
344147e37c4428509524ee576920a98381f3e4872493Nick Pelly
344261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
344347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::allocate_buffer(OMX_IN OMX_HANDLETYPE                hComp,
344461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
344561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                        port,
344661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                     appData,
344761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                       bytes)
344847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
344947e37c4428509524ee576920a98381f3e4872493Nick Pelly
345061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone; // OMX return type
345147e37c4428509524ee576920a98381f3e4872493Nick Pelly
34528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Allocate buffer of size = %u on port %d", (unsigned int)bytes, (int)port);
345361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
34548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Allocate Buf in Invalid State");
345561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
345661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
345731cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara     auto_lock l(m_buf_lock);
345861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // What if the client calls again.
345961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (port == PORT_INDEX_IN) {
3460f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara        auto_lock l(m_lock);
3461826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
346261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (meta_mode_enable)
346361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = allocate_input_meta_buffer(hComp,bufferHdr,appData,bytes);
346461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else
3465826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
346661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = allocate_input_buffer(hComp,bufferHdr,port,appData,bytes);
346761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (port == PORT_INDEX_OUT) {
346861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = allocate_output_buffer(hComp,bufferHdr,port,appData,bytes);
346961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
34708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port);
347161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
347261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
347361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_LOW("Checking for Output Allocate buffer Done");
347461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
347561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (allocate_done()) {
347661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) {
347761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Send the callback now
347861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING);
347961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandStateSet,OMX_StateIdle,
348061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
348161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
348261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
348361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) {
348461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) {
348561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING);
348661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
348761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_IN,
348861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
348961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
349061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
349161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) {
349261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) {
349361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING);
349461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
349561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_OUT,
349661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
349761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_event_port_settings_sent = false;
349861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
349961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
350061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
35018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Allocate Buffer exit with ret Code %d",eRet);
350261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
350347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
350447e37c4428509524ee576920a98381f3e4872493Nick Pelly
350547e37c4428509524ee576920a98381f3e4872493Nick Pelly
350647e37c4428509524ee576920a98381f3e4872493Nick Pelly// Free Buffer - API call
350747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
350861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
350961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::FreeBuffer
351047e37c4428509524ee576920a98381f3e4872493Nick Pelly
351161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
351247e37c4428509524ee576920a98381f3e4872493Nick Pelly
351361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
351461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
351547e37c4428509524ee576920a98381f3e4872493Nick Pelly
351661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
351761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
351847e37c4428509524ee576920a98381f3e4872493Nick Pelly
351961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
352047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::free_buffer(OMX_IN OMX_HANDLETYPE         hComp,
352161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                 port,
352261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
352347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
35248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
352561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
352661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int nPortIndex;
352761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("In for encoder free_buffer");
352931cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara    auto_lock l(m_buf_lock);
353031cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara    if (port == PORT_INDEX_OUT) { //client called freebuffer, clearing client buffer bitmask right away to avoid use after free
353131cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara        nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr;
353231cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara        if(BITMASK_PRESENT(&m_client_out_bm_count, nPortIndex))
353331cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara            BITMASK_CLEAR(&m_client_out_bm_count,nPortIndex);
35349f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara    } else if (port == PORT_INDEX_IN) {
35359f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara        nPortIndex = buffer - (meta_mode_enable?meta_buffer_hdr:m_inp_mem_ptr);
35369f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara        if(BITMASK_PRESENT(&m_client_in_bm_count, nPortIndex))
35379f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara            BITMASK_CLEAR(&m_client_in_bm_count,nPortIndex);
353831cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara    }
353961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateIdle &&
354061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) {
35418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW(" free buffer while Component in Loading pending");
354261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if ((m_sInPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_IN)||
354361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (m_sOutPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_OUT)) {
35448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Free Buffer while port %u disabled", (unsigned int)port);
354561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (m_state == OMX_StateExecuting || m_state == OMX_StatePause) {
35468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,ports need to be disabled");
354761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        post_event(OMX_EventError,
354861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ErrorPortUnpopulated,
354961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMPONENT_GENERATE_EVENT);
355061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return eRet;
355161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
35528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,port lost Buffers");
355361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        post_event(OMX_EventError,
355461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ErrorPortUnpopulated,
355561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMPONENT_GENERATE_EVENT);
355661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
355761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
355861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (port == PORT_INDEX_IN) {
355961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // check if the buffer is valid
3560f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        nPortIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr);
356161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("free_buffer on i/p port - Port idx %u, actual cnt %u",
35638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                nPortIndex, (unsigned int)m_sInPortDef.nBufferCountActual);
3564f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara        pthread_mutex_lock(&m_lock);
3565417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan        if (nPortIndex < m_sInPortDef.nBufferCountActual &&
3566417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                BITMASK_PRESENT(&m_inp_bm_count, nPortIndex)) {
356761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Clear the bit associated with it.
356861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR(&m_inp_bm_count,nPortIndex);
3569f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara            pthread_mutex_unlock(&m_lock);
357061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_input_buffer (buffer);
357161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sInPortDef.bPopulated = OMX_FALSE;
357261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
357361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Free the Buffer Header*/
3574b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan            if (release_input_done()) {
357561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                input_use_buffer = false;
3576b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan                // "m_inp_mem_ptr" may point to "meta_buffer_hdr" in some modes,
3577b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan                // in which case, it was not explicitly allocated
3578b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan                if (m_inp_mem_ptr && m_inp_mem_ptr != meta_buffer_hdr) {
35798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_inp_mem_ptr");
358061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free (m_inp_mem_ptr);
358161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3582b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan                m_inp_mem_ptr = NULL;
358361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pInput_pmem) {
35848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pInput_pmem");
358561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pInput_pmem);
358661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pInput_pmem = NULL;
358761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
358961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pInput_ion) {
35908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pInput_ion");
359161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pInput_ion);
359261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pInput_ion = NULL;
359361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
359561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
359661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
3597f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara            pthread_mutex_unlock(&m_lock);
35988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: free_buffer ,Port Index Invalid");
359961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorBadPortIndex;
360047e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
360161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
360261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING)
360361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                && release_input_done()) {
36048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("MOVING TO DISABLED STATE");
360561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING);
360661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_CommandPortDisable,
360761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    PORT_INDEX_IN,
360861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
360947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
361061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (port == PORT_INDEX_OUT) {
361161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // check if the buffer is valid
361261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr;
361361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("free_buffer on o/p port - Port idx %u, actual cnt %u",
36158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                nPortIndex, (unsigned int)m_sOutPortDef.nBufferCountActual);
3616417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan        if (nPortIndex < m_sOutPortDef.nBufferCountActual &&
3617417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                BITMASK_PRESENT(&m_out_bm_count, nPortIndex)) {
361861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Clear the bit associated with it.
361961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR(&m_out_bm_count,nPortIndex);
362061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sOutPortDef.bPopulated = OMX_FALSE;
362161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_output_buffer (buffer);
362261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
362361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (release_output_done()) {
362461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                output_use_buffer = false;
362561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_out_mem_ptr) {
36268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_out_mem_ptr");
362761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free (m_out_mem_ptr);
362861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_out_mem_ptr = NULL;
362961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
363061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem) {
36318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pOutput_pmem");
363261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pOutput_pmem);
363361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem = NULL;
363461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3635826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
363661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_ion) {
36378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pOutput_ion");
363861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pOutput_ion);
363961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_ion = NULL;
364061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3641826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
364261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
364361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
36448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: free_buffer , Port Index Invalid");
364561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorBadPortIndex;
364661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
364761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING)
364861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                && release_output_done() ) {
36498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer : If any Disable event pending,post it");
365061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("MOVING TO DISABLED STATE");
365261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING);
365361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_CommandPortDisable,
365461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    PORT_INDEX_OUT,
365561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
365661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
365761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
36586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    } else {
365961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
366061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
366161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if ((eRet == OMX_ErrorNone) &&
366261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) {
366361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (release_done()) {
366461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_stop() != 0) {
36658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_stop() FAILED");
366661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorHardware;
366761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
366861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Send the callback now
366961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR((&m_flags),OMX_COMPONENT_LOADING_PENDING);
367061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_CommandStateSet, OMX_StateLoaded,
367161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
367261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
3673f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_HIGH("in free buffer, release not done, need to free more buffers input %" PRIx64" output %" PRIx64,
367461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_out_bm_count, m_inp_bm_count);
367561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
367647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
367747e37c4428509524ee576920a98381f3e4872493Nick Pelly
367861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
367947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
368047e37c4428509524ee576920a98381f3e4872493Nick Pelly
368147e37c4428509524ee576920a98381f3e4872493Nick Pelly
368247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
368361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
368461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::EmptyThisBuffer
368547e37c4428509524ee576920a98381f3e4872493Nick Pelly
368661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
368761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   This routine is used to push the encoded video frames to
368861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   the video decoder.
368947e37c4428509524ee576920a98381f3e4872493Nick Pelly
369061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
369161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
369247e37c4428509524ee576920a98381f3e4872493Nick Pelly
369361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
369461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything went successful.
369547e37c4428509524ee576920a98381f3e4872493Nick Pelly
369661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
369747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::empty_this_buffer(OMX_IN OMX_HANDLETYPE         hComp,
369861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
369947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
370061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret1 = OMX_ErrorNone;
370161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int nBufferIndex ;
370261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3703e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    dev_set_extradata_cookie((void *)buffer);
37048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("ETB: buffer = %p, buffer->pBuffer[%p]", buffer, buffer->pBuffer);
370514a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan    if (m_state != OMX_StateExecuting &&
370614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StatePause &&
370714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StateIdle) {
37088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Empty this buffer in Invalid State");
370961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
371061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
37116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
371261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL || (buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) {
37138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> buffer is null or buffer size is invalid");
371461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
371561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
37166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
371761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) {
37188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> OMX Version Invalid");
371961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorVersionMismatch;
372061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
372161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
372261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nInputPortIndex != (OMX_U32)PORT_INDEX_IN) {
37238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Bad port index to call empty_this_buffer");
372461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadPortIndex;
372561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
372661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_sInPortDef.bEnabled) {
37278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Cannot call empty_this_buffer while I/P port is disabled");
372861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
372961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
373061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3731f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    nBufferIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr);
373261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
373361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (nBufferIndex > m_sInPortDef.nBufferCountActual ) {
37348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETB: Invalid buffer index[%d]", nBufferIndex);
373561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
373661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
373761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
373861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_count++;
37398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("DBG: i/p nTimestamp = %u", (unsigned)buffer->nTimeStamp);
37408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    post_event ((unsigned long)hComp,(unsigned long)buffer,m_input_msg_id);
374161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
374261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
374347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
374461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
374561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::empty_this_buffer_proxy
374647e37c4428509524ee576920a98381f3e4872493Nick Pelly
374761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
374861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   This routine is used to push the encoded video frames to
374961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   the video decoder.
375047e37c4428509524ee576920a98381f3e4872493Nick Pelly
375161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
375261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
375347e37c4428509524ee576920a98381f3e4872493Nick Pelly
375461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
375561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything went successful.
375647e37c4428509524ee576920a98381f3e4872493Nick Pelly
375761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
37588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE  omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE  hComp,
375961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
376047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
37618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
376261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *pmem_data_buf = NULL;
376361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int push_cnt = 0;
37649ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    unsigned nBufIndex = 0;
376561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
37669ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    encoder_media_buffer_type *media_buffer = NULL;
376761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
376961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int fd = 0;
37706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
37718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("ETBProxy: buffer->pBuffer[%p]", buffer->pBuffer);
377261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL) {
37738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid buffer[%p]", buffer);
377461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
377561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
37769ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan
37779ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    // Buffer sanity checks
37789ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (meta_mode_enable && !mUsesColorConversion) {
37799ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        //For color-conversion case, we have an internal buffer and not a meta buffer
378061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool met_error = false;
37819ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        nBufIndex = buffer - meta_buffer_hdr;
37829ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        if (nBufIndex >= m_sInPortDef.nBufferCountActual) {
37838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid meta-bufIndex = %u", nBufIndex);
37849ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            return OMX_ErrorBadParameter;
37859ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
37869ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        media_buffer = (encoder_media_buffer_type *)meta_buffer_hdr[nBufIndex].pBuffer;
378761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (media_buffer) {
378861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (media_buffer->buffer_type != kMetadataBufferTypeCameraSource &&
37899ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    media_buffer->buffer_type != kMetadataBufferTypeGrallocSource) {
379061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                met_error = true;
37919ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            } else {
379261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) {
379361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (media_buffer->meta_handle == NULL)
379461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        met_error = true;
3795e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    else {
3796e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        int nFds = media_buffer->meta_handle->numFds,
3797e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            nInt = media_buffer->meta_handle->numInts;
3798e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        met_error = ((nFds == 1 && nInt >= 2) /*normal*/ ||
3799e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                (nFds < 16 && nInt >= nFds*3) /*batch*/) ? false : true;
3800e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        if (met_error) {
3801e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            DEBUG_PRINT_ERROR("Unbalanced fds in handle: fds=%d ints=%d",
3802e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                    nFds, nInt);
3803e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        }
3804e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    }
380561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
380661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
380761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else
3808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            met_error = true;
380961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (met_error) {
38108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: Unkown source/metahandle in ETB call");
38118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
381261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
3813826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
38149ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    } else {
38159ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        nBufIndex = buffer - ((OMX_BUFFERHEADERTYPE *)m_inp_mem_ptr);
38169ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        if (nBufIndex >= m_sInPortDef.nBufferCountActual) {
38178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid bufIndex = %u", nBufIndex);
38189ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            return OMX_ErrorBadParameter;
38199ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
38209ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    }
38219ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan
38229ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    pending_input_buffers++;
38239ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (input_flush_progress == true) {
38248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)buffer,0,
38259ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                OMX_COMPONENT_GENERATE_EBD);
38268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxy: Input flush in progress");
38279ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        return OMX_ErrorNone;
38289ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    }
38299ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _MSM8974_
38309ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (!meta_mode_enable) {
38319ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        fd = m_pInput_pmem[nBufIndex].fd;
38329ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    }
38339ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#endif
38349ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _ANDROID_ICS_
3835e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (meta_mode_enable && !mUsesColorConversion) {
3836e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        // Camera or Gralloc-source meta-buffers queued with encodeable color-format
383761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem Input_pmem_info;
3838f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (!media_buffer) {
3839f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_ERROR("%s: invalid media_buffer",__FUNCTION__);
3840f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return OMX_ErrorBadParameter;
3841f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
384261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) {
384361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
384461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = media_buffer->meta_handle->data[0];
38456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
384661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fd = Input_pmem_info.fd;
38476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
384861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = media_buffer->meta_handle->data[1];
384961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = media_buffer->meta_handle->data[2];
38509ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            DEBUG_PRINT_LOW("ETB (meta-Camera) fd = %d, offset = %d, size = %d",
38519ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    Input_pmem_info.fd, Input_pmem_info.offset,
385261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem_info.size);
385361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
385461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle;
385561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
385661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = handle->fd;
38576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
385861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fd = Input_pmem_info.fd;
38596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
386061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = 0;
386161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = handle->size;
38629ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            DEBUG_PRINT_LOW("ETB (meta-gralloc) fd = %d, offset = %d, size = %d",
38639ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    Input_pmem_info.fd, Input_pmem_info.offset,
38649ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    Input_pmem_info.size);
386561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3866e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,nBufIndex) != true) {
38678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_use_buf");
38688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
386961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
387061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
3871d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan    } else if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer)
3872826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
3873d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan    if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer)
3874826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
3875c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    {
38768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Heap UseBuffer case, so memcpy the data");
387714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan
387831cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara        auto_lock l(m_buf_lock);
3879c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        pmem_data_buf = (OMX_U8 *)m_pInput_pmem[nBufIndex].buffer;
38809f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara        if (pmem_data_buf && BITMASK_PRESENT(&m_client_in_bm_count, nBufIndex)) {
388114a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            memcpy (pmem_data_buf, (buffer->pBuffer + buffer->nOffset),
388214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan                    buffer->nFilledLen);
388314a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan        }
3884c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        DEBUG_PRINT_LOW("memcpy() done in ETBProxy for i/p Heap UseBuf");
3885c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    } else if (mUseProxyColorFormat) {
38869ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        // Gralloc-source buffers with color-conversion
3887c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        fd = m_pInput_pmem[nBufIndex].fd;
38888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("ETB (color-converted) fd = %d, size = %u",
38898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                fd, (unsigned int)buffer->nFilledLen);
3890c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    } else if (m_sInPortDef.format.video.eColorFormat ==
38910b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    OMX_COLOR_FormatYUV420SemiPlanar) {
3892c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            //For the case where YUV420SP buffers are qeueued to component
3893c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            //by sources other than camera (Apps via MediaCodec), conversion
3894c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            //to vendor flavoured NV12 color format is required.
3895c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            if (!dev_color_align(buffer, m_sInPortDef.format.video.nFrameWidth,
3896c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                                    m_sInPortDef.format.video.nFrameHeight)) {
3897c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                    DEBUG_PRINT_ERROR("Failed to adjust buffer color");
38988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    post_event((unsigned long)buffer, 0, OMX_COMPONENT_GENERATE_EBD);
3899c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                    return OMX_ErrorUndefined;
3900c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            }
3901c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    }
3902e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (m_sExtraData && !dev_handle_input_extradata((void *)buffer, fd)) {
3903e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_ERROR("Failed to parse input extradata\n");
3904e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _ANDROID_ICS_
3905e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        omx_release_meta_buffer(buffer);
3906e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
3907e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
3908e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        /*Generate an async error and move to invalid state*/
3909e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        pending_input_buffers--;
3910e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return OMX_ErrorBadParameter;
3911e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
39126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
391361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_empty_buf(buffer, pmem_data_buf,nBufIndex,fd) != true)
3914826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
39150b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    if (dev_empty_buf(buffer, pmem_data_buf,0,0) != true)
3916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
39170b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    {
39188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxy: dev_empty_buf failed");
3919826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
39200b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        omx_release_meta_buffer(buffer);
3921826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
39228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
39230b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        /*Generate an async error and move to invalid state*/
39240b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        pending_input_buffers--;
3925f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (hw_overload) {
3926f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return OMX_ErrorInsufficientResources;
3927f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
39280b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        return OMX_ErrorBadParameter;
39290b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    }
393061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
393147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
393247e37c4428509524ee576920a98381f3e4872493Nick Pelly
393347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
393461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
393561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::FillThisBuffer
393647e37c4428509524ee576920a98381f3e4872493Nick Pelly
393761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
393861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   IL client uses this method to release the frame buffer
393961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   after displaying them.
394047e37c4428509524ee576920a98381f3e4872493Nick Pelly
394161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
394261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
394347e37c4428509524ee576920a98381f3e4872493Nick Pelly
394461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
394561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
394647e37c4428509524ee576920a98381f3e4872493Nick Pelly
394761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
394847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::fill_this_buffer(OMX_IN OMX_HANDLETYPE  hComp,
394961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
395047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
39518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("FTB: buffer->pBuffer[%p]", buffer->pBuffer);
395214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan    if (m_state != OMX_StateExecuting &&
395314a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StatePause &&
395414a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StateIdle) {
39558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: FTB in Invalid State");
395661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
395761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
395861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
395961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL ||(buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) {
39608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Invalid buffer or size");
396161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
396261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
396361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
396461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) {
39658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->OMX Version Invalid");
396661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorVersionMismatch;
396761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
396861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
396961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nOutputPortIndex != (OMX_U32)PORT_INDEX_OUT) {
39708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Bad port index");
397161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadPortIndex;
397261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
397361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
397461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_sOutPortDef.bEnabled) {
39758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->port is disabled");
397661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
397761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
397861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    post_event((unsigned long) hComp, (unsigned long)buffer,OMX_COMPONENT_GENERATE_FTB);
398061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
398147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
398247e37c4428509524ee576920a98381f3e4872493Nick Pelly
398347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
398461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
398561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::fill_this_buffer_proxy
398647e37c4428509524ee576920a98381f3e4872493Nick Pelly
398761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
398861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   IL client uses this method to release the frame buffer
398961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   after displaying them.
399047e37c4428509524ee576920a98381f3e4872493Nick Pelly
399161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
399261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
399347e37c4428509524ee576920a98381f3e4872493Nick Pelly
399461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
399561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
399647e37c4428509524ee576920a98381f3e4872493Nick Pelly
399761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
399847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::fill_this_buffer_proxy(
399961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE        hComp,
400061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd)
400147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
40028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
400361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *pmem_data_buf = NULL;
400461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE nRet = OMX_ErrorNone;
400561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("FTBProxy: bufferAdd->pBuffer[%p]", bufferAdd->pBuffer);
400761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if (bufferAdd == NULL || ((bufferAdd - m_out_mem_ptr) >= (int)m_sOutPortDef.nBufferCountActual) ) {
40098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: FTBProxy: Invalid i/p params");
401061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
401161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
401261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
401361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_output_buffers++;
401461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Return back the output buffer to client*/
401561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if ( m_sOutPortDef.bEnabled != OMX_TRUE || output_flush_progress == true) {
40168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("o/p port is Disabled or Flush in Progress");
40178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)bufferAdd,0,
401847e37c4428509524ee576920a98381f3e4872493Nick Pelly                OMX_COMPONENT_GENERATE_FBD);
401961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorNone;
402061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
402147e37c4428509524ee576920a98381f3e4872493Nick Pelly
402261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (output_use_buffer && !m_use_output_pmem) {
40238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Heap UseBuffer case");
402461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pmem_data_buf = (OMX_U8 *)m_pOutput_pmem[bufferAdd - m_out_mem_ptr].buffer;
402561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
402661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
402761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_fill_buf(bufferAdd, pmem_data_buf,(bufferAdd - m_out_mem_ptr),m_pOutput_pmem[bufferAdd - m_out_mem_ptr].fd) != true) {
40288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: dev_fill_buf() Failed");
40298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)bufferAdd,0,OMX_COMPONENT_GENERATE_FBD);
403061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pending_output_buffers--;
403161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
403261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
403361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
403461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
403547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
403647e37c4428509524ee576920a98381f3e4872493Nick Pelly
403747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
403861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
403961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::SetCallbacks
404047e37c4428509524ee576920a98381f3e4872493Nick Pelly
404161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
404261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Set the callbacks.
404347e37c4428509524ee576920a98381f3e4872493Nick Pelly
404461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
404561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
404647e37c4428509524ee576920a98381f3e4872493Nick Pelly
404761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
404861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
404947e37c4428509524ee576920a98381f3e4872493Nick Pelly
405061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
405147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::set_callbacks(OMX_IN OMX_HANDLETYPE        hComp,
405261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_CALLBACKTYPE* callbacks,
405361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR             appData)
405447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
40558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
405661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pCallbacks       = *callbacks;
40578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Callbacks Set %p %p %p",m_pCallbacks.EmptyBufferDone,\
405861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EventHandler,m_pCallbacks.FillBufferDone);
405961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_app_data =    appData;
406061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
406147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
406247e37c4428509524ee576920a98381f3e4872493Nick Pelly
406347e37c4428509524ee576920a98381f3e4872493Nick Pelly
406447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
406561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
406661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::UseEGLImage
406747e37c4428509524ee576920a98381f3e4872493Nick Pelly
406861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
406961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Use EGL Image method implementation <TBD>.
407047e37c4428509524ee576920a98381f3e4872493Nick Pelly
407161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
407261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
407347e37c4428509524ee576920a98381f3e4872493Nick Pelly
407461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
407561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Not Implemented error.
407647e37c4428509524ee576920a98381f3e4872493Nick Pelly
407761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
40788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE  omx_video::use_EGL_image(OMX_IN OMX_HANDLETYPE   hComp,
407961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
408061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                        port,
408161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                     appData,
408261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN void*                      eglImage)
408347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
40848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)bufferHdr, (void)port, (void)appData, (void)eglImage;
40858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("ERROR: use_EGL_image:  Not Implemented");
408661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
408747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
408847e37c4428509524ee576920a98381f3e4872493Nick Pelly
408947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
409061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
409161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ComponentRoleEnum
409247e37c4428509524ee576920a98381f3e4872493Nick Pelly
409361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
409461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Component Role Enum method implementation.
409547e37c4428509524ee576920a98381f3e4872493Nick Pelly
409661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
409761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
409847e37c4428509524ee576920a98381f3e4872493Nick Pelly
409961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
410061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything is successful.
410161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
410247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::component_role_enum(OMX_IN OMX_HANDLETYPE hComp,
410361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_OUT OMX_U8*        role,
410461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32        index)
410547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
41068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
410761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
410861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
410961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
411061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
41118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
411261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
411361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
411461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
411561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
411661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
411761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.h263",OMX_MAX_STRINGNAME_SIZE);
41188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
411961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
412161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
412261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
412361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
412461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
412561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.avc",OMX_MAX_STRINGNAME_SIZE);
41268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
412761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
412961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
413061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
413161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.vc1",OMX_MAX_STRINGNAME_SIZE)) {
413261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
413361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.vc1",OMX_MAX_STRINGNAME_SIZE);
41348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
413561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
413761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
413861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
413961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
414061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
414161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
414261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
41438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
414461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
414561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
414661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
414761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
414861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
414961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE);
41508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
415161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
415361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
415461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
415561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
415661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
415761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
41588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
415961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
416161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
416261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
416361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
41646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
416561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) {
416661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
416761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE);
41688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
416961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
41708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
417161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
417261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
417361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
41746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
4175e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc", OMX_MAX_STRINGNAME_SIZE)) {
4176f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if ((0 == index) && role) {
4177f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            strlcpy((char *)role, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE);
4178f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s", role);
4179f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } else {
4180f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
4181f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            eRet = OMX_ErrorNoMore;
4182f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
4183f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
418461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    else {
41858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Querying Role on Unknown Component");
418661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorInvalidComponentName;
418761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
418861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
418947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
419047e37c4428509524ee576920a98381f3e4872493Nick Pelly
419147e37c4428509524ee576920a98381f3e4872493Nick Pelly
419247e37c4428509524ee576920a98381f3e4872493Nick Pelly
419347e37c4428509524ee576920a98381f3e4872493Nick Pelly
419447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
419561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
419661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateDone
419747e37c4428509524ee576920a98381f3e4872493Nick Pelly
419861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
419961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if entire buffer pool is allocated by IL Client or not.
420061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Need this to move to IDLE state.
420147e37c4428509524ee576920a98381f3e4872493Nick Pelly
420261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
420361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
420447e37c4428509524ee576920a98381f3e4872493Nick Pelly
420561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
420661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false.
420747e37c4428509524ee576920a98381f3e4872493Nick Pelly
420861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
420947e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_done(void)
421047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
421161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
421261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet_In = false;
421361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet_Out = false;
421447e37c4428509524ee576920a98381f3e4872493Nick Pelly
421561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bRet_In = allocate_input_done();
421661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bRet_Out = allocate_output_done();
421747e37c4428509524ee576920a98381f3e4872493Nick Pelly
421861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bRet_In && bRet_Out) {
421961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
422061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
422147e37c4428509524ee576920a98381f3e4872493Nick Pelly
422261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
422347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
422447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
422561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
422661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateInputDone
422747e37c4428509524ee576920a98381f3e4872493Nick Pelly
422861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
422961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if I/P buffer pool is allocated by IL Client or not.
423047e37c4428509524ee576920a98381f3e4872493Nick Pelly
423161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
423261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
423347e37c4428509524ee576920a98381f3e4872493Nick Pelly
423461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
423561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false.
423647e37c4428509524ee576920a98381f3e4872493Nick Pelly
423761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
423847e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_input_done(void)
423947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
424061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
424161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned i=0;
424247e37c4428509524ee576920a98381f3e4872493Nick Pelly
424361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr == NULL) {
424461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return bRet;
424561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
424661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr ) {
424761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; i<m_sInPortDef.nBufferCountActual; i++) {
424861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_ABSENT(&m_inp_bm_count,i)) {
424961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
425061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
425161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
425261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
425361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i==m_sInPortDef.nBufferCountActual) {
425461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
425561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
425661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i==m_sInPortDef.nBufferCountActual && m_sInPortDef.bEnabled) {
425761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sInPortDef.bPopulated = OMX_TRUE;
425861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
425947e37c4428509524ee576920a98381f3e4872493Nick Pelly    return bRet;
426047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
426147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
426261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
426361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateOutputDone
426447e37c4428509524ee576920a98381f3e4872493Nick Pelly
426561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
426661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if entire O/P buffer pool is allocated by IL Client or not.
426747e37c4428509524ee576920a98381f3e4872493Nick Pelly
426861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
426961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
427047e37c4428509524ee576920a98381f3e4872493Nick Pelly
427161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
427261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false.
427347e37c4428509524ee576920a98381f3e4872493Nick Pelly
427461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
427547e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_output_done(void)
427647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
427761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
427861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned j=0;
427947e37c4428509524ee576920a98381f3e4872493Nick Pelly
428061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr == NULL) {
428161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return bRet;
428261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
428347e37c4428509524ee576920a98381f3e4872493Nick Pelly
428461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr ) {
428561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; j<m_sOutPortDef.nBufferCountActual; j++) {
428661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_ABSENT(&m_out_bm_count,j)) {
428761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
428861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
428961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
429047e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
429147e37c4428509524ee576920a98381f3e4872493Nick Pelly
429261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (j==m_sOutPortDef.nBufferCountActual) {
429361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
429461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
429547e37c4428509524ee576920a98381f3e4872493Nick Pelly
429661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (j==m_sOutPortDef.nBufferCountActual && m_sOutPortDef.bEnabled) {
429761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.bPopulated = OMX_TRUE;
429861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
429961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
430047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
430147e37c4428509524ee576920a98381f3e4872493Nick Pelly
430247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
430361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
430461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ReleaseDone
430547e37c4428509524ee576920a98381f3e4872493Nick Pelly
430661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
430761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if IL client has released all the buffers.
430847e37c4428509524ee576920a98381f3e4872493Nick Pelly
430961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
431061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
431147e37c4428509524ee576920a98381f3e4872493Nick Pelly
431261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
431361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
431447e37c4428509524ee576920a98381f3e4872493Nick Pelly
431561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
431647e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_done(void)
431747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
431861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
43198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Inside release_done()");
432061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (release_input_done()) {
432161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (release_output_done()) {
432261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bRet = true;
432361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
432461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
432561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
432647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
432747e37c4428509524ee576920a98381f3e4872493Nick Pelly
432847e37c4428509524ee576920a98381f3e4872493Nick Pelly
432947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
433061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
433161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ReleaseOutputDone
433247e37c4428509524ee576920a98381f3e4872493Nick Pelly
433361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
433461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if IL client has released all the buffers.
433547e37c4428509524ee576920a98381f3e4872493Nick Pelly
433661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
433761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
433847e37c4428509524ee576920a98381f3e4872493Nick Pelly
433961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
434061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
434147e37c4428509524ee576920a98381f3e4872493Nick Pelly
434261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
434347e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_output_done(void)
434447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
434561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
434661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned i=0,j=0;
434761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Inside release_output_done()");
434961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr) {
435061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; j<m_sOutPortDef.nBufferCountActual; j++) {
435161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_out_bm_count,j)) {
435261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
435361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
435461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
435561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (j==m_sOutPortDef.nBufferCountActual) {
435661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bRet = true;
435761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
435861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
435961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
436061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
436161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
436247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
436347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
436461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
436561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ReleaseInputDone
436647e37c4428509524ee576920a98381f3e4872493Nick Pelly
436761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
436861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if IL client has released all the buffers.
436947e37c4428509524ee576920a98381f3e4872493Nick Pelly
437061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
437161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
437247e37c4428509524ee576920a98381f3e4872493Nick Pelly
437361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
437461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
437547e37c4428509524ee576920a98381f3e4872493Nick Pelly
437661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
437747e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_input_done(void)
437847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
437961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
438061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned i=0,j=0;
438161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Inside release_input_done()");
438361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr) {
438461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; j<m_sInPortDef.nBufferCountActual; j++) {
438561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( BITMASK_PRESENT(&m_inp_bm_count,j)) {
438661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
438761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
438861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
438961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (j==m_sInPortDef.nBufferCountActual) {
439061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bRet = true;
439161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
439261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
439361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
439461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
439561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
439647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
439747e37c4428509524ee576920a98381f3e4872493Nick Pelly
439847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_buffer_done(OMX_HANDLETYPE hComp,
439961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE * buffer)
440047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
44016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
44026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    int index = buffer - m_out_mem_ptr;
44036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
44048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("fill_buffer_done: buffer->pBuffer[%p], flags=0x%x size = %u",
44058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            buffer->pBuffer, (unsigned)buffer->nFlags, (unsigned int)buffer->nFilledLen);
44068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if (buffer == NULL || ((buffer - m_out_mem_ptr) > (int)m_sOutPortDef.nBufferCountActual)) {
440761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
440861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
440947e37c4428509524ee576920a98381f3e4872493Nick Pelly
441061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_output_buffers--;
441147e37c4428509524ee576920a98381f3e4872493Nick Pelly
44128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(!secure_session) {
4413e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        extra_data_handle.create_extra_data(buffer);
44146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
4415e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) {
4416e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_LOW("parsing extradata");
4417e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            extra_data_handle.parse_extra_data(buffer);
4418e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
44196eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
44208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
44218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
442261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* For use buffer we need to copy the data */
442361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_pCallbacks.FillBufferDone) {
442461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (buffer->nFilledLen > 0) {
442561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_fbd_count++;
4426826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
44278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if (dev_get_output_log_flag()) {
44288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                dev_output_log_buffers((const char*)buffer->pBuffer, buffer->nFilledLen);
442961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
443061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
443161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) {
4432e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (!dev_handle_output_extradata((void *)buffer))
4433e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_ERROR("Failed to parse output extradata");
44348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
44358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            dev_extradata_log_buffers((char *)(((unsigned long)buffer->pBuffer + buffer->nOffset +
44368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        buffer->nFilledLen + 3) & (~3)));
443761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
443861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.FillBufferDone (hComp,m_app_data,buffer);
443961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
444061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
444161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
444261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
444347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
444447e37c4428509524ee576920a98381f3e4872493Nick Pelly
444547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::empty_buffer_done(OMX_HANDLETYPE         hComp,
444661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE* buffer)
444747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
444861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int buffer_index  = -1;
444961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4450f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    buffer_index = buffer - ((mUseProxyColorFormat && !mUsesColorConversion) ? meta_buffer_hdr : m_inp_mem_ptr);
44518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("empty_buffer_done: buffer[%p]", buffer);
445261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL ||
4453f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            ((buffer_index > (int)m_sInPortDef.nBufferCountActual))) {
44548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR in empty_buffer_done due to index buffer");
445561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
445661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
445761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
445861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_input_buffers--;
445961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4460f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    if (mUseProxyColorFormat &&
4461f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        (buffer_index >= 0 && (buffer_index < (int)m_sInPortDef.nBufferCountActual))) {
4462f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (!pdest_frame  && !input_flush_progress && mUsesColorConversion) {
446361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pdest_frame = buffer;
44648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("empty_buffer_done pdest_frame address is %p",pdest_frame);
446561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return push_input_buffer(hComp);
44669ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
446756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //check if empty-EOS-buffer is being returned, treat this same as the
446856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //color-conversion case as we queued a color-conversion buffer to encoder
446956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        bool handleEmptyEosBuffer = (mEmptyEosBuffer == buffer);
447056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (mUsesColorConversion || handleEmptyEosBuffer) {
447156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            if (handleEmptyEosBuffer) {
447256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan                mEmptyEosBuffer = NULL;
447356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            }
44749ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            // return color-conversion buffer back to the pool
44758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("empty_buffer_done insert address is %p",buffer);
44768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if (!m_opq_pmem_q.insert_entry((unsigned long)buffer, 0, 0)) {
44778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("empty_buffer_done: pmem queue is full");
447861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorBadParameter;
447961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
44809ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        } else {
44819ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            // We are not dealing with color-conversion, Buffer being returned
44829ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            // here is client's buffer, return it back to client
4483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            if (m_pCallbacks.EmptyBufferDone && buffer) {
4484f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
4485f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("empty_buffer_done: Returning client buf %p", buffer);
44869ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            }
448761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
448861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (m_pCallbacks.EmptyBufferDone) {
448961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, buffer);
449061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
449161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
449247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
4493826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4494826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::complete_pending_buffer_done_cbs()
4495826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
44968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1;
44978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2;
44988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident;
449961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_cmd_queue tmp_q, pending_bd_q;
450061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
450161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // pop all pending GENERATE FDB from ftb queue
450261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_ftb_q.m_size) {
450361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.pop_entry(&p1,&p2,&ident);
450461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_FBD) {
450561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_bd_q.insert_entry(p1,p2,ident);
450661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
450761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            tmp_q.insert_entry(p1,p2,ident);
4508826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
450961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
451061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    //return all non GENERATE FDB to ftb queue
451161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (tmp_q.m_size) {
451261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        tmp_q.pop_entry(&p1,&p2,&ident);
451361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.insert_entry(p1,p2,ident);
451461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
451561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // pop all pending GENERATE EDB from etb queue
451661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_etb_q.m_size) {
451761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.pop_entry(&p1,&p2,&ident);
451861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_EBD) {
451961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_bd_q.insert_entry(p1,p2,ident);
452061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
452161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            tmp_q.insert_entry(p1,p2,ident);
452261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
452361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
452461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    //return all non GENERATE FDB to etb queue
452561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (tmp_q.m_size) {
452661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        tmp_q.pop_entry(&p1,&p2,&ident);
452761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.insert_entry(p1,p2,ident);
452861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
452961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
453061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // process all pending buffer dones
453161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (pending_bd_q.m_size) {
453261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pending_bd_q.pop_entry(&p1,&p2,&ident);
453361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        switch (ident) {
453461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            case OMX_COMPONENT_GENERATE_EBD:
453561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (empty_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) {
45368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!");
453761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
453861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
453961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
454061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
454161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            case OMX_COMPONENT_GENERATE_FBD:
454261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (fill_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) {
45438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!");
454461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
454561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
454661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
4547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
4548826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
4549826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4550826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
4552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType)
4553826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
455461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
455561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!profileLevelType)
455661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
455761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
455861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (profileLevelType->nPortIndex == 1) {
455961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) {
456061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
456161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline;
456261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel31;
456361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
456461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain;
456561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel31;
456661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 2) {
456761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh;
456861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel31;
456961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
45708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d",
45718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (int)profileLevelType->nProfileIndex);
457261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
457361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
457461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) {
457561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
457661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline;
457761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_H263Level70;
457861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
45798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex);
458061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
458161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
458261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
458361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
458461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple;
458561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
458661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
458761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple;
458861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
458961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
45908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex);
459161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
459261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
459361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
459461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
45958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %d", (int)profileLevelType->nPortIndex);
459661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
459761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
45988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%d, Level:%d",
45998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            (int)profileLevelType->eProfile, (int)profileLevelType->eLevel);
460061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
4601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
4603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4604826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
4605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType)
4606826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
460761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
460861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!profileLevelType)
460961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
4610826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
461161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (profileLevelType->nPortIndex == 1) {
461261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) {
46138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#if defined _MSM8974_ && !defined _MSM8226_
461461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
461561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline;
46168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
461761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
461861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain;
46198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
462061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 2) {
462161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh;
46228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
46238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else if (profileLevelType->nProfileIndex == 3) {
4624544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eProfile = OMX_VIDEO_AVCProfileConstrainedBaseline;
46258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
4626e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            } else if (profileLevelType->nProfileIndex == 4) {
4627544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline;
4628544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
4629544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar            } else if (profileLevelType->nProfileIndex == 5) {
4630544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eProfile = OMX_VIDEO_AVCProfileConstrainedHigh;
4631544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
4632544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar            } else if (profileLevelType->nProfileIndex == 6) {
4633e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedHigh;
4634e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
463561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
46368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u",
46378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)profileLevelType->nProfileIndex);
463861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
463961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
46406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
464161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
464261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline;
464361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
464461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
464561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
464661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain;
464761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
464861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 2) {
464961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh;
465061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
46518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8226_
46528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else if (profileLevelType->nProfileIndex == 3) {
4653544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eProfile = OMX_VIDEO_AVCProfileConstrainedBaseline;
4654544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
4655544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar            } else if (profileLevelType->nProfileIndex == 4) {
46568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline;
46578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
46588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
465961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
46608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d",
46618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (int)profileLevelType->nProfileIndex);
466261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
466361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
46646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
466561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) {
466661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
466761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline;
466861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_H263Level70;
466961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
46708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex);
467161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
467261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
467361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
467461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
467561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple;
467661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
467761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
467861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple;
467961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
468061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
46818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex);
468261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
468361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
46845aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingVP8) {
46857beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            if (profileLevelType->nProfileIndex == 0) {
46867beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain;
46877beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eLevel   = OMX_VIDEO_VP8Level_Version0;
46887beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            } else if (profileLevelType->nProfileIndex == 1) {
46897beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain;
46907beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eLevel   = OMX_VIDEO_VP8Level_Version1;
46917beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            } else {
46928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("VP8: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u",
46938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)profileLevelType->nProfileIndex);
46947beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                eRet = OMX_ErrorNoMore;
46957beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            }
4696f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingHEVC) {
4697f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            if (profileLevelType->nProfileIndex == 0) {
4698f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eProfile =  OMX_VIDEO_HEVCProfileMain;
4699f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eLevel   =  OMX_VIDEO_HEVCMainTierLevel52;
4700f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
4701f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eProfile =  OMX_VIDEO_HEVCProfileMain10;
4702f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eLevel   =  OMX_VIDEO_HEVCMainTierLevel52;
4703f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            } else {
4704f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("HEVC: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u",
4705f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                (unsigned int)profileLevelType->nProfileIndex);
4706f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                eRet = OMX_ErrorNoMore;
4707f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
470861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
47098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported ret NoMore");
471061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
471161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
471261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
47138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %u", (unsigned int)profileLevelType->nPortIndex);
471461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
4715826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
47168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%u, Level:%u",
47178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            (unsigned int)profileLevelType->eProfile, (unsigned int)profileLevelType->eLevel);
471861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
4719826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
47206eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
4721826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4722826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
47238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_video::alloc_map_ion_memory(int size,
47248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct ion_allocation_data *alloc_data,
472561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ion_fd_data *fd_data,int flag)
4726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
472761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_ion buf_ion_info;
472861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int ion_device_fd =-1,rc=0,ion_dev_flags = 0;
472961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (size <=0 || !alloc_data || !fd_data) {
47308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Invalid input to alloc_map_ion_memory");
473161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return -EINVAL;
473261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
473361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
473461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ion_dev_flags = O_RDONLY;
473561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ion_device_fd = open (MEM_DEVICE,ion_dev_flags);
473661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ion_device_fd < 0) {
47378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ION Device open() Failed");
473861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return ion_device_fd;
473961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
47408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
47418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(secure_session) {
4742e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        alloc_data->len = (size + (SECURE_ALIGN - 1)) & ~(SECURE_ALIGN - 1);
4743e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        alloc_data->align = SECURE_ALIGN;
4744e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        alloc_data->flags = flag;
4745e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        alloc_data->heap_id_mask = ION_HEAP(MEM_HEAP_ID);
4746e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (alloc_data->flags & ION_FLAG_CP_BITSTREAM) {
4747e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            alloc_data->heap_id_mask |= ION_HEAP(ION_SECURE_DISPLAY_HEAP_ID);
4748e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
4749f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_HIGH("ION ALLOC sec buf: size %u align %u flags %x",
4750f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                (unsigned int)alloc_data->len, (unsigned int)alloc_data->align,
4751f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                alloc_data->flags);
47528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    } else {
47538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->len = (size + (SZ_4K - 1)) & ~(SZ_4K - 1);
47548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->align = SZ_4K;
47558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->flags = (flag & ION_FLAG_CACHED ? ION_FLAG_CACHED : 0);
47566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P
4757e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        alloc_data->heap_id_mask = ION_HEAP(MEM_HEAP_ID);
47586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
4759e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        alloc_data->heap_id_mask = (ION_HEAP(MEM_HEAP_ID) |
4760e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                 ION_HEAP(ION_IOMMU_HEAP_ID));
47616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
4762f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_HIGH("ION ALLOC unsec buf: size %u align %u flags %x",
4763f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                (unsigned int)alloc_data->len, (unsigned int)alloc_data->align,
4764f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                alloc_data->flags);
47658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
47668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
476761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    rc = ioctl(ion_device_fd,ION_IOC_ALLOC,alloc_data);
476861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (rc || !alloc_data->handle) {
47698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ION ALLOC memory failed 0x%x", rc);
47708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->handle = 0;
477161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        close(ion_device_fd);
477261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ion_device_fd = -1;
4773826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return ion_device_fd;
477461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
477561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    fd_data->handle = alloc_data->handle;
477661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    rc = ioctl(ion_device_fd,ION_IOC_MAP,fd_data);
477761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (rc) {
47788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ION MAP failed ");
477961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_ion_info.ion_alloc_data = *alloc_data;
478061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_ion_info.ion_device_fd = ion_device_fd;
478161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_ion_info.fd_ion_data = *fd_data;
478261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        free_ion_memory(&buf_ion_info);
478361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        fd_data->fd =-1;
478461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ion_device_fd =-1;
478561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
478661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ion_device_fd;
4787826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4788826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
47898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanvoid omx_video::free_ion_memory(struct venc_ion *buf_ion_info)
4790826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
479161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!buf_ion_info) {
47928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Invalid input to free_ion_memory");
479361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return;
479461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
479561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ioctl(buf_ion_info->ion_device_fd,ION_IOC_FREE,
479661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &buf_ion_info->ion_alloc_data.handle)) {
47978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ION free failed ");
479861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return;
479961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
480061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    close(buf_ion_info->ion_device_fd);
48018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    buf_ion_info->ion_alloc_data.handle = 0;
480261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    buf_ion_info->ion_device_fd = -1;
480361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    buf_ion_info->fd_ion_data.fd = -1;
4804826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4805826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
48066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
4807826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
4808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer)
4809826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
481061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer && meta_mode_enable) {
481161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        encoder_media_buffer_type *media_ptr;
481261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem Input_pmem;
481361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int index_pmem = 0;
481461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool meta_error = false;
481561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
481661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        index_pmem = (buffer - m_inp_mem_ptr);
481756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (mUsesColorConversion &&
481861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                (index_pmem < m_sInPortDef.nBufferCountActual)) {
481961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!dev_free_buf((&m_pInput_pmem[index_pmem]),PORT_INDEX_IN)) {
48208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("omx_release_meta_buffer dev free failed");
482161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
482261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
482361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            media_ptr = (encoder_media_buffer_type *) buffer->pBuffer;
482461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (media_ptr && media_ptr->meta_handle) {
482561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (media_ptr->buffer_type == kMetadataBufferTypeCameraSource &&
482661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        media_ptr->meta_handle->numFds == 1 &&
48278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        media_ptr->meta_handle->numInts >= 2) {
482861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.fd = media_ptr->meta_handle->data[0];
482961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.buffer = media_ptr;
483061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.size = media_ptr->meta_handle->data[2];
483161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.offset = media_ptr->meta_handle->data[1];
483261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("EBD fd = %d, offset = %d, size = %d",Input_pmem.fd,
483361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            Input_pmem.offset,
483461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            Input_pmem.size);
483561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (media_ptr->buffer_type == kMetadataBufferTypeGrallocSource) {
483661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    private_handle_t *handle = (private_handle_t *)media_ptr->meta_handle;
483761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.buffer = media_ptr;
483861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.fd = handle->fd;
483961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.offset = 0;
484061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.size = handle->size;
484161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
484261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    meta_error = true;
484361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR(" Meta Error set in EBD");
484461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
484561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!meta_error)
484661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    meta_error = !dev_free_buf(&Input_pmem,PORT_INDEX_IN);
484761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (meta_error) {
484861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR(" Warning dev_free_buf failed flush value is %d",
484961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            input_flush_progress);
485061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
485161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
48526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal        }
48537eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George    }
4854826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
48556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
485661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::omx_c2d_conv()
485761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
485861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    c2dcc = NULL;
485961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mLibHandle = NULL;
486061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertOpen = NULL;
486161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertClose = NULL;
486261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    src_format = NV12_128m;
486361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_init(&c_lock, NULL);
486461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
486561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
486661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::init()
486761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
486861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool status = true;
486961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mLibHandle || mConvertOpen || mConvertClose) {
48708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("omx_c2d_conv::init called twice");
487161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        status = false;
487261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
487361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (status) {
487461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY);
487561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (mLibHandle) {
487661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertOpen = (createC2DColorConverter_t *)
487761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dlsym(mLibHandle,"createC2DColorConverter");
487861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertClose = (destroyC2DColorConverter_t *)
487961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dlsym(mLibHandle,"destroyC2DColorConverter");
488061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!mConvertOpen || !mConvertClose)
488161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                status = false;
488261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else
488361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            status = false;
488461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
488561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!status && mLibHandle) {
488661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        dlclose(mLibHandle);
488761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mLibHandle = NULL;
488861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mConvertOpen = NULL;
488961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mConvertClose = NULL;
489061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
489161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return status;
489261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
489361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
489461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr,
489561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int dest_fd, void *dest_base, void *dest_viraddr)
489661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
489761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int result;
489861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!src_viraddr || !dest_viraddr || !c2dcc || !src_base || !dest_base) {
48998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Invalid arguments omx_c2d_conv::convert");
490061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
490161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
490261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&c_lock);
490361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    result =  c2dcc->convertC2D(src_fd, src_base, src_viraddr,
490461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            dest_fd, dest_base, dest_viraddr);
490561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&c_lock);
49068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Color convert status %d",result);
490761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ((result < 0)?false:true);
490861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
490961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
491061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width,
491161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ColorConvertFormat src, ColorConvertFormat dest,unsigned int src_stride)
491261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
491361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool status = false;
491461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&c_lock);
491561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!c2dcc) {
491661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        c2dcc = mConvertOpen(width, height, width, height,
491761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                src,dest,0,src_stride);
491861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (c2dcc) {
491961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            src_format = src;
492061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            status = true;
492161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else
49228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("mConvertOpen failed");
492361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
492461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&c_lock);
492561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return status;
492661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
492761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
492861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid omx_video::omx_c2d_conv::close()
492961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
493061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mLibHandle) {
493161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&c_lock);
493261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (mConvertClose && c2dcc)
493361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertClose(c2dcc);
493461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&c_lock);
493561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        c2dcc = NULL;
493661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
493761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
493861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::~omx_c2d_conv()
493961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
49408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("Destroy C2D instance");
494161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mLibHandle) {
494261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (mConvertClose && c2dcc) {
494361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pthread_mutex_lock(&c_lock);
494461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertClose(c2dcc);
494561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pthread_mutex_unlock(&c_lock);
494661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
494761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        dlclose(mLibHandle);
494861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
494961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    c2dcc = NULL;
495061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mLibHandle = NULL;
495161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertOpen = NULL;
495261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertClose = NULL;
495361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_destroy(&c_lock);
495461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
495561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
495661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_video::omx_c2d_conv::get_src_format()
495761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
495861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int format = -1;
495961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (src_format == NV12_128m) {
496061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE;
496161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (src_format == RGBA8888) {
496261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        format = HAL_PIXEL_FORMAT_RGBA_8888;
496361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
496461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return format;
496561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
496661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
496761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size)
496861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
496961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int cret = 0;
497061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool ret = false;
497161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    C2DBuffReq bufferreq;
497261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (c2dcc) {
497361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bufferreq.size = 0;
497461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&c_lock);
497561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        cret = c2dcc->getBuffReq(port,&bufferreq);
497661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&c_lock);
49778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Status of getbuffer is %d", cret);
497861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = (cret)?false:true;
497961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_size = bufferreq.size;
498061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
498161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
498261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
498361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4984e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_video::is_conv_needed(int hal_fmt, int hal_flags)
4985e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
4986e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool bRet = hal_fmt == HAL_PIXEL_FORMAT_RGBA_8888 &&
4987e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        !(hal_flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED);
4988e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _HW_RGBA
4989e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bRet = false;
4990e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
4991e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    DEBUG_PRINT_LOW("RGBA conversion %s", bRet ? "Needed":"Not-Needed");
4992e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    return bRet;
4993e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}
4994e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
4995939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavanvoid omx_video::print_debug_color_aspects(ColorAspects *aspects, const char *prefix) {
4996939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan    DEBUG_PRINT_HIGH("%s : Color aspects : Primaries = %d Range = %d Transfer = %d MatrixCoeffs = %d",
4997939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan            prefix, aspects->mPrimaries, aspects->mRange, aspects->mTransfer, aspects->mMatrixCoeffs);
4998939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan}
4999939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan
500061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE  omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp,
500161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
500261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
500361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned nBufIndex = 0;
500461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
500561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    encoder_media_buffer_type *media_buffer;
5006587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan    private_handle_t *handle = NULL;
50078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("ETBProxyOpaque: buffer[%p]", buffer);
500861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
500961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL) {
50108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid buffer[%p]",buffer);
501161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
501261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
501361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    nBufIndex = buffer - meta_buffer_hdr;
501461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (nBufIndex >= m_sInPortDef.nBufferCountActual) {
50158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid bufindex = %u",
501661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                nBufIndex);
501761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
501861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
501961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    media_buffer = (encoder_media_buffer_type *)buffer->pBuffer;
5020587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan    if ((!media_buffer || !media_buffer->meta_handle) &&
5021587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan            !(buffer->nFlags & OMX_BUFFERFLAG_EOS)) {
5022f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_ERROR("Incorrect Buffer queued media buffer = %p",
5023f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            media_buffer);
5024f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
5025f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        return OMX_ErrorBadParameter;
5026587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan    } else if (media_buffer) {
5027587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan        handle = (private_handle_t *)media_buffer->meta_handle;
5028f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
502956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
5030e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (media_buffer && media_buffer->buffer_type ==
5031e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin         kMetadataBufferTypeCameraSource) {
5032e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return empty_this_buffer_proxy(hComp, buffer);
5033e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
5034e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
5035e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    /*Enable following code once private handle color format is
5036e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      updated correctly*/
503725adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan
5038e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    if (buffer->nFilledLen > 0 && handle) {
50393b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if (c2d_opened && handle->format != c2d_conv.get_src_format()) {
50403b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            c2d_conv.close();
50413b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            c2d_opened = false;
50423b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
5043e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
50443b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if (!c2d_opened) {
5045e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            mUsesColorConversion = is_conv_needed(handle->format, handle->flags);
5046e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (mUsesColorConversion) {
5047e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                DEBUG_PRINT_INFO("open Color conv forW: %u, H: %u",
50488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)m_sInPortDef.format.video.nFrameWidth,
50498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)m_sInPortDef.format.video.nFrameHeight);
50503b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                if (!c2d_conv.open(m_sInPortDef.format.video.nFrameHeight,
50513b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                            m_sInPortDef.format.video.nFrameWidth,
50523b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                            RGBA8888, NV12_128m, handle->width)) {
50533b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                    m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
50548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Color conv open failed");
50553b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                    return OMX_ErrorBadParameter;
50563b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                }
50573b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                c2d_opened = true;
50583b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#ifdef _MSM8974_
5059e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                if (!dev_set_format(NV12_128m))
5060e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    DEBUG_PRINT_ERROR("cannot set color format");
50613b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#endif
506261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
506361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
506461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
506561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (input_flush_progress == true) {
506661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
50678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Input flush in progress");
506861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorNone;
506961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
507061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
507161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame) {
507261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = buffer;
507361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = push_input_buffer(hComp);
507461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
50758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if (!m_opq_meta_q.insert_entry((unsigned long)buffer,0,0)) {
50768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: ETBProxy: Queue is full");
50778f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan            m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
507861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret = OMX_ErrorBadParameter;
507961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
508061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
508161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
508261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
508361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
508461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::queue_meta_buffer(OMX_HANDLETYPE hComp,
508561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem &Input_pmem_info)
508661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
508761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
508861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
50898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long address = 0,p2,id;
509061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("In queue Meta Buffer");
509261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame || !pdest_frame) {
50938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("convert_queue_buffer invalid params");
509461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
509561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
509661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50973b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan    if (psource_frame->nFilledLen > 0) {
50983b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,0) != true) {
50998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_use_buf");
51008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)psource_frame,0,OMX_COMPONENT_GENERATE_EBD);
51013b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            ret = OMX_ErrorBadParameter;
51023b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
510361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
510461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
510561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone)
510661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = empty_this_buffer_proxy(hComp,psource_frame);
510761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
510861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone) {
510961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = NULL;
511061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!psource_frame && m_opq_meta_q.m_size) {
511161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_meta_q.pop_entry(&address,&p2,&id);
511261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
511361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
51148f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan    } else {
51158f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        // there has been an error and source frame has been scheduled for an EBD
51168f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        psource_frame = NULL;
511761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
511861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
511961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
512061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
512161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::convert_queue_buffer(OMX_HANDLETYPE hComp,
51228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct pmem &Input_pmem_info,unsigned long &index)
512361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
512461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
512561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *uva;
512661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
51278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long address = 0,p2,id;
512861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("In Convert and queue Meta Buffer");
513061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame || !pdest_frame) {
51318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("convert_queue_buffer invalid params");
513261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
513361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
51348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if (secure_session) {
51358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("cannot convert buffer during secure session");
51368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        return OMX_ErrorInvalidState;
51378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
513861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
513961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame->nFilledLen) {
51403b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if(psource_frame->nFlags & OMX_BUFFERFLAG_EOS) {
51413b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFilledLen = psource_frame->nFilledLen;
51423b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nTimeStamp = psource_frame->nTimeStamp;
51433b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFlags = psource_frame->nFlags;
51448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_HIGH("Skipping color conversion for empty EOS Buffer "
51458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    "header=%p filled-len=%u", pdest_frame, (unsigned int)pdest_frame->nFilledLen);
51463b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        } else {
51473b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nOffset = 0;
51483b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFilledLen = 0;
51493b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nTimeStamp = psource_frame->nTimeStamp;
51503b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFlags = psource_frame->nFlags;
51518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Buffer header %p Filled len size %u",
51528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pdest_frame, (unsigned int)pdest_frame->nFilledLen);
51533b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
515461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
515561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        uva = (unsigned char *)mmap(NULL, Input_pmem_info.size,
515661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                PROT_READ|PROT_WRITE,
515761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                MAP_SHARED,Input_pmem_info.fd,0);
515861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (uva == MAP_FAILED) {
515961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret = OMX_ErrorBadParameter;
516061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
516161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!c2d_conv.convert(Input_pmem_info.fd, uva, uva,
516261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_pInput_pmem[index].fd, pdest_frame->pBuffer, pdest_frame->pBuffer)) {
51638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("Color Conversion failed");
516461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = OMX_ErrorBadParameter;
516561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
516661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buf_size = 0;
516761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!c2d_conv.get_buffer_size(C2D_OUTPUT,buf_size))
516861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    ret = OMX_ErrorBadParameter;
516961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
517061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nOffset = 0;
517161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nFilledLen = buf_size;
517261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nTimeStamp = psource_frame->nTimeStamp;
517361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nFlags = psource_frame->nFlags;
51748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Buffer header %p Filled len size %u",
51758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            pdest_frame, (unsigned int)pdest_frame->nFilledLen);
517661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
517761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
517861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            munmap(uva,Input_pmem_info.size);
517961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
518061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
518161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_use_buf(&m_pInput_pmem[index],PORT_INDEX_IN,0) != true) {
51828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: in dev_use_buf");
51838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)pdest_frame,0,OMX_COMPONENT_GENERATE_EBD);
518461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = OMX_ErrorBadParameter;
518561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
518661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone)
518761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = empty_this_buffer_proxy(hComp,pdest_frame);
518861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone) {
518961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, psource_frame);
519061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = NULL;
519161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pdest_frame = NULL;
519261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!psource_frame && m_opq_meta_q.m_size) {
519361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_meta_q.pop_entry(&address,&p2,&id);
519461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
519561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
519661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!pdest_frame && m_opq_pmem_q.m_size) {
519761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_pmem_q.pop_entry(&address,&p2,&id);
519861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pdest_frame = (OMX_BUFFERHEADERTYPE* ) address;
51998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("pdest_frame pop address is %p",pdest_frame);
520061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
52018f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan    } else {
52028f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        // there has been an error and source frame has been scheduled for an EBD
52038f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        psource_frame = NULL;
520461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
520561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
520661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
520761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
520861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::push_input_buffer(OMX_HANDLETYPE hComp)
520961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
52108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long address = 0,p2,id, index = 0;
521161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
521261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
5213f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_LOW("In push input buffer");
521461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame && m_opq_meta_q.m_size) {
521561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_opq_meta_q.pop_entry(&address,&p2,&id);
521661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
521761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
521861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!pdest_frame && m_opq_pmem_q.m_size) {
521961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_opq_pmem_q.pop_entry(&address,&p2,&id);
522061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pdest_frame = (OMX_BUFFERHEADERTYPE* ) address;
522161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
522261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (psource_frame != NULL && pdest_frame != NULL &&
522361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret == OMX_ErrorNone) {
522461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem Input_pmem_info;
522561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        encoder_media_buffer_type *media_buffer;
522661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        index = pdest_frame - m_inp_mem_ptr;
522761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (index >= m_sInPortDef.nBufferCountActual) {
52288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("Output buffer index is wrong %u act count %u",
52298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    (unsigned int)index, (unsigned int)m_sInPortDef.nBufferCountActual);
523061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
523161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
5232b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan
5233b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        //Meta-Buffer with empty filled-length can contain garbage handle
5234b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        //Some clients queue such buffers to signal EOS. Handle this case
5235b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        // separately by queueing an intermediate color-conversion buffer
5236b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        // and propagate the EOS.
5237b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        if (psource_frame->nFilledLen == 0 && (psource_frame->nFlags & OMX_BUFFERFLAG_EOS)) {
5238b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            return push_empty_eos_buffer(hComp, psource_frame);
5239b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        }
524061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        media_buffer = (encoder_media_buffer_type *)psource_frame->pBuffer;
524161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Will enable to verify camcorder in current TIPS can be removed*/
524261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) {
524361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
524461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = media_buffer->meta_handle->data[0];
524561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = media_buffer->meta_handle->data[1];
524661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = media_buffer->meta_handle->data[2];
524761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_LOW("ETB fd = %d, offset = %d, size = %d",Input_pmem_info.fd,
524861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem_info.offset,
524961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem_info.size);
525061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret = queue_meta_buffer(hComp,Input_pmem_info);
525161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
525261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle;
525361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
525461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = handle->fd;
525561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = 0;
525661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = handle->size;
5257e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            m_graphicBufferSize = handle->size;
5258e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (is_conv_needed(handle->format, handle->flags))
525961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = convert_queue_buffer(hComp,Input_pmem_info,index);
5260f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            else if (handle->format == HAL_PIXEL_FORMAT_NV12_ENCODEABLE ||
5261e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m ||
5262e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed ||
5263e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    handle->format == HAL_PIXEL_FORMAT_RGBA_8888 ||
5264e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    handle->format == QOMX_COLOR_Format32bitRGBA8888Compressed)
526561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = queue_meta_buffer(hComp,Input_pmem_info);
526661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else
526761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = OMX_ErrorBadParameter;
526861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
526961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
527061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
527161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
527256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
527356dd7e53ba5657987bd527fa996a7942da01ef63Praveen ChavanOMX_ERRORTYPE omx_video::push_empty_eos_buffer(OMX_HANDLETYPE hComp,
527456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_BUFFERHEADERTYPE* buffer) {
527556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    OMX_BUFFERHEADERTYPE* opqBuf = NULL;
527656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    OMX_ERRORTYPE retVal = OMX_ErrorNone;
5277f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    unsigned index = 0;
5278f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
5279f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_LOW("In push empty eos buffer");
528056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    do {
5281f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (mUsesColorConversion) {
5282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (pdest_frame) {
5283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                //[1] use a checked out conversion buffer, if one is available
5284e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                opqBuf = pdest_frame;
5285e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                pdest_frame = NULL;
5286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            } else if (m_opq_pmem_q.m_size) {
5287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                //[2] else pop out one from the queue, if available
5288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                unsigned long address = 0, p2, id;
5289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                m_opq_pmem_q.pop_entry(&address,&p2,&id);
5290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                opqBuf = (OMX_BUFFERHEADERTYPE* ) address;
5291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
5292f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            index = opqBuf - m_inp_mem_ptr;
5293f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } else {
5294f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            opqBuf = (OMX_BUFFERHEADERTYPE* ) buffer;
5295f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            index = opqBuf - meta_buffer_hdr;
5296f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
5297f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
529856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (!opqBuf || index >= m_sInPortDef.nBufferCountActual) {
529956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            DEBUG_PRINT_ERROR("push_empty_eos_buffer: Could not find a "
5300b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan                    "color-conversion buffer to queue ! defer until available");
5301b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //[3] else, returning back will defer calling this function again
5302b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //until a conversion buffer is returned by the encoder and also
5303b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //hold on to the client's buffer
5304b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            return OMX_ErrorNone;
530556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
530656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        struct pmem Input_pmem_info;
530756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.buffer = opqBuf;
530856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.fd = m_pInput_pmem[index].fd;
530956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.offset = 0;
531056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.size = m_pInput_pmem[index].size;
531156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
531256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (dev_use_buf(&Input_pmem_info, PORT_INDEX_IN, 0) != true) {
531356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_use_buf for empty eos buffer");
531456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            retVal = OMX_ErrorBadParameter;
531556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            break;
531656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
531756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
531856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //Queue with null pBuffer, as pBuffer in client's hdr can be junk
531956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //Clone the color-conversion buffer to avoid overwriting original buffer
532056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_BUFFERHEADERTYPE emptyEosBufHdr;
532156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        memcpy(&emptyEosBufHdr, opqBuf, sizeof(OMX_BUFFERHEADERTYPE));
532256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.nFilledLen = 0;
532356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.nTimeStamp = buffer->nTimeStamp;
532456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.nFlags = buffer->nFlags;
532556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.pBuffer = NULL;
5326e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (!mUsesColorConversion && !mUseProxyColorFormat)
5327f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            emptyEosBufHdr.nAllocLen = m_sInPortDef.nBufferSize;
5328e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        else if (mUseProxyColorFormat)
5329e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            emptyEosBufHdr.nAllocLen = m_graphicBufferSize > 0 ? m_graphicBufferSize : m_sInPortDef.nBufferSize;
533056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (dev_empty_buf(&emptyEosBufHdr, 0, index, m_pInput_pmem[index].fd) != true) {
533156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_empty_buf for empty eos buffer");
533256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            dev_free_buf(&Input_pmem_info, PORT_INDEX_IN);
533356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            retVal = OMX_ErrorBadParameter;
533456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            break;
533556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
533656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        mEmptyEosBuffer = opqBuf;
533756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    } while(false);
533856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
533956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    //return client's buffer regardless since intermediate color-conversion
534056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    //buffer is sent to the the encoder
534156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
534256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    --pending_input_buffers;
534356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    return retVal;
534456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan}
5345b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan
5346b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan// no code beyond this !
5347b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan
5348b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan// inline import of vendor extensions implementation
5349b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan#include "omx_video_extensions.hpp"
5350