omx_vdec.h revision 61a2c6a19dbd06a317a419623020e02056661876
1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
26eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCopyright (c) 2010 - 2013, 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>
50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x;
52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P
556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-720P"
566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#elif MAX_RES_1080P
576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-1080P"
586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC"
606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
63278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
6461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#include <binder/MemoryHeapIon.h>
6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#else
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
67e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
68826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanextern "C" {
706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <utils/Log.h>
71e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
72826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
75826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else //_ANDROID_
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_LOW printf
78826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_HIGH printf
79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR printf
80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
81e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define DEBUG_PRINT_LOW
846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define DEBUG_PRINT_HIGH printf
856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define DEBUG_PRINT_ERROR printf
866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
88826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
89826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
92826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
94dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#if defined (_ANDROID_ICS_)
956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <gralloc_priv.h>
96dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#endif
97dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
99e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
101e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
103e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
104e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
1066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <media/msm_vidc.h>
107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
109826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
110826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <linux/android_pmem.h>
112826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
113826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
11440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h"
115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_API void * get_omx_component_factory_fn(void);
117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
118e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanusing namespace android;
121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        VideoHeap(int devicefd, size_t size, void* base,struct ion_handle *handle,int mapfd);
126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int m_ion_device_fd;
12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ion_handle *m_ion_handle;
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
13140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else
13261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan// local pmem heap object
13361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
13861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned) bufHdr,\
15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    &=  ~(BITMASK_FLAG(mIndex))
163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
16461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    |=  BITMASK_FLAG(mIndex)
165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
182826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
183826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
184826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
185826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32
186826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
190826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
1926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define OMX_EXTNUSER_EXTRADATA  0x00100000
193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
19861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
20061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
203826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
204826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
208826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanenum port_indexes {
211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
214826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct vdec_ion {
216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
218826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
219826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
220826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
221e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2226eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
2236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info {
22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int buffer_size;
22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    char* uaddr;
22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int count;
22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int size;
2286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct vdec_ion ion;
2306eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2316eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
2326eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct video_driver_context {
235e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
236e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
237e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
238826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
240826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
243e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
244e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
245e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
246826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
247826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
2506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer;
2516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer_iommu;
252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
256e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
257826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
2596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct extradata_buffer_info extradata_info;
26161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int num_planes;
2626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
263e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
264e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
265826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt;
267826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct video_decoder_capability {
2706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_width;
2716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_width;
2726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_height;
2736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_height;
2746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
275e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_vdec();  // constructor
28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~omx_vdec();  // destructor
282e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static int async_message_process (void *context, void* message);
28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static void process_event_cb(void *ctxt,unsigned char id);
285e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_buffer(
28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR appData,
29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 bytes
29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
294e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_init(OMX_STRING role);
29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_role_enum(
30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8 *role,
30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 index
30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_tunnel_request(
30661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE  peerComponent,
30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 peerPort,
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_TUNNELSETUPTYPE *tunnelSetup
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer(
31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer(
32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_buffer(
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_component_version(
33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING componentName,
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *componentVersion,
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *specVersion,
33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_UUIDTYPE *componentUUID
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_config(
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE configIndex,
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR configData
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_extension_index(
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING paramName,
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE *indexType
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STATETYPE *state);
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CALLBACKTYPE *callbacks,
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR          appData);
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  configIndex,
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        configData);
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes,
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8               *buffer);
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE  use_input_heap_buffers(
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE            hComp,
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE** bufferHdr,
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   port,
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                   appData,
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   bytes,
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8*                   buffer);
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *               eglImage);
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void complete_pending_buffer_done_cbs();
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_driver_context drv_ctx;
4016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_extradata();
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_extradata();
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int update_resolution(int width, int height, int stride, int scan_lines);
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE is_video_session_supported();
4066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_in;
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_out;
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t msg_thread_id;
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t async_thread_id;
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool is_component_secure();
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    private:
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Bit Positions
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum flags_bit_positions {
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to IDLE
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_IDLE_PENDING            =0x1,
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to LOADING
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADING_PENDING         =0x2,
42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // First  Buffer Pending
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Second Buffer Pending
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //defer flush notification
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PAUSE_PENDING          =0xB,
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_EXECUTE_PENDING        =0xC,
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Deferred callback identifiers
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum {
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Event Callbacks from the vdec component thread context
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT       = 0x1,
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FTB         = 0x4,
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB         = 0x5,
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Command
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Push-Pending Buffers
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Empty Buffer Done callbacks
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EBD         = 0x8,
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Flush Event Callbacks from the vdec component thread context
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FBD = 0xc,
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_START_DONE = 0xD,
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17,
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type {
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_SP_MP_RCV = 1,
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_AP = 2
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
4826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum v4l2_ports {
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            CAPTURE_PORT,
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OUTPUT_PORT,
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            MAX_PORT
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
488826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
489826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_event {
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned param1;
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned param2;
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned id;
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_cmd_queue {
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned m_read;
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned m_write;
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned m_size;
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_cmd_queue();
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~omx_cmd_queue();
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool insert_entry(unsigned p1, unsigned p2, unsigned id);
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id);
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // get msgtype of the first ele from the queue
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned get_q_msg_type();
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
510e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
511826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_entry {
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_TICKS timestamp;
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool valid;
51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_arr_list {
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_arr_list();
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~ts_arr_list();
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool insert_ts(OMX_TICKS ts);
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool pop_min_ts(OMX_TICKS &ts);
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool reset_ts_list();
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
527826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
528826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct desc_buffer_hdr {
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U8 *buf_addr;
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U32 desc_data_size;
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_done(void);
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_input_done(void);
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_output_done(void);
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_output_buffer_header();
54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_input_buffer_header();
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,OMX_PTR appData,
56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE   **bufferHdr,
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                port,
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                appData,
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                bytes,
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                 *buffer);
567826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
569826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
570826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
572826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
573e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_headers();
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_omx_flush(OMX_U32);
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_output_flush();
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_input_flush();
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp);
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp);
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp);
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_done();
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_output_done();
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_input_done();
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE start_port_reconfig();
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_picture_resolution();
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int stream_off(OMX_U32 port);
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void adjust_timestamp(OMX_S64 &act_timestamp);
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void set_frame_rate(OMX_S64 act_timestamp);
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr);
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
6126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 interlaced_format_type);
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal,
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enable = true);
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct msm_vidc_panscan_window_payload *panscan_payload,
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
6236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 interlaced_format_type, OMX_U32 buf_index);
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
6276eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_S64 timestamp,
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn);
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user);
64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void insert_demux_addr_offset(OMX_U32 address_offset);
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment);
648826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int alloc_map_ion_memory(OMX_U32 buffer_size,
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment, struct ion_allocation_data *alloc_data,
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct ion_fd_data *fd_data,int flag);
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_ion_memory(struct vdec_ion *buf_ion_info);
653826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
654826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
655e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool post_event( unsigned int p1,
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int p2,
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int id
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   );
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline int clip2(int x) {
66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x -1;
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 1;
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 2;
66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 4;
66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 16;
67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x + 1;
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return x;
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
673e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
674826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_h264_mv();
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_h264_mv();
67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_meta_buffers();
67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_meta_buffers();
679826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
680826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_error () {
68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ALOGE("\nERROR: Sending OMX_EventError to Client");
68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorHardware,0,NULL);
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
688e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
6896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_unsupported_setting () {
69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR(
69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        "\nERROR: Sending OMX_ErrorUnsupportedSetting to Client");
69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
6986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal        }
699826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE createDivxDrmContext();
701826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
702826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
704826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
7056eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_ANDROID_ICS_)
70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct nativebuffer {
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            native_handle_t *nativehandle;
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *privatehandle;
70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int inuse;
71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
7126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
7136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
714e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*******************MEMBER VARIABLES *************************
71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       m_lock;
71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       c_lock;
72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //sem to handle the minimum procesing of commands
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sem_t                 m_cmd_lock;
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool              m_error_propogated;
72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // compression format
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CODINGTYPE eCompressionFormat;
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // OMX State
72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_STATETYPE m_state;
72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application data
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR m_app_data;
72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application callbacks
73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CALLBACKTYPE m_cb;
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PRIORITYMGMTTYPE m_priority_mgm ;
73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // fill this buffer queue
73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_ftb_q;
73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Command Q for rest of the events
73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_cmd_q;
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_etb_q;
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Input memory pointer
73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Output memory pointer
74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // number of input bitstream error frame count
74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_err_count;
744826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Timestamp list
74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ts_arr_list           m_timestamp_list;
747826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
748e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_flush_progress;
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_flush_progress;
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_use_buffer;
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_use_buffer;
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool ouput_egl_buffers;
75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_output_pmem;
75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_mem_region_smi;
75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_pvt_entry_pmem;
75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_input_buffers;
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_output_buffers;
76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for output side
76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_out_bm_count;
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for input side
76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_bm_count;
76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Input port Populated
76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bPopulated;
76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Output port Populated
76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bPopulated;
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // encapsulate the waiting states.
76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_flags;
770e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
771e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Heap pointer to frame buffers
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap {
77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sp<MemoryHeapBase>    video_heap_ptr;
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap *m_heap_ptr;
77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_count;
778e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store I/P PORT state
78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bEnabled;
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store O/P PORT state
78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bEnabled;
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_in_alloc_cnt;
78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Platform specific details
78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // SPS+PPS sent as part of set_config
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Variables for arbitrary Byte parsing support*/
79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        frame_parse m_frame_parser;
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_pending_q;
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_free_q;
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool arbitrary_bytes;
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  h264_scratch;
79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *psource_frame;
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *pdest_frame;
80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_inp_bm_count;
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        codec_type codec_type_parse;
80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool first_frame_meta;
80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned frame_count;
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_count;
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_length;
80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool look_ahead_nal;
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame;
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char *first_buffer;
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame_size;
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char m_hwdevice_name[80];
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        FILE *m_device_file_ptr;
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type m_vc1_profile;
81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 h264_last_au_ts;
81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 h264_last_au_flags;
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_offsets[8192];
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_entries;
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_hor_size;
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_vert_size;
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 prev_ts;
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool rst_prev_ts;
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 frm_int;
82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vdec_allocatorproperty op_buf_rcnfg;
82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool in_reconfig;
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_NATIVE_WINDOWTYPE m_display_id;
82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        h264_stream_parser *h264_parser;
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 client_extradata;
831826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_timestamp;
83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool perf_flag;
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 proc_frms, latency;
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics fps_metrics;
83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics dec_time;
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_enable_android_native_buffers;
83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_use_android_native_buffers;
83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_extradata;
84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_concealedmb;
84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_reject_avc_1080p_mp;
842826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
843826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        MP4_Utils mp4_headerparser;
845826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
846826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct h264_mv_buffer {
84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        h264_mv_buffer h264_mv_buff;
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct meta_buffer {
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd_iommu;
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        meta_buffer meta_buff;
86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handler extra_data_handle;
866826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DivXDrmDecrypt* iDivXDrmDecrypt;
868826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_time_stamp_reorder time_stamp_dts;
87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        desc_buffer_hdr *m_desc_buffer_ptr;
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool secure_mode;
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer;
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer_iommu;
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool codec_config_flag;
8776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int capture_capability;
87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int output_capability;
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool streaming[MAX_PORT];
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_RECTTYPE rectangle;
88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int prev_n_filled_len;
883826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_power_hinted;
88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_register();
88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_deregister();
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool msg_thread_created;
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PROFILELEVELTYPE m_profile_lvl;
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_profile;
89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_fill_output_msg;
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool client_set_fps;
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class allocate_color_convert_buf
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            public:
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                allocate_color_convert_buf();
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ~allocate_color_convert_buf();
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void set_vdec_client(void *);
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void update_client();
90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format);
90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format);
90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool update_buffer_req();
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_buffer_req(unsigned int &buffer_size);
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr();
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header);
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header);
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp,
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData,
91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_U32 bytes);
91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private:
91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MAX_COUNT 32
91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omx_vdec *omx;
91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enabled;
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COLOR_FORMATTYPE ColorFormat;
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void init_members();
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool color_convert_mode;
92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ColorConvertFormat dest_format;
92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                class omx_c2d_conv c2d;
92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int allocated_count;
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_size_req;
92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_alignment_req;
92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_LIST      m_platform_list_client[MAX_COUNT];
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_ENTRY     m_platform_entry_client[MAX_COUNT];
92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT];
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE  m_out_mem_ptr_client[MAX_COUNT];
9316eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_ion op_buf_ion_info[MAX_COUNT];
9336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned char *pmem_baseaddress[MAX_COUNT];
93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                int pmem_fd[MAX_COUNT];
93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap {
93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    sp<MemoryHeapBase>    video_heap_ptr;
93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                };
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap m_heap_ptr[MAX_COUNT];
94040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        };
9416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if  defined (_MSM8960_) || defined (_MSM8974_)
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        allocate_color_convert_buf client_buffers;
9436eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_decoder_capability m_decoder_capability;
945e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
946e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
9476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
948826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT,
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT_DONE,
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN,
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN_DONE,
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES,
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES_DONE,
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START,
95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START_DONE,
95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP,
95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP_DONE,
96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES,
96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES_DONE,
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE,
96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE_DONE,
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT,
965826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
966826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
967826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_EVENT_CHANGE,
970826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
971826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
9726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif // _MSM8974_
973826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
974e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
975