1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*--------------------------------------------------------------------------
2e4010605f233a213cf0d972397bb33c34c364227Patrick TjinCopyright (c) 2013-2014, The Linux Foundation. All rights reserved.
3e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
4e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  Redistribution and use in source and binary forms, with or without
5e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  modification, are permitted provided that the following conditions
6e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  are met:
7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    * Redistributions of source code must retain the above copyright
9e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  notice, this list of conditions and the following disclaimer.
10e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    * Redistributions in binary form must reproduce the above
11e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  copyright notice, this list of conditions and the following
12e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      disclaimer in the documentation and/or other materials provided
13e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      with the distribution.
14e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    * Neither the name of The Linux Foundation nor the names of its
15e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      contributors may be used to endorse or promote products derived
16e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      from this software without specific prior written permission.
17e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
18e4010605f233a213cf0d972397bb33c34c364227Patrick TjinTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
19e4010605f233a213cf0d972397bb33c34c364227Patrick TjinWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20e4010605f233a213cf0d972397bb33c34c364227Patrick TjinMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
21e4010605f233a213cf0d972397bb33c34c364227Patrick TjinARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
22e4010605f233a213cf0d972397bb33c34c364227Patrick TjinBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23e4010605f233a213cf0d972397bb33c34c364227Patrick TjinCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24e4010605f233a213cf0d972397bb33c34c364227Patrick TjinSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
25e4010605f233a213cf0d972397bb33c34c364227Patrick TjinBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26e4010605f233a213cf0d972397bb33c34c364227Patrick TjinWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27e4010605f233a213cf0d972397bb33c34c364227Patrick TjinOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
28e4010605f233a213cf0d972397bb33c34c364227Patrick TjinIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/
30e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef __OMX_VDEC_HEVC_H__
31e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define __OMX_VDEC_HEVC_H__
32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================
33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            O p e n M A X   Component
34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                Video Decoder
35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin*//** @file comx_vdec_hevc.h
37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly  This module contains the class definition for openMAX decoder component.
38e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//*========================================================================*/
40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
41e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                             Include Files
43e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdlib.h>
46e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <stdio.h>
47826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <string.h>
48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <inttypes.h>
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <cstddef>
50e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
51e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "SwVdecTypes.h"
52e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "SwVdecAPI.h"
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
54826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x;
55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
56e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
57e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef MAX_RES_720P
58e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define LOG_TAG "OMX-VDEC-720P"
59e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#elif MAX_RES_1080P
60e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define LOG_TAG "OMX-VDEC-1080P"
61e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else
62e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define LOG_TAG "OMX-VDEC"
63e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
64e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
66278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
68e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
70e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C"{
71e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <utils/Log.h>
72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
75e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "hevc_utils.h"
76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
78826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else //_ANDROID_
79e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_LOW(fmt, ...) printf(fmt "\n", ##__VA_ARGS__)
80e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_HIGH(fmt, ...) printf(fmt "\n", ##__VA_ARGS__)
81e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_ERROR(fmt, ...) printf(fmt "\n", ##__VA_ARGS__)
82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
83e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
84e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
86826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
87826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
88826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
89826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_ICS_)
92e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <gralloc_priv.h>
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
94826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
96e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
99e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "OMX_Video.h"
102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
103e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h>
104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <media/msm_vidc.h>
105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h"
106826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
107826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h"
108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <linux/android_pmem.h>
110826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h"
111826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h"
11240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h"
113e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "vidc_debug.h"
114e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _ANDROID_
115e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <cutils/properties.h>
116e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else
117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define PROPERTY_VALUE_MAX 92
118e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly  OMX_API void * get_omx_component_factory_fn(void);
121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
123e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
124e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    using namespace android;
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    class VideoHeap : public MemoryHeapBase
127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    public:
129e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        VideoHeap(int devicefd, size_t size, void* base,ion_user_handle_t handle,int mapfd);
130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        virtual ~VideoHeap() {}
131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    private:
132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev       int m_ion_device_fd;
133e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin       ion_user_handle_t m_ion_handle;
134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
13540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // local pmem heap object
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    class VideoHeap : public MemoryHeapBase
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    public:
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VideoHeap(int fd, size_t size, void* base);
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        virtual ~VideoHeap() {}
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned) bufHdr,\
156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        &=  ~(BITMASK_FLAG(mIndex))
167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        |=  BITMASK_FLAG(mIndex)
169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE   100
179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
183e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
184e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
185e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
186826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16)
187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32
190826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
192826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
196e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_EXTNUSER_EXTRADATA  0x00100000
197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
203826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
204826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//  Define next macro with required values to enable default extradata,
207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    VDEC_EXTRADATA_MB_ERROR_MAP
208826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_INTERLACE_EXTRADATA
209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_FRAMEINFO_EXTRADATA
210826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//    OMX_TIMEINFO_EXTRADATA
211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
212826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
214826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum port_indexes
215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
216826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
217826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
218826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
219e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
220e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinenum interm_buffer_state
221e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
222e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    WITH_COMPONENT = 0,
223e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    WITH_SWVDEC,
224e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    WITH_DSP
225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
228826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstruct vdec_ion
229826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
230826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
234826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
235e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
236e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
237e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct extradata_buffer_info {
238e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int buffer_size;
239e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char* uaddr;
240e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int count;
241e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int size;
242e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef USE_ION
243e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_ion ion;
244e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
245e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
246e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
247e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
248e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellystruct video_driver_context
249e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
250e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int video_driver_fd;
251e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_codec decoder_format;
252e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vdec_output_fromat output_format;
253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_interlaced_format interlace;
254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum vdec_output_order picture_order;
255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_picsize video_resolution;
256826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty ip_buf;
257826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf;
258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_inputbuffer;
259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_bufferpayload *ptr_outputbuffer;
260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct vdec_output_frameinfo *ptr_respbuffer;
261e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
262e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_allocatorproperty interm_op_buf;
263e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_bufferpayload *ptr_interm_outputbuffer;
264e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_output_frameinfo *ptr_interm_respbuffer;
265e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
267826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *ip_buf_ion_info;
268826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion *op_buf_ion_info;
269e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_ion *interm_op_buf_ion_info;
270826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_ion h264_mv;
271e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_ion meta_buffer;
272e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdec_ion meta_buffer_iommu;
273826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_framerate frame_rate;
275826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned extradata;
276826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool idr_only_decoding;
279826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned disable_dmx;
280e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
281e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct extradata_buffer_info extradata_info;
282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int num_planes;
283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
284e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
285e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct video_decoder_capability {
287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    unsigned int min_width;
288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    unsigned int max_width;
289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    unsigned int min_height;
290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    unsigned int max_height;
291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
292e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
293e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct debug_cap {
294e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool in_buffer_log;
295e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool out_buffer_log;
296e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool im_buffer_log;
297e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char infile_name[PROPERTY_VALUE_MAX + 36];
298e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char outfile_name[PROPERTY_VALUE_MAX + 36];
299e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char imbfile_name[PROPERTY_VALUE_MAX + 36];
300e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    char log_loc[PROPERTY_VALUE_MAX];
301e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    FILE *infile;
302e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    FILE *outfile;
303e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    FILE *imbfile;
304e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct dynamic_buf_list {
307e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 fd;
308e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 dup_fd;
309e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 offset;
310e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 ref_count;
311e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
312e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component
315e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
316e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
317e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypublic:
318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_vdec();  // constructor
319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    virtual ~omx_vdec();  // destructor
320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static int async_message_process (void *context, void* message);
322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static void process_event_cb(void *ctxt,unsigned char id);
323e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_buffer(
325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_HANDLETYPE hComp,
326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE **bufferHdr,
327e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 port,
328e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR appData,
329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 bytes
330e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                  );
331e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
332e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
334e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
335e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_init(OMX_STRING role);
336e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_role_enum(
338e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_HANDLETYPE hComp,
339e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U8 *role,
340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U32 index
341e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
342e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
343e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_tunnel_request(
344e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE hComp,
345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 port,
346e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE  peerComponent,
347e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 peerPort,
348e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_TUNNELSETUPTYPE *tunnelSetup
349e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                           );
350e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
351e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer(
352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_HANDLETYPE hComp,
353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_BUFFERHEADERTYPE *buffer
354e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    );
355e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
356e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
357e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
358e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer(
359e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_HANDLETYPE hComp,
360e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE *buffer
361e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   );
362e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
363e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_buffer(
365e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
366e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_U32 port,
367e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_BUFFERHEADERTYPE *buffer
368e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              );
369e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
370e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_component_version(
371e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_HANDLETYPE hComp,
372e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_STRING componentName,
373e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *componentVersion,
374e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *specVersion,
375e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_UUIDTYPE *componentUUID
376e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        );
377e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
378e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_config(
379e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
380e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_INDEXTYPE configIndex,
381e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_PTR configData
382e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             );
383e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
384e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_extension_index(
385e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_HANDLETYPE hComp,
386e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_STRING paramName,
387e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_INDEXTYPE *indexType
388e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
389e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
390e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
391e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
392e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
393e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
394e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
395e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            OMX_STATETYPE *state);
396e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
397e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
398e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
399e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
400e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_COMMANDTYPE cmd,
401e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_U32         param1,
402e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_PTR         cmdData);
403e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
404e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
405e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
406e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_CALLBACKTYPE *callbacks,
407e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR          appData);
408e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
409e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
410e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_INDEXTYPE  configIndex,
411e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR        configData);
412e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
413e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
414e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
415e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
416e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
417e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
418e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_BUFFERHEADERTYPE **bufferHdr,
419e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              port,
420e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR              appData,
421e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              bytes,
422e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U8               *buffer);
423e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
424826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE  use_input_heap_buffers(
425826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_HANDLETYPE            hComp,
426826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_BUFFERHEADERTYPE** bufferHdr,
427826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   port,
428826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_PTR                   appData,
429826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   bytes,
430826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U8*                   buffer);
431e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
432e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
433e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_BUFFERHEADERTYPE **bufferHdr,
434e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_U32              port,
435e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR              appData,
436e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                void *               eglImage);
437826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void complete_pending_buffer_done_cbs();
438826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct video_driver_context drv_ctx;
439e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
440e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE allocate_extradata();
441e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void free_extradata();
442e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int update_resolution(int width, int height, int stride, int scan_lines);
443e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE is_video_session_supported();
444e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
445e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_in;
446e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_out;
447e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t msg_thread_id;
448e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t async_thread_id;
44940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    bool is_component_secure();
450e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
451e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void buf_ref_add(int index, OMX_U32 fd, OMX_U32 offset);
452e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void buf_ref_remove(OMX_U32 fd, OMX_U32 offset);
453e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
454e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    static SWVDEC_STATUS swvdec_input_buffer_done_cb(SWVDEC_HANDLE pSwDec, SWVDEC_IPBUFFER *pIpBuffer, void *pClientHandle);
455e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    static SWVDEC_STATUS swvdec_fill_buffer_done_cb(SWVDEC_HANDLE pSwDec, SWVDEC_OPBUFFER *pOpBuffer, void *pClientHandle);
456e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    static SWVDEC_STATUS swvdec_handle_event_cb (SWVDEC_HANDLE pSwDec, SWVDEC_EVENTHANDLER* pEventHandler, void *pClientHandle);
457e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void swvdec_input_buffer_done(SWVDEC_IPBUFFER *pIpBuffer);
458e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void swvdec_fill_buffer_done(SWVDEC_OPBUFFER *pOpBuffer);
459e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void swvdec_handle_event(SWVDEC_EVENTHANDLER *pEvent);
460e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
461e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyprivate:
462e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Bit Positions
463e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum flags_bit_positions
464e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
465e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to IDLE
466e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_IDLE_PENDING            =0x1,
467e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to LOADING
468e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_LOADING_PENDING         =0x2,
469e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // First  Buffer Pending
470e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
471e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Second Buffer Pending
472e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
473e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
474e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
475e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
476e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
477e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
478e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
479e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
480e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //defer flush notification
482e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
483e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
484e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PAUSE_PENDING          =0xB,
485826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_EXECUTE_PENDING        =0xC,
486826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
487826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE
488e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
489e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
490e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Deferred callback identifiers
491e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum
492e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
493e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Event Callbacks from the vdec component thread context
494e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT       = 0x1,
495e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Buffer Done callbacks from the vdec component thread context
496e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
497e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Frame Done callbacks from the vdec component thread context
498e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
499e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Buffer Done callbacks from the vdec component thread context
500e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FTB         = 0x4,
501e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Frame Done callbacks from the vdec component thread context
502e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_ETB         = 0x5,
503e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Command
504e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
505e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Push-Pending Buffers
506e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
507e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Empty Buffer Done callbacks
508e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EBD         = 0x8,
509e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Flush Event Callbacks from the vdec component thread context
510e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
511e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
512e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
513e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FBD = 0xc,
514e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_START_DONE = 0xD,
515e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
516e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
517e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
518e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
519826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
520826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
521826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
523826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
524e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
525e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        // SWVDEC events
526e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_ETB_SWVDEC = 0x17,
527e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_EBD_SWVDEC = 0x18,
528e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_FTB_DSP = 0x19,
529e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_FBD_DSP = 0x1A,
530e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH_DSP = 0x1C,
531e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_STOP_DONE_SWVDEC =  0x1D,
532e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x1E,
533e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
534e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
535e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vc1_profile_type
536e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
537e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VC1_SP_MP_RCV = 1,
538e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        VC1_AP = 2
539e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
540e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
541e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
542826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum v4l2_ports
543826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
544826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        CAPTURE_PORT,
545826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OUTPUT_PORT,
546826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        MAX_PORT
547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
548826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
549826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
550e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct omx_event
551e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
552e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned long param1;
553e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned long param2;
554e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned id;
555e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
556e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
557e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    struct omx_cmd_queue
558e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
559e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
560e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_read;
561e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_write;
562e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned m_size;
563e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
564e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        omx_cmd_queue();
565e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        ~omx_cmd_queue();
566e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id);
567e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool pop_entry(unsigned long*p1,unsigned long*p2, unsigned long*id);
568e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // get msgtype of the first ele from the queue
569e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        unsigned get_q_msg_type();
570e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
571e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
572e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
573826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
574826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_entry
575826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
576826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_TICKS timestamp;
577826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool valid;
578826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
579826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
580826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_arr_list
581826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
582826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
583e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
584826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_arr_list();
585826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ~ts_arr_list();
586e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
587826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool insert_ts(OMX_TICKS ts);
588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool pop_min_ts(OMX_TICKS &ts);
589826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool reset_ts_list();
590826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
591826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
592826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
593826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct desc_buffer_hdr
594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_U8 *buf_addr;
596826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_U32 desc_data_size;
597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
598e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_done(void);
599e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_input_done(void);
600e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_output_done(void);
601e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
602e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex,
604826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                    OMX_BUFFERHEADERTYPE *pmem_bufferHdr);
605e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
606826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_output_buffer_header();
607826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_input_buffer_header();
608e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
609e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
610e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_BUFFERHEADERTYPE **bufferHdr,
611e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              port,
612e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_PTR              appData,
613e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              bytes);
614e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
615e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
616e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
617e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE **bufferHdr,
618e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              port,
619e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_PTR              appData,
620e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              bytes);
621e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
622e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
623e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_BUFFERHEADERTYPE **bufferHdr,
624e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32 port,OMX_PTR appData,
625e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32              bytes);
626e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
627e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE   **bufferHdr,
628e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                port,
629e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR                appData,
630e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                bytes,
631e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U8                 *buffer);
632826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P
633826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
634826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
635826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
636826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType);
637826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
638e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
639826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index);
640826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_output_headers();
641e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool execute_omx_flush(OMX_U32);
642826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_output_flush();
643826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_input_flush();
644e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool execute_input_flush_swvdec();
645e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool execute_output_flush_dsp();
646e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
647e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
648e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
649e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
650e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
651e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
652e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
653e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE *buffer);
654e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
655e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp,
656e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                                   OMX_BUFFERHEADERTYPE *buffer
657e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                                   );
658e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
659e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp);
660e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE push_input_hevc (OMX_HANDLETYPE hComp);
661e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
662e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
663e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_BUFFERHEADERTYPE *buffer);
664e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
665e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE empty_this_buffer_proxy_swvdec(OMX_IN OMX_HANDLETYPE         hComp,
666e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                                 OMX_IN OMX_BUFFERHEADERTYPE* buffer);
667e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
668e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE empty_buffer_done_swvdec(OMX_HANDLETYPE         hComp,
669e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                          OMX_BUFFERHEADERTYPE* buffer);
670e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
671e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE fill_all_buffers_proxy_dsp(OMX_HANDLETYPE hComp);
672e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
673e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE  fill_this_buffer_proxy_dsp(
674e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                         OMX_IN OMX_HANDLETYPE        hComp,
675e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                         OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd);
676e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
677e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE  fill_buffer_done_dsp(OMX_HANDLETYPE hComp,
678e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               OMX_BUFFERHEADERTYPE * buffer);
679e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
680e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
681e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE  fill_this_buffer_proxy_swvdec(
682e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                         OMX_IN OMX_HANDLETYPE        hComp,
683e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                         OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd);
684e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
685e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    // OMX_ERRORTYPE allocate_intermediate_buffer(OMX_HANDLETYPE, OMX_PTR, OMX_U32);
686e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE allocate_interm_buffer(OMX_IN OMX_U32 bytes);
687e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
688e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE free_interm_buffers();
689e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
690e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_done();
691e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
692e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_output_done();
693e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_input_done();
694e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool release_interm_done();
695e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
696826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop);
697e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE get_buffer_req_swvdec();
698826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop);
699e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE set_buffer_req_swvdec(vdec_allocatorproperty *buffer_prop);
700e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
701826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE start_port_reconfig();
702826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_picture_resolution();
703e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int stream_off(OMX_U32 port);
704826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void adjust_timestamp(OMX_S64 &act_timestamp);
705826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void set_frame_rate(OMX_S64 act_timestamp);
706e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr);
707826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
708826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
709e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
710e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
711e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               OMX_U32 interlaced_format_type);
712e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal,
713e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               bool enable = true);
714e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
715e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               OMX_U32 num_conceal_mb,
716e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               OMX_U32 picture_type,
717e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               OMX_U32 frame_rate,
718e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               struct msm_vidc_panscan_window_payload *panscan_payload,
719e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                               struct vdec_aspectratioinfo *aspect_ratio_info);
720e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else
721826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
722e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                                    OMX_U32 interlaced_format_type, OMX_U32 buf_index);
723e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
724e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
725826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 num_conceal_mb,
727826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 picture_type,
728826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_S64 timestamp,
729826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32 frame_rate,
730826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               struct vdec_aspectratioinfo *aspect_ratio_info);
731826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info,
732826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info);
733826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra);
734826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
735826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra);
736e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn);
737e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user);
738826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void insert_demux_addr_offset(OMX_U32 address_offset);
739826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr);
740826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr);
741826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra);
742e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
743e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
744e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            OMX_U32 alignment);
745826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
746826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int alloc_map_ion_memory(OMX_U32 buffer_size,
747826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              OMX_U32 alignment, struct ion_allocation_data *alloc_data,
748e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin              struct ion_fd_data *fd_data,int flag, int heap_id = 0);
749826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_ion_memory(struct vdec_ion *buf_ion_info);
750826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
751826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
752e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
753e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
754e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_COMMANDTYPE cmd,
755e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_U32         param1,
756e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_PTR         cmdData);
757e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool post_event( unsigned long p1,
758e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                     unsigned long p2,
759e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                     unsigned long id
760e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                    );
761e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline int clip2(int x)
762e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
763e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x -1;
764e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 1;
765e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 2;
766e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 4;
767e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 16;
768e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x + 1;
769e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        return x;
770e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
771e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
772826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
773826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE vdec_alloc_h264_mv();
774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void vdec_dealloc_h264_mv();
775e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE vdec_alloc_meta_buffers();
776e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void vdec_dealloc_meta_buffers();
777826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
778826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
779e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline void omx_report_error ()
780e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
781e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        if (m_cb.EventHandler && !m_error_propogated)
782e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
783e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_ERROR("\nERROR: Sending OMX_EventError to Client");
784e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_error_propogated = true;
785e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_cb.EventHandler(&m_cmp,m_app_data,
786e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                  OMX_EventError,OMX_ErrorHardware,0,NULL);
787e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
788e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
789e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
790e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    inline void omx_report_unsupported_setting ()
791e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
792e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (m_cb.EventHandler && !m_error_propogated)
793e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        {
794e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_ERROR("ERROR: Sending OMX_ErrorUnsupportedSetting to Client");
795e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            m_error_propogated = true;
796e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            m_cb.EventHandler(&m_cmp,m_app_data,
797e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                    OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
798e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
799e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
800826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
801826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
802826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
803e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#if defined (_ANDROID_ICS_)
804e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct nativebuffer{
805e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        native_handle_t *nativehandle;
806e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        private_handle_t *privatehandle;
807e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int inuse;
808e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    };
809e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
810e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
811e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
812e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
813e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
814e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*******************MEMBER VARIABLES *************************
815e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
816e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_mutex_t       m_lock;
8175eec611637d93f8e43579337ca2e45a3014d9237Praveen Chavan    pthread_mutex_t       c_lock;
818e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //sem to handle the minimum procesing of commands
819e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    sem_t                 m_cmd_lock;
820e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool              m_error_propogated;
821e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // compression format
822e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_VIDEO_CODINGTYPE eCompressionFormat;
823e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // OMX State
824e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_STATETYPE m_state;
825e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application data
826e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PTR m_app_data;
827e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application callbacks
828e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_CALLBACKTYPE m_cb;
829e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PRIORITYMGMTTYPE m_priority_mgm ;
830e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
831e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // fill this buffer queue
832e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_ftb_q;
833e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Command Q for rest of the events
834e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_cmd_q;
835e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_etb_q;
836e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
837e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    omx_cmd_queue         m_ftb_q_dsp;  // ftb for dsp
838e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    omx_cmd_queue         m_etb_q_swvdec;  //  etbs for swvdec
839e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
840e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Input memory pointer
841e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
842e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Output memory pointer
843e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
844826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // number of input bitstream error frame count
845826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_inp_err_count;
846826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
847826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // Timestamp list
848826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    ts_arr_list           m_timestamp_list;
849826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
850e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
851e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_flush_progress;
852e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_flush_progress;
853e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_use_buffer;
854e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_use_buffer;
855826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool ouput_egl_buffers;
856826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_use_output_pmem;
857826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_mem_region_smi;
858826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_pvt_entry_pmem;
859826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
860e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_input_buffers;
861e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_output_buffers;
862e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for output side
863e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_out_bm_count;
864e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for input side
865e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_inp_bm_count;
866e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Input port Populated
867e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bPopulated;
868e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Output port Populated
869e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bPopulated;
870e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // encapsulate the waiting states.
871e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_flags;
872e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
873e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
874e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Heap pointer to frame buffers
875826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vidc_heap
876826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
877826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        sp<MemoryHeapBase>    video_heap_ptr;
878826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
879826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vidc_heap *m_heap_ptr;
880826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_heap_count;
881e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_
882e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store I/P PORT state
883e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bEnabled;
884e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store O/P PORT state
885e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bEnabled;
886826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_in_alloc_cnt;
887e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
888e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Platform specific details
889e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
890e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
891e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
892e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
893e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    // for soft ARM codec
894e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    SWVDEC_INITPARAMS sSwVdecParameter;
895e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    SWVDEC_HANDLE         m_pSwVdec;
896e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    SWVDEC_CALLBACK       m_callBackInfo;
897e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    SWVDEC_IPBUFFER *m_pSwVdecIpBuffer;
898e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    SWVDEC_OPBUFFER *m_pSwVdecOpBuffer;
899e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 m_nInputBuffer;
900e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 m_nOutputBuffer;
901e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
902e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    interm_buffer_state m_interm_buf_state[32];
903e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_BUFFERHEADERTYPE* m_interm_mem_ptr;
904e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool m_interm_flush_dsp_progress;
905e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool m_interm_flush_swvdec_progress;
906e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_BOOL m_interm_bPopulated;
907e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_BOOL m_interm_bEnabled;
908e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int m_swvdec_mode;
909e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_BOOL m_fill_internal_bufers;
910e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
911e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // SPS+PPS sent as part of set_config
912e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_VENDOR_EXTRADATATYPE            m_vendor_config;
913e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
914e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    /*Variables for arbitrary Byte parsing support*/
915e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    frame_parse m_frame_parser;
916e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_pending_q;
917e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_free_q;
918e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool arbitrary_bytes;
919e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  h264_scratch;
920e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *psource_frame;
921e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *pdest_frame;
922e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
923e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
924e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_heap_inp_bm_count;
925e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    codec_type codec_type_parse;
926e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool first_frame_meta;
927e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned frame_count;
928e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned nal_count;
929e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned nal_length;
930e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool look_ahead_nal;
931e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int first_frame;
932e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned char *first_buffer;
933e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int first_frame_size;
934e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned char m_hwdevice_name[80];
935e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    FILE *m_device_file_ptr;
936e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum vc1_profile_type m_vc1_profile;
937826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 h264_last_au_ts;
938826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 h264_last_au_flags;
939826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_demux_offsets[8192];
940826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_demux_entries;
941e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 m_disp_hor_size;
942e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 m_disp_vert_size;
943826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
944826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 prev_ts;
945826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool rst_prev_ts;
946826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 frm_int;
947826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
948826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct vdec_allocatorproperty op_buf_rcnfg;
949826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool in_reconfig;
950826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_NATIVE_WINDOWTYPE m_display_id;
951826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    h264_stream_parser *h264_parser;
952826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 client_extradata;
953826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
954826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_timestamp;
955826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool perf_flag;
956826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 proc_frms, latency;
957826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    perf_metrics fps_metrics;
958826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    perf_metrics dec_time;
959826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_enable_android_native_buffers;
960826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_use_android_native_buffers;
961826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_extradata;
962826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_concealedmb;
963e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool m_disable_dynamic_buf_mode;
964826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
965826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P
966826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    MP4_Utils mp4_headerparser;
967826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
968826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
969826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct h264_mv_buffer{
970826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        unsigned char* buffer;
971826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int size;
972826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int count;
973826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int pmem_fd;
974826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        int offset;
975826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
976826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    h264_mv_buffer h264_mv_buff;
977e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
978e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct meta_buffer{
979e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned char* buffer;
980e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int size;
981e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int count;
982e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int pmem_fd;
983e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int pmem_fd_iommu;
984e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int offset;
985e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    };
986e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    meta_buffer meta_buff;
987e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    extra_data_handler extra_data_handle;
988826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
989826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    omx_time_stamp_reorder time_stamp_dts;
990826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    desc_buffer_hdr *m_desc_buffer_ptr;
991826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool secure_mode;
992e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool external_meta_buffer;
993e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool external_meta_buffer_iommu;
994826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata;
995826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool codec_config_flag;
996e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
997826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int capture_capability;
998826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int output_capability;
999826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool streaming[MAX_PORT];
1000e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_CONFIG_RECTTYPE rectangle;
1001e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int prev_n_filled_len;
1002826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
1003e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool m_power_hinted;
1004e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE power_module_register();
1005e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE power_module_deregister();
1006e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool msg_thread_created;
1007e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool async_thread_created;
1008b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan
1009e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool dynamic_buf_mode;
1010e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct dynamic_buf_list *out_dynamic_list;
1011e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
1012e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool m_smoothstreaming_mode;
1013ac64d24c26fd060fb3e2b1c9a1db4ab18dbf7c5dPraveen Chavan    OMX_U32 m_smoothstreaming_width;
1014e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_U32 m_smoothstreaming_height;
1015e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE enable_smoothstreaming();
1016b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan
101740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    unsigned int m_fill_output_msg;
101840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    class allocate_color_convert_buf {
101940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    public:
102040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        allocate_color_convert_buf();
102140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        ~allocate_color_convert_buf();
102240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        void set_vdec_client(void *);
102340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        void update_client();
102440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format);
102540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format);
102640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool update_buffer_req();
102740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool get_buffer_req(unsigned int &buffer_size);
102840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* get_il_buf_hdr();
102940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
103040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr);
103140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header);
103240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header);
103340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp,
103440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George             OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData,
103540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George             OMX_U32 bytes);
103640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
103740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    private:
103840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        #define MAX_COUNT 32
103940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        omx_vdec *omx;
104040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool enabled;
104140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_COLOR_FORMATTYPE ColorFormat;
104240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        void init_members();
104340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        bool color_convert_mode;
104440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        ColorConvertFormat dest_format;
104540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        class omx_c2d_conv c2d;
104640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned int allocated_count;
104740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned int buffer_size_req;
104840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned int buffer_alignment_req;
104940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_QCOM_PLATFORM_PRIVATE_LIST      m_platform_list_client[MAX_COUNT];
105040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_QCOM_PLATFORM_PRIVATE_ENTRY     m_platform_entry_client[MAX_COUNT];
105140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT];
105240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        OMX_BUFFERHEADERTYPE  m_out_mem_ptr_client[MAX_COUNT];
1053e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef USE_ION
105440f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        struct vdec_ion op_buf_ion_info[MAX_COUNT];
1055e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
105640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        unsigned char *pmem_baseaddress[MAX_COUNT];
105740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        int pmem_fd[MAX_COUNT];
105840f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        struct vidc_heap
105940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        {
106040f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George            sp<MemoryHeapBase>    video_heap_ptr;
106140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        };
106240f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George        struct vidc_heap m_heap_ptr[MAX_COUNT];
106340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    };
1064e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#if  defined (_MSM8960_) || defined (_MSM8974_)
106540f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    allocate_color_convert_buf client_buffers;
1066e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
1067e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    HEVC_Utils mHEVCutils;
1068e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct video_decoder_capability m_decoder_capability;
1069e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct debug_cap m_debug;
1070e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int log_input_buffers(const char *, int);
1071e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int log_output_buffers(OMX_BUFFERHEADERTYPE *);
1072e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int log_im_buffer(OMX_BUFFERHEADERTYPE * buffer);
1073e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
1074e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
1075e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _MSM8974_
1076826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state {
1077e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_CORE_UNINIT_DONE = 0x0001,
1078e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_CORE_INIT,
1079e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_CORE_INIT_DONE,
1080e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_OPEN,
1081e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_OPEN_DONE,
1082e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_LOAD_RESOURCES,
1083e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_LOAD_RESOURCES_DONE,
1084e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_START,
1085e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_START_DONE,
1086e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_STOP,
1087e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_STOP_DONE,
1088e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_RELEASE_RESOURCES,
1089e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_RELEASE_RESOURCES_DONE,
1090e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_CLOSE,
1091e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_CLOSE_DONE,
1092e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_CORE_UNINIT,
1093826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1094826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1095826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id {
1096e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_DECODER_FLUSH_DONE = 0x11,
1097e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    MSM_VIDC_DECODER_EVENT_CHANGE,
1098826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
1099826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif // _MSM8974_
1101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
1102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__
1103