147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*--------------------------------------------------------------------------
216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen ChavanCopyright (c) 2010-2016, 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
8461a2c6a19dbd06a317a419623020e02056661876Praveen Chavantypedef struct OMXComponentCapabilityFlagsType {
8547e37c4428509524ee576920a98381f3e4872493Nick Pelly    ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS
8616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan    OMX_U32 nSize;
8716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan    OMX_VERSIONTYPE nVersion;
8847e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iIsOMXComponentMultiThreaded;
8947e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
9047e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
9147e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
9247e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentSupportsPartialFrames;
9347e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentUsesNALStartCodes;
9447e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
9547e37c4428509524ee576920a98381f3e4872493Nick Pelly    OMX_BOOL iOMXComponentUsesFullAVCFrames;
9647e37c4428509524ee576920a98381f3e4872493Nick Pelly
9747e37c4428509524ee576920a98381f3e4872493Nick Pelly} OMXComponentCapabilityFlagsType;
9847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
10047e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid* message_thread(void *input)
10147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_video* omx = reinterpret_cast<omx_video*>(input);
10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char id;
10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int n;
10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
1068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("omx_venc: message thread start");
10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    prctl(PR_SET_NAME, (unsigned long)"VideoEncMsgThread", 0, 0, 0);
10861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (1) {
10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        n = read(omx->m_pipe_in, &id, 1);
11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (0 == n) {
11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
11347e37c4428509524ee576920a98381f3e4872493Nick Pelly
11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (1 == n) {
11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx->process_event_cb(omx, id);
11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
11747e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef QLE_BUILD
11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (n < 0) break;
11947e37c4428509524ee576920a98381f3e4872493Nick Pelly#else
12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((n < 0) && (errno != EINTR)) break;
12147e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif
12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
1238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("omx_venc: message thread stop");
12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return 0;
12547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
12647e37c4428509524ee576920a98381f3e4872493Nick Pelly
12747e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid post_message(omx_video *omx, unsigned char id)
12847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
1298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("omx_venc: post_message %d", id);
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    write(omx->m_pipe_out, &id, 1);
13147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
13247e37c4428509524ee576920a98381f3e4872493Nick Pelly
13347e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx_cmd_queue destructor
13447e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::~omx_cmd_queue()
13547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Nothing to do
13747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
13847e37c4428509524ee576920a98381f3e4872493Nick Pelly
13947e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue constructor
14047e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::omx_cmd_queue(): m_read(0),m_write(0),m_size(0)
14147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(m_q,0,sizeof(omx_event)*OMX_CORE_CONTROL_CMDQ_SIZE);
14347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
14447e37c4428509524ee576920a98381f3e4872493Nick Pelly
14547e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue insert
1468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::insert_entry(unsigned long p1, unsigned long p2, unsigned long id)
14747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
14861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool ret = true;
14961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_size < OMX_CORE_CONTROL_CMDQ_SIZE) {
15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_q[m_write].id       = id;
15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_q[m_write].param1   = p1;
15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_q[m_write].param2   = p2;
15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_write++;
15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_size ++;
15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_write >= OMX_CORE_CONTROL_CMDQ_SIZE) {
15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_write = 0;
15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = false;
1608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR!!! Command Queue Full");
16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
16347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
16447e37c4428509524ee576920a98381f3e4872493Nick Pelly
16547e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue pop
1668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::pop_entry(unsigned long *p1, unsigned long *p2, unsigned long *id)
16747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool ret = true;
16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_size > 0) {
17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *id = m_q[m_read].id;
17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *p1 = m_q[m_read].param1;
17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *p2 = m_q[m_read].param2;
17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Move the read pointer ahead
17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ++m_read;
17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        --m_size;
17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_read >= OMX_CORE_CONTROL_CMDQ_SIZE) {
17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_read = 0;
17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = false;
18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
18347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
18447e37c4428509524ee576920a98381f3e4872493Nick Pelly
18547e37c4428509524ee576920a98381f3e4872493Nick Pelly// Retrieve the first mesg type in the queue
18647e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned omx_video::omx_cmd_queue::get_q_msg_type()
18747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return m_q[m_read].id;
18947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
19047e37c4428509524ee576920a98381f3e4872493Nick Pelly
19147e37c4428509524ee576920a98381f3e4872493Nick Pelly
19247e37c4428509524ee576920a98381f3e4872493Nick Pelly
19347e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_
19447e37c4428509524ee576920a98381f3e4872493Nick PellyVideoHeap::VideoHeap(int fd, size_t size, void* base)
19547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // dup file descriptor, map once, use pmem
19761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    init(dup(fd), base, size, 0 , MEM_DEVICE);
19847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
19947e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_
20047e37c4428509524ee576920a98381f3e4872493Nick Pelly
20147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::omx_venc
20447e37c4428509524ee576920a98381f3e4872493Nick Pelly
20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Constructor
20747e37c4428509524ee576920a98381f3e4872493Nick Pelly
20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None
21047e37c4428509524ee576920a98381f3e4872493Nick Pelly
21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
2146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalomx_video::omx_video():
2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    c2d_opened(false),
2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    psource_frame(NULL),
2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    pdest_frame(NULL),
2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    secure_session(false),
2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    mEmptyEosBuffer(NULL),
2202162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    m_pipe_in(-1),
2212162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    m_pipe_out(-1),
22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pInput_pmem(NULL),
22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pOutput_pmem(NULL),
224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pInput_ion(NULL),
22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pOutput_ion(NULL),
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_error_propogated(false),
22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_state(OMX_StateInvalid),
23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_app_data(NULL),
23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_use_input_pmem(OMX_FALSE),
23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_use_output_pmem(OMX_FALSE),
2338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    m_input_msg_id(OMX_COMPONENT_GENERATE_ETB),
23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_inp_mem_ptr(NULL),
23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_out_mem_ptr(NULL),
23661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    input_flush_progress (false),
23761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    output_flush_progress (false),
23861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    input_use_buffer (false),
23961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    output_use_buffer (false),
24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_input_buffers(0),
24161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_output_buffers(0),
24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_out_bm_count(0),
24361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_inp_bm_count(0),
24461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_flags(0),
24561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_count(0),
24661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_fbd_count(0),
247f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    m_event_port_settings_sent(false),
248f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    hw_overload(false)
24947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
2508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video(): Inside Constructor()");
25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(&m_cmp,0,sizeof(m_cmp));
25261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(&m_pCallbacks,0,sizeof(m_pCallbacks));
25361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    async_thread_created = false;
25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    msg_thread_created = false;
25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
256f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    mUsesColorConversion = false;
25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_init(&m_lock, NULL);
25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_init(&m_cmd_lock,0,0);
259f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_LOW("meta_buffer_hdr = %p", meta_buffer_hdr);
26047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
26147e37c4428509524ee576920a98381f3e4872493Nick Pelly
26247e37c4428509524ee576920a98381f3e4872493Nick Pelly
26347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::~omx_venc
26647e37c4428509524ee576920a98381f3e4872493Nick Pelly
26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Destructor
26947e37c4428509524ee576920a98381f3e4872493Nick Pelly
27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
27161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None
27247e37c4428509524ee576920a98381f3e4872493Nick Pelly
27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
27647e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::~omx_video()
27747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
2788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("~omx_video(): Inside Destructor()");
2792162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    if (m_pipe_in >= 0) close(m_pipe_in);
2802162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan    if (m_pipe_out >= 0) close(m_pipe_out);
2818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video: Waiting on Msg Thread exit");
28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (msg_thread_created)
28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_join(msg_thread_id,NULL);
2848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video: Waiting on Async Thread exit");
28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*For V4L2 based drivers, pthread_join is done in device_close
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * so no need to do it here*/
28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifndef _MSM8974_
28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (async_thread_created)
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_join(async_thread_id,NULL);
29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_destroy(&m_lock);
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_destroy(&m_cmd_lock);
293f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_HIGH("m_etb_count = %" PRIu64 ", m_fbd_count = %" PRIu64, m_etb_count,
29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_fbd_count);
2958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("omx_video: Destructor exit");
296f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_HIGH("Exiting OMX Video Encoder ...");
29747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
29847e37c4428509524ee576920a98381f3e4872493Nick Pelly
29947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::OMXCntrlProcessMsgCb
30247e37c4428509524ee576920a98381f3e4872493Nick Pelly
30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   IL Client callbacks are generated through this routine. The decoder
30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   provides the thread context for this routine.
30647e37c4428509524ee576920a98381f3e4872493Nick Pelly
30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ctxt -- Context information related to the self.
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   id   -- Event identifier. This could be any of the following:
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   1. Command completion event
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   2. Buffer done callback event
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   3. Frame done callback event
31347e37c4428509524ee576920a98381f3e4872493Nick Pelly
31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
31647e37c4428509524ee576920a98381f3e4872493Nick Pelly
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
31847e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid omx_video::process_event_cb(void *ctxt, unsigned char id)
31947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
3208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1; // Parameter - 1
3218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2; // Parameter - 2
3228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident;
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned qsize=0; // qsize
32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_video *pThis = (omx_video *) ctxt;
32547e37c4428509524ee576920a98381f3e4872493Nick Pelly
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!pThis) {
3278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR:ProcessMsgCb:Context is incorrect; bailing out");
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return;
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
33047e37c4428509524ee576920a98381f3e4872493Nick Pelly
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Protect the shared queue data structure
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    do {
33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Read the message id's from the queue*/
33447e37c4428509524ee576920a98381f3e4872493Nick Pelly
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&pThis->m_lock);
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        qsize = pThis->m_cmd_q.m_size;
33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize) {
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pThis->m_cmd_q.pop_entry(&p1,&p2,&ident);
33947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
34047e37c4428509524ee576920a98381f3e4872493Nick Pelly
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize == 0) {
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            qsize = pThis->m_ftb_q.m_size;
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (qsize) {
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pThis->m_ftb_q.pop_entry(&p1,&p2,&ident);
345826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
34647e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
34747e37c4428509524ee576920a98381f3e4872493Nick Pelly
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize == 0) {
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            qsize = pThis->m_etb_q.m_size;
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (qsize) {
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pThis->m_etb_q.pop_entry(&p1,&p2,&ident);
352826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            }
35347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
35447e37c4428509524ee576920a98381f3e4872493Nick Pelly
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&pThis->m_lock);
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*process message if we have one*/
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (qsize > 0) {
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            id = ident;
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            switch (id) {
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EVENT:
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        switch (p1) {
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_CommandStateSet:
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_state = (OMX_STATETYPE) p2;
3668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("Process -> state set to %d", pThis->m_state);
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL);
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_EventError:
3728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: OMX_EventError: p2 = %lu", p2);
3738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                if (p2 == (unsigned)OMX_ErrorHardware) {
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                            OMX_EventError,OMX_ErrorHardware,0,NULL);
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                } else {
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
3788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                            OMX_EventError, p2, 0, 0);
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                }
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_CommandPortDisable:
3848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("Process -> Port %lu set to PORT_STATE_DISABLED" \
3858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                        "state", p2);
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL );
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            case OMX_CommandPortEnable:
3908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("Process ->Port %lu set PORT_STATE_ENABLED state" \
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        , p2);
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,\
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL );
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            default:
3978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("process_event_cb forwarding EventCmdComplete %lu", p1);
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                        OMX_EventCmdComplete, p1, p2, NULL );
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                break;
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
4048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: ProcessMsgCb NULL callbacks");
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_ETB_OPQ:
4088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB_OPQ");
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->empty_this_buffer_opaque((OMX_HANDLETYPE)p1,\
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) {
4118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: ETBProxy() failed!");
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
415f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                case OMX_COMPONENT_GENERATE_ETB: {
416f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        OMX_ERRORTYPE iret;
4178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB");
418f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        iret = pThis->empty_this_buffer_proxy((OMX_HANDLETYPE)p1, (OMX_BUFFERHEADERTYPE *)p2);
419f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        if (iret == OMX_ErrorInsufficientResources) {
420f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure due to HW overload");
421f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            pThis->omx_report_hw_overload ();
422f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        } else if (iret != OMX_ErrorNone) {
423f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure");
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
426f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    }
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_FTB:
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if ( pThis->fill_this_buffer_proxy((OMX_HANDLETYPE)p1,\
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) {
4328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: FTBProxy() failed!");
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_COMMAND:
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->send_command_proxy(&pThis->m_cmp,(OMX_COMMANDTYPE)p1,\
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (OMX_U32)p2,(OMX_PTR)NULL);
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EBD:
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if ( pThis->empty_buffer_done(&pThis->m_cmp,
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) {
4458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!");
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_FBD:
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if ( pThis->fill_buffer_done(&pThis->m_cmp,
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) {
4538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!");
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->omx_report_error ();
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH:
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->input_flush_progress = false;
461f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_HIGH("m_etb_count at i/p flush = %" PRIu64, m_etb_count);
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_etb_count = 0;
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        /*Check if we need generate event for Flush done*/
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_INPUT_FLUSH_PENDING)) {
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_INPUT_FLUSH_PENDING);
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandFlush,
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    PORT_INDEX_IN,NULL );
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_IDLE_PENDING)) {
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!pThis->output_flush_progress) {
4748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_LOW("dev_stop called after input flush complete");
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                if (dev_stop() != 0) {
4768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                    DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in i/p flush!");
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->omx_report_error ();
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                }
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH:
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->output_flush_progress = false;
488f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_HIGH("m_fbd_count at o/p flush = %" PRIu64, m_fbd_count);
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_fbd_count = 0;
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        /*Check if we need generate event for Flush done*/
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_OUTPUT_FLUSH_PENDING)) {
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_OUTPUT_FLUSH_PENDING);
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandFlush,
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    PORT_INDEX_OUT,NULL );
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags ,OMX_COMPONENT_IDLE_PENDING)) {
5008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_LOW("dev_stop called after Output flush complete");
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (!pThis->input_flush_progress) {
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                if (dev_stop() != 0) {
5038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                    DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in o/p flush!");
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    pThis->omx_report_error ();
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                }
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_START_DONE:
5128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE msg");
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
5158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Success");
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) {
5178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Move to \
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    executing");
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            // Send the callback now
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING);
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StateExecuting;
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StateExecuting, NULL);
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_PAUSE_PENDING)) {
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (dev_pause()) {
5288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in Start Done!");
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->omx_report_error ();
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_LOADED_START_PENDING)) {
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (dev_loaded_start_done()) {
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_LOW("successful loaded Start Done!");
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            } else {
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: failed in loaded Start Done!");
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->omx_report_error ();
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_START_PENDING);
54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
541f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags);
54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
5448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_LOW("Event Handler callback is NULL");
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_PAUSE_DONE:
5498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_PAUSE_DONE msg");
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_PAUSE_PENDING)) {
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            //Send the callback now
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->complete_pending_buffer_done_cbs();
5548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            DEBUG_PRINT_LOW("omx_video::process_event_cb() Sending PAUSE complete after all pending EBD/FBD");
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_PAUSE_PENDING);
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StatePause;
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StatePause, NULL);
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_RESUME_DONE:
5668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_RESUME_DONE msg");
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) {
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            // Send the callback now
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING);
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StateExecuting;
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StateExecuting,NULL);
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_STOP_DONE:
5818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_STOP_DONE msg");
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->complete_pending_buffer_done_cbs();
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_IDLE_PENDING)) {
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            // Send the callback now
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_IDLE_PENDING);
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_state = OMX_StateIdle;
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pThis->m_pCallbacks.EventHandler(&pThis->m_cmp,pThis->m_app_data,
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_EventCmdComplete,OMX_CommandStateSet,
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_StateIdle,NULL);
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else if (BITMASK_PRESENT(&pThis->m_flags,
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                    OMX_COMPONENT_LOADED_STOP_PENDING)) {
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            if (dev_loaded_stop_done()) {
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_LOW("successful loaded Stop Done!");
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            } else {
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                DEBUG_PRINT_ERROR("ERROR: failed in loaded Stop Done!");
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                pThis->omx_report_error ();
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            }
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_STOP_PENDING);
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        } else {
601f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags);
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        }
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_HARDWARE_ERROR:
6088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_HARDWARE_ERROR!");
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pThis->omx_report_error ();
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
6116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                case OMX_COMPONENT_GENERATE_LTRUSE_FAILED:
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_LTRUSE_FAILED!");
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pThis->m_pCallbacks.EventHandler) {
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("Sending QOMX_ErrorLTRUseFailed, p2 = 0x%x", p2);
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pThis->m_pCallbacks.EventHandler(
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                &pThis->m_cmp, pThis->m_app_data,
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                OMX_EventError, QOMX_ErrorLTRUseFailed, NULL, NULL);
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
6216eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                default:
6238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("process_event_cb unknown msg id 0x%02x", id);
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
62747e37c4428509524ee576920a98381f3e4872493Nick Pelly
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&pThis->m_lock);
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        qsize = pThis->m_cmd_q.m_size + pThis->m_ftb_q.m_size +\
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pThis->m_etb_q.m_size;
63147e37c4428509524ee576920a98381f3e4872493Nick Pelly
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&pThis->m_lock);
63347e37c4428509524ee576920a98381f3e4872493Nick Pelly
63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } while (qsize>0);
6358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("exited the while loop");
63647e37c4428509524ee576920a98381f3e4872493Nick Pelly
63747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
63847e37c4428509524ee576920a98381f3e4872493Nick Pelly
63947e37c4428509524ee576920a98381f3e4872493Nick Pelly
64047e37c4428509524ee576920a98381f3e4872493Nick Pelly
64147e37c4428509524ee576920a98381f3e4872493Nick Pelly
64247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::GetComponentVersion
64547e37c4428509524ee576920a98381f3e4872493Nick Pelly
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns the component version.
64847e37c4428509524ee576920a98381f3e4872493Nick Pelly
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   TBD.
65147e37c4428509524ee576920a98381f3e4872493Nick Pelly
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX_ErrorNone.
65447e37c4428509524ee576920a98381f3e4872493Nick Pelly
65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
65647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_component_version
65747e37c4428509524ee576920a98381f3e4872493Nick Pelly(
65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp,
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_STRING componentName,
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* componentVersion,
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* specVersion,
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_UUIDTYPE* componentUUID
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan )
66447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
6658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
6668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)componentName;
6678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)componentVersion;
6688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)componentUUID;
66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
6708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Comp Version in Invalid State");
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* TBD -- Return the proper version */
67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (specVersion) {
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        specVersion->nVersion = OMX_SPEC_VERSION;
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
67847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
67947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::SendCommand
68247e37c4428509524ee576920a98381f3e4872493Nick Pelly
68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns zero if all the buffers released..
68547e37c4428509524ee576920a98381f3e4872493Nick Pelly
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
68847e37c4428509524ee576920a98381f3e4872493Nick Pelly
68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
69147e37c4428509524ee576920a98381f3e4872493Nick Pelly
69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
69347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::send_command(OMX_IN OMX_HANDLETYPE hComp,
69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_COMMANDTYPE cmd,
69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32 param1,
69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR cmdData
69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        )
69847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
6998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
7018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Send Command in Invalid State");
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (cmd == OMX_CommandFlush || cmd == OMX_CommandPortDisable || cmd == OMX_CommandPortEnable) {
7068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if ((param1 != (OMX_U32)PORT_INDEX_IN) && (param1 != (OMX_U32)PORT_INDEX_OUT) && (param1 != (OMX_U32)PORT_INDEX_BOTH)) {
7078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index");
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadPortIndex;
70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (cmd == OMX_CommandMarkBuffer) {
71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 != PORT_INDEX_IN) {
7138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index");
71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadPortIndex;
71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!cmdData) {
71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->param is null");
71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
7228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    post_event((unsigned long)cmd,(unsigned long)param1,OMX_COMPONENT_GENERATE_COMMAND);
72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_wait(&m_cmd_lock);
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
72547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
72647e37c4428509524ee576920a98381f3e4872493Nick Pelly
72747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::SendCommand
73047e37c4428509524ee576920a98381f3e4872493Nick Pelly
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns zero if all the buffers released..
73347e37c4428509524ee576920a98381f3e4872493Nick Pelly
73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
73647e37c4428509524ee576920a98381f3e4872493Nick Pelly
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
73947e37c4428509524ee576920a98381f3e4872493Nick Pelly
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
74147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::send_command_proxy(OMX_IN OMX_HANDLETYPE hComp,
74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_COMMANDTYPE cmd,
74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32 param1,
74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR cmdData
74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        )
74647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
7478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
7488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)cmdData;
7498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_STATETYPE eState = (OMX_STATETYPE) param1;
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int bFlag = 1;
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (cmd == OMX_CommandStateSet) {
75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is Loaded */
75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_state == OMX_StateLoaded) {
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateIdle) {
76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //if all buffers are allocated or all ports disabled
76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (allocate_done() ||
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ( m_sInPortDef.bEnabled == OMX_FALSE && m_sOutPortDef.bEnabled == OMX_FALSE)) {
7638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle");
76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
7658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle-Pending");
76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags, OMX_COMPONENT_IDLE_PENDING);
76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    // Skip the event notification
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Loaded */
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateLoaded) {
7738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Loaded");
77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to WaitForResources */
77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition */
7828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->WaitForResources");
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Executing */
78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
7868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Executing");
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Pause */
79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
7938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Pause");
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Loaded to Invalid */
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
8008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Invalid");
80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
8048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->%d Not Handled",\
80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eState);
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
80847e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is IDLE */
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StateIdle) {
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateLoaded) {
81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (release_done()) {
81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    /*
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                       Since error is None , we will post an event at the end
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                       of this function definition
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                     */
8208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded");
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (dev_stop() != 0) {
8228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: dev_stop() failed at Idle --> Loaded");
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorHardware;
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
8268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded-Pending");
82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags, OMX_COMPONENT_LOADING_PENDING);
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    // Skip the event notification
82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Executing */
83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( dev_start() ) {
8358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Exe");
83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING);
8408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Executing");
84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dev_start_done();
84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Idle */
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateIdle) {
8488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Idle");
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to WaitForResources */
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
8558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->WaitForResources");
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Pause */
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /*To pause the Video core we need to start the driver*/
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( dev_start() ) {
8648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Pause");
86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING);
8698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Pause");
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Idle to Invalid */
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
8758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Invalid");
87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
8798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle --> %d Not Handled",eState);
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
88247e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
88347e37c4428509524ee576920a98381f3e4872493Nick Pelly
88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /******************************/
88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is Executing */
88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /******************************/
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StateExecuting) {
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Idle */
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateIdle) {
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition
89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                 */
8938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Executing --> Idle");
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                //here this should be Pause-Idle pending and should be cleared when flush is complete and change the state to Idle
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING);
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                execute_omx_flush(OMX_ALL);
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Paused */
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_pause()) {
9038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in SCP on Exe --> Pause");
90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    post_event(OMX_EventError,OMX_ErrorHardware,\
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_COMPONENT_GENERATE_EVENT);
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING);
9098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Executing-->Pause");
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Loaded */
91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateLoaded) {
9158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Loaded");
91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to WaitForResources */
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
9228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> WaitForResources");
92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Executing */
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
9298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Executing");
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Executing to Invalid */
93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
9368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Invalid");
93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
9408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> %d Not Handled",eState);
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
94347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is Pause  */
94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StatePause) {
94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Executing */
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateExecuting) {
9508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Pause --> Executing");
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if ( dev_resume() ) {
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    post_event(OMX_EventError,OMX_ErrorHardware,\
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            OMX_COMPONENT_GENERATE_EVENT);
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING);
9578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("OMXCORE-SM: Pause-->Executing");
9588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    post_event (0, 0, OMX_COMPONENT_GENERATE_RESUME_DONE);
95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    bFlag = 0;
96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Idle */
96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateIdle) {
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition */
9668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Pause --> Idle");
96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING);
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                execute_omx_flush(OMX_ALL);
96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to loaded */
97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateLoaded) {
9738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> loaded");
97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to WaitForResources */
97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
9808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> WaitForResources");
98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Pause */
98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
9878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> Pause");
98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,\
98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from Pause to Invalid */
99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
9948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Pause --> Invalid");
99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
9988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Paused --> %d Not Handled",eState);
99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorBadParameter;
100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
100147e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* Current State is WaitForResources  */
100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /***************************/
100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else if (m_state == OMX_StateWaitForResources) {
100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Loaded */
100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (eState == OMX_StateLoaded) {
100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                /* Since error is None , we will post an event
100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   at the end of this function definition */
10108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: WaitForResources-->Loaded");
101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to WaitForResources */
101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateWaitForResources) {
10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->WaitForResources");
101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorSameState,
101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorSameState;
101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Executing */
102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateExecuting) {
10218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Executing");
102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Pause */
102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StatePause) {
10288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Pause");
102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\
103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorIncorrectStateTransition;
103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Invalid */
103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else if (eState == OMX_StateInvalid) {
10358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Invalid");
103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT);
103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorInvalidState;
103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Requesting transition from WaitForResources to Loaded -
104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan               is NOT tested by Khronos TS */
104147e37c4428509524ee576920a98381f3e4872493Nick Pelly
104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
10438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: %d --> %d(Not Handled)",m_state,eState);
104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorBadParameter;
104547e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /********************************/
104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* Current State is Invalid */
104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*******************************/
105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    else if (m_state == OMX_StateInvalid) {
105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /* State Transition from Inavlid to any state */
105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (eState == (OMX_StateLoaded || OMX_StateWaitForResources
105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || OMX_StateIdle || OMX_StateExecuting
105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || OMX_StatePause || OMX_StateInvalid)) {
10558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Invalid -->Loaded");
105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_EventError,OMX_ErrorInvalidState,\
105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
105861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInvalidState;
105947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (cmd == OMX_CommandFlush) {
106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (0 == param1 || OMX_ALL == param1) {
106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_FLUSH_PENDING);
106347e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (1 == param1 || OMX_ALL == param1) {
106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //generate output flush event only.
106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_FLUSH_PENDING);
106747e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
106847e37c4428509524ee576920a98381f3e4872493Nick Pelly
106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        execute_omx_flush(param1);
107047e37c4428509524ee576920a98381f3e4872493Nick Pelly        bFlag = 0;
107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if ( cmd == OMX_CommandPortEnable) {
107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) {
107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sInPortDef.bEnabled = OMX_TRUE;
107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( (m_state == OMX_StateLoaded &&
107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING))
107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || allocate_input_done()) {
107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,PORT_INDEX_IN,
107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
10818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending");
108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_ENABLE_PENDING);
108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
108647e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) {
108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sOutPortDef.bEnabled = OMX_TRUE;
108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( (m_state == OMX_StateLoaded &&
109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING))
109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    || (allocate_output_done())) {
109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,PORT_INDEX_OUT,
109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
10978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending");
109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_ENABLE_PENDING);
109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (cmd == OMX_CommandPortDisable) {
110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) {
110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sInPortDef.bEnabled = OMX_FALSE;
110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle)
110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && release_input_done()) {
110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortDisable,PORT_INDEX_IN,
110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_DISABLE_PENDING);
111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) {
111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    execute_omx_flush(PORT_INDEX_IN);
111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) {
112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sOutPortDef.bEnabled = OMX_FALSE;
112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
112361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle)
112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && release_output_done()) {
112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortDisable,PORT_INDEX_OUT,\
112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_DISABLE_PENDING);
112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) {
113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    execute_omx_flush(PORT_INDEX_OUT);
113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Skip the event notification
113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bFlag = 0;
113447e37c4428509524ee576920a98381f3e4872493Nick Pelly
113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
113761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
11388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid Command received other than StateSet (%d)",cmd);
113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorNotImplemented;
114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone && bFlag) {
114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        post_event(cmd,eState,OMX_COMPONENT_GENERATE_EVENT);
114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    sem_post(&m_cmd_lock);
114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
114647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
114747e37c4428509524ee576920a98381f3e4872493Nick Pelly
114847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ExecuteOmxFlush
115147e37c4428509524ee576920a98381f3e4872493Nick Pelly
115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Executes the OMX flush.
115447e37c4428509524ee576920a98381f3e4872493Nick Pelly
115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   flushtype - input flush(1)/output flush(0)/ both.
115747e37c4428509524ee576920a98381f3e4872493Nick Pelly
115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
115961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
116047e37c4428509524ee576920a98381f3e4872493Nick Pelly
116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
116247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_omx_flush(OMX_U32 flushType)
116347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
11658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_omx_flush -  %u", (unsigned int)flushType);
11666eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* XXX: The driver/hardware does not support flushing of individual ports
116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * in all states. So we pretty much need to flush both ports internally,
116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * but client should only get the FLUSH_(INPUT|OUTPUT)_DONE for the one it
117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * requested.  Since OMX_COMPONENT_(OUTPUT|INPUT)_FLUSH_PENDING isn't set,
117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan     * we automatically omit sending the FLUSH done for the "opposite" port. */
117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
11736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    input_flush_progress = true;
11746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    output_flush_progress = true;
11756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    bRet = execute_flush_all();
11766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (flushType == 0 || flushType == OMX_ALL) {
117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        input_flush_progress = true;
117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //flush input only
118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = execute_input_flush();
118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (flushType == 1 || flushType == OMX_ALL) {
118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //flush output only
118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        output_flush_progress = true;
118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = execute_output_flush();
118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
11876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
118947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
119047e37c4428509524ee576920a98381f3e4872493Nick Pelly/*=========================================================================
119147e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_output_flush
119247e37c4428509524ee576920a98381f3e4872493Nick Pelly
119347e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
119461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at OUTPUT PORT.
119547e37c4428509524ee576920a98381f3e4872493Nick Pelly
119647e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
119761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone.
119847e37c4428509524ee576920a98381f3e4872493Nick Pelly
119947e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false
120147e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/
120247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_output_flush(void)
120347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
12048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1 = 0; // Parameter - 1
12058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2 = 0; // Parameter - 2
12068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident = 0;
120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = true;
120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate FBD for all Buffers in the FTBq*/
12108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_output_flush");
121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
121261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_ftb_q.m_size) {
121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.pop_entry(&p1,&p2,&ident);
121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_FTB ) {
121661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_output_buffers++;
121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_FBD) {
121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if there are buffers with the Driver*/
122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_flush(PORT_INDEX_OUT)) {
12268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: o/p dev_flush() Failed");
122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
122961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
123147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
123247e37c4428509524ee576920a98381f3e4872493Nick Pelly/*=========================================================================
123347e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_input_flush
123447e37c4428509524ee576920a98381f3e4872493Nick Pelly
123547e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION
123661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT PORT.
123747e37c4428509524ee576920a98381f3e4872493Nick Pelly
123847e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS
123961a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone.
124047e37c4428509524ee576920a98381f3e4872493Nick Pelly
124147e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE
124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false
124347e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/
124447e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_input_flush(void)
124547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
12468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1 = 0; // Parameter - 1
12478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2 = 0; // Parameter - 2
12488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident = 0;
124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = true;
125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
125161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate EBD for all Buffers in the ETBq*/
12528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_input_flush");
125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_etb_q.m_size) {
125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.pop_entry(&p1,&p2,&ident);
125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_ETB) {
125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_input_buffers++;
125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_EBD) {
126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_ETB_OPQ) {
126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2);
126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
126561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mUseProxyColorFormat) {
126761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (psource_frame) {
126861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame);
126961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            psource_frame = NULL;
127061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        while (m_opq_meta_q.m_size) {
12728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long p1,p2,id;
127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_meta_q.pop_entry(&p1,&p2,&id);
127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,
127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_BUFFERHEADERTYPE  *)p1);
127661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (pdest_frame) {
12788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0);
127961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pdest_frame = NULL;
128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
128161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
128261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
128361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if there are buffers with the Driver*/
128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_flush(PORT_INDEX_IN)) {
12858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: i/p dev_flush() Failed");
128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
12906eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}
12916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
12926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
12936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal/*=========================================================================
12946eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalFUNCTION : execute_flush
12956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
12966eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalDESCRIPTION
129761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT & OUTPUT PORT.
12986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
12996eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalPARAMETERS
130061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone.
13016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
13026eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalRETURN VALUE
130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false
13046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal==========================================================================*/
13056eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
13066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_video::execute_flush_all(void)
13076eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{
13088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1 = 0; // Parameter - 1
13098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2 = 0; // Parameter - 2
13108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident = 0;
131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = true;
131261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
13138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_flush_all");
131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate EBD for all Buffers in the ETBq*/
131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
131761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_etb_q.m_size) {
131861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.pop_entry(&p1,&p2,&ident);
131961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_ETB) {
132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_input_buffers++;
132161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
132261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_EBD) {
132361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
13248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        } else if(ident == OMX_COMPONENT_GENERATE_ETB_OPQ) {
13258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2);
13268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
13278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
13288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(mUseProxyColorFormat) {
13298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if(psource_frame) {
13308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame);
13318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            psource_frame = NULL;
13328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
13338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        while(m_opq_meta_q.m_size) {
13348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long p1,p2,id;
13358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_opq_meta_q.pop_entry(&p1,&p2,&id);
13368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,
13378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (OMX_BUFFERHEADERTYPE  *)p1);
13388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
13398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if(pdest_frame){
13408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0);
13418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            pdest_frame = NULL;
134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Generate FBD for all Buffers in the FTBq*/
13468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("execute_output_flush");
134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_ftb_q.m_size) {
134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.pop_entry(&p1,&p2,&ident);
134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_FTB ) {
135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_output_buffers++;
135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2);
135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (ident == OMX_COMPONENT_GENERATE_FBD) {
135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1);
135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
135661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Check if there are buffers with the Driver*/
136161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_flush(PORT_INDEX_BOTH)) {
13628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: dev_flush() Failed");
136361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
136647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
136747e37c4428509524ee576920a98381f3e4872493Nick Pelly
13686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
136947e37c4428509524ee576920a98381f3e4872493Nick Pelly
137047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::SendCommandEvent
137347e37c4428509524ee576920a98381f3e4872493Nick Pelly
137461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Send the event to decoder pipe.  This is needed to generate the callbacks
137661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   in decoder thread context.
137747e37c4428509524ee576920a98381f3e4872493Nick Pelly
137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
138047e37c4428509524ee576920a98381f3e4872493Nick Pelly
138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
138347e37c4428509524ee576920a98381f3e4872493Nick Pelly
138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
13858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::post_event(unsigned long p1,
13868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        unsigned long p2,
13878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        unsigned long id)
138847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
13898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool bRet =  false;
139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if ((id == OMX_COMPONENT_GENERATE_FTB) ||
139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_FBD) ||
139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH)) {
139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.insert_entry(p1,p2,id);
139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if ((id == OMX_COMPONENT_GENERATE_ETB) ||
139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_EBD) ||
139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (id == OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH)) {
140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.insert_entry(p1,p2,id);
140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_cmd_q.insert_entry(p1,p2,id);
140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
140461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bRet = true;
14068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Value of this pointer in post_event %p",this);
140761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    post_message(this, id);
140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
141061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
141147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
141247e37c4428509524ee576920a98381f3e4872493Nick Pelly
141347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
141461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
141561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::GetParameter
141647e37c4428509524ee576920a98381f3e4872493Nick Pelly
141761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Get Parameter method implementation
141947e37c4428509524ee576920a98381f3e4872493Nick Pelly
142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
142247e37c4428509524ee576920a98381f3e4872493Nick Pelly
142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Error None if successful.
142547e37c4428509524ee576920a98381f3e4872493Nick Pelly
142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
142747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_parameter(OMX_IN OMX_HANDLETYPE     hComp,
142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE paramIndex,
142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_PTR     paramData)
143047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
14318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int height=0,width = 0;
14346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
14358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_parameter:");
143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
14378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid State");
143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
144061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (paramData == NULL) {
14418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData");
144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
14448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    switch ((int)paramIndex) {
144561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPortDefinition:
144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
144716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_PORTDEFINITIONTYPE);
144861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_PORTDEFINITIONTYPE *portDefn;
144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData;
145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
14518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPortDefinition");
145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_IN) {
14538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    dev_get_buf_req (&m_sInPortDef.nBufferCountMin,
14548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        &m_sInPortDef.nBufferCountActual,
14558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        &m_sInPortDef.nBufferSize,
14568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_sInPortDef.nPortIndex);
14578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("m_sInPortDef: size = %u, min cnt = %u, actual cnt = %u",
14588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountMin,
14598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sInPortDef.nBufferCountActual);
146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(portDefn, &m_sInPortDef, sizeof(m_sInPortDef));
146161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_
146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (meta_mode_enable) {
146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        portDefn->nBufferSize = sizeof(encoder_media_buffer_type);
146461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
146561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (mUseProxyColorFormat) {
146661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        portDefn->format.video.eColorFormat =
146761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque;
146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
1469826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
147061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_OUT) {
1471f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    if (m_state != OMX_StateExecuting) {
147261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    dev_get_buf_req (&m_sOutPortDef.nBufferCountMin,
147361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferCountActual,
147461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            &m_sOutPortDef.nBufferSize,
147561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            m_sOutPortDef.nPortIndex);
1476f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    }
14778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("m_sOutPortDef: size = %u, min cnt = %u, actual cnt = %u",
14788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountMin,
14798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)m_sOutPortDef.nBufferCountActual);
148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(portDefn, &m_sOutPortDef, sizeof(m_sOutPortDef));
148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
148461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
148561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
148761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoInit:
148861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
148916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
149061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE *portParamType =
149161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_PORT_PARAM_TYPE *) paramData;
14928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoInit");
149361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
149461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(portParamType, &m_sPortParam, sizeof(m_sPortParam));
149561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
14966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal            }
149761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoPortFormat:
149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
149916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PORTFORMATTYPE);
150061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt =
150161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData;
15028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoPortFormat");
150361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
150461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_IN) {
15058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    unsigned index = portFmt->nIndex;
15060b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //we support two formats
15070b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //index 0 - Venus flavour of YUV420SP
15080b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //index 1 - opaque which internally maps to YUV420SP.
15090b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //index 2 - vannilla YUV420SP
15100b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    //this can be extended in the future
15110b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    int supportedFormats[] = {
15120b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        [0] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
15130b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        [1] = QOMX_COLOR_FormatAndroidOpaque,
15140b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        [2] = OMX_COLOR_FormatYUV420SemiPlanar,
15150b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    };
15160b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan
1517f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    if (index > (sizeof(supportedFormats)/sizeof(*supportedFormats) - 1))
151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorNoMore;
151961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    else {
152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        memcpy(portFmt, &m_sInPortFormat, sizeof(m_sInPortFormat));
15210b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        portFmt->nIndex = index; //restore index set from client
15220b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                        portFmt->eColorFormat = (OMX_COLOR_FORMATTYPE)supportedFormats[index];
152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
152461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_OUT) {
152561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(portFmt, &m_sOutPortFormat, sizeof(m_sOutPortFormat));
152661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
152761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
152961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
153061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
153161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
153261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoBitrate:
153361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
153416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_BITRATETYPE);
153561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData;
15368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoBitrate");
153761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
153861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) {
153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(pParam, &m_sParamBitrate, sizeof(m_sParamBitrate));
154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
154161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
154261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
154361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
154461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
154561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
154661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
154761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoMpeg4:
154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
154916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_MPEG4TYPE);
155061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData;
15518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoMpeg4");
155261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamMPEG4, sizeof(m_sParamMPEG4));
155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
155461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
155561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoH263:
155661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
155716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_H263TYPE);
155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData;
15598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoH263");
156061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamH263, sizeof(m_sParamH263));
156161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
156261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoAvc:
156461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
156516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_AVCTYPE);
156661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData;
15678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoAvc");
156861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamAVC, sizeof(m_sParamAVC));
156961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
157061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
15717beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8:
15727beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            {
157316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_VP8TYPE);
15747beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData;
15758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoVp8");
15767beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                memcpy(pParam, &m_sParamVP8, sizeof(m_sParamVP8));
15777beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                break;
15787beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            }
1579f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case (OMX_INDEXTYPE)OMX_IndexParamVideoHevc:
1580f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
158116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_HEVCTYPE);
1582f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_VIDEO_PARAM_HEVCTYPE* pParam = (OMX_VIDEO_PARAM_HEVCTYPE*)paramData;
1583f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoHevc");
1584f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(pParam, &m_sParamHEVC, sizeof(m_sParamHEVC));
1585f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
1586f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
158761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoProfileLevelQuerySupported:
158861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
158916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE);
159061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
15918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported");
159261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = get_supported_profile_level(pParam);
15938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (eRet && eRet != OMX_ErrorNoMore)
15948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_supported_profile_level %u, %u",
15958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)pParam->eProfile, (unsigned int)pParam->eLevel);
159661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
159761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
159861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoProfileLevelCurrent:
159961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
160016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE);
160161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData;
16028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelCurrent");
160361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sParamProfileLevel, sizeof(m_sParamProfileLevel));
160461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
160561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
160661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Component should support this port definition*/
160761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamAudioInit:
160861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
160916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
161061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE *audioPortParamType = (OMX_PORT_PARAM_TYPE *) paramData;
16118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamAudioInit");
161261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(audioPortParamType, &m_sPortParam_audio, sizeof(m_sPortParam_audio));
161361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
161461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
161561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Component should support this port definition*/
161661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamImageInit:
161761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
161816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE);
161961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PORT_PARAM_TYPE *imagePortParamType = (OMX_PORT_PARAM_TYPE *) paramData;
16208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamImageInit");
162161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(imagePortParamType, &m_sPortParam_img, sizeof(m_sPortParam_img));
162261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
162461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Component should support this port definition*/
162661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamOtherInit:
162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
16288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: get_parameter: OMX_IndexParamOtherInit %08x", paramIndex);
162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet =OMX_ErrorUnsupportedIndex;
163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
163161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamStandardComponentRole:
163361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
163416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_COMPONENTROLETYPE);
163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_COMPONENTROLETYPE *comp_role;
163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData;
163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role->nVersion.nVersion = OMX_SPEC_VERSION;
163861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                comp_role->nSize = sizeof(*comp_role);
163961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
16408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Getparameter: OMX_IndexParamStandardComponentRole %d",paramIndex);
16417ee8c166895cb654eb241ab283a63cdbbe40ae18Bernhard Rosenkraenzer                strlcpy((char*)comp_role->cRole,(const char*)m_cRole,OMX_MAX_STRINGNAME_SIZE);
164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Added for parameter test */
164561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamPriorityMgmt:
164661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
164716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PRIORITYMGMTTYPE);
164861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PRIORITYMGMTTYPE *priorityMgmType = (OMX_PRIORITYMGMTTYPE *) paramData;
16498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPriorityMgmt");
165061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(priorityMgmType, &m_sPriorityMgmt, sizeof(m_sPriorityMgmt));
165161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
165361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /* Added for parameter test */
165461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamCompBufferSupplier:
165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
165616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_BUFFERSUPPLIERTYPE);
165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData;
16588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamCompBufferSupplier");
165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_IN) {
166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(bufferSupplierType, &m_sInBufSupplier, sizeof(m_sInBufSupplier));
166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_OUT) {
166261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    memcpy(bufferSupplierType, &m_sOutBufSupplier, sizeof(m_sOutBufSupplier));
166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
166461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index");
166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadPortIndex;
166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
166861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
166961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
167061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoQuantization:
167161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
167216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_QUANTIZATIONTYPE);
167361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData;
16748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoQuantization");
167561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(session_qp, &m_sSessionQuantization, sizeof(m_sSessionQuantization));
167661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
167761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamVideoQPRange:
168061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
168116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE);
168261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData;
16838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoQPRange");
168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(qp_range, &m_sSessionQPRange, sizeof(m_sSessionQPRange));
168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
168661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoErrorCorrection:
168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
169016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE);
169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* errorresilience = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData;
16928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection");
169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                errorresilience->bEnableHEC = m_sErrorCorrection.bEnableHEC;
169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                errorresilience->bEnableResync = m_sErrorCorrection.bEnableResync;
169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                errorresilience->nResynchMarkerSpacing = m_sErrorCorrection.nResynchMarkerSpacing;
169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoIntraRefresh:
169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
170016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_INTRAREFRESHTYPE);
170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_PARAM_INTRAREFRESHTYPE* intrarefresh = (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData;
17028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("OMX_IndexParamVideoIntraRefresh");
17038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("OMX_IndexParamVideoIntraRefresh GET");
170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                intrarefresh->eRefreshMode = m_sIntraRefresh.eRefreshMode;
170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                intrarefresh->nCirMBs = m_sIntraRefresh.nCirMBs;
170661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexPortDefn:
170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //TODO
171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_COMPONENT_CAPABILITY_TYPE_INDEX:
171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
171316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMXComponentCapabilityFlagsType);
171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMXComponentCapabilityFlagsType *pParam = reinterpret_cast<OMXComponentCapabilityFlagsType*>(paramData);
17158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_COMPONENT_CAPABILITY_TYPE_INDEX");
171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iIsOMXComponentMultiThreaded = OMX_TRUE;
171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE;
171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentUsesNALStartCodes = OMX_TRUE;
172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentSupportsPartialFrames = OMX_FALSE;
172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentCanHandleIncompleteFrames = OMX_FALSE;
172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pParam->iOMXComponentUsesFullAVCFrames = OMX_FALSE;
172461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_use_input_pmem = OMX_TRUE;
172561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("Supporting capability index in encoder node");
172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
17286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_)
172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_QcomIndexParamIndexExtraDataType:
173061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
173116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_INDEXEXTRADATATYPE);
173261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamIndexExtraDataType");
173361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData;
173461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) {
173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->bEnabled =
17378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_SLICEINFO);
173861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("Slice Info extradata %d", pParam->bEnabled);
173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: slice information is "
174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                "valid for output port only");
174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet =OMX_ErrorUnsupportedIndex;
174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
17448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderMBInfo) {
17458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
17468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        pParam->bEnabled =
17478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_MBINFO);
17488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_HIGH("MB Info extradata %d", pParam->bEnabled);
17498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    } else {
17508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: MB information is "
17518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                "valid for output port only");
17528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
17538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    }
175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
17556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) {
175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (pParam->nPortIndex == PORT_INDEX_OUT) {
175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->bEnabled =
17598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_LTRINFO);
176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_HIGH("LTR Info extradata %d", pParam->bEnabled);
176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
176261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: LTR information is "
176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                "valid for output port only");
176461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUnsupportedIndex;
176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
176661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
17676eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
176861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
176961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("get_parameter: unsupported extradata index (0x%x)",
177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            pParam->nIndex);
177161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
177361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
177461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoLTRCountRangeSupported:
177661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
177716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_RANGETYPE);
177861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("get_parameter: QOMX_IndexParamVideoLTRCountRangeSupported");
177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_RANGETYPE *pParam = (QOMX_EXTNINDEX_RANGETYPE *)paramData;
178061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->nPortIndex == PORT_INDEX_OUT) {
178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_U32 min = 0, max = 0, step_size = 0;
178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (dev_get_capability_ltrcount(&min, &max, &step_size)) {
178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nMin = min;
178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nMax = max;
178561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        pParam->nStepSize = step_size;
178661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    } else {
178761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_ERROR("get_parameter: get_capability_ltrcount failed");
178861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        eRet = OMX_ErrorUndefined;
178961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("LTR count range is valid for output port only");
179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
1796f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case OMX_QcomIndexParamVideoLTRCount:
1797f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
179816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE);
1799f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoLTRCount");
1800f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE *pParam =
1801f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        reinterpret_cast<OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE*>(paramData);
1802f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(pParam, &m_sParamLTRCount, sizeof(m_sParamLTRCount));
1803f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
1804f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
1805826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
180661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexParamVideoSyntaxHdr:
180761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
180816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE);
180961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_HIGH("QOMX_IndexParamVideoSyntaxHdr");
181061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_EXTNINDEX_PARAMTYPE* pParam =
181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<QOMX_EXTNINDEX_PARAMTYPE*>(paramData);
181261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam->pData == NULL) {
181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("Error: Data buffer is NULL");
181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorBadParameter;
181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
181661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
181761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (get_syntaxhdr_enable == false) {
181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: get_parameter: Get syntax header disabled");
181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorUnsupportedIndex;
182061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    break;
182161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
182261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_START_PENDING);
182361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_loaded_start()) {
182461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("device start successful");
182561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
182661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("device start failed");
182761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_START_PENDING);
182861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorHardware;
182961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_get_seq_hdr(pParam->pData,
183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            (unsigned)(pParam->nSize - sizeof(QOMX_EXTNINDEX_PARAMTYPE)),
1832f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                            (unsigned *)(void *)&pParam->nDataSize)) {
18338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_HIGH("get syntax header successful (hdrlen = %u)",
18348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            (unsigned int)pParam->nDataSize);
183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    for (unsigned i = 0; i < pParam->nDataSize; i++) {
183661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        DEBUG_PRINT_LOW("Header[%d] = %x", i, *((char *)pParam->pData + i));
183761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    }
183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
183961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("Error returned from GetSyntaxHeader()");
184061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
184161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
184261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING);
184361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (dev_loaded_stop()) {
184461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("device stop successful");
184561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
184661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("device stop failed");
184761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING);
184861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    eRet = OMX_ErrorHardware;
184961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
185061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
185161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
18528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexHierarchicalStructure:
18538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
185416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_HIERARCHICALLAYERS);
18558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                QOMX_VIDEO_HIERARCHICALLAYERS* hierp = (QOMX_VIDEO_HIERARCHICALLAYERS*) paramData;
18568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexHierarchicalStructure");
18578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                memcpy(hierp, &m_sHierLayers, sizeof(m_sHierLayers));
18588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
18598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
18608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamPerfLevel:
18618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
186216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PERF_LEVEL);
18638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 perflevel;
18648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_QCOM_VIDEO_PARAM_PERF_LEVEL *pParam =
18658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PERF_LEVEL*>(paramData);
18668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPerfLevel");
18678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!dev_get_performance_level(&perflevel)) {
18688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d",
18698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        pParam->ePerfLevel);
18708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
18718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel;
18728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
18738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
18748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
18758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamH264VUITimingInfo:
18768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
187716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO);
18788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 enabled;
18798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO *pParam =
18808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO*>(paramData);
18818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamH264VUITimingInfo");
18828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!dev_get_vui_timing_info(&enabled)) {
18838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_vui_Timing_info %d",
18848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        pParam->bEnable);
18858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
18868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pParam->bEnable = (OMX_BOOL)enabled;
18878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
18888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
18898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
18908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_QcomIndexParamPeakBitrate:
18918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
189216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE);
18938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 peakbitrate;
18948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE *pParam =
18958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE*>(paramData);
18968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPeakBitrate");
18978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if (!dev_get_peak_bitrate(&peakbitrate)) {
18988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_peak_bitrate %u",
18998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)pParam->nPeakBitrate);
19008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                } else {
19018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pParam->nPeakBitrate = peakbitrate;
19028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
19038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
19048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
19058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan         case QOMX_IndexParamVideoInitialQp:
19068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
190716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_INITIALQP);
19088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                 QOMX_EXTNINDEX_VIDEO_INITIALQP* initqp =
19098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                     reinterpret_cast<QOMX_EXTNINDEX_VIDEO_INITIALQP *>(paramData);
19108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                     memcpy(initqp, &m_sParamInitqp, sizeof(m_sParamInitqp));
19118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
19128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
191361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexParamVideoSliceFMO:
191461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
191561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
19168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("ERROR: get_parameter: unknown param %08x", paramIndex);
191761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet =OMX_ErrorUnsupportedIndex;
191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
192061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
192447e37c4428509524ee576920a98381f3e4872493Nick Pelly
192547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
192647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::GetConfig
192947e37c4428509524ee576920a98381f3e4872493Nick Pelly
193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
193161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Get Config Method implementation.
193247e37c4428509524ee576920a98381f3e4872493Nick Pelly
193361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
193461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
193547e37c4428509524ee576920a98381f3e4872493Nick Pelly
193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if successful.
193847e37c4428509524ee576920a98381f3e4872493Nick Pelly
193961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
194047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_config(OMX_IN OMX_HANDLETYPE      hComp,
194161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_INDEXTYPE configIndex,
194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_PTR     configData)
194347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
19448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ////////////////////////////////////////////////////////////////
194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // Supported Config Index           Type
194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // =============================================================
194861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // OMX_IndexConfigVideoBitrate      OMX_VIDEO_CONFIG_BITRATETYPE
194961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // OMX_IndexConfigVideoFramerate    OMX_CONFIG_FRAMERATETYPE
195061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // OMX_IndexConfigCommonRotate      OMX_CONFIG_ROTATIONTYPE
195161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ////////////////////////////////////////////////////////////////
195261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
195361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (configData == NULL) {
195461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: param is null");
195561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
195961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: can't be in invalid state");
196061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
196161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
196261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
196361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    //@todo need to validate params
19648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    switch ((int)configIndex) {
196561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoBitrate:
196661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
196716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_BITRATETYPE);
196861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_BITRATETYPE* pParam = reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData);
196961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigBitrate, sizeof(m_sConfigBitrate));
197061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
197161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
197261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoFramerate:
197361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
197416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_FRAMERATETYPE);
197561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_FRAMERATETYPE* pParam = reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData);
197661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigFramerate, sizeof(m_sConfigFramerate));
197761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
197861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
197961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigCommonRotate:
198061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
198116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE);
198261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CONFIG_ROTATIONTYPE* pParam = reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData);
198361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigFrameRotation, sizeof(m_sConfigFrameRotation));
198461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
198561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
198661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case QOMX_IndexConfigVideoIntraperiod:
198761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
19888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_config:QOMX_IndexConfigVideoIntraperiod");
198916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_INTRAPERIODTYPE);
199061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                QOMX_VIDEO_INTRAPERIODTYPE* pParam = reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData);
199161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sIntraperiod, sizeof(m_sIntraperiod));
199261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
199361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
199461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        case OMX_IndexConfigVideoAVCIntraPeriod:
199561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            {
199616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_AVCINTRAPERIOD);
199761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam =
199861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    reinterpret_cast<OMX_VIDEO_CONFIG_AVCINTRAPERIOD*>(configData);
199961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoAVCIntraPeriod");
200061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                memcpy(pParam, &m_sConfigAVCIDRPeriod, sizeof(m_sConfigAVCIDRPeriod));
200161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
200261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
20038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        case OMX_IndexConfigCommonDeinterlace:
20048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            {
200516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_DEINTERLACE);
20068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_VIDEO_CONFIG_DEINTERLACE *pParam =
20078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    reinterpret_cast<OMX_VIDEO_CONFIG_DEINTERLACE*>(configData);
20088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_IndexConfigCommonDeinterlace");
20098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                memcpy(pParam, &m_sConfigDeinterlace, sizeof(m_sConfigDeinterlace));
20108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                break;
20118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
20128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan       case OMX_IndexConfigVideoVp8ReferenceFrame:
20138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           {
201416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_VP8REFERENCEFRAMETYPE);
20158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               OMX_VIDEO_VP8REFERENCEFRAMETYPE* pParam =
20168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                   reinterpret_cast<OMX_VIDEO_VP8REFERENCEFRAMETYPE*>(configData);
20178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoVp8ReferenceFrame");
20188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               memcpy(pParam, &m_sConfigVp8ReferenceFrame, sizeof(m_sConfigVp8ReferenceFrame));
20198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan               break;
20208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan           }
2021f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        case OMX_QcomIndexConfigPerfLevel:
2022f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            {
202316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                VALIDATE_OMX_PARAM_DATA(configData, OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL);
2024f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_U32 perflevel;
2025f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL *pParam =
2026f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    reinterpret_cast<OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL*>(configData);
2027f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigPerfLevel");
2028f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (!dev_get_performance_level(&perflevel)) {
2029f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d",
2030f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        pParam->ePerfLevel);
2031f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                } else {
2032f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel;
2033f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
2034f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                break;
2035f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
2036f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon      case OMX_IndexConfigAndroidIntraRefresh:
2037f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon           {
2038f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE);
2039f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE* pParam =
2040f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon                   reinterpret_cast<OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE*>(configData);
2041f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               DEBUG_PRINT_LOW("get_config: OMX_IndexConfigAndroidIntraRefresh");
2042f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               memcpy(pParam, &m_sConfigIntraRefresh, sizeof(m_sConfigIntraRefresh));
2043f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon               break;
2044f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon           }
204561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        default:
204661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex);
204761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorUnsupportedIndex;
204861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
204961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
205047e37c4428509524ee576920a98381f3e4872493Nick Pelly
205147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
205247e37c4428509524ee576920a98381f3e4872493Nick Pelly
2053c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan#define extn_equals(param, extn) (!strcmp(param, extn))
2054c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan
205547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
205661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
205761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::GetExtensionIndex
205847e37c4428509524ee576920a98381f3e4872493Nick Pelly
205961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
206061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX GetExtensionIndex method implementaion.  <TBD>
206147e37c4428509524ee576920a98381f3e4872493Nick Pelly
206261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
206361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
206447e37c4428509524ee576920a98381f3e4872493Nick Pelly
206561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
206661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
206747e37c4428509524ee576920a98381f3e4872493Nick Pelly
206861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
206947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_extension_index(OMX_IN OMX_HANDLETYPE      hComp,
207061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_STRING      paramName,
207161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_OUT OMX_INDEXTYPE* indexType)
207247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
20738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
207461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
20758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Get Extension Index in Invalid State");
207661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
207761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
2078826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
2079c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.QCOM.index.param.SliceDeliveryMode")) {
208061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode;
208161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorNone;
208261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
2083826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2084826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
2085c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.google.android.index.storeMetaDataInBuffers")) {
20868e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoMetaBufferMode;
2087826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return OMX_ErrorNone;
208861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
2089826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2090c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan    if (extn_equals(paramName, "OMX.google.android.index.prependSPSPPSToIDRFrames")) {
20918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR;
20928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        return OMX_ErrorNone;
20938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
209461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
209547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
209647e37c4428509524ee576920a98381f3e4872493Nick Pelly
209747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
209861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
209961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::GetState
210047e37c4428509524ee576920a98381f3e4872493Nick Pelly
210161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
210261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns the state information back to the caller.<TBD>
210347e37c4428509524ee576920a98381f3e4872493Nick Pelly
210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
210647e37c4428509524ee576920a98381f3e4872493Nick Pelly
210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
210861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Error None if everything is successful.
210961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
211047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::get_state(OMX_IN OMX_HANDLETYPE  hComp,
211161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_OUT OMX_STATETYPE* state)
211247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
21138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
211461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    *state = m_state;
21158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_state: Returning the state %d",*state);
211661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
211747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
211847e37c4428509524ee576920a98381f3e4872493Nick Pelly
211947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
212061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
212161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::ComponentTunnelRequest
212247e37c4428509524ee576920a98381f3e4872493Nick Pelly
212361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
212461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Component Tunnel Request method implementation. <TBD>
212547e37c4428509524ee576920a98381f3e4872493Nick Pelly
212661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
212761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
212847e37c4428509524ee576920a98381f3e4872493Nick Pelly
212961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
213061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
213147e37c4428509524ee576920a98381f3e4872493Nick Pelly
213261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
21338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE  omx_video::component_tunnel_request(OMX_IN OMX_HANDLETYPE  hComp,
213461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                        port,
213561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE        peerComponent,
213661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                    peerPort,
213761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_TUNNELSETUPTYPE* tunnelSetup)
213847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
21398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) hComp, (void) port, (void) peerComponent, (void) peerPort, (void) tunnelSetup;
21408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("ERROR: component_tunnel_request Not Implemented");
214161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
214247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
214347e37c4428509524ee576920a98381f3e4872493Nick Pelly
214447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
214561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
214661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::UseInputBuffer
214747e37c4428509524ee576920a98381f3e4872493Nick Pelly
214861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
214961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper function for Use buffer in the input pin
215047e37c4428509524ee576920a98381f3e4872493Nick Pelly
215161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
215261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
215347e37c4428509524ee576920a98381f3e4872493Nick Pelly
215461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
215561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
215647e37c4428509524ee576920a98381f3e4872493Nick Pelly
215761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
215847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::use_input_buffer(
215961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
216061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
216261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
216361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes,
216461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U8*                   buffer)
216547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
21668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void) hComp;
216761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
216847e37c4428509524ee576920a98381f3e4872493Nick Pelly
216961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned   i = 0;
217061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *buf_addr = NULL;
217147e37c4428509524ee576920a98381f3e4872493Nick Pelly
21728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("use_input_buffer: port = %u appData = %p bytes = %u buffer = %p",(unsigned int)port,appData,(unsigned int)bytes,buffer);
217361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bytes != m_sInPortDef.nBufferSize) {
21748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: use_input_buffer: Size Mismatch!! "
21758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                "bytes[%u] != Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize);
217661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
217747e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
217847e37c4428509524ee576920a98381f3e4872493Nick Pelly
217961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_inp_mem_ptr) {
218061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        input_use_buffer = true;
218161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \
218261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual);
218361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_inp_mem_ptr == NULL) {
21848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr");
218561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
218661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2187f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr);
218861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
219061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual);
219161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem == NULL) {
21928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem");
219361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
219461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
219661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual);
219761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_ion == NULL) {
21988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion");
219961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
220061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
2202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
220361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
220461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = -1;
2205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
220661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd =-1;
220761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].fd_ion_data.fd =-1;
22088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_ion[i].ion_alloc_data.handle = 0;
2209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
221061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
221147e37c4428509524ee576920a98381f3e4872493Nick Pelly
221261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
221347e37c4428509524ee576920a98381f3e4872493Nick Pelly
221461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
221561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_inp_bm_count,i)) {
221661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
221761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
221847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
221947e37c4428509524ee576920a98381f3e4872493Nick Pelly
222061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i < m_sInPortDef.nBufferCountActual) {
222147e37c4428509524ee576920a98381f3e4872493Nick Pelly
222261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *bufferHdr = (m_inp_mem_ptr + i);
222361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        BITMASK_SET(&m_inp_bm_count,i);
222447e37c4428509524ee576920a98381f3e4872493Nick Pelly
222561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pBuffer           = (OMX_U8 *)buffer;
222661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nSize             = sizeof(OMX_BUFFERHEADERTYPE);
222761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION;
222861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nAllocLen         = m_sInPortDef.nBufferSize;
222961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pAppPrivate       = appData;
223061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nInputPortIndex   = PORT_INDEX_IN;
223147e37c4428509524ee576920a98381f3e4872493Nick Pelly
223261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!m_use_input_pmem) {
2233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
22346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
223561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
223661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pInput_ion[i].ion_alloc_data,
223761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pInput_ion[i].fd_ion_data,0);
22386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
223961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
224061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pInput_ion[i].ion_alloc_data,
224161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pInput_ion[i].fd_ion_data,ION_FLAG_CACHED);
22426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
224361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_ion[i].ion_device_fd < 0) {
22448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
224561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
224661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
224761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd;
2248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
224961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
225061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_pmem[i].fd == 0) {
225161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
225261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
225347e37c4428509524ee576920a98381f3e4872493Nick Pelly
225461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_pmem[i] .fd < 0) {
22558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed");
225661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
225761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
2258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
225961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].size = m_sInPortDef.nBufferSize;
226061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].offset = 0;
22618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2262d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            m_pInput_pmem[i].buffer = NULL;
22638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
22648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pInput_pmem[i].buffer = (unsigned char *)mmap(
22658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    NULL,m_pInput_pmem[i].size,PROT_READ|PROT_WRITE,
226661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    MAP_SHARED,m_pInput_pmem[i].fd,0);
226761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
226861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pInput_pmem[i].buffer == MAP_FAILED) {
22698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: mmap() Failed");
2270d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                m_pInput_pmem[i].buffer = NULL;
227161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                close(m_pInput_pmem[i].fd);
2272826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
227361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                free_ion_memory(&m_pInput_ion[i]);
2274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
227561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
227661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
22778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
22788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
227961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
228061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *>((*bufferHdr)->pAppPrivate);
22818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (unsigned)pParam->offset);
228261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
228361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (pParam) {
228461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].fd = pParam->pmem_fd;
228561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].offset = pParam->offset;
228661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].size = m_sInPortDef.nBufferSize;
228761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pInput_pmem[i].buffer = (unsigned char *)buffer;
22888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("DBG:: pParam->pmem_fd = %u, pParam->offset = %u",
22898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)pParam->pmem_fd, (unsigned int)pParam->offset);
229061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
229161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM i/p UseBuffer case");
229261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorBadParameter;
229361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
229461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
229547e37c4428509524ee576920a98381f3e4872493Nick Pelly
22968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("use_inp:: bufhdr = %p, pBuffer = %p, m_pInput_pmem[i].buffer = %p",
229747e37c4428509524ee576920a98381f3e4872493Nick Pelly                (*bufferHdr), (*bufferHdr)->pBuffer, m_pInput_pmem[i].buffer);
229861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ( dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true) {
22998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: dev_use_buf() Failed for i/p buf");
230061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
230261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
23038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: All buffers are already used, invalid use_buf call for "
230461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                "index = %u", i);
230561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorInsufficientResources;
230661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
230761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
230861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
230947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
231047e37c4428509524ee576920a98381f3e4872493Nick Pelly
231147e37c4428509524ee576920a98381f3e4872493Nick Pelly
231247e37c4428509524ee576920a98381f3e4872493Nick Pelly
231347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
231461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
231561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::UseOutputBuffer
231647e37c4428509524ee576920a98381f3e4872493Nick Pelly
231761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
231861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper function for Use buffer in the input pin
231947e37c4428509524ee576920a98381f3e4872493Nick Pelly
232061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
232161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
232247e37c4428509524ee576920a98381f3e4872493Nick Pelly
232361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
232461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
232547e37c4428509524ee576920a98381f3e4872493Nick Pelly
232661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
232747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::use_output_buffer(
232861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
232961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
233161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
233261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes,
233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U8*                   buffer)
233447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
23358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)port;
233661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
233761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_BUFFERHEADERTYPE       *bufHdr= NULL; // buffer header
233861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned                         i= 0; // Temporary counter
233961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *buf_addr = NULL;
23406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
234161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int align_size;
23426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
234347e37c4428509524ee576920a98381f3e4872493Nick Pelly
23448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("Inside use_output_buffer()");
234561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bytes != m_sOutPortDef.nBufferSize) {
23468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: use_output_buffer: Size Mismatch!! "
23478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                "bytes[%u] != Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sOutPortDef.nBufferSize);
234861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
234947e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
235061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
235161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_out_mem_ptr) {
235261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        output_use_buffer = true;
235361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int nBufHdrSize        = 0;
235461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
23558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Allocating First Output Buffer(%u)",(unsigned int)m_sOutPortDef.nBufferCountActual);
235661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nBufHdrSize        = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE);
235761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*
235861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * Memory for output side involves the following:
235961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 1. Array of Buffer Headers
236061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 2. Bitmask array to hold the buffer allocation details
236161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * In order to minimize the memory management entire allocation
236261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * is done in one step.
236361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         */
236461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //OMX Buffer header
236561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_out_mem_ptr = (OMX_BUFFERHEADERTYPE  *)calloc(nBufHdrSize,1);
236661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_out_mem_ptr == NULL) {
23678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_out_mem_ptr");
236861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
236961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
237061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
237161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sOutPortDef.nBufferCountActual);
237261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_pmem == NULL) {
23738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem");
237461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
237561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2376826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
237761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual);
237861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_ion == NULL) {
23798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion");
238061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
238161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2382826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
238361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_out_mem_ptr) {
238461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bufHdr          =  m_out_mem_ptr;
23858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Memory Allocation Succeeded for OUT port%p",m_out_mem_ptr);
238661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Settting the entire storage nicely
238761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) {
238861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nSize              = sizeof(OMX_BUFFERHEADERTYPE);
238961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nVersion.nVersion  = OMX_SPEC_VERSION;
239061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nAllocLen          = bytes;
239161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nFilledLen         = 0;
239261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pAppPrivate        = appData;
239361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nOutputPortIndex   = PORT_INDEX_OUT;
239461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pBuffer            = NULL;
239561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr++;
239661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = -1;
2397826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
239861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd =-1;
239961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].fd_ion_data.fd=-1;
24008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_ion[i].ion_alloc_data.handle = 0;
2401826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
240261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
240361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
24048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: Output buf mem alloc failed[0x%p]",m_out_mem_ptr);
240561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet =  OMX_ErrorInsufficientResources;
240661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
240761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
240861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
240961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) {
241061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_out_bm_count,i)) {
241161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
241261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
241361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
241461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
241661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (i < m_sOutPortDef.nBufferCountActual) {
241761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            *bufferHdr = (m_out_mem_ptr + i );
241861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pBuffer = (OMX_U8 *)buffer;
241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pAppPrivate = appData;
242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
242161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!m_use_output_pmem) {
2422826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
24236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
24248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                align_size = (m_sOutPortDef.nBufferSize + (SZ_4K - 1)) & ~(SZ_4K - 1);
242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size,
242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        &m_pOutput_ion[i].ion_alloc_data,
242761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        &m_pOutput_ion[i].fd_ion_data,0);
24286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
242961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(
243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_sOutPortDef.nBufferSize,
243161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        &m_pOutput_ion[i].ion_alloc_data,
243261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        &m_pOutput_ion[i].fd_ion_data,ION_FLAG_CACHED);
24336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
243461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_ion[i].ion_device_fd < 0) {
24358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
243661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorInsufficientResources;
243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
243861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd;
2439826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
244061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
244147e37c4428509524ee576920a98381f3e4872493Nick Pelly
244261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem[i].fd == 0) {
244361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
244461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
244547e37c4428509524ee576920a98381f3e4872493Nick Pelly
244661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem[i].fd < 0) {
24478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed");
244861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorInsufficientResources;
244961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
2450826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
245161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize;
245261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].offset = 0;
24538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
2454d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                m_pOutput_pmem[i].buffer = NULL;
24558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                if(!secure_session) {
24566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
24578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
24588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        align_size,PROT_READ|PROT_WRITE,
245961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        MAP_SHARED,m_pOutput_pmem[i].fd,0);
24606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
24618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
24628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE,
246361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        MAP_SHARED,m_pOutput_pmem[i].fd,0);
24646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
246561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem[i].buffer == MAP_FAILED) {
24668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        DEBUG_PRINT_ERROR("ERROR: mmap() Failed");
2467d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    m_pOutput_pmem[i].buffer = NULL;
246861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    close(m_pOutput_pmem[i].fd);
2469826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free_ion_memory(&m_pOutput_ion[i]);
2471826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
247261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorInsufficientResources;
247361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
24748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                }
247561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO*>((*bufferHdr)->pAppPrivate);
24778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("Inside qcom_ext pParam: %p", pParam);
247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
247961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (pParam) {
24808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (int)pParam->offset);
248161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].fd = pParam->pmem_fd;
248261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].offset = pParam->offset;
248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize;
248461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem[i].buffer = (unsigned char *)buffer;
248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
248661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM o/p UseBuffer case");
248761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    return OMX_ErrorBadParameter;
248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
248961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                buf_addr = (unsigned char *)buffer;
249061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
249147e37c4428509524ee576920a98381f3e4872493Nick Pelly
24928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("use_out:: bufhdr = %p, pBuffer = %p, m_pOutput_pmem[i].buffer = %p",
249361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    (*bufferHdr), (*bufferHdr)->pBuffer, m_pOutput_pmem[i].buffer);
249461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) {
249561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_use_buf Failed for o/p buf");
249661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
249761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
2498417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
2499417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan            BITMASK_SET(&m_out_bm_count,i);
250061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
250161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: All o/p Buffers have been Used, invalid use_buf call for "
250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    "index = %u", i);
250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
250447e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
250561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
250747e37c4428509524ee576920a98381f3e4872493Nick Pelly}
250847e37c4428509524ee576920a98381f3e4872493Nick Pelly
250947e37c4428509524ee576920a98381f3e4872493Nick Pelly
251047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::UseBuffer
251347e37c4428509524ee576920a98381f3e4872493Nick Pelly
251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Use Buffer method implementation.
251647e37c4428509524ee576920a98381f3e4872493Nick Pelly
251761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
251861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
251947e37c4428509524ee576920a98381f3e4872493Nick Pelly
252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None , if everything successful.
252247e37c4428509524ee576920a98381f3e4872493Nick Pelly
252361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
252447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::use_buffer(
252561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
252661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
252961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes,
253061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U8*                   buffer)
253147e37c4428509524ee576920a98381f3e4872493Nick Pelly{
253261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
25348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Use Buffer in Invalid State");
253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
253661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
253761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (port == PORT_INDEX_IN) {
253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = use_input_buffer(hComp,bufferHdr,port,appData,bytes,buffer);
253961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (port == PORT_INDEX_OUT) {
254061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = use_output_buffer(hComp,bufferHdr,port,appData,bytes,buffer);
254161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
25428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port);
254361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
254461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
254561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
254661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
254761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (allocate_done()) {
254861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) {
254961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Send the callback now
255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING);
255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandStateSet,OMX_StateIdle,
255261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
255361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
255461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
255561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) {
255661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) {
255761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING);
255861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
255961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_IN,
256061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
256161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
256261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
256361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) {
256461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) {
256561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING);
256661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
256761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_OUT,
256861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_event_port_settings_sent = false;
257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
257161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
257261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
257447e37c4428509524ee576920a98381f3e4872493Nick Pelly}
257547e37c4428509524ee576920a98381f3e4872493Nick Pelly
257647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr)
257747e37c4428509524ee576920a98381f3e4872493Nick Pelly{
257861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int index = 0;
257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *temp_buff ;
258047e37c4428509524ee576920a98381f3e4872493Nick Pelly
258161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bufferHdr == NULL || m_inp_mem_ptr == NULL) {
258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: free_input: Invalid bufferHdr[%p] or m_inp_mem_ptr[%p]",
258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufferHdr, m_inp_mem_ptr);
258461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
258561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
258647e37c4428509524ee576920a98381f3e4872493Nick Pelly
2587f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    index = bufferHdr - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr);
2588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (meta_mode_enable) {
259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (index < m_sInPortDef.nBufferCountActual) {
259161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index]));
259261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            memset(&meta_buffers[index], 0, sizeof(meta_buffers[index]));
259361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
259461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!mUseProxyColorFormat)
259561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorNone;
25963b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        else {
259761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            c2d_conv.close();
25983b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            opaque_buffer_hdr[index] = NULL;
25993b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
2600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
2601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
260261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sInPortDef.nBufferCountActual && !mUseProxyColorFormat &&
260361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) {
26048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("ERROR: dev_free_buf() Failed for i/p buf");
260561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
260661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
260761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sInPortDef.nBufferCountActual && m_pInput_pmem) {
260814a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan        auto_lock l(m_lock);
260914a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan
261061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[index].fd > 0 && input_use_buffer == false) {
26118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: i/p AllocateBuffer case");
26128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
261361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size);
26148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else {
26158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                free(m_pInput_pmem[index].buffer);
26168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
261714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_pInput_pmem[index].buffer = NULL;
261861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pInput_pmem[index].fd);
2619826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
262061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pInput_ion[index]);
2621826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
262261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[index].fd = -1;
262361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_pInput_pmem[index].fd > 0 && (input_use_buffer == true &&
262461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_use_input_pmem == OMX_FALSE)) {
26258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: i/p Heap UseBuffer case");
262661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) {
26278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_free_buf() Failed for i/p buf");
262861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
26298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
263014a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan                munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size);
263114a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan                m_pInput_pmem[index].buffer = NULL;
26328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
263361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pInput_pmem[index].fd);
2634826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
263561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pInput_ion[index]);
2636826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
263761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[index].fd = -1;
263861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
26398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("FreeBuffer:: fd is invalid or i/p PMEM UseBuffer case");
264061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
264147e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
264261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
264347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
264447e37c4428509524ee576920a98381f3e4872493Nick Pelly
264547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr)
264647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
264761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int index = 0;
264861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *temp_buff ;
264961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
265061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bufferHdr == NULL || m_out_mem_ptr == NULL) {
265161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: free_output: Invalid bufferHdr[%p] or m_out_mem_ptr[%p]",
265261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufferHdr, m_out_mem_ptr);
265361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
265461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
265561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    index = bufferHdr - m_out_mem_ptr;
265661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
265761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sOutPortDef.nBufferCountActual &&
265861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) {
265961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf");
266061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
266161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
266261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index < m_sOutPortDef.nBufferCountActual && m_pOutput_pmem) {
266361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_pmem[index].fd > 0 && output_use_buffer == false ) {
26648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: o/p AllocateBuffer case");
26658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
26668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                munmap (m_pOutput_pmem[index].buffer,
26678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_pOutput_pmem[index].size);
26688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else {
26698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                char *data = (char*) m_pOutput_pmem[index].buffer;
2670f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                native_handle_t *handle = NULL;
2671f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(&handle, data + sizeof(OMX_U32), sizeof(native_handle_t*));
26728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                native_handle_delete(handle);
26738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                free(m_pOutput_pmem[index].buffer);
26748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
267561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pOutput_pmem[index].fd);
2676826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
267761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pOutput_ion[index]);
2678826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
267961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[index].fd = -1;
268061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if ( m_pOutput_pmem[index].fd > 0 && (output_use_buffer == true
268161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && m_use_output_pmem == OMX_FALSE)) {
26828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: o/p Heap UseBuffer case");
268361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) {
268461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf");
268561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
26868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
26878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                munmap (m_pOutput_pmem[index].buffer,
26888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        m_pOutput_pmem[index].size);
26898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
269061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close (m_pOutput_pmem[index].fd);
2691826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
269261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pOutput_ion[index]);
2693826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
269461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[index].fd = -1;
269561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
26968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer:: fd is invalid or o/p PMEM UseBuffer case");
269761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
269847e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
269961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
270047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
2701826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
2702826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::allocate_input_meta_buffer(
270361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_HANDLETYPE       hComp,
270461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE **bufferHdr,
270561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR              appData,
270661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32              bytes)
2707826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
270861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned index = 0;
27097d6e61888e010bbe79878827a3a593699e9a2595Praveen Chavan    if (!bufferHdr || bytes < sizeof(encoder_media_buffer_type)) {
27108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("wrong params allocate_input_meta_buffer Hdr %p len %u",
27118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                bufferHdr, (unsigned int)bytes);
271261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
271361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
271461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2715f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    if (!m_inp_mem_ptr && !mUseProxyColorFormat) {
271661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = meta_buffer_hdr;
2717f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("use meta_buffer_hdr (%p) as m_inp_mem_ptr = %p",
2718f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                meta_buffer_hdr, m_inp_mem_ptr);
2719f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
272061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (index = 0; ((index < m_sInPortDef.nBufferCountActual) &&
272161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                meta_buffer_hdr[index].pBuffer); index++);
272261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (index == m_sInPortDef.nBufferCountActual) {
272361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_ERROR("All buffers are allocated input_meta_buffer");
272461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
272561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
272661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mUseProxyColorFormat) {
272761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (opaque_buffer_hdr[index]) {
272861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr");
272961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
273061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
273161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (allocate_input_buffer(hComp,&opaque_buffer_hdr[index],
273261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    PORT_INDEX_IN,appData,m_sInPortDef.nBufferSize) != OMX_ErrorNone) {
273361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr");
273461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
273561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
273661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
273761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    BITMASK_SET(&m_inp_bm_count,index);
273861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    *bufferHdr = &meta_buffer_hdr[index];
273961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index]));
274061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].nSize = sizeof(meta_buffer_hdr[index]);
27413957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim    meta_buffer_hdr[index].nAllocLen = sizeof(meta_buffers[index]);
274261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].nVersion.nVersion = OMX_SPEC_VERSION;
274361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].nInputPortIndex = PORT_INDEX_IN;
274461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].pBuffer = (OMX_U8*)&meta_buffers[index];
274561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    meta_buffer_hdr[index].pAppPrivate = appData;
274661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mUseProxyColorFormat) {
27478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        m_opq_pmem_q.insert_entry((unsigned long)opaque_buffer_hdr[index],0,0);
27488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_HIGH("opaque_buffer_hdr insert %p", opaque_buffer_hdr[index]);
274961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
275061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
2751826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
2752826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
275347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
275461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
275561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateInputBuffer
275647e37c4428509524ee576920a98381f3e4872493Nick Pelly
275761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
275861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper function for allocate buffer in the input pin
275947e37c4428509524ee576920a98381f3e4872493Nick Pelly
276061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
276161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
276247e37c4428509524ee576920a98381f3e4872493Nick Pelly
276361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
276461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
276547e37c4428509524ee576920a98381f3e4872493Nick Pelly
276661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
276747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::allocate_input_buffer(
276861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
276961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
277061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
277161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
277261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes)
277347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
27748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)port;
277561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
277661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned   i = 0;
277747e37c4428509524ee576920a98381f3e4872493Nick Pelly
27788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("allocate_input_buffer()::");
277961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bytes != m_sInPortDef.nBufferSize) {
27808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Buffer size mismatch error: bytes[%u] != nBufferSize[%u]",
27818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize);
278261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
278347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
278447e37c4428509524ee576920a98381f3e4872493Nick Pelly
278561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_inp_mem_ptr) {
27868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__,
27878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountActual);
278861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \
278961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual);
279061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_inp_mem_ptr == NULL) {
27918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr");
279261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
279361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
279461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2795f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr);
279661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual);
279747e37c4428509524ee576920a98381f3e4872493Nick Pelly
279861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem == NULL) {
27998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem");
280061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
280161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2802826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
280361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual);
280461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_ion == NULL) {
28058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion");
280661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
280761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
280961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
281061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = -1;
2811826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
281261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].ion_device_fd =-1;
281361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_ion[i].fd_ion_data.fd =-1;
28148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_ion[i].ion_alloc_data.handle = 0;
2815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
281661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
281747e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
281847e37c4428509524ee576920a98381f3e4872493Nick Pelly
281961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sInPortDef.nBufferCountActual; i++) {
282061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_inp_bm_count,i)) {
282161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
282261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
282347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
282461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i < m_sInPortDef.nBufferCountActual) {
282547e37c4428509524ee576920a98381f3e4872493Nick Pelly
282661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        *bufferHdr = (m_inp_mem_ptr + i);
282761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nSize             = sizeof(OMX_BUFFERHEADERTYPE);
282861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION;
282961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nAllocLen         = m_sInPortDef.nBufferSize;
283061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pAppPrivate       = appData;
283161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->nInputPortIndex   = PORT_INDEX_IN;
28328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        // make fd available to app layer, help with testing
28338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        (*bufferHdr)->pInputPortPrivate = (OMX_PTR)&m_pInput_pmem[i];
283447e37c4428509524ee576920a98381f3e4872493Nick Pelly
2835826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
28366eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
283761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
283861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_pInput_ion[i].ion_alloc_data,
283961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_pInput_ion[i].fd_ion_data,0);
28406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
284161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize,
284261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_pInput_ion[i].ion_alloc_data,
284361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &m_pInput_ion[i].fd_ion_data,ION_FLAG_CACHED);
28446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
284561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_ion[i].ion_device_fd < 0) {
28468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
284761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
284861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2849826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
285061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd;
2851826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
285261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
285347e37c4428509524ee576920a98381f3e4872493Nick Pelly
285461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[i].fd == 0) {
285561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
285661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
285747e37c4428509524ee576920a98381f3e4872493Nick Pelly
285861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[i].fd < 0) {
28598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed");
286061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
286161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2862826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
286361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].size = m_sInPortDef.nBufferSize;
286461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pInput_pmem[i].offset = 0;
286561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
2866d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan        m_pInput_pmem[i].buffer = NULL;
28678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if(!secure_session) {
28688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_pmem[i].buffer = (unsigned char *)mmap(NULL,
28698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pInput_pmem[i].size,PROT_READ|PROT_WRITE,
287061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                MAP_SHARED,m_pInput_pmem[i].fd,0);
287161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pInput_pmem[i].buffer == MAP_FAILED) {
28728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: mmap FAILED= %d", errno);
2873d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            m_pInput_pmem[i].buffer = NULL;
287461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            close(m_pInput_pmem[i].fd);
2875826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
287661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_ion_memory(&m_pInput_ion[i]);
2877826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
287861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
287961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
28808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        } else {
28818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //This should only be used for passing reference to source type and
28828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //secure handle fd struct native_handle_t*
28838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            m_pInput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*));
2884d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            if (m_pInput_pmem[i].buffer == NULL) {
2885d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                DEBUG_PRINT_ERROR("%s: failed to allocate native-handle", __func__);
2886d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                return OMX_ErrorInsufficientResources;
2887d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            }
28888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
28896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
289061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (*bufferHdr)->pBuffer           = (OMX_U8 *)m_pInput_pmem[i].buffer;
28918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Virtual address in allocate buffer is %p", m_pInput_pmem[i].buffer);
289261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        BITMASK_SET(&m_inp_bm_count,i);
289361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //here change the I/P param here from buf_adr to pmem
289461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!mUseProxyColorFormat && (dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true)) {
28958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for i/p buf");
289661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
289761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
289861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
28998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: All i/p buffers are allocated, invalid allocate buf call"
29008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                "for index [%d]", i);
290161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorInsufficientResources;
290247e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
290347e37c4428509524ee576920a98381f3e4872493Nick Pelly
290461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
290547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
290647e37c4428509524ee576920a98381f3e4872493Nick Pelly
290747e37c4428509524ee576920a98381f3e4872493Nick Pelly
290847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
290961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
291061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateOutputBuffer
291147e37c4428509524ee576920a98381f3e4872493Nick Pelly
291261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
291361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Helper fn for AllocateBuffer in the output pin
291447e37c4428509524ee576920a98381f3e4872493Nick Pelly
291561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
291661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
291747e37c4428509524ee576920a98381f3e4872493Nick Pelly
291861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
291961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything went well.
292047e37c4428509524ee576920a98381f3e4872493Nick Pelly
292161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
292247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::allocate_output_buffer(
292361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE            hComp,
292461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
292561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   port,
292661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                   appData,
292761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                   bytes)
292847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
29298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)port;
293061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
293161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_BUFFERHEADERTYPE       *bufHdr= NULL; // buffer header
293261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned                         i= 0; // Temporary counter
29336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
293461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int align_size;
29356eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
29368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("allocate_output_buffer()for %u bytes", (unsigned int)bytes);
293761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_out_mem_ptr) {
293861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int nBufHdrSize        = 0;
29398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__,
29408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountActual);
294161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nBufHdrSize        = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE);
294261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
294361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*
294461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * Memory for output side involves the following:
294561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 1. Array of Buffer Headers
294661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * 2. Bitmask array to hold the buffer allocation details
294761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * In order to minimize the memory management entire allocation
294861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         * is done in one step.
294961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan         */
295061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_out_mem_ptr = (OMX_BUFFERHEADERTYPE  *)calloc(nBufHdrSize,1);
295147e37c4428509524ee576920a98381f3e4872493Nick Pelly
2952826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
295361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual);
295461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_ion == NULL) {
29558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion");
295661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
295761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
2958826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
295961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pOutput_pmem = (struct pmem *) calloc(sizeof(struct pmem), m_sOutPortDef.nBufferCountActual);
296061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_pOutput_pmem == NULL) {
29618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem");
296261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorInsufficientResources;
296361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
296461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_out_mem_ptr && m_pOutput_pmem) {
296561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bufHdr          =  m_out_mem_ptr;
296661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
296761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) {
296861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nSize              = sizeof(OMX_BUFFERHEADERTYPE);
296961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nVersion.nVersion  = OMX_SPEC_VERSION;
297061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Set the values when we determine the right HxW param
29713957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim                bufHdr->nAllocLen          = m_sOutPortDef.nBufferSize;
297261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nFilledLen         = 0;
297361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pAppPrivate        = appData;
297461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->nOutputPortIndex   = PORT_INDEX_OUT;
29758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                // make fd available to app layer, help with testing
29768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                bufHdr->pOutputPortPrivate = (OMX_PTR)&m_pOutput_pmem[i];
297761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr->pBuffer            = NULL;
297861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bufHdr++;
297961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = -1;
2980826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
298161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].ion_device_fd =-1;
298261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_ion[i].fd_ion_data.fd=-1;
29838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_ion[i].ion_alloc_data.handle = 0;
2984826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
298561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
298661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
298761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: calloc() failed for m_out_mem_ptr/m_pOutput_pmem");
298861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorInsufficientResources;
298961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
299061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
299161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
29928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("actual cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountActual);
299361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) {
299461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_ABSENT(&m_out_bm_count,i)) {
29958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Found a Free Output Buffer %d",i);
299661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            break;
299761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
299861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
299961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
300061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (i < m_sOutPortDef.nBufferCountActual) {
3001826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
30026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
300361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            align_size = ((m_sOutPortDef.nBufferSize + 4095)/4096) * 4096;
300461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size,
300561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pOutput_ion[i].ion_alloc_data,
3006f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    &m_pOutput_ion[i].fd_ion_data, ION_FLAG_CACHED);
30076eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
300861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sOutPortDef.nBufferSize,
300961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pOutput_ion[i].ion_alloc_data,
301061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    &m_pOutput_ion[i].fd_ion_data,ION_FLAG_CACHED);
30116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
301261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_ion[i].ion_device_fd < 0) {
30138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR:ION device open() Failed");
301461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
301561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
30166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
301761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd;
3018826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
301961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
302061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_pmem[i].fd == 0) {
302161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR);
302261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
302361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
302461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_pmem[i].fd < 0) {
30258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() failed");
302661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
302761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
3028826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
302961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize;
303061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pOutput_pmem[i].offset = 0;
30318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
3032d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan            m_pOutput_pmem[i].buffer = NULL;
30338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if(!secure_session) {
30346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
30358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
30368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    align_size,PROT_READ|PROT_WRITE,
303761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    MAP_SHARED,m_pOutput_pmem[i].fd,0);
30386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
30398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL,
30408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE,
304161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    MAP_SHARED,m_pOutput_pmem[i].fd,0);
30426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
304361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pOutput_pmem[i].buffer == MAP_FAILED) {
30448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: MMAP_FAILED in o/p alloc buffer");
3045d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                m_pOutput_pmem[i].buffer = NULL;
304661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                close (m_pOutput_pmem[i].fd);
3047826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
304861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                free_ion_memory(&m_pOutput_ion[i]);
3049826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
305061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
305161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
30528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
30538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            else {
30548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                //This should only be used for passing reference to source type and
30558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                //secure handle fd struct native_handle_t*
30568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                m_pOutput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*));
3057d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                if (m_pOutput_pmem[i].buffer == NULL) {
3058d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    DEBUG_PRINT_ERROR("%s: Failed to allocate native-handle", __func__);
3059d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                    return OMX_ErrorInsufficientResources;
3060d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan                }
30618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                native_handle_t *handle = native_handle_create(1, 0);
30628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                handle->data[0] = m_pOutput_pmem[i].fd;
30638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                char *data = (char*) m_pOutput_pmem[i].buffer;
30648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 type = 1;
3065f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(data, &type, sizeof(OMX_U32));
3066f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                memcpy(data + sizeof(OMX_U32), &handle, sizeof(native_handle_t*));
30678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            }
306847e37c4428509524ee576920a98381f3e4872493Nick Pelly
306961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            *bufferHdr = (m_out_mem_ptr + i );
307061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pBuffer = (OMX_U8 *)m_pOutput_pmem[i].buffer;
307161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (*bufferHdr)->pAppPrivate = appData;
307247e37c4428509524ee576920a98381f3e4872493Nick Pelly
307361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_SET(&m_out_bm_count,i);
307447e37c4428509524ee576920a98381f3e4872493Nick Pelly
307561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) {
30768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for o/p buf");
307761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorInsufficientResources;
307861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
307961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
30808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: All o/p buffers are allocated, invalid allocate buf call"
30818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    "for index [%d] actual: %u", i, (unsigned int)m_sOutPortDef.nBufferCountActual);
308261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
308347e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
308447e37c4428509524ee576920a98381f3e4872493Nick Pelly
308561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
308647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
308747e37c4428509524ee576920a98381f3e4872493Nick Pelly
308847e37c4428509524ee576920a98381f3e4872493Nick Pelly
308947e37c4428509524ee576920a98381f3e4872493Nick Pelly// AllocateBuffer  -- API Call
309047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
309161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
309261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::AllocateBuffer
309347e37c4428509524ee576920a98381f3e4872493Nick Pelly
309461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
309561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Returns zero if all the buffers released..
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_buffer(OMX_IN OMX_HANDLETYPE                hComp,
310561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
310661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                        port,
310761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                     appData,
310861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                       bytes)
310947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
311047e37c4428509524ee576920a98381f3e4872493Nick Pelly
311161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone; // OMX return type
311247e37c4428509524ee576920a98381f3e4872493Nick Pelly
31138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Allocate buffer of size = %u on port %d", (unsigned int)bytes, (int)port);
311461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateInvalid) {
31158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Allocate Buf in Invalid State");
311661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
311761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
311847e37c4428509524ee576920a98381f3e4872493Nick Pelly
311961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // What if the client calls again.
312061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (port == PORT_INDEX_IN) {
3121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
312261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (meta_mode_enable)
312361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = allocate_input_meta_buffer(hComp,bufferHdr,appData,bytes);
312461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        else
3125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
312661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = allocate_input_buffer(hComp,bufferHdr,port,appData,bytes);
312761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (port == PORT_INDEX_OUT) {
312861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = allocate_output_buffer(hComp,bufferHdr,port,appData,bytes);
312961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
31308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port);
313161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
313261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
313361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    DEBUG_PRINT_LOW("Checking for Output Allocate buffer Done");
313461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (eRet == OMX_ErrorNone) {
313561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (allocate_done()) {
313661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) {
313761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                // Send the callback now
313861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING);
313961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandStateSet,OMX_StateIdle,
314061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
314161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
314261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
314361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) {
314461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) {
314561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING);
314661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
314761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_IN,
314861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
314961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
315061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
315161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) {
315261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) {
315361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING);
315461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                post_event(OMX_CommandPortEnable,
315561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        PORT_INDEX_OUT,
315661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_COMPONENT_GENERATE_EVENT);
315761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_event_port_settings_sent = false;
315861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
315961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
316061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
31618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Allocate Buffer exit with ret Code %d",eRet);
316261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
316347e37c4428509524ee576920a98381f3e4872493Nick Pelly}
316447e37c4428509524ee576920a98381f3e4872493Nick Pelly
316547e37c4428509524ee576920a98381f3e4872493Nick Pelly
316647e37c4428509524ee576920a98381f3e4872493Nick Pelly// Free Buffer - API call
316747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
316861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
316961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::FreeBuffer
317047e37c4428509524ee576920a98381f3e4872493Nick Pelly
317161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
317247e37c4428509524ee576920a98381f3e4872493Nick Pelly
317361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
317461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
317547e37c4428509524ee576920a98381f3e4872493Nick Pelly
317661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
317761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
317847e37c4428509524ee576920a98381f3e4872493Nick Pelly
317961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
318047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::free_buffer(OMX_IN OMX_HANDLETYPE         hComp,
318161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                 port,
318261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
318347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
31848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
318561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
318661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int nPortIndex;
318761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
31888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("In for encoder free_buffer");
318961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
319061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_state == OMX_StateIdle &&
319161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) {
31928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW(" free buffer while Component in Loading pending");
319361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if ((m_sInPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_IN)||
319461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (m_sOutPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_OUT)) {
31958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Free Buffer while port %u disabled", (unsigned int)port);
319661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (m_state == OMX_StateExecuting || m_state == OMX_StatePause) {
31978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,ports need to be disabled");
319861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        post_event(OMX_EventError,
319961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ErrorPortUnpopulated,
320061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMPONENT_GENERATE_EVENT);
320161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return eRet;
320261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
32038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,port lost Buffers");
320461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        post_event(OMX_EventError,
320561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ErrorPortUnpopulated,
320661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMPONENT_GENERATE_EVENT);
320761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
320861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
320961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (port == PORT_INDEX_IN) {
321061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // check if the buffer is valid
3211f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        nPortIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr);
321261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("free_buffer on i/p port - Port idx %u, actual cnt %u",
32148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                nPortIndex, (unsigned int)m_sInPortDef.nBufferCountActual);
3215417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan        if (nPortIndex < m_sInPortDef.nBufferCountActual &&
3216417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                BITMASK_PRESENT(&m_inp_bm_count, nPortIndex)) {
321761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Clear the bit associated with it.
321861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR(&m_inp_bm_count,nPortIndex);
321961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_input_buffer (buffer);
322061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sInPortDef.bPopulated = OMX_FALSE;
322161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
322261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            /*Free the Buffer Header*/
322361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (release_input_done()
3224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
322561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    && !meta_mode_enable
3226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
322761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan               ) {
322861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                input_use_buffer = false;
322961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_inp_mem_ptr) {
32308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_inp_mem_ptr");
323161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free (m_inp_mem_ptr);
323261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_inp_mem_ptr = NULL;
323361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
323461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pInput_pmem) {
32358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pInput_pmem");
323661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pInput_pmem);
323761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pInput_pmem = NULL;
323861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
324061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pInput_ion) {
32418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pInput_ion");
324261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pInput_ion);
324361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pInput_ion = NULL;
324461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3245826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
324661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
324761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
32488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: free_buffer ,Port Index Invalid");
324961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorBadPortIndex;
325047e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
325161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
325261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING)
325361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                && release_input_done()) {
32548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("MOVING TO DISABLED STATE");
325561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING);
325661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_CommandPortDisable,
325761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    PORT_INDEX_IN,
325861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
325947e37c4428509524ee576920a98381f3e4872493Nick Pelly        }
326061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (port == PORT_INDEX_OUT) {
326161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // check if the buffer is valid
326261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr;
326361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("free_buffer on o/p port - Port idx %u, actual cnt %u",
32658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                nPortIndex, (unsigned int)m_sOutPortDef.nBufferCountActual);
3266417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan        if (nPortIndex < m_sOutPortDef.nBufferCountActual &&
3267417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan                BITMASK_PRESENT(&m_out_bm_count, nPortIndex)) {
326861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Clear the bit associated with it.
326961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR(&m_out_bm_count,nPortIndex);
327061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_sOutPortDef.bPopulated = OMX_FALSE;
327161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            free_output_buffer (buffer);
327261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
327361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (release_output_done()) {
327461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                output_use_buffer = false;
327561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_out_mem_ptr) {
32768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_out_mem_ptr");
327761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free (m_out_mem_ptr);
327861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_out_mem_ptr = NULL;
327961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
328061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_pmem) {
32818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pOutput_pmem");
328261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pOutput_pmem);
328361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_pmem = NULL;
328461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3285826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
328661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (m_pOutput_ion) {
32878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Freeing m_pOutput_ion");
328861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    free(m_pOutput_ion);
328961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_pOutput_ion = NULL;
329061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
3291826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
329261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
329361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
32948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: free_buffer , Port Index Invalid");
329561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorBadPortIndex;
329661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
329761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING)
329861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                && release_output_done() ) {
32998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("FreeBuffer : If any Disable event pending,post it");
330061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("MOVING TO DISABLED STATE");
330261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING);
330361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_CommandPortDisable,
330461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    PORT_INDEX_OUT,
330561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
330661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
330761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
33086eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    } else {
330961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
331061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
331161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if ((eRet == OMX_ErrorNone) &&
331261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) {
331361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (release_done()) {
331461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (dev_stop() != 0) {
33158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("ERROR: dev_stop() FAILED");
331661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorHardware;
331761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
331861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Send the callback now
331961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            BITMASK_CLEAR((&m_flags),OMX_COMPONENT_LOADING_PENDING);
332061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            post_event(OMX_CommandStateSet, OMX_StateLoaded,
332161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    OMX_COMPONENT_GENERATE_EVENT);
332261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
3323f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_HIGH("in free buffer, release not done, need to free more buffers input %" PRIx64" output %" PRIx64,
332461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    m_out_bm_count, m_inp_bm_count);
332561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
332647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
332747e37c4428509524ee576920a98381f3e4872493Nick Pelly
332861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
332947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
333047e37c4428509524ee576920a98381f3e4872493Nick Pelly
333147e37c4428509524ee576920a98381f3e4872493Nick Pelly
333247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
333361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
333461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::EmptyThisBuffer
333547e37c4428509524ee576920a98381f3e4872493Nick Pelly
333661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
333761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   This routine is used to push the encoded video frames to
333861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   the video decoder.
333947e37c4428509524ee576920a98381f3e4872493Nick Pelly
334061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
334161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
334247e37c4428509524ee576920a98381f3e4872493Nick Pelly
334361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
334461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything went successful.
334547e37c4428509524ee576920a98381f3e4872493Nick Pelly
334661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
334747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::empty_this_buffer(OMX_IN OMX_HANDLETYPE         hComp,
334861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
334947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
335061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret1 = OMX_ErrorNone;
335161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned int nBufferIndex ;
335261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("ETB: buffer = %p, buffer->pBuffer[%p]", buffer, buffer->pBuffer);
335414a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan    if (m_state != OMX_StateExecuting &&
335514a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StatePause &&
335614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StateIdle) {
33578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Empty this buffer in Invalid State");
335861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
335961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
33606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
336161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL || (buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) {
33628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> buffer is null or buffer size is invalid");
336361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
336461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
33656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
336661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) {
33678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> OMX Version Invalid");
336861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorVersionMismatch;
336961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
337061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
337161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nInputPortIndex != (OMX_U32)PORT_INDEX_IN) {
33728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Bad port index to call empty_this_buffer");
337361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadPortIndex;
337461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
337561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_sInPortDef.bEnabled) {
33768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Cannot call empty_this_buffer while I/P port is disabled");
337761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
337861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
337961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3380f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    nBufferIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr);
338161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
338261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (nBufferIndex > m_sInPortDef.nBufferCountActual ) {
33838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETB: Invalid buffer index[%d]", nBufferIndex);
338461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
338561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
338661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
338761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_etb_count++;
33888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("DBG: i/p nTimestamp = %u", (unsigned)buffer->nTimeStamp);
33898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    post_event ((unsigned long)hComp,(unsigned long)buffer,m_input_msg_id);
339061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
339161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
339247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
339361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
339461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::empty_this_buffer_proxy
339547e37c4428509524ee576920a98381f3e4872493Nick Pelly
339661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
339761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   This routine is used to push the encoded video frames to
339861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   the video decoder.
339947e37c4428509524ee576920a98381f3e4872493Nick Pelly
340061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
340161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
340247e37c4428509524ee576920a98381f3e4872493Nick Pelly
340361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
340461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything went successful.
340547e37c4428509524ee576920a98381f3e4872493Nick Pelly
340661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
34078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE  omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE  hComp,
340861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
340947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
34108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
341161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *pmem_data_buf = NULL;
341261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int push_cnt = 0;
34139ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    unsigned nBufIndex = 0;
341461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
34159ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    encoder_media_buffer_type *media_buffer = NULL;
341661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34176eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
341861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int fd = 0;
34196eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
34208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("ETBProxy: buffer->pBuffer[%p]", buffer->pBuffer);
342161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL) {
34228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid buffer[%p]", buffer);
342361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
342461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
34259ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan
34269ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    // Buffer sanity checks
34279ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (meta_mode_enable && !mUsesColorConversion) {
34289ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        //For color-conversion case, we have an internal buffer and not a meta buffer
342961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool met_error = false;
34309ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        nBufIndex = buffer - meta_buffer_hdr;
34319ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        if (nBufIndex >= m_sInPortDef.nBufferCountActual) {
34328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid meta-bufIndex = %u", nBufIndex);
34339ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            return OMX_ErrorBadParameter;
34349ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
34359ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        media_buffer = (encoder_media_buffer_type *)meta_buffer_hdr[nBufIndex].pBuffer;
343661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (media_buffer) {
343761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (media_buffer->buffer_type != kMetadataBufferTypeCameraSource &&
34389ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    media_buffer->buffer_type != kMetadataBufferTypeGrallocSource) {
343961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                met_error = true;
34409ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            } else {
344161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) {
344261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    if (media_buffer->meta_handle == NULL)
344361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        met_error = true;
344461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    else if ((media_buffer->meta_handle->numFds != 1 &&
344561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                                media_buffer->meta_handle->numInts != 2))
344661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        met_error = true;
344761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
344861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
344961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else
3450826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            met_error = true;
345161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (met_error) {
34528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: Unkown source/metahandle in ETB call");
34538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
345461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
3455826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
34569ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    } else {
34579ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        nBufIndex = buffer - ((OMX_BUFFERHEADERTYPE *)m_inp_mem_ptr);
34589ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        if (nBufIndex >= m_sInPortDef.nBufferCountActual) {
34598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid bufIndex = %u", nBufIndex);
34609ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            return OMX_ErrorBadParameter;
34619ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
34629ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    }
34639ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan
34649ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    pending_input_buffers++;
34659ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (input_flush_progress == true) {
34668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)buffer,0,
34679ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                OMX_COMPONENT_GENERATE_EBD);
34688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxy: Input flush in progress");
34699ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        return OMX_ErrorNone;
34709ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    }
34719ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _MSM8974_
34729ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (!meta_mode_enable) {
34739ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        fd = m_pInput_pmem[nBufIndex].fd;
34749ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    }
34759ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#endif
34769ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _ANDROID_ICS_
34779ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    if (meta_mode_enable && !mUseProxyColorFormat) {
34789ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        // Camera or Gralloc-source meta-buffers queued with pre-announced color-format
347961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem Input_pmem_info;
3480f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (!media_buffer) {
3481f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_ERROR("%s: invalid media_buffer",__FUNCTION__);
3482f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return OMX_ErrorBadParameter;
3483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
348461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) {
348561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
348661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = media_buffer->meta_handle->data[0];
34876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
348861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fd = Input_pmem_info.fd;
34896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
349061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = media_buffer->meta_handle->data[1];
349161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = media_buffer->meta_handle->data[2];
34929ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            DEBUG_PRINT_LOW("ETB (meta-Camera) fd = %d, offset = %d, size = %d",
34939ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    Input_pmem_info.fd, Input_pmem_info.offset,
349461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem_info.size);
349561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
349661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle;
349761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
349861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = handle->fd;
34996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
350061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            fd = Input_pmem_info.fd;
35016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
350261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = 0;
350361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = handle->size;
35049ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            DEBUG_PRINT_LOW("ETB (meta-gralloc) fd = %d, offset = %d, size = %d",
35059ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    Input_pmem_info.fd, Input_pmem_info.offset,
35069ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    Input_pmem_info.size);
350761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
350861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,0) != true) {
35098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_use_buf");
35108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
351161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
351261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
35139ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan    } else if (meta_mode_enable && !mUsesColorConversion) {
35149ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        // Graphic-source meta-buffers queued with opaque color-format
35159ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        if (media_buffer->buffer_type == kMetadataBufferTypeGrallocSource) {
35169ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle;
35179ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            fd = handle->fd;
35189ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            DEBUG_PRINT_LOW("ETB (opaque-gralloc) fd = %d, size = %d",
35199ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    fd, handle->size);
35209ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        } else {
35219ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: Invalid bufferType for buffer with Opaque"
35229ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan                    " color format");
35238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
35249ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            return OMX_ErrorBadParameter;
35259ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
3526d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan    } else if (input_use_buffer && !m_use_input_pmem &&  m_pInput_pmem[nBufIndex].buffer)
3527826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
3528d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan    if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer)
3529826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
3530c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    {
35318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Heap UseBuffer case, so memcpy the data");
353214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan
353314a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan        auto_lock l(m_lock);
3534c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        pmem_data_buf = (OMX_U8 *)m_pInput_pmem[nBufIndex].buffer;
353514a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan        if (pmem_data_buf) {
353614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            memcpy (pmem_data_buf, (buffer->pBuffer + buffer->nOffset),
353714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan                    buffer->nFilledLen);
353814a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan        }
3539c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        DEBUG_PRINT_LOW("memcpy() done in ETBProxy for i/p Heap UseBuf");
3540c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    } else if (mUseProxyColorFormat) {
35419ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        // Gralloc-source buffers with color-conversion
3542c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        fd = m_pInput_pmem[nBufIndex].fd;
35438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("ETB (color-converted) fd = %d, size = %u",
35448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                fd, (unsigned int)buffer->nFilledLen);
3545c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    } else if (m_sInPortDef.format.video.eColorFormat ==
35460b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan                    OMX_COLOR_FormatYUV420SemiPlanar) {
3547c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            //For the case where YUV420SP buffers are qeueued to component
3548c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            //by sources other than camera (Apps via MediaCodec), conversion
3549c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            //to vendor flavoured NV12 color format is required.
3550c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            if (!dev_color_align(buffer, m_sInPortDef.format.video.nFrameWidth,
3551c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                                    m_sInPortDef.format.video.nFrameHeight)) {
3552c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                    DEBUG_PRINT_ERROR("Failed to adjust buffer color");
35538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    post_event((unsigned long)buffer, 0, OMX_COMPONENT_GENERATE_EBD);
3554c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                    return OMX_ErrorUndefined;
3555c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan            }
3556c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan    }
35576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
355861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_empty_buf(buffer, pmem_data_buf,nBufIndex,fd) != true)
3559826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
35600b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    if (dev_empty_buf(buffer, pmem_data_buf,0,0) != true)
3561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
35620b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    {
35638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxy: dev_empty_buf failed");
3564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
35650b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        omx_release_meta_buffer(buffer);
3566826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
35678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD);
35680b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        /*Generate an async error and move to invalid state*/
35690b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        pending_input_buffers--;
3570f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (hw_overload) {
3571f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return OMX_ErrorInsufficientResources;
3572f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
35730b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan        return OMX_ErrorBadParameter;
35740b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan    }
357561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
357647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
357747e37c4428509524ee576920a98381f3e4872493Nick Pelly
357847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
357961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
358061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::FillThisBuffer
358147e37c4428509524ee576920a98381f3e4872493Nick Pelly
358261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
358361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   IL client uses this method to release the frame buffer
358461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   after displaying them.
358547e37c4428509524ee576920a98381f3e4872493Nick Pelly
358661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
358761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
358847e37c4428509524ee576920a98381f3e4872493Nick Pelly
358961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
359061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
359147e37c4428509524ee576920a98381f3e4872493Nick Pelly
359261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
359347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::fill_this_buffer(OMX_IN OMX_HANDLETYPE  hComp,
359461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
359547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
35968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("FTB: buffer->pBuffer[%p]", buffer->pBuffer);
359714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan    if (m_state != OMX_StateExecuting &&
359814a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StatePause &&
359914a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan            m_state != OMX_StateIdle) {
36008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: FTB in Invalid State");
360161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorInvalidState;
360261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
360361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
360461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL ||(buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) {
36058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Invalid buffer or size");
360661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
360761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
360861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
360961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) {
36108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->OMX Version Invalid");
361161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorVersionMismatch;
361261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
361361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
361461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nOutputPortIndex != (OMX_U32)PORT_INDEX_OUT) {
36158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Bad port index");
361661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadPortIndex;
361761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
361861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
361961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!m_sOutPortDef.bEnabled) {
36208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->port is disabled");
362161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorIncorrectStateOperation;
362261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
362361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    post_event((unsigned long) hComp, (unsigned long)buffer,OMX_COMPONENT_GENERATE_FTB);
362561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
362647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
362747e37c4428509524ee576920a98381f3e4872493Nick Pelly
362847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
362961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
363061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::fill_this_buffer_proxy
363147e37c4428509524ee576920a98381f3e4872493Nick Pelly
363261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
363361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   IL client uses this method to release the frame buffer
363461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   after displaying them.
363547e37c4428509524ee576920a98381f3e4872493Nick Pelly
363661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
363761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
363847e37c4428509524ee576920a98381f3e4872493Nick Pelly
363961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
364061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
364147e37c4428509524ee576920a98381f3e4872493Nick Pelly
364261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
364347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::fill_this_buffer_proxy(
364461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_HANDLETYPE        hComp,
364561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd)
364647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
36478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
364861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_U8 *pmem_data_buf = NULL;
364961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE nRet = OMX_ErrorNone;
365061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("FTBProxy: bufferAdd->pBuffer[%p]", bufferAdd->pBuffer);
365261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if (bufferAdd == NULL || ((bufferAdd - m_out_mem_ptr) >= (int)m_sOutPortDef.nBufferCountActual) ) {
36548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: FTBProxy: Invalid i/p params");
365561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
365661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
365761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
365861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_output_buffers++;
365961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /*Return back the output buffer to client*/
366061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if ( m_sOutPortDef.bEnabled != OMX_TRUE || output_flush_progress == true) {
36618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("o/p port is Disabled or Flush in Progress");
36628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)bufferAdd,0,
366347e37c4428509524ee576920a98381f3e4872493Nick Pelly                OMX_COMPONENT_GENERATE_FBD);
366461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorNone;
366561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
366647e37c4428509524ee576920a98381f3e4872493Nick Pelly
366761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (output_use_buffer && !m_use_output_pmem) {
36688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Heap UseBuffer case");
366961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pmem_data_buf = (OMX_U8 *)m_pOutput_pmem[bufferAdd - m_out_mem_ptr].buffer;
367061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
367161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
367261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_fill_buf(bufferAdd, pmem_data_buf,(bufferAdd - m_out_mem_ptr),m_pOutput_pmem[bufferAdd - m_out_mem_ptr].fd) != true) {
36738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: dev_fill_buf() Failed");
36748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)bufferAdd,0,OMX_COMPONENT_GENERATE_FBD);
367561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pending_output_buffers--;
367661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
367761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
367861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
367961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
368047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
368147e37c4428509524ee576920a98381f3e4872493Nick Pelly
368247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
368361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
368461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_video::SetCallbacks
368547e37c4428509524ee576920a98381f3e4872493Nick Pelly
368661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
368761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Set the callbacks.
368847e37c4428509524ee576920a98381f3e4872493Nick Pelly
368961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
369061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
369147e37c4428509524ee576920a98381f3e4872493Nick Pelly
369261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
369361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything successful.
369447e37c4428509524ee576920a98381f3e4872493Nick Pelly
369561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
369647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::set_callbacks(OMX_IN OMX_HANDLETYPE        hComp,
369761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_CALLBACKTYPE* callbacks,
369861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR             appData)
369947e37c4428509524ee576920a98381f3e4872493Nick Pelly{
37008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
370161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_pCallbacks       = *callbacks;
37028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Callbacks Set %p %p %p",m_pCallbacks.EmptyBufferDone,\
370361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_pCallbacks.EventHandler,m_pCallbacks.FillBufferDone);
370461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    m_app_data =    appData;
370561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
370647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
370747e37c4428509524ee576920a98381f3e4872493Nick Pelly
370847e37c4428509524ee576920a98381f3e4872493Nick Pelly
370947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
371061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
371161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::UseEGLImage
371247e37c4428509524ee576920a98381f3e4872493Nick Pelly
371361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
371461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Use EGL Image method implementation <TBD>.
371547e37c4428509524ee576920a98381f3e4872493Nick Pelly
371661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
371761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
371847e37c4428509524ee576920a98381f3e4872493Nick Pelly
371961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
372061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Not Implemented error.
372147e37c4428509524ee576920a98381f3e4872493Nick Pelly
372261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
37238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE  omx_video::use_EGL_image(OMX_IN OMX_HANDLETYPE   hComp,
372461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr,
372561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32                        port,
372661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_PTR                     appData,
372761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN void*                      eglImage)
372847e37c4428509524ee576920a98381f3e4872493Nick Pelly{
37298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp, (void)bufferHdr, (void)port, (void)appData, (void)eglImage;
37308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_ERROR("ERROR: use_EGL_image:  Not Implemented");
373161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNotImplemented;
373247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
373347e37c4428509524ee576920a98381f3e4872493Nick Pelly
373447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
373561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
373661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ComponentRoleEnum
373747e37c4428509524ee576920a98381f3e4872493Nick Pelly
373861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
373961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Component Role Enum method implementation.
374047e37c4428509524ee576920a98381f3e4872493Nick Pelly
374161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
374261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   <TBD>.
374347e37c4428509524ee576920a98381f3e4872493Nick Pelly
374461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
374561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   OMX Error None if everything is successful.
374661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
374747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE  omx_video::component_role_enum(OMX_IN OMX_HANDLETYPE hComp,
374861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_OUT OMX_U8*        role,
374961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_U32        index)
375047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
37518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    (void)hComp;
375261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
375361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
375461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
375561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
37568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
375761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
375861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
375961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
376061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
376161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
376261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.h263",OMX_MAX_STRINGNAME_SIZE);
37638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
376461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
37658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
376661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
376761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
376861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
376961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
377061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.avc",OMX_MAX_STRINGNAME_SIZE);
37718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
377261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
37738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
377461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
377561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
377661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.vc1",OMX_MAX_STRINGNAME_SIZE)) {
377761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
377861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_decoder.vc1",OMX_MAX_STRINGNAME_SIZE);
37798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
378061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
37818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
378261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
378361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
378461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
378561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) {
378661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
378761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE);
37888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
378961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
379061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
379161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
379261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) {
379361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
379461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE);
37958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
379661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
37978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
379861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
379961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
380061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) {
380161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
380261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE);
38038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
380461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
38058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
380661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
380761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
380861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
38096eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
381061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) {
381161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if ((0 == index) && role) {
381261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            strlcpy((char *)role, "video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE);
38138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s",role);
381461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
38158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
381661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
381761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
381861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
38196eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
3820f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    else if ((!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc", OMX_MAX_STRINGNAME_SIZE)) ||
3821f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            (!strncmp((char*)m_nkind, "OMX.qti.video.encoder.hevc", OMX_MAX_STRINGNAME_SIZE))) {
3822f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if ((0 == index) && role) {
3823f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            strlcpy((char *)role, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE);
3824f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_LOW("component_role_enum: role %s", role);
3825f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } else {
3826f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            DEBUG_PRINT_ERROR("ERROR: No more roles");
3827f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            eRet = OMX_ErrorNoMore;
3828f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
3829f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
383061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    else {
38318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: Querying Role on Unknown Component");
383261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorInvalidComponentName;
383361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
383461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
383547e37c4428509524ee576920a98381f3e4872493Nick Pelly}
383647e37c4428509524ee576920a98381f3e4872493Nick Pelly
383747e37c4428509524ee576920a98381f3e4872493Nick Pelly
383847e37c4428509524ee576920a98381f3e4872493Nick Pelly
383947e37c4428509524ee576920a98381f3e4872493Nick Pelly
384047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
384161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
384261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateDone
384347e37c4428509524ee576920a98381f3e4872493Nick Pelly
384461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
384561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if entire buffer pool is allocated by IL Client or not.
384661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Need this to move to IDLE state.
384747e37c4428509524ee576920a98381f3e4872493Nick Pelly
384861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
384961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
385047e37c4428509524ee576920a98381f3e4872493Nick Pelly
385161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
385261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false.
385347e37c4428509524ee576920a98381f3e4872493Nick Pelly
385461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
385547e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_done(void)
385647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
385761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
385861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet_In = false;
385961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet_Out = false;
386047e37c4428509524ee576920a98381f3e4872493Nick Pelly
386161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bRet_In = allocate_input_done();
386261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bRet_Out = allocate_output_done();
386347e37c4428509524ee576920a98381f3e4872493Nick Pelly
386461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (bRet_In && bRet_Out) {
386561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
386661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
386747e37c4428509524ee576920a98381f3e4872493Nick Pelly
386861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
386947e37c4428509524ee576920a98381f3e4872493Nick Pelly}
387047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
387161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
387261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateInputDone
387347e37c4428509524ee576920a98381f3e4872493Nick Pelly
387461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
387561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if I/P buffer pool is allocated by IL Client or not.
387647e37c4428509524ee576920a98381f3e4872493Nick Pelly
387761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
387861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
387947e37c4428509524ee576920a98381f3e4872493Nick Pelly
388061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
388161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false.
388247e37c4428509524ee576920a98381f3e4872493Nick Pelly
388361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
388447e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_input_done(void)
388547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
388661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
388761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned i=0;
388847e37c4428509524ee576920a98381f3e4872493Nick Pelly
388961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr == NULL) {
389061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return bRet;
389161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
389261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr ) {
389361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; i<m_sInPortDef.nBufferCountActual; i++) {
389461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_ABSENT(&m_inp_bm_count,i)) {
389561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
389661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
389761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
389861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
389961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i==m_sInPortDef.nBufferCountActual) {
390061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
390161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
390261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (i==m_sInPortDef.nBufferCountActual && m_sInPortDef.bEnabled) {
390361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sInPortDef.bPopulated = OMX_TRUE;
390461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
390547e37c4428509524ee576920a98381f3e4872493Nick Pelly    return bRet;
390647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
390747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
390861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
390961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::AllocateOutputDone
391047e37c4428509524ee576920a98381f3e4872493Nick Pelly
391161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
391261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if entire O/P buffer pool is allocated by IL Client or not.
391347e37c4428509524ee576920a98381f3e4872493Nick Pelly
391461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
391561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
391647e37c4428509524ee576920a98381f3e4872493Nick Pelly
391761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
391861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false.
391947e37c4428509524ee576920a98381f3e4872493Nick Pelly
392061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
392147e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_output_done(void)
392247e37c4428509524ee576920a98381f3e4872493Nick Pelly{
392361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
392461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned j=0;
392547e37c4428509524ee576920a98381f3e4872493Nick Pelly
392661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr == NULL) {
392761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return bRet;
392861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
392947e37c4428509524ee576920a98381f3e4872493Nick Pelly
393061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr ) {
393161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; j<m_sOutPortDef.nBufferCountActual; j++) {
393261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_ABSENT(&m_out_bm_count,j)) {
393361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
393461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
393561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
393647e37c4428509524ee576920a98381f3e4872493Nick Pelly    }
393747e37c4428509524ee576920a98381f3e4872493Nick Pelly
393861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (j==m_sOutPortDef.nBufferCountActual) {
393961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
394061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
394147e37c4428509524ee576920a98381f3e4872493Nick Pelly
394261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (j==m_sOutPortDef.nBufferCountActual && m_sOutPortDef.bEnabled) {
394361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_sOutPortDef.bPopulated = OMX_TRUE;
394461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
394561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
394647e37c4428509524ee576920a98381f3e4872493Nick Pelly}
394747e37c4428509524ee576920a98381f3e4872493Nick Pelly
394847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
394961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
395061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ReleaseDone
395147e37c4428509524ee576920a98381f3e4872493Nick Pelly
395261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
395361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if IL client has released all the buffers.
395447e37c4428509524ee576920a98381f3e4872493Nick Pelly
395561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
395661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
395747e37c4428509524ee576920a98381f3e4872493Nick Pelly
395861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
395961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
396047e37c4428509524ee576920a98381f3e4872493Nick Pelly
396161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
396247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_done(void)
396347e37c4428509524ee576920a98381f3e4872493Nick Pelly{
396461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
39658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Inside release_done()");
396661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (release_input_done()) {
396761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (release_output_done()) {
396861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bRet = true;
396961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
397061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
397161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
397247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
397347e37c4428509524ee576920a98381f3e4872493Nick Pelly
397447e37c4428509524ee576920a98381f3e4872493Nick Pelly
397547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
397661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
397761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ReleaseOutputDone
397847e37c4428509524ee576920a98381f3e4872493Nick Pelly
397961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
398061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if IL client has released all the buffers.
398147e37c4428509524ee576920a98381f3e4872493Nick Pelly
398261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
398361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
398447e37c4428509524ee576920a98381f3e4872493Nick Pelly
398561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
398661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
398747e37c4428509524ee576920a98381f3e4872493Nick Pelly
398861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
398947e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_output_done(void)
399047e37c4428509524ee576920a98381f3e4872493Nick Pelly{
399161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
399261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned i=0,j=0;
399361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Inside release_output_done()");
399561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_out_mem_ptr) {
399661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; j<m_sOutPortDef.nBufferCountActual; j++) {
399761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (BITMASK_PRESENT(&m_out_bm_count,j)) {
399861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
399961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
400061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
400161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (j==m_sOutPortDef.nBufferCountActual) {
400261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bRet = true;
400361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
400461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
400561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
400661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
400761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
400847e37c4428509524ee576920a98381f3e4872493Nick Pelly}
400947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ======================================================================
401061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   FUNCTION
401161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   omx_venc::ReleaseInputDone
401247e37c4428509524ee576920a98381f3e4872493Nick Pelly
401361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   DESCRIPTION
401461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   Checks if IL client has released all the buffers.
401547e37c4428509524ee576920a98381f3e4872493Nick Pelly
401661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   PARAMETERS
401761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   None.
401847e37c4428509524ee576920a98381f3e4872493Nick Pelly
401961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   RETURN VALUE
402061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   true/false
402147e37c4428509524ee576920a98381f3e4872493Nick Pelly
402261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan   ========================================================================== */
402347e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_input_done(void)
402447e37c4428509524ee576920a98381f3e4872493Nick Pelly{
402561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool bRet = false;
402661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned i=0,j=0;
402761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Inside release_input_done()");
402961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_inp_mem_ptr) {
403061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        for (; j<m_sInPortDef.nBufferCountActual; j++) {
403161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if ( BITMASK_PRESENT(&m_inp_bm_count,j)) {
403261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
403361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
403461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
403561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (j==m_sInPortDef.nBufferCountActual) {
403661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bRet = true;
403761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
403861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
403961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bRet = true;
404061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
404161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return bRet;
404247e37c4428509524ee576920a98381f3e4872493Nick Pelly}
404347e37c4428509524ee576920a98381f3e4872493Nick Pelly
404447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_buffer_done(OMX_HANDLETYPE hComp,
404561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE * buffer)
404647e37c4428509524ee576920a98381f3e4872493Nick Pelly{
40476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
40486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    int index = buffer - m_out_mem_ptr;
40496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
40508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("fill_buffer_done: buffer->pBuffer[%p], flags=0x%x size = %u",
40518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            buffer->pBuffer, (unsigned)buffer->nFlags, (unsigned int)buffer->nFilledLen);
40528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if (buffer == NULL || ((buffer - m_out_mem_ptr) > (int)m_sOutPortDef.nBufferCountActual)) {
405361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
405461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
405547e37c4428509524ee576920a98381f3e4872493Nick Pelly
405661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_output_buffers--;
405747e37c4428509524ee576920a98381f3e4872493Nick Pelly
40588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(!secure_session) {
405961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    extra_data_handle.create_extra_data(buffer);
40606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_
406161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) {
406261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DEBUG_PRINT_LOW("parsing extradata");
406361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handle.parse_extra_data(buffer);
406461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
40656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
40668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
40678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
406861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    /* For use buffer we need to copy the data */
406961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (m_pCallbacks.FillBufferDone) {
407061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (buffer->nFilledLen > 0) {
407161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_fbd_count++;
4072826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
40738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if (dev_get_output_log_flag()) {
40748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                dev_output_log_buffers((const char*)buffer->pBuffer, buffer->nFilledLen);
407561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
407661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
40776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
407861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) {
407961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!dev_handle_extradata((void *)buffer, index))
40808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("Failed to parse extradata");
40818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
40828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            dev_extradata_log_buffers((char *)(((unsigned long)buffer->pBuffer + buffer->nOffset +
40838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        buffer->nFilledLen + 3) & (~3)));
408461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
40856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
408661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.FillBufferDone (hComp,m_app_data,buffer);
408761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
408861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
408961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
409061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
409147e37c4428509524ee576920a98381f3e4872493Nick Pelly}
409247e37c4428509524ee576920a98381f3e4872493Nick Pelly
409347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::empty_buffer_done(OMX_HANDLETYPE         hComp,
409461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE* buffer)
409547e37c4428509524ee576920a98381f3e4872493Nick Pelly{
409661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int buffer_index  = -1;
409761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4098f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    buffer_index = buffer - ((mUseProxyColorFormat && !mUsesColorConversion) ? meta_buffer_hdr : m_inp_mem_ptr);
40998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("empty_buffer_done: buffer[%p]", buffer);
410061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL ||
4101f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            ((buffer_index > (int)m_sInPortDef.nBufferCountActual))) {
41028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR in empty_buffer_done due to index buffer");
410361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
410461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
410561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
410661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pending_input_buffers--;
410761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4108f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    if (mUseProxyColorFormat &&
4109f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        (buffer_index >= 0 && (buffer_index < (int)m_sInPortDef.nBufferCountActual))) {
4110f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (!pdest_frame  && !input_flush_progress && mUsesColorConversion) {
411161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pdest_frame = buffer;
41128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("empty_buffer_done pdest_frame address is %p",pdest_frame);
411361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return push_input_buffer(hComp);
41149ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        }
411556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //check if empty-EOS-buffer is being returned, treat this same as the
411656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //color-conversion case as we queued a color-conversion buffer to encoder
411756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        bool handleEmptyEosBuffer = (mEmptyEosBuffer == buffer);
411856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (mUsesColorConversion || handleEmptyEosBuffer) {
411956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            if (handleEmptyEosBuffer) {
412056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan                mEmptyEosBuffer = NULL;
412156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            }
41229ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            // return color-conversion buffer back to the pool
41238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("empty_buffer_done insert address is %p",buffer);
41248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            if (!m_opq_pmem_q.insert_entry((unsigned long)buffer, 0, 0)) {
41258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("empty_buffer_done: pmem queue is full");
412661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorBadParameter;
412761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
41289ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan        } else {
41299ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            // We are not dealing with color-conversion, Buffer being returned
41309ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            // here is client's buffer, return it back to client
4131f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            if (m_pCallbacks.EmptyBufferDone && buffer) {
4132f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
4133f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("empty_buffer_done: Returning client buf %p", buffer);
41349ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan            }
413561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
413661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (m_pCallbacks.EmptyBufferDone) {
413761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, buffer);
413861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
413961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return OMX_ErrorNone;
414047e37c4428509524ee576920a98381f3e4872493Nick Pelly}
4141826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4142826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::complete_pending_buffer_done_cbs()
4143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
41448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p1;
41458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long p2;
41468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long ident;
414761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    omx_cmd_queue tmp_q, pending_bd_q;
414861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&m_lock);
414961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // pop all pending GENERATE FDB from ftb queue
415061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_ftb_q.m_size) {
415161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.pop_entry(&p1,&p2,&ident);
415261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_FBD) {
415361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_bd_q.insert_entry(p1,p2,ident);
415461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
415561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            tmp_q.insert_entry(p1,p2,ident);
4156826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
415761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
415861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    //return all non GENERATE FDB to ftb queue
415961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (tmp_q.m_size) {
416061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        tmp_q.pop_entry(&p1,&p2,&ident);
416161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_ftb_q.insert_entry(p1,p2,ident);
416261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
416361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // pop all pending GENERATE EDB from etb queue
416461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (m_etb_q.m_size) {
416561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.pop_entry(&p1,&p2,&ident);
416661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (ident == OMX_COMPONENT_GENERATE_EBD) {
416761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pending_bd_q.insert_entry(p1,p2,ident);
416861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
416961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            tmp_q.insert_entry(p1,p2,ident);
417061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
417161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
417261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    //return all non GENERATE FDB to etb queue
417361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (tmp_q.m_size) {
417461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        tmp_q.pop_entry(&p1,&p2,&ident);
417561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_etb_q.insert_entry(p1,p2,ident);
417661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
417761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&m_lock);
417861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    // process all pending buffer dones
417961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (pending_bd_q.m_size) {
418061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pending_bd_q.pop_entry(&p1,&p2,&ident);
418161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        switch (ident) {
418261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            case OMX_COMPONENT_GENERATE_EBD:
418361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (empty_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) {
41848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!");
418561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
418661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
418761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
418861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
418961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            case OMX_COMPONENT_GENERATE_FBD:
419061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (fill_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) {
41918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!");
419261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    omx_report_error ();
419361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
419461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                break;
4195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        }
4196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
4197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
4200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType)
4201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
420261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
420361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!profileLevelType)
420461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
420561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
420661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (profileLevelType->nPortIndex == 1) {
420761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) {
420861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
420961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline;
421061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel31;
421161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
421261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain;
421361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel31;
421461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 2) {
421561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh;
421661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel31;
421761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
42188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d",
42198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (int)profileLevelType->nProfileIndex);
422061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
422161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
422261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) {
422361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
422461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline;
422561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_H263Level70;
422661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
42278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex);
422861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
422961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
423061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
423161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
423261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple;
423361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
423461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
423561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple;
423661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
423761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
42388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex);
423961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
424061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
424161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
424261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
42438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %d", (int)profileLevelType->nPortIndex);
424461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
424561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
42468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%d, Level:%d",
42478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            (int)profileLevelType->eProfile, (int)profileLevelType->eLevel);
424861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
4249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
4251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
4253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType)
4254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
425561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE eRet = OMX_ErrorNone;
425661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!profileLevelType)
425761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
4258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
425961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (profileLevelType->nPortIndex == 1) {
426061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) {
42618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#if defined _MSM8974_ && !defined _MSM8226_
426261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
426361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline;
42648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
426561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
426661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain;
42678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
426861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 2) {
426961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh;
42708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
42718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else if (profileLevelType->nProfileIndex == 3) {
42728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline;
42738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel52;
427461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
42758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u",
42768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)profileLevelType->nProfileIndex);
427761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
427861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
42796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
428061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
428161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline;
428261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
428361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
428461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
428561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain;
428661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
428761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 2) {
428861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh;
428961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
42908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8226_
42918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            } else if (profileLevelType->nProfileIndex == 3) {
42928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline;
42938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_AVCLevel4;
42948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
429561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
42968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d",
42978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (int)profileLevelType->nProfileIndex);
429861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
429961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
43006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
430161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) {
430261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
430361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline;
430461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_H263Level70;
430561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
43068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex);
430761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
430861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
430961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
431061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (profileLevelType->nProfileIndex == 0) {
431161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple;
431261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
431361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
431461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple;
431561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                profileLevelType->eLevel   = OMX_VIDEO_MPEG4Level5;
431661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
43178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex);
431861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                eRet = OMX_ErrorNoMore;
431961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
43205aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingVP8) {
43217beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            if (profileLevelType->nProfileIndex == 0) {
43227beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain;
43237beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eLevel   = OMX_VIDEO_VP8Level_Version0;
43247beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            } else if (profileLevelType->nProfileIndex == 1) {
43257beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain;
43267beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                profileLevelType->eLevel   = OMX_VIDEO_VP8Level_Version1;
43277beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            } else {
43288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_LOW("VP8: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u",
43298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                (unsigned int)profileLevelType->nProfileIndex);
43307beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano                eRet = OMX_ErrorNoMore;
43317beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano            }
4332f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingHEVC) {
4333f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            if (profileLevelType->nProfileIndex == 0) {
4334f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eProfile =  OMX_VIDEO_HEVCProfileMain;
4335f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eLevel   =  OMX_VIDEO_HEVCMainTierLevel52;
4336f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            } else if (profileLevelType->nProfileIndex == 1) {
4337f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eProfile =  OMX_VIDEO_HEVCProfileMain10;
4338f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                profileLevelType->eLevel   =  OMX_VIDEO_HEVCMainTierLevel52;
4339f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            } else {
4340f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_LOW("HEVC: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u",
4341f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                (unsigned int)profileLevelType->nProfileIndex);
4342f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                eRet = OMX_ErrorNoMore;
4343f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
434461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
43458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported ret NoMore");
434661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            eRet = OMX_ErrorNoMore;
434761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
434861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
43498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %u", (unsigned int)profileLevelType->nPortIndex);
435061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        eRet = OMX_ErrorBadPortIndex;
4351826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    }
43528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%u, Level:%u",
43538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            (unsigned int)profileLevelType->eProfile, (unsigned int)profileLevelType->eLevel);
435461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return eRet;
4355826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
43566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
4357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4358826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
43598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_video::alloc_map_ion_memory(int size,
43608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct ion_allocation_data *alloc_data,
436161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ion_fd_data *fd_data,int flag)
4362826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
436361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct venc_ion buf_ion_info;
436461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int ion_device_fd =-1,rc=0,ion_dev_flags = 0;
436561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (size <=0 || !alloc_data || !fd_data) {
43668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Invalid input to alloc_map_ion_memory");
436761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return -EINVAL;
436861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
436961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
437061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ion_dev_flags = O_RDONLY;
437161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    ion_device_fd = open (MEM_DEVICE,ion_dev_flags);
437261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ion_device_fd < 0) {
43738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ION Device open() Failed");
437461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return ion_device_fd;
437561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
43768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
43778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if(secure_session) {
43788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->len = (size + (SZ_1M - 1)) & ~(SZ_1M - 1);
43798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->align = SZ_1M;
43808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->flags = ION_SECURE;
43819157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan        alloc_data->ION_HEAP_MASK = ION_HEAP(ION_CP_MM_HEAP_ID);
4382f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_HIGH("ION ALLOC sec buf: size %u align %u flags %x",
4383f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                (unsigned int)alloc_data->len, (unsigned int)alloc_data->align,
4384f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                alloc_data->flags);
43858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    } else {
43868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->len = (size + (SZ_4K - 1)) & ~(SZ_4K - 1);
43878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->align = SZ_4K;
43888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->flags = (flag & ION_FLAG_CACHED ? ION_FLAG_CACHED : 0);
43896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P
4390f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        alloc_data->ION_HEAP_MASK = ION_HEAP(MEM_HEAP_ID);
43916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
4392f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        alloc_data->ION_HEAP_MASK = (ION_HEAP(MEM_HEAP_ID) |
439361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ION_HEAP(ION_IOMMU_HEAP_ID));
43946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
4395f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_HIGH("ION ALLOC unsec buf: size %u align %u flags %x",
4396f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                (unsigned int)alloc_data->len, (unsigned int)alloc_data->align,
4397f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                alloc_data->flags);
43988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
43998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
440061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    rc = ioctl(ion_device_fd,ION_IOC_ALLOC,alloc_data);
440161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (rc || !alloc_data->handle) {
44028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ION ALLOC memory failed 0x%x", rc);
44038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        alloc_data->handle = 0;
440461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        close(ion_device_fd);
440561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ion_device_fd = -1;
4406826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        return ion_device_fd;
440761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
440861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    fd_data->handle = alloc_data->handle;
440961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    rc = ioctl(ion_device_fd,ION_IOC_MAP,fd_data);
441061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (rc) {
44118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ION MAP failed ");
441261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_ion_info.ion_alloc_data = *alloc_data;
441361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_ion_info.ion_device_fd = ion_device_fd;
441461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_ion_info.fd_ion_data = *fd_data;
441561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        free_ion_memory(&buf_ion_info);
441661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        fd_data->fd =-1;
441761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ion_device_fd =-1;
441861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
441961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ion_device_fd;
4420826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4421826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
44228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanvoid omx_video::free_ion_memory(struct venc_ion *buf_ion_info)
4423826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
442461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!buf_ion_info) {
44258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Invalid input to free_ion_memory");
442661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return;
442761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
442861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ioctl(buf_ion_info->ion_device_fd,ION_IOC_FREE,
442961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                &buf_ion_info->ion_alloc_data.handle)) {
44308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ION free failed ");
443161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return;
443261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
443361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    close(buf_ion_info->ion_device_fd);
44348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    buf_ion_info->ion_alloc_data.handle = 0;
443561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    buf_ion_info->ion_device_fd = -1;
443661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    buf_ion_info->fd_ion_data.fd = -1;
4437826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
4438826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
44396eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
4440826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
4441826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer)
4442826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
444361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer && meta_mode_enable) {
444461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        encoder_media_buffer_type *media_ptr;
444561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem Input_pmem;
444661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int index_pmem = 0;
444761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool meta_error = false;
444861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
444961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        index_pmem = (buffer - m_inp_mem_ptr);
445056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (mUsesColorConversion &&
445161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                (index_pmem < m_sInPortDef.nBufferCountActual)) {
445261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!dev_free_buf((&m_pInput_pmem[index_pmem]),PORT_INDEX_IN)) {
44538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("omx_release_meta_buffer dev free failed");
445461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
445561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
445661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            media_ptr = (encoder_media_buffer_type *) buffer->pBuffer;
445761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (media_ptr && media_ptr->meta_handle) {
445861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (media_ptr->buffer_type == kMetadataBufferTypeCameraSource &&
445961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        media_ptr->meta_handle->numFds == 1 &&
44608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        media_ptr->meta_handle->numInts >= 2) {
446161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.fd = media_ptr->meta_handle->data[0];
446261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.buffer = media_ptr;
446361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.size = media_ptr->meta_handle->data[2];
446461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.offset = media_ptr->meta_handle->data[1];
446561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_LOW("EBD fd = %d, offset = %d, size = %d",Input_pmem.fd,
446661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            Input_pmem.offset,
446761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            Input_pmem.size);
446861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else if (media_ptr->buffer_type == kMetadataBufferTypeGrallocSource) {
446961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    private_handle_t *handle = (private_handle_t *)media_ptr->meta_handle;
447061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.buffer = media_ptr;
447161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.fd = handle->fd;
447261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.offset = 0;
447361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem.size = handle->size;
447461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                } else {
447561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    meta_error = true;
447661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR(" Meta Error set in EBD");
447761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
447861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!meta_error)
447961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    meta_error = !dev_free_buf(&Input_pmem,PORT_INDEX_IN);
448061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (meta_error) {
448161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    DEBUG_PRINT_ERROR(" Warning dev_free_buf failed flush value is %d",
448261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                            input_flush_progress);
448361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
448461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
44856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal        }
44867eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George    }
4487826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}
44886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
448961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::omx_c2d_conv()
449061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
449161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    c2dcc = NULL;
449261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mLibHandle = NULL;
449361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertOpen = NULL;
449461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertClose = NULL;
449561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    src_format = NV12_128m;
449661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_init(&c_lock, NULL);
449761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
449861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
449961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::init()
450061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
450161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool status = true;
450261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mLibHandle || mConvertOpen || mConvertClose) {
45038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("omx_c2d_conv::init called twice");
450461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        status = false;
450561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
450661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (status) {
450761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY);
450861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (mLibHandle) {
450961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertOpen = (createC2DColorConverter_t *)
451061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dlsym(mLibHandle,"createC2DColorConverter");
451161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertClose = (destroyC2DColorConverter_t *)
451261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                dlsym(mLibHandle,"destroyC2DColorConverter");
451361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!mConvertOpen || !mConvertClose)
451461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                status = false;
451561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else
451661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            status = false;
451761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
451861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!status && mLibHandle) {
451961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        dlclose(mLibHandle);
452061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mLibHandle = NULL;
452161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mConvertOpen = NULL;
452261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        mConvertClose = NULL;
452361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
452461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return status;
452561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
452661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
452761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr,
452861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int dest_fd, void *dest_base, void *dest_viraddr)
452961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
453061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int result;
453161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!src_viraddr || !dest_viraddr || !c2dcc || !src_base || !dest_base) {
45328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("Invalid arguments omx_c2d_conv::convert");
453361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return false;
453461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
453561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&c_lock);
453661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    result =  c2dcc->convertC2D(src_fd, src_base, src_viraddr,
453761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            dest_fd, dest_base, dest_viraddr);
453861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&c_lock);
45398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("Color convert status %d",result);
454061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ((result < 0)?false:true);
454161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
454261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
454361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width,
454461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ColorConvertFormat src, ColorConvertFormat dest,unsigned int src_stride)
454561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
454661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool status = false;
454761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_lock(&c_lock);
454861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!c2dcc) {
454961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        c2dcc = mConvertOpen(width, height, width, height,
455061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                src,dest,0,src_stride);
455161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (c2dcc) {
455261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            src_format = src;
455361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            status = true;
455461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else
45558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("mConvertOpen failed");
455661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
455761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_unlock(&c_lock);
455861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return status;
455961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
456061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
456161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid omx_video::omx_c2d_conv::close()
456261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
456361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mLibHandle) {
456461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&c_lock);
456561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (mConvertClose && c2dcc)
456661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertClose(c2dcc);
456761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&c_lock);
456861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        c2dcc = NULL;
456961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
457061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
457161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::~omx_c2d_conv()
457261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
45738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_HIGH("Destroy C2D instance");
457461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (mLibHandle) {
457561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (mConvertClose && c2dcc) {
457661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pthread_mutex_lock(&c_lock);
457761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            mConvertClose(c2dcc);
457861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pthread_mutex_unlock(&c_lock);
457961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
458061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        dlclose(mLibHandle);
458161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
458261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    c2dcc = NULL;
458361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mLibHandle = NULL;
458461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertOpen = NULL;
458561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    mConvertClose = NULL;
458661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    pthread_mutex_destroy(&c_lock);
458761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
458861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
458961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_video::omx_c2d_conv::get_src_format()
459061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
459161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int format = -1;
459261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (src_format == NV12_128m) {
459361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE;
459461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else if (src_format == RGBA8888) {
459561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        format = HAL_PIXEL_FORMAT_RGBA_8888;
459661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
459761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return format;
459861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
459961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
460061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size)
460161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
460261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int cret = 0;
460361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    bool ret = false;
460461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    C2DBuffReq bufferreq;
460561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (c2dcc) {
460661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bufferreq.size = 0;
460761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_lock(&c_lock);
460861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        cret = c2dcc->getBuffReq(port,&bufferreq);
460961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_unlock(&c_lock);
46108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_LOW("Status of getbuffer is %d", cret);
461161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = (cret)?false:true;
461261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        buf_size = bufferreq.size;
461361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
461461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
461561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
461661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
461761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE  omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp,
461861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_IN OMX_BUFFERHEADERTYPE* buffer)
461961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
462061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned nBufIndex = 0;
462161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
462261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    encoder_media_buffer_type *media_buffer;
4623587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan    private_handle_t *handle = NULL;
46248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("ETBProxyOpaque: buffer[%p]", buffer);
462561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
462661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (buffer == NULL) {
46278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid buffer[%p]",buffer);
462861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
462961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
463061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    nBufIndex = buffer - meta_buffer_hdr;
463161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (nBufIndex >= m_sInPortDef.nBufferCountActual) {
46328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid bufindex = %u",
463361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                nBufIndex);
463461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
463561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
463661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    media_buffer = (encoder_media_buffer_type *)buffer->pBuffer;
4637587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan    if ((!media_buffer || !media_buffer->meta_handle) &&
4638587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan            !(buffer->nFlags & OMX_BUFFERFLAG_EOS)) {
4639f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        DEBUG_PRINT_ERROR("Incorrect Buffer queued media buffer = %p",
4640f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            media_buffer);
4641f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
4642f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        return OMX_ErrorBadParameter;
4643587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan    } else if (media_buffer) {
4644587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan        handle = (private_handle_t *)media_buffer->meta_handle;
4645f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    }
464656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
4647f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    if (buffer->nFilledLen > 0 && handle) {
464825adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan        /*Enable following code once private handle color format is
464925adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan            updated correctly*/
465025adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan        if (handle->format == HAL_PIXEL_FORMAT_RGBA_8888)
465125adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan            mUsesColorConversion = true;
465225adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan        else
465325adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan            mUsesColorConversion = false;
465425adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan
46553b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if (c2d_opened && handle->format != c2d_conv.get_src_format()) {
46563b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            c2d_conv.close();
46573b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            c2d_opened = false;
46583b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
46593b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if (!c2d_opened) {
46603b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            if (handle->format == HAL_PIXEL_FORMAT_RGBA_8888) {
46618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_INFO("open Color conv for RGBA888 W: %u, H: %u",
46628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)m_sInPortDef.format.video.nFrameWidth,
46638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                        (unsigned int)m_sInPortDef.format.video.nFrameHeight);
46643b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                if (!c2d_conv.open(m_sInPortDef.format.video.nFrameHeight,
46653b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                            m_sInPortDef.format.video.nFrameWidth,
46663b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                            RGBA8888, NV12_128m, handle->width)) {
46673b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                    m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
46688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("Color conv open failed");
46693b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                    return OMX_ErrorBadParameter;
46703b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                }
46713b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                c2d_opened = true;
46723b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#ifdef _MSM8974_
46733b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan                if (!dev_set_format(handle->format))
46748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_ERROR("cannot set color format for RGBA8888");
46753b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#endif
467625adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan            } else if (handle->format != HAL_PIXEL_FORMAT_NV12_ENCODEABLE &&
467725adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan                    handle->format != QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m &&
467825adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan                    handle->format != QOMX_COLOR_FormatYVU420SemiPlanar) {
46798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("Incorrect color format");
468061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
468161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return OMX_ErrorBadParameter;
468261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
468361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
468461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
468561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (input_flush_progress == true) {
468661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
46878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Input flush in progress");
468861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorNone;
468961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
469061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
469161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame) {
469261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = buffer;
469361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = push_input_buffer(hComp);
469461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
46958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        if (!m_opq_meta_q.insert_entry((unsigned long)buffer,0,0)) {
46968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: ETBProxy: Queue is full");
46978f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan            m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer);
469861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret = OMX_ErrorBadParameter;
469961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
470061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
470161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
470261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
470361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
470461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::queue_meta_buffer(OMX_HANDLETYPE hComp,
470561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem &Input_pmem_info)
470661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
470761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
470861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
47098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long address = 0,p2,id;
471061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("In queue Meta Buffer");
471261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame || !pdest_frame) {
47138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("convert_queue_buffer invalid params");
471461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
471561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
471661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47173b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan    if (psource_frame->nFilledLen > 0) {
47183b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,0) != true) {
47198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_use_buf");
47208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            post_event ((unsigned long)psource_frame,0,OMX_COMPONENT_GENERATE_EBD);
47213b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            ret = OMX_ErrorBadParameter;
47223b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
472361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
472461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
472561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone)
472661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = empty_this_buffer_proxy(hComp,psource_frame);
472761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
472861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone) {
472961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = NULL;
473061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!psource_frame && m_opq_meta_q.m_size) {
473161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_meta_q.pop_entry(&address,&p2,&id);
473261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
473361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
47348f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan    } else {
47358f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        // there has been an error and source frame has been scheduled for an EBD
47368f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        psource_frame = NULL;
473761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
473861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
473961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
474061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
474161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::convert_queue_buffer(OMX_HANDLETYPE hComp,
47428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct pmem &Input_pmem_info,unsigned long &index)
474361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
474461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
474561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    unsigned char *uva;
474661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
47478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long address = 0,p2,id;
474861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    DEBUG_PRINT_LOW("In Convert and queue Meta Buffer");
475061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame || !pdest_frame) {
47518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("convert_queue_buffer invalid params");
475261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        return OMX_ErrorBadParameter;
475361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
47548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    if (secure_session) {
47558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("cannot convert buffer during secure session");
47568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        return OMX_ErrorInvalidState;
47578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    }
475861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
475961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame->nFilledLen) {
47603b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        if(psource_frame->nFlags & OMX_BUFFERFLAG_EOS) {
47613b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFilledLen = psource_frame->nFilledLen;
47623b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nTimeStamp = psource_frame->nTimeStamp;
47633b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFlags = psource_frame->nFlags;
47648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_HIGH("Skipping color conversion for empty EOS Buffer "
47658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    "header=%p filled-len=%u", pdest_frame, (unsigned int)pdest_frame->nFilledLen);
47663b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        } else {
47673b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nOffset = 0;
47683b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFilledLen = 0;
47693b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nTimeStamp = psource_frame->nTimeStamp;
47703b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan            pdest_frame->nFlags = psource_frame->nFlags;
47718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("Buffer header %p Filled len size %u",
47728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    pdest_frame, (unsigned int)pdest_frame->nFilledLen);
47733b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan        }
477461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    } else {
477561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        uva = (unsigned char *)mmap(NULL, Input_pmem_info.size,
477661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                PROT_READ|PROT_WRITE,
477761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                MAP_SHARED,Input_pmem_info.fd,0);
477861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (uva == MAP_FAILED) {
477961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret = OMX_ErrorBadParameter;
478061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
478161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (!c2d_conv.convert(Input_pmem_info.fd, uva, uva,
478261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        m_pInput_pmem[index].fd, pdest_frame->pBuffer, pdest_frame->pBuffer)) {
47838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                DEBUG_PRINT_ERROR("Color Conversion failed");
478461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = OMX_ErrorBadParameter;
478561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            } else {
478661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buf_size = 0;
478761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                if (!c2d_conv.get_buffer_size(C2D_OUTPUT,buf_size))
478861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    ret = OMX_ErrorBadParameter;
478961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                else {
479061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nOffset = 0;
479161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nFilledLen = buf_size;
479261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nTimeStamp = psource_frame->nTimeStamp;
479361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    pdest_frame->nFlags = psource_frame->nFlags;
47948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    DEBUG_PRINT_LOW("Buffer header %p Filled len size %u",
47958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                            pdest_frame, (unsigned int)pdest_frame->nFilledLen);
479661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                }
479761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
479861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            munmap(uva,Input_pmem_info.size);
479961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
480061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
480161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (dev_use_buf(&m_pInput_pmem[index],PORT_INDEX_IN,0) != true) {
48028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        DEBUG_PRINT_ERROR("ERROR: in dev_use_buf");
48038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        post_event ((unsigned long)pdest_frame,0,OMX_COMPONENT_GENERATE_EBD);
480461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = OMX_ErrorBadParameter;
480561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
480661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone)
480761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ret = empty_this_buffer_proxy(hComp,pdest_frame);
480861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (ret == OMX_ErrorNone) {
480961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, psource_frame);
481061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = NULL;
481161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pdest_frame = NULL;
481261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!psource_frame && m_opq_meta_q.m_size) {
481361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_meta_q.pop_entry(&address,&p2,&id);
481461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
481561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
481661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (!pdest_frame && m_opq_pmem_q.m_size) {
481761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            m_opq_pmem_q.pop_entry(&address,&p2,&id);
481861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            pdest_frame = (OMX_BUFFERHEADERTYPE* ) address;
48198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_LOW("pdest_frame pop address is %p",pdest_frame);
482061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
48218f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan    } else {
48228f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        // there has been an error and source frame has been scheduled for an EBD
48238f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan        psource_frame = NULL;
482461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
482561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
482661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
482761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
482861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::push_input_buffer(OMX_HANDLETYPE hComp)
482961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
48308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long address = 0,p2,id, index = 0;
483161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_ERRORTYPE ret = OMX_ErrorNone;
483261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4833f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_LOW("In push input buffer");
483461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!psource_frame && m_opq_meta_q.m_size) {
483561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_opq_meta_q.pop_entry(&address,&p2,&id);
483661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        psource_frame = (OMX_BUFFERHEADERTYPE* ) address;
483761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
483861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    if (!pdest_frame && m_opq_pmem_q.m_size) {
483961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        m_opq_pmem_q.pop_entry(&address,&p2,&id);
484061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pdest_frame = (OMX_BUFFERHEADERTYPE* ) address;
484161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
484261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    while (psource_frame != NULL && pdest_frame != NULL &&
484361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret == OMX_ErrorNone) {
484461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem Input_pmem_info;
484561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        encoder_media_buffer_type *media_buffer;
484661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        index = pdest_frame - m_inp_mem_ptr;
484761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (index >= m_sInPortDef.nBufferCountActual) {
48488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            DEBUG_PRINT_ERROR("Output buffer index is wrong %u act count %u",
48498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                    (unsigned int)index, (unsigned int)m_sInPortDef.nBufferCountActual);
485061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return OMX_ErrorBadParameter;
485161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
4852b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan
4853b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        //Meta-Buffer with empty filled-length can contain garbage handle
4854b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        //Some clients queue such buffers to signal EOS. Handle this case
4855b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        // separately by queueing an intermediate color-conversion buffer
4856b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        // and propagate the EOS.
4857b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        if (psource_frame->nFilledLen == 0 && (psource_frame->nFlags & OMX_BUFFERFLAG_EOS)) {
4858b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            return push_empty_eos_buffer(hComp, psource_frame);
4859b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        }
486061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        media_buffer = (encoder_media_buffer_type *)psource_frame->pBuffer;
486161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Will enable to verify camcorder in current TIPS can be removed*/
486261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) {
486361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
486461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = media_buffer->meta_handle->data[0];
486561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = media_buffer->meta_handle->data[1];
486661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = media_buffer->meta_handle->data[2];
486761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            DEBUG_PRINT_LOW("ETB fd = %d, offset = %d, size = %d",Input_pmem_info.fd,
486861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem_info.offset,
486961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    Input_pmem_info.size);
487061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ret = queue_meta_buffer(hComp,Input_pmem_info);
487161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } else {
487261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle;
487361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.buffer = media_buffer;
487461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.fd = handle->fd;
487561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.offset = 0;
487661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            Input_pmem_info.size = handle->size;
487761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (handle->format == HAL_PIXEL_FORMAT_RGBA_8888)
487861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = convert_queue_buffer(hComp,Input_pmem_info,index);
4879f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            else if (handle->format == HAL_PIXEL_FORMAT_NV12_ENCODEABLE ||
4880f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m)
488161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = queue_meta_buffer(hComp,Input_pmem_info);
488261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            else
488361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ret = OMX_ErrorBadParameter;
488461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
488561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    }
488661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    return ret;
488761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
488856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
488956dd7e53ba5657987bd527fa996a7942da01ef63Praveen ChavanOMX_ERRORTYPE omx_video::push_empty_eos_buffer(OMX_HANDLETYPE hComp,
489056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_BUFFERHEADERTYPE* buffer) {
489156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    OMX_BUFFERHEADERTYPE* opqBuf = NULL;
489256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    OMX_ERRORTYPE retVal = OMX_ErrorNone;
4893f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    unsigned index = 0;
4894f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
4895f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    DEBUG_PRINT_LOW("In push empty eos buffer");
489656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    do {
4897f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (mUsesColorConversion) {
4898b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        if (pdest_frame) {
4899b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //[1] use a checked out conversion buffer, if one is available
4900b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            opqBuf = pdest_frame;
4901b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            pdest_frame = NULL;
4902b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan        } else if (m_opq_pmem_q.m_size) {
4903b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //[2] else pop out one from the queue, if available
49048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long address = 0, p2, id;
490556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            m_opq_pmem_q.pop_entry(&address,&p2,&id);
490656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            opqBuf = (OMX_BUFFERHEADERTYPE* ) address;
490756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
4908f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            index = opqBuf - m_inp_mem_ptr;
4909f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } else {
4910f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            opqBuf = (OMX_BUFFERHEADERTYPE* ) buffer;
4911f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            index = opqBuf - meta_buffer_hdr;
4912f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
4913f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
491456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (!opqBuf || index >= m_sInPortDef.nBufferCountActual) {
491556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            DEBUG_PRINT_ERROR("push_empty_eos_buffer: Could not find a "
4916b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan                    "color-conversion buffer to queue ! defer until available");
4917b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //[3] else, returning back will defer calling this function again
4918b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //until a conversion buffer is returned by the encoder and also
4919b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            //hold on to the client's buffer
4920b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan            return OMX_ErrorNone;
492156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
492256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        struct pmem Input_pmem_info;
492356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.buffer = opqBuf;
492456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.fd = m_pInput_pmem[index].fd;
492556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.offset = 0;
492656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        Input_pmem_info.size = m_pInput_pmem[index].size;
492756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
492856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (dev_use_buf(&Input_pmem_info, PORT_INDEX_IN, 0) != true) {
492956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_use_buf for empty eos buffer");
493056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            retVal = OMX_ErrorBadParameter;
493156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            break;
493256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
493356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
493456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //Queue with null pBuffer, as pBuffer in client's hdr can be junk
493556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //Clone the color-conversion buffer to avoid overwriting original buffer
493656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_BUFFERHEADERTYPE emptyEosBufHdr;
493756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        memcpy(&emptyEosBufHdr, opqBuf, sizeof(OMX_BUFFERHEADERTYPE));
493856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.nFilledLen = 0;
493956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.nTimeStamp = buffer->nTimeStamp;
494056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.nFlags = buffer->nFlags;
494156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        emptyEosBufHdr.pBuffer = NULL;
4942f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        if (!mUsesColorConversion)
4943f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            emptyEosBufHdr.nAllocLen = m_sInPortDef.nBufferSize;
494456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        if (dev_empty_buf(&emptyEosBufHdr, 0, index, m_pInput_pmem[index].fd) != true) {
494556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            DEBUG_PRINT_ERROR("ERROR: in dev_empty_buf for empty eos buffer");
494656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            dev_free_buf(&Input_pmem_info, PORT_INDEX_IN);
494756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            retVal = OMX_ErrorBadParameter;
494856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan            break;
494956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        }
495056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        mEmptyEosBuffer = opqBuf;
495156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    } while(false);
495256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
495356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    //return client's buffer regardless since intermediate color-conversion
495456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    //buffer is sent to the the encoder
495556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer);
495656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    --pending_input_buffers;
495756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan    return retVal;
495856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan}
495956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan
4960