omx_vdec_hevc_swvdec.h revision b597ba5fbaa5e26b54c1e0b5382d3448aad82cbc
1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
2826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevCopyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
3e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
4e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyRedistribution and use in source and binary forms, with or without
5e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellymodification, are permitted provided that the following conditions are met:
6e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    * Redistributions of source code must retain the above copyright
7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      notice, this list of conditions and the following disclaimer.
8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    * Redistributions in binary form must reproduce the above copyright
9e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      notice, this list of conditions and the following disclaimer in the
10e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      documentation and/or other materials provided with the distribution.
11e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    * Neither the name of Code Aurora nor
12e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      the names of its contributors may be used to endorse or promote
13e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      products derived from this software without specific prior written
14e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly      permission.
15e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
16e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyNON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/
28e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef __OMX_VDEC_H__
29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define __OMX_VDEC_H__
30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================
31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            O p e n M A X   Component
32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                Video Decoder
33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//** @file comx_vdec.h
35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly  This module contains the class definition for openMAX decoder component.
36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//*========================================================================*/
38e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                             Include Files
41e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
43826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdlib.h>
44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <stdio.h>
45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <string.h>
46826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <inttypes.h>
47826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <cstddef>
48b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan#include <gralloc_priv.h>
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x;
51e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
54278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
5517a028aa01f5fb339a32c13bb65e1b129c024796Deva Ramasubramanian#else
5617a028aa01f5fb339a32c13bb65e1b129c024796Deva Ramasubramanian#include <linux/android_pmem.h>
57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
59826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
60fcb1a02a7e154802e883bfdfde972e603f8a0a7cHaynes Mathew George#include <binder/IServiceManager.h>
61e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C"{
62e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include<utils/Log.h>
63e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
68826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define LOG_TAG "OMX-VDEC-720P"
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_1080P
70826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define LOG_TAG "OMX-VDEC-1080P"
71826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
72826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define LOG_TAG "OMX-VDEC"
73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
74e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_LOW
756de494aa87e55850f2bfba52305e426a83686b40Steve Block#define DEBUG_PRINT_LOW ALOGE
76e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else
77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_LOW
78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
79e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_HIGH
806de494aa87e55850f2bfba52305e426a83686b40Steve Block#define DEBUG_PRINT_HIGH ALOGE
81e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else
82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_HIGH
83e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
84e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_ERROR
856de494aa87e55850f2bfba52305e426a83686b40Steve Block#define DEBUG_PRINT_ERROR ALOGE
86e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else
87e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_ERROR
88e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
89826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else //_ANDROID_
91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_LOW printf
92826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_HIGH printf
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR printf
94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_ICS_)
103fcb1a02a7e154802e883bfdfde972e603f8a0a7cHaynes Mathew George#include <IQService.h>
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
106e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
110e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
112e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
115826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
116826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
117826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
118826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
119826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
12040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h"
121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly  OMX_API void * get_omx_component_factory_fn(void);
123e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
124e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
125e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
126e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    using namespace android;
127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    class VideoHeap : public MemoryHeapBase
129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        VideoHeap(int devicefd, size_t size, void* base,struct ion_handle *handle,int mapfd);
132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       int m_ion_device_fd;
135826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       struct ion_handle *m_ion_handle;
136826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
13740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // local pmem heap object
139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    class VideoHeap : public MemoryHeapBase
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
145826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned) bufHdr,\
158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        &=  ~(BITMASK_FLAG(mIndex))
169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        |=  BITMASK_FLAG(mIndex)
171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
183e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
184e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
185e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
186e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
187e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
190826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32
192826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
203826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
204826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
208826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
210826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
214826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum port_indexes
216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
218826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
219826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
220826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
221826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstruct vdec_ion
222826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
223826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
225826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
228e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
229e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellystruct video_driver_context
230e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
231e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
232e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
233e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
234826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
235826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
236826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
238826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
239e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
240e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
241e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
243826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
244826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
245826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
246826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
247826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
250e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
253e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
254e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
256826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt;
257826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
262e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
263e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypublic:
264e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_vdec();  // constructor
265e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    virtual ~omx_vdec();  // destructor
266e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
267e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static int async_message_process (void *context, void* message);
268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static void process_event_cb(void *ctxt,unsigned char id);
269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_buffer(
271e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_HANDLETYPE hComp,
272e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE **bufferHdr,
273e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 port,
274e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR appData,
275e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 bytes
276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                  );
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
279e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
280e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
281e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_init(OMX_STRING role);
282e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
283e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_role_enum(
284e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_HANDLETYPE hComp,
285e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U8 *role,
286e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U32 index
287e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
288e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
289e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_tunnel_request(
290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE hComp,
291e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 port,
292e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE  peerComponent,
293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 peerPort,
294e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_TUNNELSETUPTYPE *tunnelSetup
295e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                           );
296e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
297e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer(
298e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_HANDLETYPE hComp,
299e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_BUFFERHEADERTYPE *buffer
300e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    );
301e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
302e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
303e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
304e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer(
305e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_HANDLETYPE hComp,
306e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE *buffer
307e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   );
308e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
309e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
310e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_buffer(
311e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
312e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_U32 port,
313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_BUFFERHEADERTYPE *buffer
314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              );
315e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
316e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_component_version(
317e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_HANDLETYPE hComp,
318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_STRING componentName,
319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *componentVersion,
320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *specVersion,
321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_UUIDTYPE *componentUUID
322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        );
323e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_config(
325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_INDEXTYPE configIndex,
327e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_PTR configData
328e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             );
329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
330e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_extension_index(
331e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_HANDLETYPE hComp,
332e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_STRING paramName,
333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_INDEXTYPE *indexType
334e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
335e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
336e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
338e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
339e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
341e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            OMX_STATETYPE *state);
342e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
343e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
344e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
346e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_COMMANDTYPE cmd,
347e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_U32         param1,
348e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_PTR         cmdData);
349e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
350e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
351e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_CALLBACKTYPE *callbacks,
353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR          appData);
354e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
355e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
356e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_INDEXTYPE  configIndex,
357e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR        configData);
358e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
359e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
360e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
361e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
362e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
363e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_BUFFERHEADERTYPE **bufferHdr,
365e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              port,
366e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR              appData,
367e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              bytes,
368e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U8               *buffer);
369e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE  use_input_heap_buffers(
371826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_HANDLETYPE            hComp,
372826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_BUFFERHEADERTYPE** bufferHdr,
373826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   port,
374826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_PTR                   appData,
375826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   bytes,
376826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U8*                   buffer);
377e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
378e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
379e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_BUFFERHEADERTYPE **bufferHdr,
380e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_U32              port,
381e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR              appData,
382e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                void *               eglImage);
383826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void complete_pending_buffer_done_cbs();
38482175aba958b9c157a7ecbda9af907f9d4e20052Praveen Chavan    void update_resolution(int width, int height);
385826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct video_driver_context drv_ctx;
386e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_in;
387e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_out;
388e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t msg_thread_id;
389e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t async_thread_id;
39040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    bool is_component_secure();
391e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
392e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyprivate:
393e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Bit Positions
394e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum flags_bit_positions
395e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
396e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to IDLE
397e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_IDLE_PENDING            =0x1,
398e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to LOADING
399e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_LOADING_PENDING         =0x2,
400e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // First  Buffer Pending
401e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
402e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Second Buffer Pending
403e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
404e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
405e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
406e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
407e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
408e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
409e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
410e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
411e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
412e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //defer flush notification
413e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
414e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
415e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PAUSE_PENDING          =0xB,
416826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_EXECUTE_PENDING        =0xC,
417826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
418826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE
419e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
420e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
421e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Deferred callback identifiers
422e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum
423e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
424e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Event Callbacks from the vdec component thread context
425e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT       = 0x1,
426e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Buffer Done callbacks from the vdec component thread context
427e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
428e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Frame Done callbacks from the vdec component thread context
429e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
430e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Buffer Done callbacks from the vdec component thread context
431e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FTB         = 0x4,
432e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Frame Done callbacks from the vdec component thread context
433e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_ETB         = 0x5,
434e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Command
435e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
436e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Push-Pending Buffers
437e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
438e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Empty Buffer Done callbacks
439e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EBD         = 0x8,
440e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Flush Event Callbacks from the vdec component thread context
441e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
442e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
443e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
444e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FBD = 0xc,
445e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_START_DONE = 0xD,
446e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
447e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
448e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
449e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
450826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
451826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
452826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
453826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
454826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
455e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
456e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
457e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vc1_profile_type
458e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
459e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VC1_SP_MP_RCV = 1,
460e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VC1_AP = 2
461e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
462e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
463826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _COPPER_
464826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum v4l2_ports
465826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
466826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        CAPTURE_PORT,
467826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OUTPUT_PORT,
468826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        MAX_PORT
469826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
470826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
471826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
472e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct omx_event
473e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
474e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned param1;
475e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned param2;
476e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned id;
477e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
478e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
479e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct omx_cmd_queue
480e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
482e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_read;
483e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_write;
484e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_size;
485e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
486e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        omx_cmd_queue();
487e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        ~omx_cmd_queue();
488e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        bool insert_entry(unsigned p1, unsigned p2, unsigned id);
489e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id);
490e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // get msgtype of the first ele from the queue
491e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned get_q_msg_type();
492e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
493e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
494e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
495826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
496826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_entry
497826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
498826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_TICKS timestamp;
499826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool valid;
500826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
501826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
502826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_arr_list
503826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
504826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
505e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
506826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_arr_list();
507826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ~ts_arr_list();
508e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
509826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool insert_ts(OMX_TICKS ts);
510826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool pop_min_ts(OMX_TICKS &ts);
511826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool reset_ts_list();
512826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
513826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
514826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
515826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct desc_buffer_hdr
516826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
517826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_U8 *buf_addr;
518826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_U32 desc_data_size;
519826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
520e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_done(void);
521e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_input_done(void);
522e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_output_done(void);
523e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
524e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
525826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
526826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                    OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
527e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
528826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_output_buffer_header();
529826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_input_buffer_header();
53057550cf78d0e21406efd278ad44069674b2e1813Haynes Mathew George    OMX_ERRORTYPE update_color_format(OMX_COLOR_FORMATTYPE eColorFormat);
531e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
532e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_BUFFERHEADERTYPE **bufferHdr,
533e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              port,
534e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_PTR              appData,
535e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              bytes);
536e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
537e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
538e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
539e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE **bufferHdr,
540e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              port,
541e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_PTR              appData,
542e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              bytes);
543e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
544e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
545e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_BUFFERHEADERTYPE **bufferHdr,
546e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32 port,OMX_PTR appData,
547e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32              bytes);
548e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
549e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE   **bufferHdr,
550e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                port,
551e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR                appData,
552e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                bytes,
553e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U8                 *buffer);
554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
556826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
557826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
558826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
559826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
560e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
562826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_output_headers();
563e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool execute_omx_flush(OMX_U32);
564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_output_flush();
565826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_input_flush();
566e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
567e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
568e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
569e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
570e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
571e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
572e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE *buffer);
573e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
574e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
575e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                                   OMX_BUFFERHEADERTYPE *buffer
576e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                                   );
577e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
578e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
579e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp);
580e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp);
581e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp);
582e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
583e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
584e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_BUFFERHEADERTYPE *buffer);
585e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_done();
586e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
587e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_output_done();
588e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_input_done();
589826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
590826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
591826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE start_port_reconfig();
592826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_picture_resolution();
593826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	void stream_off();
594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void adjust_timestamp(OMX_S64 &act_timestamp);
595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void set_frame_rate(OMX_S64 act_timestamp);
596826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
598826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
599826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                    OMX_U32 interlaced_format_type);
601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 num_conceal_mb,
603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 picture_type,
604826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_S64 timestamp,
605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 frame_rate,
606826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               struct vdec_aspectratioinfo *aspect_ratio_info);
607826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
608826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
609826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
610826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
611826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
612826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void insert_demux_addr_offset(OMX_U32 address_offset);
613826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
614826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
615826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
616e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
617826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
618826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int alloc_map_ion_memory(OMX_U32 buffer_size,
619826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              OMX_U32 alignment, struct ion_allocation_data *alloc_data,
620826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              struct ion_fd_data *fd_data,int flag);
621826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_ion_memory(struct vdec_ion *buf_ion_info);
62217a028aa01f5fb339a32c13bb65e1b129c024796Deva Ramasubramanian#else
62317a028aa01f5fb339a32c13bb65e1b129c024796Deva Ramasubramanian    bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
62417a028aa01f5fb339a32c13bb65e1b129c024796Deva Ramasubramanian                            OMX_U32 alignment);
625826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
626826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
627e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
628e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
629e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_COMMANDTYPE cmd,
630e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_U32         param1,
631e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_PTR         cmdData);
632e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool post_event( unsigned int p1,
633e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                     unsigned int p2,
634e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                     unsigned int id
635e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                    );
636e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline int clip2(int x)
637e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
638e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x -1;
639e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 1;
640e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 2;
641e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 4;
642e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 16;
643e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x + 1;
644e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        return x;
645e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
646e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
647826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
648826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE vdec_alloc_h264_mv();
649826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void vdec_dealloc_h264_mv();
650826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
651826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
652e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline void omx_report_error ()
653e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
654e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        if (m_cb.EventHandler && !m_error_propogated)
655e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
656826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            ALOGE("\nERROR: Sending OMX_EventError to Client");
657e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_error_propogated = true;
658e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_cb.EventHandler(&m_cmp,m_app_data,
659e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                  OMX_EventError,OMX_ErrorHardware,0,NULL);
660e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
661e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
662826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
663826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE createDivxDrmContext();
664826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
665826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
666826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
667826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
668e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
669e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
670e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*******************MEMBER VARIABLES *************************
671e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
672e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_mutex_t       m_lock;
673e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //sem to handle the minimum procesing of commands
674e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    sem_t                 m_cmd_lock;
675e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool              m_error_propogated;
676e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // compression format
677e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_VIDEO_CODINGTYPE eCompressionFormat;
678e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // OMX State
679e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_STATETYPE m_state;
680e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application data
681e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PTR m_app_data;
682e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application callbacks
683e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_CALLBACKTYPE m_cb;
684e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PRIORITYMGMTTYPE m_priority_mgm ;
685e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
686e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // fill this buffer queue
687e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_ftb_q;
688e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Command Q for rest of the events
689e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_cmd_q;
690e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_etb_q;
691e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Input memory pointer
692e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
693e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Output memory pointer
694e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
695826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // number of input bitstream error frame count
696826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_inp_err_count;
697826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
698826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // Timestamp list
699826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    ts_arr_list           m_timestamp_list;
700826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
701e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
702e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_flush_progress;
703e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_flush_progress;
704e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_use_buffer;
705e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_use_buffer;
706826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool ouput_egl_buffers;
707826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_use_output_pmem;
708826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_mem_region_smi;
709826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_pvt_entry_pmem;
710826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
711e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_input_buffers;
712e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_output_buffers;
713e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for output side
714e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_out_bm_count;
715e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for input side
716e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_inp_bm_count;
717e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Input port Populated
718e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bPopulated;
719e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Output port Populated
720e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bPopulated;
721e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // encapsulate the waiting states.
722e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_flags;
723e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
724e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
725e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Heap pointer to frame buffers
726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vidc_heap
727826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
728826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        sp<MemoryHeapBase>    video_heap_ptr;
729826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
730826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vidc_heap *m_heap_ptr;
731826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_heap_count;
732e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
733e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store I/P PORT state
734e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bEnabled;
735e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store O/P PORT state
736e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bEnabled;
737826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_in_alloc_cnt;
738e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
739e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Platform specific details
740e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
741e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
742e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
743e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // SPS+PPS sent as part of set_config
744e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
745e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
746e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    /*Variables for arbitrary Byte parsing support*/
747e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    frame_parse m_frame_parser;
748e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_pending_q;
749e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_free_q;
750e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool arbitrary_bytes;
751e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  h264_scratch;
752e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *psource_frame;
753e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *pdest_frame;
754e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
755e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
756e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_heap_inp_bm_count;
757e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    codec_type codec_type_parse;
758e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool first_frame_meta;
759e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned frame_count;
760e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned nal_count;
761e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned nal_length;
762e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool look_ahead_nal;
763e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int first_frame;
764e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned char *first_buffer;
765e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int first_frame_size;
766e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned char m_hwdevice_name[80];
767e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    FILE *m_device_file_ptr;
768e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vc1_profile_type m_vc1_profile;
769826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 h264_last_au_ts;
770826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 h264_last_au_flags;
771826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_demux_offsets[8192];
772826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_demux_entries;
773826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 prev_ts;
775826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool rst_prev_ts;
776826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 frm_int;
777826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
778826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf_rcnfg;
779826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool in_reconfig;
780826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_NATIVE_WINDOWTYPE m_display_id;
781826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    h264_stream_parser *h264_parser;
782826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 client_extradata;
783826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
784826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_timestamp;
785826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool perf_flag;
786826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 proc_frms, latency;
787826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    perf_metrics fps_metrics;
788826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    perf_metrics dec_time;
789826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_enable_android_native_buffers;
790826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_use_android_native_buffers;
791826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_extradata;
792826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_concealedmb;
793826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
794826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
795826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    MP4_Utils mp4_headerparser;
796826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
797826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
798826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct h264_mv_buffer{
799826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        unsigned char* buffer;
800826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int size;
801826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int count;
802826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int pmem_fd;
803826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int offset;
804826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
805826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    h264_mv_buffer h264_mv_buff;
806826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	extra_data_handler extra_data_handle;
807826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    DivXDrmDecrypt* iDivXDrmDecrypt;
809826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
810826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
811826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    omx_time_stamp_reorder time_stamp_dts;
812826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    desc_buffer_hdr *m_desc_buffer_ptr;
813826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool secure_mode;
814826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool codec_config_flag;
81682175aba958b9c157a7ecbda9af907f9d4e20052Praveen Chavan    OMX_CONFIG_RECTTYPE rectangle;
817826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _COPPER_
818826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int capture_capability;
819826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int output_capability;
820826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool streaming[MAX_PORT];
821826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
822b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan
823b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan    // added for smooth streaming
824b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan    private_handle_t * native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
825b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan    bool m_use_smoothstreaming;
826b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan
82740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    unsigned int m_fill_output_msg;
82840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    class allocate_color_convert_buf {
82940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    public:
83040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        allocate_color_convert_buf();
83140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        ~allocate_color_convert_buf();
83240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        void set_vdec_client(void *);
83340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        void update_client();
83440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format);
83540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format);
83640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool update_buffer_req();
83740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool get_buffer_req(unsigned int &buffer_size);
83840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* get_il_buf_hdr();
83940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
84040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
84140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header);
84240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header);
84340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp,
84440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George             OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData,
84540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George             OMX_U32 bytes);
84640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
84740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    private:
84840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        #define MAX_COUNT 32
84940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        omx_vdec *omx;
85040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool enabled;
85140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_COLOR_FORMATTYPE ColorFormat;
85240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        void init_members();
85340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool color_convert_mode;
85440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        ColorConvertFormat dest_format;
85540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        class omx_c2d_conv c2d;
85640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned int allocated_count;
85740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned int buffer_size_req;
85840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned int buffer_alignment_req;
85940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_QCOM_PLATFORM_PRIVATE_LIST      m_platform_list_client[MAX_COUNT];
86040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_QCOM_PLATFORM_PRIVATE_ENTRY     m_platform_entry_client[MAX_COUNT];
86140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT];
86240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE  m_out_mem_ptr_client[MAX_COUNT];
86340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        struct vdec_ion op_buf_ion_info[MAX_COUNT];
86440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned char *pmem_baseaddress[MAX_COUNT];
86540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        int pmem_fd[MAX_COUNT];
86640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        struct vidc_heap
86740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        {
86840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George            sp<MemoryHeapBase>    video_heap_ptr;
86940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        };
87040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        struct vidc_heap m_heap_ptr[MAX_COUNT];
87140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    };
87240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    allocate_color_convert_buf client_buffers;
873fcb1a02a7e154802e883bfdfde972e603f8a0a7cHaynes Mathew George    static bool m_secure_display; //For qservice
874fcb1a02a7e154802e883bfdfde972e603f8a0a7cHaynes Mathew George    int secureDisplay(int mode);
875fcb1a02a7e154802e883bfdfde972e603f8a0a7cHaynes Mathew George    int unsecureDisplay(int mode);
876e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
877e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
878826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _COPPER_
879826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
880826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
881826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_INIT,
882826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_INIT_DONE,
883826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_OPEN,
884826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_OPEN_DONE,
885826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_LOAD_RESOURCES,
886826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_LOAD_RESOURCES_DONE,
887826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_START,
888826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_START_DONE,
889826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_STOP,
890826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_STOP_DONE,
891826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_RELEASE_RESOURCES,
892826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_RELEASE_RESOURCES_DONE,
893826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CLOSE,
894826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CLOSE_DONE,
895826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_UNINIT,
896826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
897826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
898826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
899826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
900826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_DECODER_EVENT_CHANGE,
901826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
902826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
903826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif // _COPPER_
904826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
905e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
906