1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
28767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanCopyright (c) 2010-2014, The Linux Foundation. All rights reserved.
3e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
4e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyRedistribution and use in source and binary forms, with or without
56eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalmodification, are permitted provided that the following conditions are
66eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalmet:
7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    * Redistributions of source code must retain the above copyright
8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      notice, this list of conditions and the following disclaimer.
96eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Redistributions in binary form must reproduce the above
106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      copyright notice, this list of conditions and the following
116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      disclaimer in the documentation and/or other materials provided
126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      with the distribution.
136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Neither the name of The Linux Foundation nor the names of its
146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      contributors may be used to endorse or promote products derived
156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      from this software without specific prior written permission.
166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
176eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
186eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
196eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
206eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
216eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
226eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
236eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
246eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
256eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
266eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
276eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/
29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef __OMX_VIDEO_BASE_H__
31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define __OMX_VIDEO_BASE_H__
32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================
33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            O p e n M A X   Component
34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                Video Encoder
35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//** @file comx_video_base.h
37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly  This module contains the class definition for openMAX decoder component.
38e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//*========================================================================*/
40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
41e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                             Include Files
43e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define LOG_TAG "OMX-VENC"
466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <stdlib.h>
47e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <stdio.h>
48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <sys/mman.h>
49e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <binder/MemoryHeapBase.h>
51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
5261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "QComOMXMetadata.h"
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
56e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
57e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_enc.h>
58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
59e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
607beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano#include "OMX_VideoExt.h"
617beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano#include "OMX_IndexExt.h"
62e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
63e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "omx_video_common.h"
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <dlfcn.h>
6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "C2DColorConverter.h"
688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h"
69e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
70e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
71e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyusing namespace android;
72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// local pmem heap object
73e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass VideoHeap : public MemoryHeapBase
74e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        VideoHeap(int fd, size_t size, void* base);
7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~VideoHeap() {}
78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
79e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <utils/Log.h>
81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const char* MEM_DEVICE = "/dev/ion";
8661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#if defined(MAX_RES_720P) && !defined(_MSM8974_)
8761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MEM_HEAP_ID ION_CAMERA_HEAP_ID
8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#else
8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _MSM8974_
9061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MEM_HEAP_ID ION_IOMMU_HEAP_ID
9161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#else
9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MEM_HEAP_ID ION_CP_MM_HEAP_ID
9361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
9461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
95826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_720P
96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic const char* MEM_DEVICE = "/dev/pmem_adsp";
97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_1080P_EBI
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic const char* MEM_DEVICE  = "/dev/pmem_adsp";
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_1080P
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic const char* MEM_DEVICE = "/dev/pmem_smipool";
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#error MEM_DEVICE cannot be determined.
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1059157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#ifdef _ION_HEAP_MASK_COMPATIBILITY_WA
1069157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan    #define ION_HEAP_MASK heap_mask
1079157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#else
1089157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan    #define ION_HEAP_MASK heap_id_mask
1099157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#endif
1109157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan
111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
112e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
118e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned) bufHdr,\
12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
126e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
127e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
128e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
129e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
130e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
13361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    &=  ~(BITMASK_FLAG(mIndex))
134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    |=  BITMASK_FLAG(mIndex)
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
14361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
144826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
145826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_BUFFERS 32
146826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid* message_thread(void *);
1486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video class
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_video: public qc_omx_component
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    protected:
153826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool meta_mode_enable;
15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool c2d_opened;
15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        encoder_media_buffer_type meta_buffers[MAX_NUM_INPUT_BUFFERS];
15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE *opaque_buffer_hdr[MAX_NUM_INPUT_BUFFERS];
1582fc7c73e45bf960e778b85d2d6de6e3ba92891b0Vineeta Srivastava        bool mUseProxyColorFormat;
1592fc7c73e45bf960e778b85d2d6de6e3ba92891b0Vineeta Srivastava        //RGB or non-native input, and we have pre-allocated conversion buffers
1602fc7c73e45bf960e778b85d2d6de6e3ba92891b0Vineeta Srivastava        bool mUsesColorConversion;
16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool get_syntaxhdr_enable;
16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *psource_frame;
16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *pdest_frame;
1648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool secure_session;
16556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //intermediate conversion buffer queued to encoder in case of invalid EOS input
16656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_BUFFERHEADERTYPE  *mEmptyEosBuffer;
16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class omx_c2d_conv
16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            public:
17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omx_c2d_conv();
17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ~omx_c2d_conv();
17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool init();
17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool open(unsigned int height,unsigned int width,
17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ColorConvertFormat src,
17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ColorConvertFormat dest,unsigned int src_stride);
17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool convert(int src_fd, void *src_base, void *src_viraddr,
17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        int dest_fd, void *dest_base, void *dest_viraddr);
17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_buffer_size(int port,unsigned int &buf_size);
18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                int get_src_format();
18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void close();
18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private:
18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                C2DColorConverterBase *c2dcc;
18461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pthread_mutex_t c_lock;
18561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *mLibHandle;
18661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ColorConvertFormat src_format;
18761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                createC2DColorConverter_t *mConvertOpen;
18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                destroyC2DColorConverter_t *mConvertClose;
18961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_c2d_conv c2d_conv;
191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
19261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
19361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_video();  // constructor
19461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~omx_video();  // destructor
19561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // virtual int async_message_process (void *context, void* message);
19761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void process_event_cb(void *ctxt,unsigned char id);
19861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
19961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_buffer(
20061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
20161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR appData,
20461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 bytes
20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
20761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp)= 0;
20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE component_init(OMX_STRING role)= 0;
21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_stop(void) = 0;
21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_pause(void) = 0;
21461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_start(void) = 0;
21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_flush(unsigned) = 0;
21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_resume(void) = 0;
21761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_start_done(void) = 0;
21861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_set_message_thread_id(pthread_t) = 0;
21961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_use_buf(void *,unsigned,unsigned) = 0;
22061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_free_buf(void *,unsigned) = 0;
22161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_empty_buf(void *, void *,unsigned,unsigned) = 0;
22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_fill_buf(void *buffer, void *,unsigned,unsigned) = 0;
22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32) = 0;
2248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_seq_hdr(void *, unsigned, OMX_U32 *) = 0;
22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_start(void) = 0;
22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_stop(void) = 0;
22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_start_done(void) = 0;
22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_stop_done(void) = 0;
2298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool is_secure_session(void) = 0;
2306eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual int dev_handle_extradata(void*, int) = 0;
23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual int dev_set_format(int) = 0;
2336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_is_video_session_supported(OMX_U32 width, OMX_U32 height) = 0;
23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_get_capability_ltrcount(OMX_U32 *, OMX_U32 *, OMX_U32 *) = 0;
2368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_performance_level(OMX_U32 *) = 0;
2378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_vui_timing_info(OMX_U32 *) = 0;
2388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_peak_bitrate(OMX_U32 *) = 0;
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer);
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
242c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        virtual bool dev_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
243c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                        OMX_U32 height) = 0;
2448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_output_log_flag() = 0;
2458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual int dev_output_log_buffers(const char *buffer_addr, int buffer_len) = 0;
2468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual int dev_extradata_log_buffers(char *buffer_addr) = 0;
24761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_role_enum(
24861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
24961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8 *role,
25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 index
25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
252e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
25361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_tunnel_request(
25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE  peerComponent,
25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 peerPort,
25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_TUNNELSETUPTYPE *tunnelSetup
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
26161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer(
26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
265e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
266e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
267e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer(
26961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
27161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
272e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
273e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_buffer(
27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
27861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
279e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_component_version(
28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING componentName,
28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *componentVersion,
28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *specVersion,
28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_UUIDTYPE *componentUUID
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
287e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_config(
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE configIndex,
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR configData
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_extension_index(
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING paramName,
29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE *indexType
29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
299e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
303e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STATETYPE *state);
306e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
307e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
308e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CALLBACKTYPE *callbacks,
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR          appData);
318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  configIndex,
32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        configData) = 0;
322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData) =0;
326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes,
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8               *buffer);
333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
334e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *               eglImage);
340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
341e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
342e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_in;
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_out;
345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t msg_thread_id;
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t async_thread_id;
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool msg_thread_created;
350e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8 m_nkind[128];
352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //int *input_pmem_fd;
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //int *output_pmem_fd;
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem *m_pInput_pmem;
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem *m_pOutput_pmem;
358826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct venc_ion *m_pInput_ion;
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct venc_ion *m_pOutput_ion;
361826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
362826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
363e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Bit Positions
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum flags_bit_positions {
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to IDLE
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_IDLE_PENDING            =0x1,
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to LOADING
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADING_PENDING         =0x2,
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // First  Buffer Pending
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Second Buffer Pending
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //defer flush notification
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PAUSE_PENDING          =0xB,
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_EXECUTE_PENDING        =0xC,
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADED_START_PENDING = 0xD,
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADED_STOP_PENDING = 0xF,
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Deferred callback identifiers
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum {
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Event Callbacks from the venc component thread context
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT       = 0x1,
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the venc component thread context
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the venc component thread context
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the venc component thread context
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FTB         = 0x4,
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the venc component thread context
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB         = 0x5,
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Command
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Push-Pending Buffers
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Empty Buffer Done callbacks
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EBD         = 0x8,
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Flush Event Callbacks from the venc component thread context
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FBD = 0xc,
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_START_DONE = 0xD,
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_LTRUSE_FAILED = 0x12,
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB_OPQ = 0x13
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_event {
4278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param1;
4288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param2;
4298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long id;
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_cmd_queue {
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
4348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_read;
4358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_write;
4368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_size;
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_cmd_queue();
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~omx_cmd_queue();
4408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id);
4418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned long *id);
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // get msgtype of the first ele from the queue
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned get_q_msg_type();
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_done(void);
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_input_done(void);
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_output_done(void);
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
459826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_meta_buffer(OMX_HANDLETYPE       hComp,
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
464826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,OMX_PTR appData,
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_input_buffer(OMX_HANDLETYPE hComp,
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE  **bufferHdr,
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32               port,
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR               appData,
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32               bytes,
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                *buffer);
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE   **bufferHdr,
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                port,
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                appData,
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                bytes,
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                 *buffer);
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_omx_flush(OMX_U32);
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_output_flush(void);
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_input_flush(void);
4876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_flush_all(void);
4896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp,
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_opaque(OMX_HANDLETYPE hComp,
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_buffer(OMX_HANDLETYPE hComp);
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE convert_queue_buffer(OMX_HANDLETYPE hComp,
5018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct pmem &Input_pmem_info,unsigned long &index);
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE queue_meta_buffer(OMX_HANDLETYPE hComp,
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct pmem &Input_pmem_info);
50456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_ERRORTYPE push_empty_eos_buffer(OMX_HANDLETYPE hComp,
50556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp,
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_done();
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_output_done();
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_input_done();
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
5178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool post_event( unsigned long p1,
5188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long p2,
5198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long id
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   );
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_error () {
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pCallbacks.EventHandler && !m_error_propogated) {
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pCallbacks.EventHandler(&m_cmp,m_app_data,
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorHardware,0,NULL);
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_unsupported_setting () {
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_pCallbacks.EventHandler && !m_error_propogated) {
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pCallbacks.EventHandler(&m_cmp,m_app_data,
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void complete_pending_buffer_done_cbs();
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
5408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef USE_ION
5418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int alloc_map_ion_memory(int size,
5428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                 struct ion_allocation_data *alloc_data,
5438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                 struct ion_fd_data *fd_data,int flag);
5448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void free_ion_memory(struct venc_ion *buf_ion_info);
5458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
5468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*******************MEMBER VARIABLES *************************
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       m_lock;
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sem_t                 m_cmd_lock;
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool              m_error_propogated;
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //sem to handle the minimum procesing of commands
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // compression format
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //OMX_VIDEO_CODINGTYPE eCompressionFormat;
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // OMX State
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_STATETYPE m_state;
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application data
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR m_app_data;
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_input_pmem;
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_output_pmem;
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application callbacks
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CALLBACKTYPE m_pCallbacks;
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PORT_PARAM_TYPE m_sPortParam;
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PROFILELEVELTYPE m_sParamProfileLevel;
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PORTFORMATTYPE m_sInPortFormat;
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PORTFORMATTYPE m_sOutPortFormat;
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_sInPortDef;
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_sOutPortDef;
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_MPEG4TYPE m_sParamMPEG4;
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_H263TYPE m_sParamH263;
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_AVCTYPE m_sParamAVC;
5777beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        OMX_VIDEO_PARAM_VP8TYPE m_sParamVP8;
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PORT_PARAM_TYPE m_sPortParam_img;
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PORT_PARAM_TYPE m_sPortParam_audio;
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CONFIG_BITRATETYPE m_sConfigBitrate;
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_FRAMERATETYPE m_sConfigFramerate;
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_BITRATETYPE m_sParamBitrate;
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PRIORITYMGMTTYPE m_sPriorityMgmt;
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_sInBufSupplier;
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_sOutBufSupplier;
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_ROTATIONTYPE m_sConfigFrameRotation;
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_INTRAREFRESHVOPTYPE m_sConfigIntraRefreshVOP;
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_QUANTIZATIONTYPE m_sSessionQuantization;
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_VIDEO_PARAM_QPRANGETYPE m_sSessionQPRange;
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_AVCSLICEFMO m_sAVCSliceFMO;
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_INTRAPERIODTYPE m_sIntraperiod;
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE m_sErrorCorrection;
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_INTRAREFRESHTYPE m_sIntraRefresh;
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_PARAM_LTRMODE_TYPE m_sParamLTRMode;
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_PARAM_LTRCOUNT_TYPE m_sParamLTRCount;
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE m_sConfigLTRPeriod;
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_CONFIG_LTRUSE_TYPE m_sConfigLTRUse;
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CONFIG_AVCINTRAPERIOD m_sConfigAVCIDRPeriod;
5998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_VIDEO_CONFIG_DEINTERLACE m_sConfigDeinterlace;
6008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_VIDEO_VP8REFERENCEFRAMETYPE m_sConfigVp8ReferenceFrame;
6018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        QOMX_VIDEO_HIERARCHICALLAYERS m_sHierLayers;
6028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        QOMX_EXTNINDEX_VIDEO_INITIALQP m_sParamInitqp;
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_sExtraData;
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_input_msg_id;
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // fill this buffer queue
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_ftb_q;
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Command Q for rest of the events
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_cmd_q;
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_etb_q;
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Input memory pointer
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE *m_inp_mem_ptr;
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Output memory pointer
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE *m_out_mem_ptr;
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_opq_meta_q;
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_opq_pmem_q;
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE meta_buffer_hdr[MAX_NUM_INPUT_BUFFERS];
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_flush_progress;
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_flush_progress;
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_use_buffer;
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_use_buffer;
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_input_buffers;
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_output_buffers;
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_out_bm_count;
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_bm_count;
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_flags;
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_etb_count;
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_fbd_count;
631e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Heap pointer to frame buffers
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sp<MemoryHeapBase>    m_heap_ptr;
634e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // to know whether Event Port Settings change has been triggered or not.
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_event_port_settings_sent;
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handler extra_data_handle;
639826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
640e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
641e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
642e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VIDEO_BASE_H__
643