1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
28767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanCopyright (c) 2010 - 2014, The Linux Foundation. All rights reserved.
36eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
46eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal  Redistribution and use in source and binary forms, with or without
56eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal  modification, are permitted provided that the following conditions
66eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal  are met:
7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    * Redistributions of source code must retain the above copyright
96eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal  notice, this list of conditions and the following disclaimer.
106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Redistributions in binary form must reproduce the above
116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal  copyright notice, this list of conditions and the following
126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      disclaimer in the documentation and/or other materials provided
136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      with the distribution.
146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Neither the name of The Linux Foundation nor the names of its
156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      contributors may be used to endorse or promote products derived
166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal      from this software without specific prior written permission.
176eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
186eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
196eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
206eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
216eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
226eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
236eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
246eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
256eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
266eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
276eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
286eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/
30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef __OMX_VDEC_H__
31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define __OMX_VDEC_H__
32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================
33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            O p e n M A X   Component
34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                Video Decoder
35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//** @file comx_vdec.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
45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdlib.h>
46e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <stdio.h>
47826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <string.h>
48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <inttypes.h>
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <cstddef>
508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cutils/atomic.h>
51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x;
53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P
566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-720P"
576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#elif MAX_RES_1080P
586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-1080P"
596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC"
616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
64278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#include <binder/MemoryHeapIon.h>
6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#else
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
68e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanextern "C" {
716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <utils/Log.h>
72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "hevc_utils.h"
76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
85dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#if defined (_ANDROID_ICS_)
866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <gralloc_priv.h>
87dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#endif
88dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
89e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
95f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#include "OMX_VideoExt.h"
96eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan#include "OMX_IndexExt.h"
97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <media/msm_vidc.h>
100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
10640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h"
1078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h"
1088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _ANDROID_
1098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cutils/properties.h>
1108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
1118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define PROPERTY_VALUE_MAX 92
1128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_API void * get_omx_component_factory_fn(void);
115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanusing namespace android;
119826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
123f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        VideoHeap(int devicefd, size_t size, void* base,ion_user_handle_t handle,int mapfd);
124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int m_ion_device_fd;
127f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        ion_user_handle_t m_ion_handle;
12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
12940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan// local pmem heap object
13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
13261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
1448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan//PC:TODO------------ kernel update ----------
1458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
1468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan//-----------
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned) bufHdr,\
15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
158f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITS_PER_INDEX        64
159f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_INDEX - 1)/BITS_PER_INDEX)
160f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_INDEX)
161f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_FLAG(mIndex) ((uint64_t)1 << ((mIndex) % BITS_PER_INDEX))
162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    &=  ~(BITMASK_FLAG(mIndex))
164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
16561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    |=  BITMASK_FLAG(mIndex)
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
183826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
184826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
185826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
186fd65fa891104fd7cedb06a8ba0849934dae63640Praveen Chavan#define MAX_NUM_INPUT_OUTPUT_BUFFERS 64
187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1899157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#ifdef _ION_HEAP_MASK_COMPATIBILITY_WA
1909157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan    #define ION_HEAP_MASK heap_mask
1919157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#else
1929157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan    #define ION_HEAP_MASK heap_id_mask
1939157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#endif
1949157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
1996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define OMX_EXTNUSER_EXTRADATA  0x00100000
2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA  0x00200000
2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA 0x00400000
2028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA        0x00800000
2038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA  0x01000000
204f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define OMX_MPEG2SEQDISP_EXTRADATA 0x02000000
2056ee2d713ec3877635f654ba65aa95395e5323eb6Praveen Chavan#define OMX_VUI_DISPLAY_INFO_EXTRADATA  0x04000000
206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
208826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
210826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA_SIZE (sizeof(OMX_OTHER_EXTRADATATYPE) +\
2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEDIMENSION) + 3)&(~3)
2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_FRAME_PACK_ARRANGEMENT) + 3)&(~3))
2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_QP) + 3)&(~3))
2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_BITS_INFO) + 3)&(~3))
222f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define OMX_MPEG2SEQDISP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
223f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            sizeof(OMX_QCOM_EXTRADATA_MPEG2SEQDISPLAY) + 3)&(~3))
2248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_USERDATA_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
225f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            + 3)&(~3))
226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
228826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
229826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
230826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
234826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanenum port_indexes {
236826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
238826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct vdec_ion {
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
243826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
244826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
245826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
246e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
2486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info {
2498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long buffer_size;
25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    char* uaddr;
25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int count;
25261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int size;
2536eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct vdec_ion ion;
2556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
2576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct video_driver_context {
260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
262e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
263826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
264826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
265f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    struct vdec_framesize frame_size;
266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
267826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
268826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
271e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
272826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
273826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
275826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
2766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer;
2776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer_iommu;
278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
279826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
280826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
281826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
282e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
283826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
284826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
2856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct extradata_buffer_info extradata_info;
28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int num_planes;
2886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
289e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
291826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
292826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt;
293826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
294e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct video_decoder_capability {
2966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_width;
2976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_width;
2986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_height;
2996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_height;
3006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
301576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon
3028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct debug_cap {
3038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool in_buffer_log;
3048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool out_buffer_log;
3058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char infile_name[PROPERTY_VALUE_MAX + 36];
3068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char outfile_name[PROPERTY_VALUE_MAX + 36];
3078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char log_loc[PROPERTY_VALUE_MAX];
3088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    FILE *infile;
3098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    FILE *outfile;
3108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
3118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
312576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menonstruct dynamic_buf_list {
313576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 fd;
314576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 dup_fd;
315576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 offset;
316576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 ref_count;
317576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon};
318576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon
319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_vdec();  // constructor
32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~omx_vdec();  // destructor
326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static int async_message_process (void *context, void* message);
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static void process_event_cb(void *ctxt,unsigned char id);
329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_buffer(
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR appData,
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 bytes
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
338e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_init(OMX_STRING role);
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_role_enum(
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8 *role,
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 index
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_tunnel_request(
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE  peerComponent,
35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 peerPort,
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_TUNNELSETUPTYPE *tunnelSetup
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer(
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer(
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_buffer(
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_component_version(
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING componentName,
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *componentVersion,
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *specVersion,
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_UUIDTYPE *componentUUID
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_config(
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE configIndex,
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR configData
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_extension_index(
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING paramName,
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE *indexType
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STATETYPE *state);
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CALLBACKTYPE *callbacks,
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR          appData);
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  configIndex,
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        configData);
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes,
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8               *buffer);
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE  use_input_heap_buffers(
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE            hComp,
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE** bufferHdr,
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   port,
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                   appData,
43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   bytes,
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8*                   buffer);
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *               eglImage);
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void complete_pending_buffer_done_cbs();
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_driver_context drv_ctx;
4456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_extradata();
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_extradata();
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int update_resolution(int width, int height, int stride, int scan_lines);
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE is_video_session_supported();
4506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_in;
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_out;
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t msg_thread_id;
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t async_thread_id;
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool is_component_secure();
456576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        void buf_ref_add(OMX_U32 fd, OMX_U32 offset);
457576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        void buf_ref_remove(OMX_U32 fd, OMX_U32 offset);
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    private:
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Bit Positions
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum flags_bit_positions {
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to IDLE
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_IDLE_PENDING            =0x1,
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to LOADING
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADING_PENDING         =0x2,
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // First  Buffer Pending
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Second Buffer Pending
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //defer flush notification
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PAUSE_PENDING          =0xB,
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_EXECUTE_PENDING        =0xC,
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
484f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE,
485f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COMPONENT_FLUSH_DEFERRED = 0xF
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Deferred callback identifiers
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum {
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Event Callbacks from the vdec component thread context
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT       = 0x1,
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FTB         = 0x4,
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB         = 0x5,
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Command
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Push-Pending Buffers
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Empty Buffer Done callbacks
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EBD         = 0x8,
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Flush Event Callbacks from the vdec component thread context
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FBD = 0xc,
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_START_DONE = 0xD,
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17,
522f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD = 0x18,
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type {
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_SP_MP_RCV = 1,
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_AP = 2
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
529e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
5306eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum v4l2_ports {
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            CAPTURE_PORT,
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OUTPUT_PORT,
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            MAX_PORT
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
536826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
537826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_event {
5398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param1;
5408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param2;
5418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long id;
54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_cmd_queue {
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
5468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_read;
5478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_write;
5488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_size;
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_cmd_queue();
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~omx_cmd_queue();
5528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id);
5538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned long *id);
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // get msgtype of the first ele from the queue
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned get_q_msg_type();
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
558e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
559826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_entry {
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_TICKS timestamp;
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool valid;
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_arr_list {
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_arr_list();
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~ts_arr_list();
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool insert_ts(OMX_TICKS ts);
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool pop_min_ts(OMX_TICKS &ts);
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool reset_ts_list();
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
575826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
576826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct desc_buffer_hdr {
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U8 *buf_addr;
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U32 desc_data_size;
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_done(void);
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_input_done(void);
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_output_done(void);
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_output_buffer_header();
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_input_buffer_header();
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,OMX_PTR appData,
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE   **bufferHdr,
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                port,
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                appData,
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                bytes,
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                 *buffer);
615a268cdfcbfaec07af3e3b8df50a4027e55653a8aPraveen Chavan        OMX_ERRORTYPE get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
616e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_headers();
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_omx_flush(OMX_U32);
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_output_flush();
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_input_flush();
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp);
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp);
6378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_ERRORTYPE push_input_hevc (OMX_HANDLETYPE hComp);
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp);
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_done();
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_output_done();
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_input_done();
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE start_port_reconfig();
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_picture_resolution();
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int stream_off(OMX_U32 port);
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void adjust_timestamp(OMX_S64 &act_timestamp);
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void set_frame_rate(OMX_S64 act_timestamp);
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr);
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
6566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 interlaced_format_type, bool is_mbaff);
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal,
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enable = true);
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
6658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_TICKS time_stamp,
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct msm_vidc_panscan_window_payload *panscan_payload,
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
6686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 interlaced_format_type, OMX_U32 buf_index);
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
6726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_S64 timestamp,
67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
6848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_frame_dimension_extradata(OMX_OTHER_EXTRADATATYPE *extra);
68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn);
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user);
6878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_concealmb_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_OTHER_EXTRADATATYPE *p_concealmb, OMX_U8 *conceal_mb_data);
6898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_framepack_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload);
6918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_qp_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_frame_qp_payload *qp_payload);
6938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_bitsinfo_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_frame_bits_info_payload *bits_payload);
695f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        void append_mpeg2_seqdisplay_extradata(OMX_OTHER_EXTRADATATYPE *extra,
696f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                struct msm_vidc_mpeg2_seqdisp_payload* seq_display_payload);
69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void insert_demux_addr_offset(OMX_U32 address_offset);
69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment);
704826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int alloc_map_ion_memory(OMX_U32 buffer_size,
70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment, struct ion_allocation_data *alloc_data,
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct ion_fd_data *fd_data,int flag);
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_ion_memory(struct vdec_ion *buf_ion_info);
709826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
710826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
711e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
7168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool post_event( unsigned long p1,
7178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long p2,
7188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long id
71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   );
72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline int clip2(int x) {
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x -1;
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 1;
72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 2;
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 4;
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 16;
72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x + 1;
72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return x;
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
729e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
730826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_h264_mv();
73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_h264_mv();
73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_meta_buffers();
73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_meta_buffers();
735826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
736826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_error () {
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
739f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_ERROR("ERROR: Sending OMX_ErrorHardware to Client");
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorHardware,0,NULL);
74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
744e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
7456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_unsupported_setting () {
74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR(
749f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        "ERROR: Sending OMX_ErrorUnsupportedSetting to Client");
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
7546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal        }
755f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        inline void omx_report_hw_overload () {
756f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
757f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_ERROR(
758f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        "ERROR: Sending OMX_ErrorInsufficientResources to Client");
759f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_error_propogated = true;
760f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_cb.EventHandler(&m_cmp, m_app_data,
761f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        OMX_EventError, OMX_ErrorInsufficientResources, 0, NULL);
762f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
763f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
764f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
765826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE createDivxDrmContext();
767826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
768826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
770826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
7716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_ANDROID_ICS_)
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct nativebuffer {
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            native_handle_t *nativehandle;
77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *privatehandle;
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int inuse;
77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
7786eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
7796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
7808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*******************MEMBER VARIABLES *************************
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       m_lock;
78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       c_lock;
78697e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan        pthread_mutex_t       buf_lock;
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //sem to handle the minimum procesing of commands
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sem_t                 m_cmd_lock;
7898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        sem_t                 m_safe_flush;
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool              m_error_propogated;
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // compression format
79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CODINGTYPE eCompressionFormat;
79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // OMX State
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_STATETYPE m_state;
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application data
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR m_app_data;
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application callbacks
79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CALLBACKTYPE m_cb;
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PRIORITYMGMTTYPE m_priority_mgm ;
80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // fill this buffer queue
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_ftb_q;
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Command Q for rest of the events
80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_cmd_q;
80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_etb_q;
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Input memory pointer
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Output memory pointer
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // number of input bitstream error frame count
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_err_count;
812826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Timestamp list
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ts_arr_list           m_timestamp_list;
815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
816e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_flush_progress;
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_flush_progress;
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_use_buffer;
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_use_buffer;
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool ouput_egl_buffers;
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_output_pmem;
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_mem_region_smi;
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_pvt_entry_pmem;
82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_input_buffers;
82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_output_buffers;
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for output side
829f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_out_bm_count;
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for input side
831f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_inp_bm_count;
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Input port Populated
83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bPopulated;
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Output port Populated
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bPopulated;
83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // encapsulate the waiting states.
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_flags;
838e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
839e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Heap pointer to frame buffers
84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap {
84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sp<MemoryHeapBase>    video_heap_ptr;
84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap *m_heap_ptr;
84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_count;
846e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store I/P PORT state
84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bEnabled;
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store O/P PORT state
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bEnabled;
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_in_alloc_cnt;
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Platform specific details
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // SPS+PPS sent as part of set_config
85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Variables for arbitrary Byte parsing support*/
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        frame_parse m_frame_parser;
8628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        h264_stream_parser *h264_parser;
8638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        MP4_Utils mp4_headerparser;
8648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        HEVC_Utils m_hevc_utils;
8658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_pending_q;
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_free_q;
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool arbitrary_bytes;
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  h264_scratch;
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *psource_frame;
87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *pdest_frame;
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_inp_bm_count;
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        codec_type codec_type_parse;
87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool first_frame_meta;
87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned frame_count;
87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_count;
87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_length;
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool look_ahead_nal;
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame;
88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char *first_buffer;
88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame_size;
88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char m_hwdevice_name[80];
88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        FILE *m_device_file_ptr;
88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type m_vc1_profile;
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 h264_last_au_ts;
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 h264_last_au_flags;
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_offsets[8192];
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_entries;
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_hor_size;
89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_vert_size;
89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 prev_ts;
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool rst_prev_ts;
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 frm_int;
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vdec_allocatorproperty op_buf_rcnfg;
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool in_reconfig;
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_NATIVE_WINDOWTYPE m_display_id;
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 client_extradata;
902826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_timestamp;
90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool perf_flag;
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 proc_frms, latency;
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics fps_metrics;
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics dec_time;
9088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_reject_avc_1080p_mp;
90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_enable_android_native_buffers;
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_use_android_native_buffers;
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_extradata;
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_concealedmb;
9138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_disable_dynamic_buf_mode;
9148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_conceal_color;
915826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct h264_mv_buffer {
91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        h264_mv_buffer h264_mv_buff;
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct meta_buffer {
92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd_iommu;
93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        meta_buffer meta_buff;
93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handler extra_data_handle;
936826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DivXDrmDecrypt* iDivXDrmDecrypt;
938826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
9408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_QCOM_FRAME_PACK_ARRANGEMENT m_frame_pack_arrangement;
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_time_stamp_reorder time_stamp_dts;
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        desc_buffer_hdr *m_desc_buffer_ptr;
94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool secure_mode;
9449841688286f54c2267446b04d5386574a73502b7Shivaprasad Hongal        bool allocate_native_handle;
94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer;
94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer_iommu;
94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
9488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_OTHER_EXTRADATATYPE *m_other_extradata;
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool codec_config_flag;
9506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int capture_capability;
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int output_capability;
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool streaming[MAX_PORT];
954f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_FRAMESIZETYPE framesize;
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_RECTTYPE rectangle;
956f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_U32 prev_n_filled_len;
9578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_down_scalar_enabled;
958826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
959f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        struct custom_buffersize {
960f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_U32 input_buffersize;
961f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } m_custom_buffersize;
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_power_hinted;
9638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_q6_platform;
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_register();
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_deregister();
96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool msg_thread_created;
96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PROFILELEVELTYPE m_profile_lvl;
97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_profile;
97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
972576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        //variables to handle dynamic buffer mode
973576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        bool dynamic_buf_mode;
974576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        struct dynamic_buf_list *out_dynamic_list;
9758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_smoothstreaming_mode;
9768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_smoothstreaming_width;
9778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_smoothstreaming_height;
9788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_ERRORTYPE enable_smoothstreaming();
979f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_ERRORTYPE enable_adaptive_playback(unsigned long width, unsigned long height);
98050ad2f6e2dc3f0fca5f2b9a5d1e2f7b056133036Praveen Chavan
98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_fill_output_msg;
98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool client_set_fps;
98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class allocate_color_convert_buf
98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            public:
98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                allocate_color_convert_buf();
98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ~allocate_color_convert_buf();
98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void set_vdec_client(void *);
98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void update_client();
99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format);
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format);
99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool update_buffer_req();
99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_buffer_req(unsigned int &buffer_size);
99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr();
99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header);
99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header);
99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp,
100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData,
100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_U32 bytes);
100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
1003f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                bool is_color_conversion_enabled() {return enabled;}
100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private:
100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MAX_COUNT 32
100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omx_vdec *omx;
100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enabled;
100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COLOR_FORMATTYPE ColorFormat;
100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void init_members();
101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool color_convert_mode;
101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ColorConvertFormat dest_format;
101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                class omx_c2d_conv c2d;
101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int allocated_count;
101461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_size_req;
101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_alignment_req;
101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_LIST      m_platform_list_client[MAX_COUNT];
101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_ENTRY     m_platform_entry_client[MAX_COUNT];
101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT];
101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE  m_out_mem_ptr_client[MAX_COUNT];
10206eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_ion op_buf_ion_info[MAX_COUNT];
10226eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned char *pmem_baseaddress[MAX_COUNT];
10248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long pmem_fd[MAX_COUNT];
102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap {
102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    sp<MemoryHeapBase>    video_heap_ptr;
102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                };
102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap m_heap_ptr[MAX_COUNT];
1029f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
1030f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_ERRORTYPE cache_ops(unsigned int index, unsigned int cmd);
1031f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                inline OMX_ERRORTYPE cache_clean_buffer(unsigned int index) {
1032f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    return cache_ops(index, ION_IOC_CLEAN_CACHES);
1033f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
1034f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_ERRORTYPE cache_clean_invalidate_buffer(unsigned int index) {
1035f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    return cache_ops(index, ION_IOC_CLEAN_INV_CACHES);
1036f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
103740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        };
10386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if  defined (_MSM8960_) || defined (_MSM8974_)
103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        allocate_color_convert_buf client_buffers;
10406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_decoder_capability m_decoder_capability;
10428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct debug_cap m_debug;
10438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int log_input_buffers(const char *, int);
10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int log_output_buffers(OMX_BUFFERHEADERTYPE *);
1045a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#ifdef _MSM8974_
1046a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan        void send_codec_config();
1047a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#endif
10488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_TICKS m_last_rendered_TS;
1049f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        volatile int32_t m_queued_codec_config_count;
1050f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        bool secure_scaling_to_non_secure_opb;
10518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
10528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        class perf_control {
10538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            // 2 cores will be requested if framerate is beyond 45 fps
10548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            static const int MIN_FRAME_DURATION_FOR_PERF_REQUEST_US = (1e6 / 45);
10558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            typedef int (*perf_lock_acquire_t)(int, int, int*, int);
10568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            typedef int (*perf_lock_release_t)(int);
10578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            public:
10598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_control();
10608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                ~perf_control();
10618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void request_cores(int frame_duration_us);
10628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            private:
10638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void *m_perf_lib;
10648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                int m_perf_handle;
10658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_lock_acquire_t m_perf_lock_acquire;
10668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_lock_release_t m_perf_lock_release;
10678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                //void (*perf_cpu_boost)(int ntasks);
10688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void load_lib();
10698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        };
10708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        perf_control m_perf_control;
10718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
1072f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        static OMX_COLOR_FORMATTYPE getPreferredColorFormatNonSurfaceMode(OMX_U32 index) {
1073f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            //On Android, we default to standard YUV formats for non-surface use-cases
1074f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            //where apps prefer known color formats.
1075f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COLOR_FORMATTYPE formatsNonSurfaceMode[] = {
1076f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [0] = OMX_COLOR_FormatYUV420SemiPlanar,
1077f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [1] = OMX_COLOR_FormatYUV420Planar,
1078f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [2] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
1079f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
1080f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            };
1081f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return (index < sizeof(formatsNonSurfaceMode) / sizeof(OMX_COLOR_FORMATTYPE)) ?
1082f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                formatsNonSurfaceMode[index] : OMX_COLOR_FormatMax;
1083f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
1084f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
1085f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        static OMX_COLOR_FORMATTYPE getPreferredColorFormatDefaultMode(OMX_U32 index) {
1086f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            //for surface mode (normal playback), advertise native/accelerated formats first
1087f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COLOR_FORMATTYPE formatsDefault[] = {
10888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
10895edf3e6c4e8e6a2ffefabd692903bbb291adadd7Praveen Chavan                [1] = OMX_COLOR_FormatYUV420SemiPlanar,
10905edf3e6c4e8e6a2ffefabd692903bbb291adadd7Praveen Chavan                [2] = OMX_COLOR_FormatYUV420Planar,
10918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
10928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            };
1093f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ?
1094f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                formatsDefault[index] : OMX_COLOR_FormatMax;
10958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
1096709179c13220590b748a585a698f8c57f0f59b75Praveen Chavan
1097f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        static OMX_ERRORTYPE describeColorFormat(OMX_PTR params);
1098f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
1099e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
1100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
11016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
1102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT,
110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT_DONE,
110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN,
110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN_DONE,
110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES,
110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES_DONE,
111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START,
111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START_DONE,
111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP,
111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP_DONE,
111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES,
111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES_DONE,
111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE,
111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE_DONE,
111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT,
1119826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1120826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
112361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_EVENT_CHANGE,
1124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
11266eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif // _MSM8974_
1127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1128e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
1129