1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
2417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen ChavanCopyright (c) 2010-2016, 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>
58e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <media/hardware/HardwareAPI.h>
59e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
60e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
61e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "OMX_Skype_VideoExtensions.h"
627beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano#include "OMX_VideoExt.h"
637beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano#include "OMX_IndexExt.h"
64e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
65e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "omx_video_common.h"
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <dlfcn.h>
6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "C2DColorConverter.h"
708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h"
71e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
73e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyusing namespace android;
74e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// local pmem heap object
75e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass VideoHeap : public MemoryHeapBase
76e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        VideoHeap(int fd, size_t size, void* base);
7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~VideoHeap() {}
80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
81e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <utils/Log.h>
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
84e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
86826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
8761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstatic const char* MEM_DEVICE = "/dev/ion";
8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#if defined(MAX_RES_720P) && !defined(_MSM8974_)
8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MEM_HEAP_ID ION_CAMERA_HEAP_ID
9061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#else
9161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _MSM8974_
9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MEM_HEAP_ID ION_IOMMU_HEAP_ID
9361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#else
9461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MEM_HEAP_ID ION_CP_MM_HEAP_ID
9561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
9661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_720P
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic const char* MEM_DEVICE = "/dev/pmem_adsp";
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_1080P_EBI
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic const char* MEM_DEVICE  = "/dev/pmem_adsp";
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_1080P
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic const char* MEM_DEVICE = "/dev/pmem_smipool";
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#error MEM_DEVICE cannot be determined.
105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
106826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
110e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
112e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
11761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned) bufHdr,\
11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
123f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITS_PER_INDEX        64
124f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_INDEX - 1)/BITS_PER_INDEX)
125f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_INDEX)
126f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_FLAG(mIndex) ((uint64_t)1 << ((mIndex) % BITS_PER_INDEX))
127e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    &=  ~(BITMASK_FLAG(mIndex))
129e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    |=  BITMASK_FLAG(mIndex)
131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
13861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
139417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
140f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define MAX_NUM_INPUT_BUFFERS 64
141417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan#define MAX_NUM_OUTPUT_BUFFERS 64
142417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid* message_thread(void *);
1446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
145e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinenum omx_venc_extradata_types {
146e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VENC_EXTRADATA_SLICEINFO = 0x100,
147e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VENC_EXTRADATA_MBINFO = 0x400,
148e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VENC_EXTRADATA_FRAMEDIMENSION = 0x1000000,
149e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VENC_EXTRADATA_YUV_STATS = 0x800,
150e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VENC_EXTRADATA_VQZIP = 0x02000000,
151e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
152e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video class
154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_video: public qc_omx_component
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    protected:
157826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool meta_mode_enable;
15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool c2d_opened;
16061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        encoder_media_buffer_type meta_buffers[MAX_NUM_INPUT_BUFFERS];
16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE *opaque_buffer_hdr[MAX_NUM_INPUT_BUFFERS];
16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool get_syntaxhdr_enable;
16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *psource_frame;
16461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *pdest_frame;
1658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool secure_session;
166f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        bool hier_b_enabled;
16756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        //intermediate conversion buffer queued to encoder in case of invalid EOS input
16856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_BUFFERHEADERTYPE  *mEmptyEosBuffer;
16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class omx_c2d_conv
17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            public:
17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omx_c2d_conv();
17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ~omx_c2d_conv();
17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool init();
17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool open(unsigned int height,unsigned int width,
17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ColorConvertFormat src,
17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        ColorConvertFormat dest,unsigned int src_stride);
17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool convert(int src_fd, void *src_base, void *src_viraddr,
18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        int dest_fd, void *dest_base, void *dest_viraddr);
18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_buffer_size(int port,unsigned int &buf_size);
18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                int get_src_format();
18361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void close();
18461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private:
18561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                C2DColorConverterBase *c2dcc;
18661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                pthread_mutex_t c_lock;
18761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *mLibHandle;
18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ColorConvertFormat src_format;
18961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                createC2DColorConverter_t *mConvertOpen;
19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                destroyC2DColorConverter_t *mConvertClose;
19161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
19261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_c2d_conv c2d_conv;
193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
19461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
195f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
196f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        bool mUseProxyColorFormat;
197f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        //RGB or non-native input, and we have pre-allocated conversion buffers
198f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        bool mUsesColorConversion;
199f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
20061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_video();  // constructor
20161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~omx_video();  // destructor
20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // virtual int async_message_process (void *context, void* message);
20461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void process_event_cb(void *ctxt,unsigned char id);
20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_buffer(
20761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR appData,
21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 bytes
21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
21461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp)= 0;
21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
21761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE component_init(OMX_STRING role)= 0;
21861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
21961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_stop(void) = 0;
22061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_pause(void) = 0;
22161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_start(void) = 0;
22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_flush(unsigned) = 0;
22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_resume(void) = 0;
22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_start_done(void) = 0;
22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_U32 dev_set_message_thread_id(pthread_t) = 0;
22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_use_buf(void *,unsigned,unsigned) = 0;
22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_free_buf(void *,unsigned) = 0;
22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_empty_buf(void *, void *,unsigned,unsigned) = 0;
22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_fill_buf(void *buffer, void *,unsigned,unsigned) = 0;
23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_get_buf_req(OMX_U32 *,OMX_U32 *,OMX_U32 *,OMX_U32) = 0;
231f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        virtual bool dev_get_seq_hdr(void *, unsigned, unsigned *) = 0;
23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_start(void) = 0;
23361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_stop(void) = 0;
23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_start_done(void) = 0;
23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_loaded_stop_done(void) = 0;
2368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool is_secure_session(void) = 0;
237e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        virtual int dev_handle_output_extradata(void*) = 0;
238e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        virtual int dev_handle_input_extradata(void*, int) = 0;
239e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        virtual void dev_set_extradata_cookie(void*) = 0;
24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual int dev_set_format(int) = 0;
24161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_is_video_session_supported(OMX_U32 width, OMX_U32 height) = 0;
24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual bool dev_get_capability_ltrcount(OMX_U32 *, OMX_U32 *, OMX_U32 *) = 0;
2438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_performance_level(OMX_U32 *) = 0;
2448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_vui_timing_info(OMX_U32 *) = 0;
245e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        virtual bool dev_get_vqzip_sei_info(OMX_U32 *) = 0;
2468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_peak_bitrate(OMX_U32 *) = 0;
247e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        virtual bool dev_get_batch_size(OMX_U32 *) = 0;
248bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch        virtual bool dev_get_temporal_layer_caps(OMX_U32 * /*nMaxLayers*/,
249bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch                OMX_U32 * /*nMaxBLayers*/) = 0;
250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer);
252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
253c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan        virtual bool dev_color_align(OMX_BUFFERHEADERTYPE *buffer, OMX_U32 width,
254c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan                        OMX_U32 height) = 0;
2558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual bool dev_get_output_log_flag() = 0;
2568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual int dev_output_log_buffers(const char *buffer_addr, int buffer_len) = 0;
2578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        virtual int dev_extradata_log_buffers(char *buffer_addr) = 0;
25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_role_enum(
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8 *role,
26161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 index
26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
263e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_tunnel_request(
26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
26661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE  peerComponent,
26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 peerPort,
26961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_TUNNELSETUPTYPE *tunnelSetup
27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
271e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
27261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer(
27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer(
28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
283e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
284e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_buffer(
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_component_version(
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING componentName,
29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *componentVersion,
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *specVersion,
29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_UUIDTYPE *componentUUID
29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
298e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_config(
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE configIndex,
30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR configData
30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
304e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_extension_index(
30661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING paramName,
30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE *indexType
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
310e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STATETYPE *state);
317e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CALLBACKTYPE *callbacks,
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR          appData);
329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  configIndex,
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        configData) = 0;
333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData) =0;
337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes,
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8               *buffer);
344e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *               eglImage);
351e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_in;
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_out;
356e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t msg_thread_id;
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t async_thread_id;
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool msg_thread_created;
361e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        volatile bool msg_thread_stop;
362e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8 m_nkind[128];
364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
365e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //int *input_pmem_fd;
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //int *output_pmem_fd;
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem *m_pInput_pmem;
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct pmem *m_pOutput_pmem;
370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct venc_ion *m_pInput_ion;
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct venc_ion *m_pOutput_ion;
373826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
374826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
375e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
376e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Bit Positions
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum flags_bit_positions {
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to IDLE
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_IDLE_PENDING            =0x1,
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to LOADING
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADING_PENDING         =0x2,
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // First  Buffer Pending
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Second Buffer Pending
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //defer flush notification
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PAUSE_PENDING          =0xB,
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_EXECUTE_PENDING        =0xC,
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADED_START_PENDING = 0xD,
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADED_STOP_PENDING = 0xF,
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Deferred callback identifiers
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum {
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Event Callbacks from the venc component thread context
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT       = 0x1,
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the venc component thread context
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the venc component thread context
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the venc component thread context
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FTB         = 0x4,
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the venc component thread context
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB         = 0x5,
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Command
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Push-Pending Buffers
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Empty Buffer Done callbacks
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EBD         = 0x8,
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Flush Event Callbacks from the venc component thread context
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FBD = 0xc,
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_START_DONE = 0xD,
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_LTRUSE_FAILED = 0x12,
435e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_COMPONENT_GENERATE_ETB_OPQ = 0x13,
436e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x14,
437e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD = 0x15,
438e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_COMPONENT_CLOSE_MSG = 0x16
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_event {
4428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param1;
4438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param2;
4448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long id;
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_cmd_queue {
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
4498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_read;
4508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_write;
4518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_size;
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_cmd_queue();
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~omx_cmd_queue();
4558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id);
4568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned long *id);
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // get msgtype of the first ele from the queue
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned get_q_msg_type();
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_done(void);
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_input_done(void);
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_output_done(void);
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
474826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_meta_buffer(OMX_HANDLETYPE       hComp,
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
479826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,OMX_PTR appData,
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_input_buffer(OMX_HANDLETYPE hComp,
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE  **bufferHdr,
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32               port,
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR               appData,
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32               bytes,
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                *buffer);
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE   **bufferHdr,
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                port,
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                appData,
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                bytes,
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                 *buffer);
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_omx_flush(OMX_U32);
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_output_flush(void);
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_input_flush(void);
5026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_flush_all(void);
5046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp,
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_opaque(OMX_HANDLETYPE hComp,
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_buffer(OMX_HANDLETYPE hComp);
51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE convert_queue_buffer(OMX_HANDLETYPE hComp,
5168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct pmem &Input_pmem_info,unsigned long &index);
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE queue_meta_buffer(OMX_HANDLETYPE hComp,
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct pmem &Input_pmem_info);
51956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan        OMX_ERRORTYPE push_empty_eos_buffer(OMX_HANDLETYPE hComp,
52056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp,
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_done();
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_output_done();
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_input_done();
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
5328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool post_event( unsigned long p1,
5338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long p2,
5348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long id
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   );
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_error () {
538e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_pCallbacks.EventHandler && !m_error_propogated && m_state != OMX_StateLoaded) {
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
540f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_ERROR("ERROR: send OMX_ErrorHardware to Client");
54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pCallbacks.EventHandler(&m_cmp,m_app_data,
54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorHardware,0,NULL);
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
546f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        inline void omx_report_hw_overload ()
547f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        {
548e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_pCallbacks.EventHandler && !m_error_propogated && m_state != OMX_StateLoaded) {
549f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_error_propogated = true;
550f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_ERROR("ERROR: send OMX_ErrorInsufficientResources to Client");
551f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_pCallbacks.EventHandler(&m_cmp, m_app_data,
552f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        OMX_EventError, OMX_ErrorInsufficientResources, 0, NULL);
553f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
554f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
555f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_unsupported_setting () {
557e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_pCallbacks.EventHandler && !m_error_propogated && m_state != OMX_StateLoaded) {
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_pCallbacks.EventHandler(&m_cmp,m_app_data,
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void complete_pending_buffer_done_cbs();
565e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool is_conv_needed(int, int);
566939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan        void print_debug_color_aspects(ColorAspects *aspects, const char *prefix);
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
5688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef USE_ION
5698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int alloc_map_ion_memory(int size,
5708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                 struct ion_allocation_data *alloc_data,
5718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                                 struct ion_fd_data *fd_data,int flag);
5728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void free_ion_memory(struct venc_ion *buf_ion_info);
5738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
5748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*******************MEMBER VARIABLES *************************
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       m_lock;
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sem_t                 m_cmd_lock;
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool              m_error_propogated;
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //sem to handle the minimum procesing of commands
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // compression format
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //OMX_VIDEO_CODINGTYPE eCompressionFormat;
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // OMX State
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_STATETYPE m_state;
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application data
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR m_app_data;
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_input_pmem;
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_output_pmem;
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application callbacks
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CALLBACKTYPE m_pCallbacks;
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PORT_PARAM_TYPE m_sPortParam;
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PROFILELEVELTYPE m_sParamProfileLevel;
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PORTFORMATTYPE m_sInPortFormat;
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PORTFORMATTYPE m_sOutPortFormat;
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_sInPortDef;
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_sOutPortDef;
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_MPEG4TYPE m_sParamMPEG4;
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_H263TYPE m_sParamH263;
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_AVCTYPE m_sParamAVC;
6057beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano        OMX_VIDEO_PARAM_VP8TYPE m_sParamVP8;
606f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_VIDEO_PARAM_HEVCTYPE m_sParamHEVC;
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PORT_PARAM_TYPE m_sPortParam_img;
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PORT_PARAM_TYPE m_sPortParam_audio;
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CONFIG_BITRATETYPE m_sConfigBitrate;
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_FRAMERATETYPE m_sConfigFramerate;
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_BITRATETYPE m_sParamBitrate;
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PRIORITYMGMTTYPE m_sPriorityMgmt;
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_sInBufSupplier;
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_sOutBufSupplier;
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_ROTATIONTYPE m_sConfigFrameRotation;
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_INTRAREFRESHVOPTYPE m_sConfigIntraRefreshVOP;
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_QUANTIZATIONTYPE m_sSessionQuantization;
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_VIDEO_PARAM_QPRANGETYPE m_sSessionQPRange;
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_AVCSLICEFMO m_sAVCSliceFMO;
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_INTRAPERIODTYPE m_sIntraperiod;
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE m_sErrorCorrection;
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_INTRAREFRESHTYPE m_sIntraRefresh;
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_PARAM_LTRMODE_TYPE m_sParamLTRMode;
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_PARAM_LTRCOUNT_TYPE m_sParamLTRCount;
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE m_sConfigLTRPeriod;
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        QOMX_VIDEO_CONFIG_LTRUSE_TYPE m_sConfigLTRUse;
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CONFIG_AVCINTRAPERIOD m_sConfigAVCIDRPeriod;
6288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_VIDEO_CONFIG_DEINTERLACE m_sConfigDeinterlace;
6298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_VIDEO_VP8REFERENCEFRAMETYPE m_sConfigVp8ReferenceFrame;
6308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        QOMX_VIDEO_HIERARCHICALLAYERS m_sHierLayers;
631e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_QOMX_VIDEO_MBI_STATISTICS m_sMBIStatistics;
6328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        QOMX_EXTNINDEX_VIDEO_INITIALQP m_sParamInitqp;
633bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch        QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS m_sHPlayers;
634e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID m_sBaseLayerID;
635e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_SKYPE_VIDEO_PARAM_DRIVERVER m_sDriverVer;
636e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_SKYPE_VIDEO_CONFIG_QP m_sConfigQP;
637e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        QOMX_EXTNINDEX_VIDEO_VENC_SAR m_sSar;
638e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        PrependSPSPPSToIDRFramesParams m_sPrependSPSPPS;
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_sExtraData;
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_input_msg_id;
641f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon        OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE m_sConfigIntraRefresh;
6428a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar        OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE m_sParamTemporalLayers;
6438a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar        OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE m_sConfigTemporalLayers;
644ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        DescribeColorAspectsParams m_sConfigColorAspects;
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // fill this buffer queue
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_ftb_q;
64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Command Q for rest of the events
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_cmd_q;
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_etb_q;
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Input memory pointer
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE *m_inp_mem_ptr;
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Output memory pointer
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE *m_out_mem_ptr;
65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_opq_meta_q;
65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_opq_pmem_q;
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE meta_buffer_hdr[MAX_NUM_INPUT_BUFFERS];
65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_flush_progress;
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_flush_progress;
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_use_buffer;
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_use_buffer;
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_input_buffers;
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_output_buffers;
66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
666f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_out_bm_count;
667f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_inp_bm_count;
668f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_flags;
669f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_etb_count;
670f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_fbd_count;
671e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Heap pointer to frame buffers
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sp<MemoryHeapBase>    m_heap_ptr;
674e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // to know whether Event Port Settings change has been triggered or not.
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_event_port_settings_sent;
67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handler extra_data_handle;
679f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        bool hw_overload;
680e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_U32 m_graphicBufferSize;
681e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
682e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
683e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VIDEO_BASE_H__
684