omx_vdec.h revision 8767726b6d6b2194cbb3704d7d82f0c7ef34eeb3
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"
95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
96e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <media/msm_vidc.h>
98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
10440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h"
1058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h"
1068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _ANDROID_
1078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cutils/properties.h>
1088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
1098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define PROPERTY_VALUE_MAX 92
1108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_API void * get_omx_component_factory_fn(void);
113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanusing namespace android;
117826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
120826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        VideoHeap(int devicefd, size_t size, void* base,struct ion_handle *handle,int mapfd);
122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
123826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int m_ion_device_fd;
12561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ion_handle *m_ion_handle;
12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
12740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else
12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan// local pmem heap object
12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
135826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
1428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan//PC:TODO------------ kernel update ----------
1438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
1448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan//-----------
145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned) bufHdr,\
15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    &=  ~(BITMASK_FLAG(mIndex))
162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    |=  BITMASK_FLAG(mIndex)
164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
181826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
182826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
183826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
184826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32
185826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
186826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
190826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
1916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define OMX_EXTNUSER_EXTRADATA  0x00100000
1928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA  0x00200000
1938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA 0x00400000
1948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA        0x00800000
1958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA  0x01000000
196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
19961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
20161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
2048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA_SIZE (sizeof(OMX_OTHER_EXTRADATATYPE) +\
2058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEDIMENSION) + 3)&(~3)
2068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_FRAME_PACK_ARRANGEMENT) + 3)&(~3))
2088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_QP) + 3)&(~3))
2108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_BITS_INFO) + 3)&(~3))
2128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_USERDATA_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            ((8*1024) + 3))&(~3)) /* 8 KB is the size that driver/FW considers as worst case size for userdata */
214826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
218826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
219826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
220826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
221826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
222826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanenum port_indexes {
224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
225826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct vdec_ion {
229826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
230826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
234e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2356eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
2366eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info {
2378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long buffer_size;
23861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    char* uaddr;
23961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int count;
24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int size;
2416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct vdec_ion ion;
2436eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
2456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
24761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct video_driver_context {
248e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
249e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
250e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
256e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
257e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
259826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
260826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
261826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
262826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
2636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer;
2646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer_iommu;
265826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
267826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
268826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
270826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
271826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
2726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct extradata_buffer_info extradata_info;
27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int num_planes;
2756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
279826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt;
280826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
281e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct video_decoder_capability {
2836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_width;
2846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_width;
2856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_height;
2866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_height;
2876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
288576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon
2898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct debug_cap {
2908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool in_buffer_log;
2918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool out_buffer_log;
2928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char infile_name[PROPERTY_VALUE_MAX + 36];
2938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char outfile_name[PROPERTY_VALUE_MAX + 36];
2948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char log_loc[PROPERTY_VALUE_MAX];
2958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    FILE *infile;
2968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    FILE *outfile;
2978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
2988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
299576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menonstruct dynamic_buf_list {
300576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 fd;
301576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 dup_fd;
302576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 offset;
303576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 ref_count;
304576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon};
305576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon
306e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
307e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
308e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
309e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_vdec();  // constructor
31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~omx_vdec();  // destructor
313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static int async_message_process (void *context, void* message);
31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static void process_event_cb(void *ctxt,unsigned char id);
316e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_buffer(
31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR appData,
32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 bytes
32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_init(OMX_STRING role);
32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_role_enum(
33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8 *role,
33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 index
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_tunnel_request(
33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE  peerComponent,
34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 peerPort,
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_TUNNELSETUPTYPE *tunnelSetup
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer(
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer(
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_buffer(
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_component_version(
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING componentName,
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *componentVersion,
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *specVersion,
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_UUIDTYPE *componentUUID
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_config(
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE configIndex,
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR configData
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_extension_index(
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING paramName,
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE *indexType
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STATETYPE *state);
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CALLBACKTYPE *callbacks,
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR          appData);
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  configIndex,
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        configData);
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes,
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8               *buffer);
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE  use_input_heap_buffers(
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE            hComp,
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE** bufferHdr,
42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   port,
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                   appData,
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   bytes,
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8*                   buffer);
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *               eglImage);
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void complete_pending_buffer_done_cbs();
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_driver_context drv_ctx;
4326eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_extradata();
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_extradata();
43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int update_resolution(int width, int height, int stride, int scan_lines);
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE is_video_session_supported();
4376eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_in;
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_out;
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t msg_thread_id;
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t async_thread_id;
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool is_component_secure();
443576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        void buf_ref_add(OMX_U32 fd, OMX_U32 offset);
444576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        void buf_ref_remove(OMX_U32 fd, OMX_U32 offset);
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    private:
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Bit Positions
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum flags_bit_positions {
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to IDLE
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_IDLE_PENDING            =0x1,
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to LOADING
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADING_PENDING         =0x2,
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // First  Buffer Pending
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Second Buffer Pending
45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //defer flush notification
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PAUSE_PENDING          =0xB,
46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_EXECUTE_PENDING        =0xC,
47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE
47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Deferred callback identifiers
47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum {
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Event Callbacks from the vdec component thread context
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT       = 0x1,
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FTB         = 0x4,
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB         = 0x5,
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Command
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Push-Pending Buffers
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Empty Buffer Done callbacks
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EBD         = 0x8,
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Flush Event Callbacks from the vdec component thread context
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FBD = 0xc,
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_START_DONE = 0xD,
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17,
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type {
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_SP_MP_RCV = 1,
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_AP = 2
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
514e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
5156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum v4l2_ports {
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            CAPTURE_PORT,
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OUTPUT_PORT,
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            MAX_PORT
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_event {
5248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param1;
5258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param2;
5268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long id;
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_cmd_queue {
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
5318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_read;
5328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_write;
5338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_size;
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_cmd_queue();
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~omx_cmd_queue();
5378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id);
5388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned long *id);
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // get msgtype of the first ele from the queue
54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned get_q_msg_type();
54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
543e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
544826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_entry {
54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_TICKS timestamp;
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool valid;
54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_arr_list {
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_arr_list();
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~ts_arr_list();
55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool insert_ts(OMX_TICKS ts);
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool pop_min_ts(OMX_TICKS &ts);
55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool reset_ts_list();
55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
560826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct desc_buffer_hdr {
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U8 *buf_addr;
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U32 desc_data_size;
56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_done(void);
56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_input_done(void);
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_output_done(void);
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_output_buffer_header();
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_input_buffer_header();
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,OMX_PTR appData,
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE   **bufferHdr,
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                port,
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                appData,
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                bytes,
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                 *buffer);
600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
606e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_headers();
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_omx_flush(OMX_U32);
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_output_flush();
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_input_flush();
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp);
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp);
6278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_ERRORTYPE push_input_hevc (OMX_HANDLETYPE hComp);
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp);
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_done();
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_output_done();
63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_input_done();
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE start_port_reconfig();
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_picture_resolution();
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int stream_off(OMX_U32 port);
64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void adjust_timestamp(OMX_S64 &act_timestamp);
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void set_frame_rate(OMX_S64 act_timestamp);
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr);
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
6466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 interlaced_format_type, bool is_mbaff);
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal,
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enable = true);
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
6558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_TICKS time_stamp,
65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct msm_vidc_panscan_window_payload *panscan_payload,
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
6586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 interlaced_format_type, OMX_U32 buf_index);
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
6626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_S64 timestamp,
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
6748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_frame_dimension_extradata(OMX_OTHER_EXTRADATATYPE *extra);
67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn);
67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user);
6778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_concealmb_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_OTHER_EXTRADATATYPE *p_concealmb, OMX_U8 *conceal_mb_data);
6798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_framepack_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload);
6818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_qp_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_frame_qp_payload *qp_payload);
6838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_bitsinfo_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_frame_bits_info_payload *bits_payload);
68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void insert_demux_addr_offset(OMX_U32 address_offset);
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment);
692826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int alloc_map_ion_memory(OMX_U32 buffer_size,
69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment, struct ion_allocation_data *alloc_data,
69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct ion_fd_data *fd_data,int flag);
69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_ion_memory(struct vdec_ion *buf_ion_info);
697826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
698826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
699e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
7048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool post_event( unsigned long p1,
7058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long p2,
7068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long id
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   );
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline int clip2(int x) {
70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x -1;
71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 1;
71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 2;
71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 4;
71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 16;
71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x + 1;
71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return x;
71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
717e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
718826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_h264_mv();
72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_h264_mv();
72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_meta_buffers();
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_meta_buffers();
723826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
724826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_error () {
72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ALOGE("\nERROR: Sending OMX_EventError to Client");
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorHardware,0,NULL);
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
732e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
7336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_unsupported_setting () {
73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (m_cb.EventHandler && !m_error_propogated) {
73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR(
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        "\nERROR: Sending OMX_ErrorUnsupportedSetting to Client");
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
7426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal        }
743826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE createDivxDrmContext();
745826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
746826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
748826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
7496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_ANDROID_ICS_)
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct nativebuffer {
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            native_handle_t *nativehandle;
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *privatehandle;
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int inuse;
75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
7566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
7576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
7588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*******************MEMBER VARIABLES *************************
76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       m_lock;
76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       c_lock;
76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //sem to handle the minimum procesing of commands
76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sem_t                 m_cmd_lock;
7668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        sem_t                 m_safe_flush;
76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool              m_error_propogated;
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // compression format
76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CODINGTYPE eCompressionFormat;
77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // OMX State
77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_STATETYPE m_state;
77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application data
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR m_app_data;
77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application callbacks
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CALLBACKTYPE m_cb;
77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PRIORITYMGMTTYPE m_priority_mgm ;
77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // fill this buffer queue
77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_ftb_q;
78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Command Q for rest of the events
78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_cmd_q;
78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_etb_q;
78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Input memory pointer
78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Output memory pointer
78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // number of input bitstream error frame count
78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_err_count;
789826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Timestamp list
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ts_arr_list           m_timestamp_list;
792826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
793e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_flush_progress;
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_flush_progress;
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_use_buffer;
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_use_buffer;
79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool ouput_egl_buffers;
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_output_pmem;
80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_mem_region_smi;
80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_pvt_entry_pmem;
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_input_buffers;
80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_output_buffers;
80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for output side
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_out_bm_count;
80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for input side
80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_bm_count;
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Input port Populated
81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bPopulated;
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Output port Populated
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bPopulated;
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // encapsulate the waiting states.
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_flags;
815e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
816e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Heap pointer to frame buffers
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap {
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sp<MemoryHeapBase>    video_heap_ptr;
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap *m_heap_ptr;
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_count;
823e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store I/P PORT state
82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bEnabled;
82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store O/P PORT state
82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bEnabled;
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_in_alloc_cnt;
82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Platform specific details
83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // SPS+PPS sent as part of set_config
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Variables for arbitrary Byte parsing support*/
83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        frame_parse m_frame_parser;
8398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        h264_stream_parser *h264_parser;
8408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        MP4_Utils mp4_headerparser;
8418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        HEVC_Utils m_hevc_utils;
8428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_pending_q;
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_free_q;
84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool arbitrary_bytes;
84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  h264_scratch;
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *psource_frame;
84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *pdest_frame;
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_inp_bm_count;
85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        codec_type codec_type_parse;
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool first_frame_meta;
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned frame_count;
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_count;
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_length;
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool look_ahead_nal;
85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame;
85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char *first_buffer;
86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame_size;
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char m_hwdevice_name[80];
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        FILE *m_device_file_ptr;
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type m_vc1_profile;
86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 h264_last_au_ts;
86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 h264_last_au_flags;
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_offsets[8192];
86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_entries;
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_hor_size;
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_vert_size;
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 prev_ts;
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool rst_prev_ts;
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 frm_int;
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vdec_allocatorproperty op_buf_rcnfg;
87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool in_reconfig;
87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_NATIVE_WINDOWTYPE m_display_id;
87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 client_extradata;
879826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_timestamp;
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool perf_flag;
88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 proc_frms, latency;
88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics fps_metrics;
88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics dec_time;
8858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_reject_avc_1080p_mp;
88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_enable_android_native_buffers;
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_use_android_native_buffers;
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_extradata;
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_concealedmb;
8908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_disable_dynamic_buf_mode;
8918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_conceal_color;
892826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
893826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct h264_mv_buffer {
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        h264_mv_buffer h264_mv_buff;
90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct meta_buffer {
90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd_iommu;
90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        meta_buffer meta_buff;
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handler extra_data_handle;
913826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        DivXDrmDecrypt* iDivXDrmDecrypt;
915826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
9178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_QCOM_FRAME_PACK_ARRANGEMENT m_frame_pack_arrangement;
91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_time_stamp_reorder time_stamp_dts;
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        desc_buffer_hdr *m_desc_buffer_ptr;
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool secure_mode;
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer;
92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer_iommu;
92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
9248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_OTHER_EXTRADATATYPE *m_other_extradata;
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool codec_config_flag;
9266eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int capture_capability;
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int output_capability;
92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool streaming[MAX_PORT];
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_RECTTYPE rectangle;
93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int prev_n_filled_len;
9328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_down_scalar_enabled;
933826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_power_hinted;
9358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_q6_platform;
93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_register();
93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_deregister();
93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool msg_thread_created;
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PROFILELEVELTYPE m_profile_lvl;
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_profile;
94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
944576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        //variables to handle dynamic buffer mode
945576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        bool dynamic_buf_mode;
946576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        struct dynamic_buf_list *out_dynamic_list;
9478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_smoothstreaming_mode;
9488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_smoothstreaming_width;
9498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_smoothstreaming_height;
9508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_ERRORTYPE enable_smoothstreaming();
95150ad2f6e2dc3f0fca5f2b9a5d1e2f7b056133036Praveen Chavan
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_fill_output_msg;
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool client_set_fps;
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class allocate_color_convert_buf
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            public:
95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                allocate_color_convert_buf();
95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ~allocate_color_convert_buf();
95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void set_vdec_client(void *);
96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void update_client();
96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format);
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format);
96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool update_buffer_req();
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_buffer_req(unsigned int &buffer_size);
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr();
96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header);
96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header);
97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp,
97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData,
97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_U32 bytes);
97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private:
97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MAX_COUNT 32
97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omx_vdec *omx;
97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enabled;
97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COLOR_FORMATTYPE ColorFormat;
97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void init_members();
98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool color_convert_mode;
98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ColorConvertFormat dest_format;
98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                class omx_c2d_conv c2d;
98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int allocated_count;
98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_size_req;
98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_alignment_req;
98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_LIST      m_platform_list_client[MAX_COUNT];
98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_ENTRY     m_platform_entry_client[MAX_COUNT];
98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT];
98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE  m_out_mem_ptr_client[MAX_COUNT];
9906eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_ion op_buf_ion_info[MAX_COUNT];
9926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned char *pmem_baseaddress[MAX_COUNT];
9948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long pmem_fd[MAX_COUNT];
99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap {
99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    sp<MemoryHeapBase>    video_heap_ptr;
99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                };
99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap m_heap_ptr[MAX_COUNT];
99940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        };
10006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if  defined (_MSM8960_) || defined (_MSM8974_)
100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        allocate_color_convert_buf client_buffers;
10026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_decoder_capability m_decoder_capability;
10048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct debug_cap m_debug;
10058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int log_input_buffers(const char *, int);
10068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int log_output_buffers(OMX_BUFFERHEADERTYPE *);
1007a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#ifdef _MSM8974_
1008a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan        void send_codec_config();
1009a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#endif
10108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_TICKS m_last_rendered_TS;
10118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
10128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        class perf_control {
10138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            // 2 cores will be requested if framerate is beyond 45 fps
10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            static const int MIN_FRAME_DURATION_FOR_PERF_REQUEST_US = (1e6 / 45);
10158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            typedef int (*perf_lock_acquire_t)(int, int, int*, int);
10168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            typedef int (*perf_lock_release_t)(int);
10178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
10188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            public:
10198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_control();
10208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                ~perf_control();
10218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void request_cores(int frame_duration_us);
10228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            private:
10238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void *m_perf_lib;
10248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                int m_perf_handle;
10258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_lock_acquire_t m_perf_lock_acquire;
10268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_lock_release_t m_perf_lock_release;
10278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                //void (*perf_cpu_boost)(int ntasks);
10288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void load_lib();
10298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        };
10308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        perf_control m_perf_control;
10318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
10328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        volatile int32_t m_queued_codec_config_count;
10338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        static OMX_COLOR_FORMATTYPE getPreferredColorFormatNonSurfaceMode(OMX_U32 index) {
10348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //On Android, we default to standard YUV formats for non-surface use-cases
10358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //where apps prefer known color formats.
10368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            OMX_COLOR_FORMATTYPE formatsNonSurfaceMode[] = {
10378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [0] = OMX_COLOR_FormatYUV420SemiPlanar,
10388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [1] = OMX_COLOR_FormatYUV420Planar,
10398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [2] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
10408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
10418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            };
10428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            return (index < sizeof(formatsNonSurfaceMode) / sizeof(OMX_COLOR_FORMATTYPE)) ?
10438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                formatsNonSurfaceMode[index] : OMX_COLOR_FormatMax;
10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
10458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
10468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        static OMX_COLOR_FORMATTYPE getPreferredColorFormatDefaultMode(OMX_U32 index) {
10478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            //for surface mode (normal playback), advertise native/accelerated formats first
10488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            OMX_COLOR_FORMATTYPE formatsDefault[] = {
10498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
10508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [1] = OMX_COLOR_FormatYUV420Planar,
10518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [2] = OMX_COLOR_FormatYUV420SemiPlanar,
10528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
10538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            };
10548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            return (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ?
10558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                formatsDefault[index] : OMX_COLOR_FormatMax;
10568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
1057e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
1058e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
10596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
1060826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT,
106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT_DONE,
106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN,
106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN_DONE,
106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES,
106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES_DONE,
106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START,
106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START_DONE,
107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP,
107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP_DONE,
107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES,
107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES_DONE,
107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE,
107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE_DONE,
107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT,
1077826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1078826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1079826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_EVENT_CHANGE,
1082826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1083826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
10846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif // _MSM8974_
1085826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1086e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
1087