1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
2da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen ChavanCopyright (c) 2010 - 2016, 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>
51ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan#include <qdMetaData.h>
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x;
54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P
576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-720P"
586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#elif MAX_RES_1080P
596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-1080P"
606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC"
626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
65278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#include <binder/MemoryHeapIon.h>
6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#else
68826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
69e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
70826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanextern "C" {
726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <utils/Log.h>
73e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
75826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "hevc_utils.h"
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
79e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
86dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#if defined (_ANDROID_ICS_)
876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <gralloc_priv.h>
88dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#endif
89dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
96e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "OMX_Skype_VideoExtensions.h"
97f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#include "OMX_VideoExt.h"
98eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan#include "OMX_IndexExt.h"
99e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
1016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <media/msm_vidc.h>
102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
106826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
107826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
10840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h"
1098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h"
1107ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan#include "vidc_vendor_extensions.h"
1118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _ANDROID_
1128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cutils/properties.h>
1138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
1148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define PROPERTY_VALUE_MAX 92
1158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
11761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    OMX_API void * get_omx_component_factory_fn(void);
118e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanusing namespace android;
122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
126f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        VideoHeap(int devicefd, size_t size, void* base,ion_user_handle_t handle,int mapfd);
127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int m_ion_device_fd;
130f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        ion_user_handle_t m_ion_handle;
13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
13240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else
13361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan// local pmem heap object
13461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase
13561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
13961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
140826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
1467ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan#define OMX_INIT_STRUCT(_s_, _name_)         \
1477ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan    memset((_s_), 0x0, sizeof(_name_));      \
1487ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan(_s_)->nSize = sizeof(_name_);               \
1497ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan(_s_)->nVersion.nVersion = OMX_SPEC_VERSION  \
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned) bufHdr,\
15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
162f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITS_PER_INDEX        64
163f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_INDEX - 1)/BITS_PER_INDEX)
164f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_INDEX)
165f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_FLAG(mIndex) ((uint64_t)1 << ((mIndex) % BITS_PER_INDEX))
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
16761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    &=  ~(BITMASK_FLAG(mIndex))
168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    |=  BITMASK_FLAG(mIndex)
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            & BITMASK_FLAG(mIndex)) == 0x0)
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
183e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
184e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
185e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
186e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
190e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MAX_NUM_INPUT_OUTPUT_BUFFERS 64
1919157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#endif
1929157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan
193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
1976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define OMX_EXTNUSER_EXTRADATA  0x00100000
1988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA  0x00200000
1998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA 0x00400000
2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA        0x00800000
2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA  0x01000000
202e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_VQZIPSEI_EXTRADATA  0x02000000
203826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
204da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan#define OMX_VUI_DISPLAY_INFO_EXTRADATA  0x08000000
205da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan#define OMX_MPEG2_SEQDISP_INFO_EXTRADATA 0x10000000
206da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan#define OMX_VPX_COLORSPACE_INFO_EXTRADATA  0x20000000
207da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan#define OMX_VC1_SEQDISP_INFO_EXTRADATA  0x40000000
208da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan#define OMX_DISPLAY_INFO_EXTRADATA  0x80000000
209da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan#define DRIVER_EXTRADATA_MASK   0x0000FFFF
210da491142bd05b7bbb5704579b04f1b968b47a9b6Praveen Chavan
211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
21461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA_SIZE (sizeof(OMX_OTHER_EXTRADATATYPE) +\
2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_FRAMEDIMENSION) + 3)&(~3)
2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_FRAME_PACK_ARRANGEMENT) + 3)&(~3))
2218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_QP) + 3)&(~3))
2238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
2248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            sizeof(OMX_QCOM_EXTRADATA_BITS_INFO) + 3)&(~3))
225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_VQZIPSEI_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            sizeof(OMX_QCOM_EXTRADATA_VQZIPSEI) + 3)&(~3))
2278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_USERDATA_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
228f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            + 3)&(~3))
229826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
230826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
234826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
235826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
236826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
23861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanenum port_indexes {
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
240826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
242e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinenum vidc_perf_level {
243e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VIDC_SVS = 0,
244e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VIDC_NOMINAL = 1,
245e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VIDC_TURBO = 2
246e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
247826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
24861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct vdec_ion {
249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
254e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
2566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info {
2578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    unsigned long buffer_size;
25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    char* uaddr;
25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int count;
26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int size;
2616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct vdec_ion ion;
2636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
2656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
2666eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct video_driver_context {
268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
271826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
272826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
273f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    struct vdec_framesize frame_size;
274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
275826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
276826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
279e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
280826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
281826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
282826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
283826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
2846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer;
2856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    struct vdec_ion meta_buffer_iommu;
286826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
287826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
288826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
289826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
291826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
292826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
2936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    struct extradata_buffer_info extradata_info;
29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    int num_planes;
2966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
297e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
298e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
2996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct video_decoder_capability {
3006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_width;
3016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_width;
3026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int min_height;
3036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    unsigned int max_height;
3046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal};
305576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon
3068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct debug_cap {
3078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool in_buffer_log;
3088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    bool out_buffer_log;
309e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool out_meta_buffer_log;
3108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char infile_name[PROPERTY_VALUE_MAX + 36];
3118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char outfile_name[PROPERTY_VALUE_MAX + 36];
312e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char out_ymetafile_name[PROPERTY_VALUE_MAX + 36];
313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char out_uvmetafile_name[PROPERTY_VALUE_MAX + 36];
3148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    char log_loc[PROPERTY_VALUE_MAX];
3158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    FILE *infile;
3168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan    FILE *outfile;
317e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    FILE *out_ymeta_file;
318e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    FILE *out_uvmeta_file;
3198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
3208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
321576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menonstruct dynamic_buf_list {
322e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    long fd;
323e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    long dup_fd;
324576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 offset;
325576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon    OMX_U32 ref_count;
326e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void *buffaddr;
327e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    long mapped_size;
328576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon};
329576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon
330e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
331e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
332e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_vdec();  // constructor
33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        virtual ~omx_vdec();  // destructor
337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static int async_message_process (void *context, void* message);
33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        static void process_event_cb(void *ctxt,unsigned char id);
340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_buffer(
34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR appData,
34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 bytes
34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
348e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
349e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_init(OMX_STRING role);
35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_role_enum(
35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8 *role,
35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 index
35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE component_tunnel_request(
36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE  peerComponent,
36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 peerPort,
36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_TUNNELSETUPTYPE *tunnelSetup
36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer(
36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer(
37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_buffer(
38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,
38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_component_version(
38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING componentName,
39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *componentVersion,
39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_VERSIONTYPE *specVersion,
39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_UUIDTYPE *componentUUID
39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_config(
39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE configIndex,
39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR configData
39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_extension_index(
40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE hComp,
40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STRING paramName,
40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE *indexType
40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_STATETYPE *state);
41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_CALLBACKTYPE *callbacks,
42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR          appData);
42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  configIndex,
42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        configData);
42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_INDEXTYPE  paramIndex,
43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR        paramData);
43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes,
43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8               *buffer);
44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE  use_input_heap_buffers(
44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_HANDLETYPE            hComp,
44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE** bufferHdr,
44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   port,
44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                   appData,
44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                   bytes,
44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8*                   buffer);
44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void *               eglImage);
45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void complete_pending_buffer_done_cbs();
45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_driver_context drv_ctx;
456e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int m_poll_efd;
4576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_extradata();
45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_extradata();
46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int update_resolution(int width, int height, int stride, int scan_lines);
46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE is_video_session_supported();
4626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_in;
46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int  m_pipe_out;
46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t msg_thread_id;
46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_t async_thread_id;
46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool is_component_secure();
468e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        void buf_ref_add(int nPortIndex);
469e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        void buf_ref_remove();
470e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_ERRORTYPE set_dpb(bool is_split_mode, int dpb_color_format);
471e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_ERRORTYPE decide_dpb_buffer_mode(bool force_split_mode);
472e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        void request_perf_level(enum vidc_perf_level perf_level);
473e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int dpb_bit_depth;
474e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool async_thread_force_stop;
475e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        volatile bool message_thread_stop;
47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    private:
47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Bit Positions
47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum flags_bit_positions {
48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to IDLE
48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_IDLE_PENDING            =0x1,
48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to LOADING
48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_LOADING_PENDING         =0x2,
48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // First  Buffer Pending
48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Second Buffer Pending
48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Enable
49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Defer transition to Disable
49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //defer flush notification
49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PAUSE_PENDING          =0xB,
50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_EXECUTE_PENDING        =0xC,
50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
502f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE,
503f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COMPONENT_FLUSH_DEFERRED = 0xF
50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Deferred callback identifiers
50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum {
50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Event Callbacks from the vdec component thread context
50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT       = 0x1,
51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Buffer Done callbacks from the vdec component thread context
51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FTB         = 0x4,
51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Frame Done callbacks from the vdec component thread context
51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB         = 0x5,
51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Command
51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Push-Pending Buffers
52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // Empty Buffer Done callbacks
52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EBD         = 0x8,
52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            //Flush Event Callbacks from the vdec component thread context
52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_FBD = 0xc,
52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_START_DONE = 0xD,
53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17,
540f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD = 0x18,
541e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_COMPONENT_CLOSE_MSG = 0x19
54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type {
54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_SP_MP_RCV = 1,
54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            VC1_AP = 2
54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
548e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
5496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum v4l2_ports {
55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            CAPTURE_PORT,
55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OUTPUT_PORT,
55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            MAX_PORT
55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_event {
5588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param1;
5598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long param2;
5608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long id;
56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct omx_cmd_queue {
56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
5658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_read;
5668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_write;
5678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            unsigned long m_size;
56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            omx_cmd_queue();
57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~omx_cmd_queue();
5718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id);
5728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned long *id);
57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            // get msgtype of the first ele from the queue
57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned get_q_msg_type();
57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
577e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        struct v4l2_capability cap;
578826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_entry {
58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_TICKS timestamp;
58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool valid;
58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct ts_arr_list {
58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ts_arr_list();
58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ~ts_arr_list();
58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool insert_ts(OMX_TICKS ts);
59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool pop_min_ts(OMX_TICKS &ts);
59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool reset_ts_list();
59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct desc_buffer_hdr {
59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U8 *buf_addr;
59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_U32 desc_data_size;
59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_done(void);
60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_input_done(void);
60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool allocate_output_done(void);
60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_output_buffer_header();
60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_input_buffer_header();
61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              port,
62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR              appData,
62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE **bufferHdr,
62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 port,OMX_PTR appData,
62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32              bytes);
62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE   **bufferHdr,
63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                port,
63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR                appData,
63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32                bytes,
63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U8                 *buffer);
634a268cdfcbfaec07af3e3b8df50a4027e55653a8aPraveen Chavan        OMX_ERRORTYPE get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
635e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE allocate_output_headers();
63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_omx_flush(OMX_U32);
63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_output_flush();
64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool execute_input_flush();
64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE * buffer);
64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer
65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                );
65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp);
65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp);
6568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_ERRORTYPE push_input_hevc (OMX_HANDLETYPE hComp);
65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp);
65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE *buffer);
66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_done();
66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_output_done();
66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool release_input_done();
66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE start_port_reconfig();
66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_picture_resolution();
66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int stream_off(OMX_U32 port);
67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void adjust_timestamp(OMX_S64 &act_timestamp);
67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void set_frame_rate(OMX_S64 act_timestamp);
67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr);
67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
674ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        void convert_color_space_info(OMX_U32 primaries, OMX_U32 range,
675ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan            OMX_U32 transfer, OMX_U32 matrix, ColorSpace_t *color_space,
676ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan            ColorAspects *aspects);
677ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        void handle_color_space_info(void *data, unsigned int buf_index);
678939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan        void set_colorspace_in_handle(ColorSpace_t color, unsigned int buf_index);
679c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan        void print_debug_color_aspects(ColorAspects *aspects, const char *prefix);
68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
6816eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
6838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_U32 interlaced_format_type, bool is_mbaff);
68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal,
68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enable = true);
68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
6908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_TICKS time_stamp,
69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct msm_vidc_panscan_window_payload *panscan_payload,
69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
6936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else
69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 interlaced_format_type, OMX_U32 buf_index);
69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
6976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 num_conceal_mb,
70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 picture_type,
70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_S64 timestamp,
70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 frame_rate,
70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_aspectratioinfo *aspect_ratio_info);
70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
7098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_frame_dimension_extradata(OMX_OTHER_EXTRADATATYPE *extra);
71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn);
71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user);
7128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_concealmb_extradata(OMX_OTHER_EXTRADATATYPE *extra,
7138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                OMX_OTHER_EXTRADATATYPE *p_concealmb, OMX_U8 *conceal_mb_data);
7148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_framepack_extradata(OMX_OTHER_EXTRADATATYPE *extra,
7158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload);
7168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_qp_extradata(OMX_OTHER_EXTRADATATYPE *extra,
7178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_frame_qp_payload *qp_payload);
7188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        void append_bitsinfo_extradata(OMX_OTHER_EXTRADATATYPE *extra,
7198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                struct msm_vidc_frame_bits_info_payload *bits_payload);
720e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        void append_vqzip_extradata(OMX_OTHER_EXTRADATATYPE *extra,
721e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                struct msm_vidc_vqzip_sei_payload *vqzip_payload);
72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void insert_demux_addr_offset(OMX_U32 address_offset);
72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment);
729826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int alloc_map_ion_memory(OMX_U32 buffer_size,
73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32 alignment, struct ion_allocation_data *alloc_data,
73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct ion_fd_data *fd_data,int flag);
73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void free_ion_memory(struct vdec_ion *buf_ion_info);
734826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
735826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
736e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COMMANDTYPE cmd,
73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_U32         param1,
74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_PTR         cmdData);
7418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool post_event( unsigned long p1,
7428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long p2,
7438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                unsigned long id
74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                   );
74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline int clip2(int x) {
74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x -1;
74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 1;
74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 2;
74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 4;
75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x | x >> 16;
75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            x = x + 1;
75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            return x;
75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
754e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
755826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_h264_mv();
75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_h264_mv();
75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE vdec_alloc_meta_buffers();
75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void vdec_dealloc_meta_buffers();
760826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
761826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_error () {
763e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_cb.EventHandler && !m_error_propogated && m_state != OMX_StateLoaded) {
764f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_ERROR("ERROR: Sending OMX_ErrorHardware to Client");
76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_cb.EventHandler(&m_cmp,m_app_data,
76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_EventError,OMX_ErrorHardware,0,NULL);
76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
769e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
7706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        inline void omx_report_unsupported_setting () {
772e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_cb.EventHandler && !m_error_propogated && m_state != OMX_StateLoaded) {
77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                DEBUG_PRINT_ERROR(
774f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        "ERROR: Sending OMX_ErrorUnsupportedSetting to Client");
77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                m_error_propogated = true;
776e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                m_cb.EventHandler(&m_cmp, m_app_data,
777e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                        OMX_EventError, OMX_ErrorUnsupportedSetting, 0, NULL);
77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            }
7796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal        }
780f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        inline void omx_report_hw_overload () {
781e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (m_cb.EventHandler && !m_error_propogated && m_state != OMX_StateLoaded) {
782f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                DEBUG_PRINT_ERROR(
783f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        "ERROR: Sending OMX_ErrorInsufficientResources to Client");
784f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_error_propogated = true;
785f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                m_cb.EventHandler(&m_cmp, m_app_data,
786f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        OMX_EventError, OMX_ErrorInsufficientResources, 0, NULL);
787f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
788f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
789f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
790826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
792826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
7936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_ANDROID_ICS_)
79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct nativebuffer {
79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            native_handle_t *nativehandle;
79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private_handle_t *privatehandle;
79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int inuse;
79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
8006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
8016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal
80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*******************MEMBER VARIABLES *************************
80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //*************************************************************
80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       m_lock;
80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        pthread_mutex_t       c_lock;
80797e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan        pthread_mutex_t       buf_lock;
80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //sem to handle the minimum procesing of commands
80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        sem_t                 m_cmd_lock;
8108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        sem_t                 m_safe_flush;
81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool              m_error_propogated;
81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // compression format
81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_CODINGTYPE eCompressionFormat;
81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // OMX State
81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_STATETYPE m_state;
81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application data
81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PTR m_app_data;
81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Application callbacks
81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CALLBACKTYPE m_cb;
82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PRIORITYMGMTTYPE m_priority_mgm ;
82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // fill this buffer queue
82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_ftb_q;
82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Command Q for rest of the events
82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_cmd_q;
82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue         m_etb_q;
82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Input memory pointer
82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Output memory pointer
83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // number of input bitstream error frame count
83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_inp_err_count;
833826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Timestamp list
83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ts_arr_list           m_timestamp_list;
836826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
837e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_flush_progress;
83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_flush_progress;
84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool input_use_buffer;
84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool output_use_buffer;
84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool ouput_egl_buffers;
84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_use_output_pmem;
84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_mem_region_smi;
84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_pvt_entry_pmem;
84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_input_buffers;
84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int pending_output_buffers;
84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for output side
850f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_out_bm_count;
85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // bitmask array size for input side
852f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        uint64_t m_inp_bm_count;
85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Input port Populated
85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bPopulated;
85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        //Output port Populated
85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bPopulated;
85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // encapsulate the waiting states.
858e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        uint64_t m_flags;
859e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
860e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Heap pointer to frame buffers
86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap {
86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            sp<MemoryHeapBase>    video_heap_ptr;
86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vidc_heap *m_heap_ptr;
86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_count;
867e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store I/P PORT state
86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_inp_bEnabled;
87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // store O/P PORT state
87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BOOL m_out_bEnabled;
87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_in_alloc_cnt;
87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // Platform specific details
87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        // SPS+PPS sent as part of set_config
87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        /*Variables for arbitrary Byte parsing support*/
88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        frame_parse m_frame_parser;
8838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        h264_stream_parser *h264_parser;
8848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        MP4_Utils mp4_headerparser;
8858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        HEVC_Utils m_hevc_utils;
8868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_pending_q;
88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_cmd_queue m_input_free_q;
88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool arbitrary_bytes;
89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  h264_scratch;
89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *psource_frame;
89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *pdest_frame;
89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_heap_inp_bm_count;
89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        codec_type codec_type_parse;
89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool first_frame_meta;
89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned frame_count;
89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_count;
90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned nal_length;
90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool look_ahead_nal;
90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame;
90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char *first_buffer;
90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int first_frame_size;
90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned char m_hwdevice_name[80];
90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        FILE *m_device_file_ptr;
90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        enum vc1_profile_type m_vc1_profile;
90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 h264_last_au_ts;
90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 h264_last_au_flags;
91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_offsets[8192];
91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_demux_entries;
91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_hor_size;
91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_disp_vert_size;
91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_S64 prev_ts;
915e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_S64 prev_ts_actual;
91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool rst_prev_ts;
91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 frm_int;
91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct vdec_allocatorproperty op_buf_rcnfg;
92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool in_reconfig;
92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_NATIVE_WINDOWTYPE m_display_id;
92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 client_extradata;
923826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_timestamp;
92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool perf_flag;
92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 proc_frms, latency;
92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics fps_metrics;
92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        perf_metrics dec_time;
9298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_reject_avc_1080p_mp;
93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_enable_android_native_buffers;
93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_use_android_native_buffers;
93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_extradata;
93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_debug_concealedmb;
9348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_disable_dynamic_buf_mode;
9358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_conceal_color;
936826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
937826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
938e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct h264_mv_buffer {
94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        h264_mv_buffer h264_mv_buff;
94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct meta_buffer {
94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned char* buffer;
95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int size;
95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int count;
95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd;
95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int pmem_fd_iommu;
95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            int offset;
95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        };
95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        meta_buffer meta_buff;
95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        extra_data_handler extra_data_handle;
95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
9598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_QCOM_FRAME_PACK_ARRANGEMENT m_frame_pack_arrangement;
96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_time_stamp_reorder time_stamp_dts;
96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        desc_buffer_hdr *m_desc_buffer_ptr;
96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool secure_mode;
9634173299cd1f7b2cc9a9eefb8e954b6abae9ac642Praveen Chavan        bool allocate_native_handle;
96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer;
96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool external_meta_buffer_iommu;
96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
9678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_OTHER_EXTRADATATYPE *m_other_extradata;
96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool codec_config_flag;
9696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int capture_capability;
97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        int output_capability;
97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool streaming[MAX_PORT];
973f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_FRAMESIZETYPE framesize;
97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_CONFIG_RECTTYPE rectangle;
975f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_U32 prev_n_filled_len;
9768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_down_scalar_enabled;
977e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool m_force_down_scalar;
978826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
979f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        struct custom_buffersize {
980f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_U32 input_buffersize;
981f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        } m_custom_buffersize;
98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool m_power_hinted;
9838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool is_q6_platform;
98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_register();
98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_ERRORTYPE power_module_deregister();
98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool msg_thread_created;
98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool async_thread_created;
98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_VIDEO_PARAM_PROFILELEVELTYPE m_profile_lvl;
99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        OMX_U32 m_profile;
99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
992576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        //variables to handle dynamic buffer mode
993576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        bool dynamic_buf_mode;
994576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon        struct dynamic_buf_list *out_dynamic_list;
995e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_U32 m_reconfig_width;
996e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_U32 m_reconfig_height;
9978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        bool m_smoothstreaming_mode;
9987ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan        bool m_decode_order_mode;
999e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1000e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool m_input_pass_buffer_fd;
1001ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        DescribeColorAspectsParams m_client_color_space;
1002ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan        DescribeColorAspectsParams m_internal_color_space;
1003e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
10048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_smoothstreaming_width;
10058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_U32 m_smoothstreaming_height;
10068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_ERRORTYPE enable_smoothstreaming();
1007f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        OMX_ERRORTYPE enable_adaptive_playback(unsigned long width, unsigned long height);
1008e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool is_thulium_v1;
1009e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool m_disable_ubwc_mode;
1010e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_U32 m_downscalar_width;
1011e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_U32 m_downscalar_height;
1012e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int decide_downscalar();
1013e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int enable_downscalar();
1014e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int disable_downscalar();
101550ad2f6e2dc3f0fca5f2b9a5d1e2f7b056133036Praveen Chavan
101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        unsigned int m_fill_output_msg;
101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool client_set_fps;
101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        class allocate_color_convert_buf
101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        {
102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            public:
102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                allocate_color_convert_buf();
102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ~allocate_color_convert_buf();
102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void set_vdec_client(void *);
102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void update_client();
102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format);
102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format);
102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool update_buffer_req();
102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool get_buffer_req(unsigned int &buffer_size);
102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr();
103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header);
103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header);
103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp,
103561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData,
103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                        OMX_U32 bytes);
103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
1038f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                bool is_color_conversion_enabled() {return enabled;}
103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            private:
1040e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MAX_COUNT MAX_NUM_INPUT_OUTPUT_BUFFERS
104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                omx_vdec *omx;
104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool enabled;
104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_COLOR_FORMATTYPE ColorFormat;
104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                void init_members();
104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                bool color_convert_mode;
104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                ColorConvertFormat dest_format;
104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                class omx_c2d_conv c2d;
104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int allocated_count;
104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_size_req;
105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned int buffer_alignment_req;
105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_LIST      m_platform_list_client[MAX_COUNT];
105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_ENTRY     m_platform_entry_client[MAX_COUNT];
105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT];
105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                OMX_BUFFERHEADERTYPE  m_out_mem_ptr_client[MAX_COUNT];
10556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION
105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vdec_ion op_buf_ion_info[MAX_COUNT];
10576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
105861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                unsigned char *pmem_baseaddress[MAX_COUNT];
1059e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                int pmem_fd[MAX_COUNT];
106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap {
106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                    sp<MemoryHeapBase>    video_heap_ptr;
106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                };
106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                struct vidc_heap m_heap_ptr[MAX_COUNT];
1064f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
1065f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_ERRORTYPE cache_ops(unsigned int index, unsigned int cmd);
1066f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                inline OMX_ERRORTYPE cache_clean_buffer(unsigned int index) {
1067f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    return cache_ops(index, ION_IOC_CLEAN_CACHES);
1068f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
1069f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                OMX_ERRORTYPE cache_clean_invalidate_buffer(unsigned int index) {
1070f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    return cache_ops(index, ION_IOC_CLEAN_INV_CACHES);
1071f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
107240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        };
10736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if  defined (_MSM8960_) || defined (_MSM8974_)
107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        allocate_color_convert_buf client_buffers;
10756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif
107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        struct video_decoder_capability m_decoder_capability;
10778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        struct debug_cap m_debug;
10788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int log_input_buffers(const char *, int);
10798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        int log_output_buffers(OMX_BUFFERHEADERTYPE *);
1080a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#ifdef _MSM8974_
1081a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan        void send_codec_config();
1082a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#endif
10838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        OMX_TICKS m_last_rendered_TS;
1084f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        volatile int32_t m_queued_codec_config_count;
1085e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_U32 current_perf_level;
1086f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        bool secure_scaling_to_non_secure_opb;
1087e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	bool m_force_compressed_for_dpb;
1088e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        class perf_lock {
1089e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            private:
1090e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                pthread_mutex_t mlock;
1091e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1092e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            public:
1093e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                perf_lock() {
1094e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pthread_mutex_init(&mlock, NULL);
1095e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1096e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1097e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                ~perf_lock() {
1098e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pthread_mutex_destroy(&mlock);
1099e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                void lock() {
1102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pthread_mutex_lock(&mlock);
1103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                void unlock() {
1106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    pthread_mutex_unlock(&mlock);
1107e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                }
1108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        };
11098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
11108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        class perf_control {
11118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            // 2 cores will be requested if framerate is beyond 45 fps
11128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            static const int MIN_FRAME_DURATION_FOR_PERF_REQUEST_US = (1e6 / 45);
11138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            typedef int (*perf_lock_acquire_t)(int, int, int*, int);
11148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            typedef int (*perf_lock_release_t)(int);
11158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
11168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan            private:
11178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                void *m_perf_lib;
11188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                int m_perf_handle;
11198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_lock_acquire_t m_perf_lock_acquire;
11208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan                perf_lock_release_t m_perf_lock_release;
1121e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                bool load_lib();
1122e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                struct mpctl_stats {
1123e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                  int vid_inst_count;
1124e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                  bool vid_acquired;
1125e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                  int vid_disp_handle;
1126e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                };
1127e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                static struct mpctl_stats mpctl_obj;
1128e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                static perf_lock m_perf_lock;
1129e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1130e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            public:
1131e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                perf_control();
1132e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                ~perf_control();
1133e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                void request_cores(int frame_duration_us);
1134e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                void send_hint_to_mpctl(bool state);
11358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        };
11368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        perf_control m_perf_control;
11378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan
1138f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        static OMX_COLOR_FORMATTYPE getPreferredColorFormatNonSurfaceMode(OMX_U32 index) {
1139f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            //On Android, we default to standard YUV formats for non-surface use-cases
1140f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            //where apps prefer known color formats.
1141f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            OMX_COLOR_FORMATTYPE formatsNonSurfaceMode[] = {
1142f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [0] = OMX_COLOR_FormatYUV420SemiPlanar,
1143f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [1] = OMX_COLOR_FormatYUV420Planar,
1144f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [2] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
1145f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
1146e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                [4] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
1147f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            };
1148f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            return (index < sizeof(formatsNonSurfaceMode) / sizeof(OMX_COLOR_FORMATTYPE)) ?
1149f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                formatsNonSurfaceMode[index] : OMX_COLOR_FormatMax;
1150f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        }
1151f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
1152e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COLOR_FORMATTYPE getPreferredColorFormatDefaultMode(OMX_U32 index) {
1153f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            //for surface mode (normal playback), advertise native/accelerated formats first
1154e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            OMX_COLOR_FORMATTYPE format = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m;
1155e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1156e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            if (!m_disable_ubwc_mode) {
1157e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                OMX_COLOR_FORMATTYPE formatsDefault[] = {
1158e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
1159e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [1] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
1160e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [2] = OMX_COLOR_FormatYUV420SemiPlanar,
1161e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [3] = OMX_COLOR_FormatYUV420Planar,
1162e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [4] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
1163e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                };
1164e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                format = (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ?
1165e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    formatsDefault[index] : OMX_COLOR_FormatMax;
1166e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            } else {
1167e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                OMX_COLOR_FORMATTYPE formatsDefault[] = {
1168e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
1169e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [1] = OMX_COLOR_FormatYUV420SemiPlanar,
1170e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [2] = OMX_COLOR_FormatYUV420Planar,
1171e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
1172e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                };
1173e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                format = (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ?
1174e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    formatsDefault[index] : OMX_COLOR_FormatMax;
1175e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            }
1176e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            return format;
11778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan        }
1178709179c13220590b748a585a698f8c57f0f59b75Praveen Chavan
1179f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        static OMX_ERRORTYPE describeColorFormat(OMX_PTR params);
1180bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch        void prefetchNewBuffers();
1181f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
11827ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan        OMX_ERRORTYPE get_vendor_extension_config(
11837ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan                OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *ext);
11847ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan        OMX_ERRORTYPE set_vendor_extension_config(
11857ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan                OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *ext);
11867ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan
11877ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan        void init_vendor_extensions (VendorExtensionStore&);
11887ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan
11897ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan        // list of extensions is not mutable after initialization
11907ab8354641c04c403a5d51104866c8f43b95bf61Praveen Chavan        const VendorExtensionStore mVendorExtensionStore;
1191e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
1192e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
11936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_
1194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT,
119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_INIT_DONE,
119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN,
119961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_OPEN_DONE,
120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES,
120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_LOAD_RESOURCES_DONE,
120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START,
120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_START_DONE,
120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP,
120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_STOP_DONE,
120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES,
120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_RELEASE_RESOURCES_DONE,
120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE,
120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CLOSE_DONE,
121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_CORE_UNINIT,
1211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    MSM_VIDC_DECODER_EVENT_CHANGE,
1216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
12186eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif // _MSM8974_
1219826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1220e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
1221