omx_vdec.h revision 278952ff92fab2da0c47b912daeb662130676be1
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>
48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x;
50e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
51e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
53278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
54826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
56826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
57e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C"{
58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include<utils/Log.h>
59e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
60826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
61826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define LOG_TAG "OMX-VDEC-720P"
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#elif MAX_RES_1080P
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define LOG_TAG "OMX-VDEC-1080P"
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
68826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define LOG_TAG "OMX-VDEC"
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
70e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_LOW
716de494aa87e55850f2bfba52305e426a83686b40Steve Block#define DEBUG_PRINT_LOW ALOGE
72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else
73e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_LOW
74e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
75e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_HIGH
766de494aa87e55850f2bfba52305e426a83686b40Steve Block#define DEBUG_PRINT_HIGH ALOGE
77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else
78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_HIGH
79e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_ERROR
816de494aa87e55850f2bfba52305e426a83686b40Steve Block#define DEBUG_PRINT_ERROR ALOGE
82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else
83e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_ERROR
84e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
86826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else //_ANDROID_
87826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_LOW printf
88826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_HIGH printf
89826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR printf
90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
92826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
94826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
95826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_ICS_)
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <gralloc_priv.h>
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
103e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
104e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
106e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
110e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
111826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
112826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
113826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/android_pmem.h>
115826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
116826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
118e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly  OMX_API void * get_omx_component_factory_fn(void);
120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
123e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    using namespace android;
124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    class VideoHeap : public MemoryHeapBase
126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        VideoHeap(int devicefd, size_t size, void* base,struct ion_handle *handle,int mapfd);
129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       int m_ion_device_fd;
132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       struct ion_handle *m_ion_handle;
133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else
135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // local pmem heap object
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    class VideoHeap : public MemoryHeapBase
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
142826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned) bufHdr,\
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        &=  ~(BITMASK_FLAG(mIndex))
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        |=  BITMASK_FLAG(mIndex)
168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
183e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
184e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
185826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
186826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32
189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
190826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
192826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
203826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
204826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
208826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
210826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum port_indexes
213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
214826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
218826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstruct vdec_ion
219826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
220826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
221826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
222826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
223826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
225e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
226e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellystruct video_driver_context
227e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
228e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
229e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
230e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
234826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
235826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
236e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
237e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
238e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
240826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
243826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
244826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
245826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
246826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
247e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
250e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
251e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt;
254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
255e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
256e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
257e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypublic:
261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_vdec();  // constructor
262e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    virtual ~omx_vdec();  // destructor
263e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
264e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static int async_message_process (void *context, void* message);
265e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static void process_event_cb(void *ctxt,unsigned char id);
266e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
267e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_buffer(
268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_HANDLETYPE hComp,
269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE **bufferHdr,
270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 port,
271e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR appData,
272e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 bytes
273e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                  );
274e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
275e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_init(OMX_STRING role);
279e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
280e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_role_enum(
281e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_HANDLETYPE hComp,
282e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U8 *role,
283e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U32 index
284e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
285e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
286e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_tunnel_request(
287e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE hComp,
288e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 port,
289e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE  peerComponent,
290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 peerPort,
291e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_TUNNELSETUPTYPE *tunnelSetup
292e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                           );
293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
294e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer(
295e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_HANDLETYPE hComp,
296e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_BUFFERHEADERTYPE *buffer
297e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    );
298e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
299e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
300e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
301e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer(
302e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_HANDLETYPE hComp,
303e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE *buffer
304e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   );
305e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
306e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
307e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_buffer(
308e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
309e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_U32 port,
310e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_BUFFERHEADERTYPE *buffer
311e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              );
312e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_component_version(
314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_HANDLETYPE hComp,
315e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_STRING componentName,
316e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *componentVersion,
317e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *specVersion,
318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_UUIDTYPE *componentUUID
319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        );
320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_config(
322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
323e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_INDEXTYPE configIndex,
324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_PTR configData
325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             );
326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
327e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_extension_index(
328e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_HANDLETYPE hComp,
329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_STRING paramName,
330e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_INDEXTYPE *indexType
331e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
332e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
334e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
335e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
336e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
338e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            OMX_STATETYPE *state);
339e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
341e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
342e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
343e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_COMMANDTYPE cmd,
344e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_U32         param1,
345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_PTR         cmdData);
346e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
347e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
348e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
349e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_CALLBACKTYPE *callbacks,
350e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR          appData);
351e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_INDEXTYPE  configIndex,
354e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR        configData);
355e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
356e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
357e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
358e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
359e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
360e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
361e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_BUFFERHEADERTYPE **bufferHdr,
362e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              port,
363e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR              appData,
364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              bytes,
365e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U8               *buffer);
366e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE  use_input_heap_buffers(
368826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_HANDLETYPE            hComp,
369826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_BUFFERHEADERTYPE** bufferHdr,
370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   port,
371826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_PTR                   appData,
372826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   bytes,
373826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U8*                   buffer);
374e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
375e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
376e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_BUFFERHEADERTYPE **bufferHdr,
377e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_U32              port,
378e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR              appData,
379e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                void *               eglImage);
380826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void complete_pending_buffer_done_cbs();
381826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct video_driver_context drv_ctx;
382e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_in;
383e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_out;
384e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t msg_thread_id;
385e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t async_thread_id;
386e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
387e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyprivate:
388e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Bit Positions
389e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum flags_bit_positions
390e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
391e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to IDLE
392e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_IDLE_PENDING            =0x1,
393e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to LOADING
394e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_LOADING_PENDING         =0x2,
395e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // First  Buffer Pending
396e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
397e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Second Buffer Pending
398e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
399e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
400e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
401e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
402e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
403e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
404e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
405e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
406e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
407e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //defer flush notification
408e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
409e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
410e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PAUSE_PENDING          =0xB,
411826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_EXECUTE_PENDING        =0xC,
412826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE
414e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
415e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
416e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Deferred callback identifiers
417e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum
418e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
419e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Event Callbacks from the vdec component thread context
420e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT       = 0x1,
421e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Buffer Done callbacks from the vdec component thread context
422e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
423e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Frame Done callbacks from the vdec component thread context
424e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
425e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Buffer Done callbacks from the vdec component thread context
426e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FTB         = 0x4,
427e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Frame Done callbacks from the vdec component thread context
428e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_ETB         = 0x5,
429e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Command
430e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
431e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Push-Pending Buffers
432e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
433e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Empty Buffer Done callbacks
434e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EBD         = 0x8,
435e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Flush Event Callbacks from the vdec component thread context
436e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
437e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
438e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
439e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FBD = 0xc,
440e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_START_DONE = 0xD,
441e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
442e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
443e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
444e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
445826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
446826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
447826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
448826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
449826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
450e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
451e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
452e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vc1_profile_type
453e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
454e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VC1_SP_MP_RCV = 1,
455e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VC1_AP = 2
456e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
457e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
458826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _COPPER_
459826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum v4l2_ports
460826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
461826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        CAPTURE_PORT,
462826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OUTPUT_PORT,
463826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        MAX_PORT
464826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
465826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
466826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
467e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct omx_event
468e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
469e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned param1;
470e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned param2;
471e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned id;
472e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
473e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
474e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct omx_cmd_queue
475e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
476e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
477e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_read;
478e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_write;
479e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_size;
480e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        omx_cmd_queue();
482e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        ~omx_cmd_queue();
483e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        bool insert_entry(unsigned p1, unsigned p2, unsigned id);
484e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id);
485e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // get msgtype of the first ele from the queue
486e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned get_q_msg_type();
487e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
488e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
489e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
490826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
491826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_entry
492826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
493826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_TICKS timestamp;
494826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool valid;
495826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
496826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
497826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_arr_list
498826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
499826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
500e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
501826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_arr_list();
502826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ~ts_arr_list();
503e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
504826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool insert_ts(OMX_TICKS ts);
505826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool pop_min_ts(OMX_TICKS &ts);
506826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool reset_ts_list();
507826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
508826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
509826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
510826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct desc_buffer_hdr
511826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
512826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_U8 *buf_addr;
513826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_U32 desc_data_size;
514826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
515e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_done(void);
516e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_input_done(void);
517e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_output_done(void);
518e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
519e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
520826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                    OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
522e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
523826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_output_buffer_header();
524826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_input_buffer_header();
525e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
526e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
527e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_BUFFERHEADERTYPE **bufferHdr,
528e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              port,
529e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_PTR              appData,
530e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              bytes);
531e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
532e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
533e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
534e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE **bufferHdr,
535e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              port,
536e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_PTR              appData,
537e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              bytes);
538e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
539e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
540e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_BUFFERHEADERTYPE **bufferHdr,
541e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32 port,OMX_PTR appData,
542e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32              bytes);
543e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
544e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
545e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE   **bufferHdr,
546e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                port,
547e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR                appData,
548e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                bytes,
549e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U8                 *buffer);
550826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
553826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
556e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
557826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
558826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_output_headers();
559e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool execute_omx_flush(OMX_U32);
560826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_output_flush();
561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_input_flush();
562e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
563e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
564e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
565e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
566e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
567e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
568e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE *buffer);
569e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
570e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
571e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                                   OMX_BUFFERHEADERTYPE *buffer
572e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                                   );
573e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
574e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
575e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp);
576e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp);
577e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp);
578e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
579e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
580e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_BUFFERHEADERTYPE *buffer);
581e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_done();
582e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
583e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_output_done();
584e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_input_done();
585826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
586826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
587826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE start_port_reconfig();
588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_picture_resolution();
589826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	void stream_off();
590826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void adjust_timestamp(OMX_S64 &act_timestamp);
591826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void set_frame_rate(OMX_S64 act_timestamp);
592826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
593826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
596826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                    OMX_U32 interlaced_format_type);
597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
598826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 num_conceal_mb,
599826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 picture_type,
600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_S64 timestamp,
601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 frame_rate,
602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               struct vdec_aspectratioinfo *aspect_ratio_info);
603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
604826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
606826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
607826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
608826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void insert_demux_addr_offset(OMX_U32 address_offset);
609826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
610826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
611826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
612e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
613e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
614e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            OMX_U32 alignment);
615826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
616826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int alloc_map_ion_memory(OMX_U32 buffer_size,
617826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              OMX_U32 alignment, struct ion_allocation_data *alloc_data,
618826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              struct ion_fd_data *fd_data,int flag);
619826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_ion_memory(struct vdec_ion *buf_ion_info);
620826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
621826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
622e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
623e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
624e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_COMMANDTYPE cmd,
625e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_U32         param1,
626e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_PTR         cmdData);
627e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool post_event( unsigned int p1,
628e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                     unsigned int p2,
629e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                     unsigned int id
630e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                    );
631e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline int clip2(int x)
632e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
633e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x -1;
634e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 1;
635e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 2;
636e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 4;
637e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 16;
638e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x + 1;
639e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        return x;
640e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
641e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
642826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
643826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE vdec_alloc_h264_mv();
644826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void vdec_dealloc_h264_mv();
645826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
646826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
647e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline void omx_report_error ()
648e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
649e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        if (m_cb.EventHandler && !m_error_propogated)
650e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
651826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            ALOGE("\nERROR: Sending OMX_EventError to Client");
652e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_error_propogated = true;
653e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_cb.EventHandler(&m_cmp,m_app_data,
654e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                  OMX_EventError,OMX_ErrorHardware,0,NULL);
655e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
656e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
657826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
658826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE createDivxDrmContext();
659826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
660826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
661826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
662826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
663826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_ICS_)
664826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct nativebuffer{
665826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        native_handle_t *nativehandle;
666826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int inuse;
667826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
668826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
669826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
670e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
671e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
672e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
673e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*******************MEMBER VARIABLES *************************
674e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
675e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_mutex_t       m_lock;
676e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //sem to handle the minimum procesing of commands
677e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    sem_t                 m_cmd_lock;
678e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool              m_error_propogated;
679e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // compression format
680e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_VIDEO_CODINGTYPE eCompressionFormat;
681e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // OMX State
682e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_STATETYPE m_state;
683e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application data
684e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PTR m_app_data;
685e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application callbacks
686e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_CALLBACKTYPE m_cb;
687e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PRIORITYMGMTTYPE m_priority_mgm ;
688e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
689e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // fill this buffer queue
690e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_ftb_q;
691e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Command Q for rest of the events
692e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_cmd_q;
693e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_etb_q;
694e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Input memory pointer
695e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
696e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Output memory pointer
697e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
698826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // number of input bitstream error frame count
699826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_inp_err_count;
700826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
701826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // Timestamp list
702826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    ts_arr_list           m_timestamp_list;
703826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
704e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
705e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_flush_progress;
706e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_flush_progress;
707e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_use_buffer;
708e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_use_buffer;
709826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool ouput_egl_buffers;
710826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_use_output_pmem;
711826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_mem_region_smi;
712826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_pvt_entry_pmem;
713826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
714e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_input_buffers;
715e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_output_buffers;
716e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for output side
717e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_out_bm_count;
718e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for input side
719e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_inp_bm_count;
720e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Input port Populated
721e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bPopulated;
722e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Output port Populated
723e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bPopulated;
724e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // encapsulate the waiting states.
725e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_flags;
726e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
727e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
728e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Heap pointer to frame buffers
729826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vidc_heap
730826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
731826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        sp<MemoryHeapBase>    video_heap_ptr;
732826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
733826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vidc_heap *m_heap_ptr;
734826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_heap_count;
735e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
736e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store I/P PORT state
737e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bEnabled;
738e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store O/P PORT state
739e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bEnabled;
740826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_in_alloc_cnt;
741e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
742e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Platform specific details
743e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
744e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
745e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
746e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // SPS+PPS sent as part of set_config
747e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
748e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
749e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    /*Variables for arbitrary Byte parsing support*/
750e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    frame_parse m_frame_parser;
751e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_pending_q;
752e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_free_q;
753e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool arbitrary_bytes;
754e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  h264_scratch;
755e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *psource_frame;
756e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *pdest_frame;
757e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
758e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
759e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_heap_inp_bm_count;
760e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    codec_type codec_type_parse;
761e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool first_frame_meta;
762e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned frame_count;
763e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned nal_count;
764e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned nal_length;
765e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool look_ahead_nal;
766e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int first_frame;
767e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned char *first_buffer;
768e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int first_frame_size;
769e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned char m_hwdevice_name[80];
770e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    FILE *m_device_file_ptr;
771e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vc1_profile_type m_vc1_profile;
772826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 h264_last_au_ts;
773826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 h264_last_au_flags;
774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_demux_offsets[8192];
775826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_demux_entries;
776826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
777826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 prev_ts;
778826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool rst_prev_ts;
779826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 frm_int;
780826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
781826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf_rcnfg;
782826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool in_reconfig;
783826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_NATIVE_WINDOWTYPE m_display_id;
784826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    h264_stream_parser *h264_parser;
785826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 client_extradata;
786826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
787826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_timestamp;
788826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool perf_flag;
789826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 proc_frms, latency;
790826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    perf_metrics fps_metrics;
791826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    perf_metrics dec_time;
792826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_enable_android_native_buffers;
793826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_use_android_native_buffers;
794826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_extradata;
795826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_concealedmb;
796826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
797826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
798826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    MP4_Utils mp4_headerparser;
799826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
800826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
801826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct h264_mv_buffer{
802826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        unsigned char* buffer;
803826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int size;
804826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int count;
805826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int pmem_fd;
806826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int offset;
807826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    h264_mv_buffer h264_mv_buff;
809826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	extra_data_handler extra_data_handle;
810826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
811826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    DivXDrmDecrypt* iDivXDrmDecrypt;
812826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_
813826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
814826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    omx_time_stamp_reorder time_stamp_dts;
815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    desc_buffer_hdr *m_desc_buffer_ptr;
816826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool secure_mode;
817826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
818826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool codec_config_flag;
819826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _COPPER_
820826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int capture_capability;
821826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int output_capability;
822826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool streaming[MAX_PORT];
823826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
824e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
825e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
826826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _COPPER_
827826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
828826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
829826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_INIT,
830826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_INIT_DONE,
831826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_OPEN,
832826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_OPEN_DONE,
833826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_LOAD_RESOURCES,
834826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_LOAD_RESOURCES_DONE,
835826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_START,
836826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_START_DONE,
837826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_STOP,
838826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_STOP_DONE,
839826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_RELEASE_RESOURCES,
840826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_RELEASE_RESOURCES_DONE,
841826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CLOSE,
842826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CLOSE_DONE,
843826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_CORE_UNINIT,
844826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
845826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
846826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
847826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
848826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev	MSM_VIDC_DECODER_EVENT_CHANGE,
849826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
850826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
851826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif // _COPPER_
852826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
853e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
854