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_VDPP_H__
31e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define __OMX_VDPP_H__
32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================
33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            O p e n M A X   Component
34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                Video Decoder
35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
36e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin*//** @file omx_vdpp.h
37e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  This module contains the class definition for openMAX video post-processing 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#include <math.h>
51e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
53e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define LOG_TAG "OMX-VDPP"
54e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
55826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
56278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h>
57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h>
59826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h>
60e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C"{
61e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <utils/Log.h>
62e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h>
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h>
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000
66e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
67e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
68e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_LOW(x, ...) ALOGV("[Entry] "x, ##__VA_ARGS__)
69e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_HIGH(x, ...) ALOGV("[Step] "x, ##__VA_ARGS__)
70e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_ERROR(x, ...) ALOGE("[Error] "x, ##__VA_ARGS__)
71e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
72e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/*#define DEBUG_PRINT_LOW(x, ...)
73e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_HIGH(x, ...)
74e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEBUG_PRINT_ERROR(x, ...) */
75826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else //_ANDROID_
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_LOW printf
78826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_HIGH printf
79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DEBUG_PRINT_ERROR printf
80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
81e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h>
84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
86826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h>
87826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
88826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_ICS_)
89e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <gralloc_priv.h>
90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h>
93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG
94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h>
95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif
96e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h"
97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h"
98e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "OMX_CoreExt.h"
99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "OMX_IndexExt.h"
100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h"
101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <linux/android_pmem.h>
102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <dlfcn.h>
103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <media/msm_vpu.h>
105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" {
106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  OMX_API void * get_omx_component_factory_fn(void); //used by qc_omx_core
107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}
108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_
110e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    using namespace android;
111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_
112e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//                       Module specific globals
114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION  0x00000101
116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin// #define OUTPUT_BUFFER_LOG 1
118e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin// #define INPUT_BUFFER_LOG  1
119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//               Macros
121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//////////////////////////////////////////////////////////////////////////////
122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\
123e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned) bufHdr,\
124e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\
125e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\
126e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                       (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp)
127e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
128e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic
129e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE        32
130e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE)
131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE)
132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE))
133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \
134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        &=  ~(BITMASK_FLAG(mIndex))
135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex)  (mArray)[BITMASK_OFFSET(mIndex)] \
136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        |=  BITMASK_FLAG(mIndex)
137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \
142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex))
143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \
144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        & BITMASK_FLAG(mIndex)) == 0x0)
145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
146e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_CORE_CONTROL_CMDQ_SIZE   200//100
147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT         144
148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH          176
149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT          480
150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH           640
151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT         480
152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH          800
153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
154826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
155826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32
156826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
157826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
158826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000
159826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000
160826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA  0x00040000
161826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA   0x00080000
162e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_EXTNUSER_EXTRADATA  0x00100000
163826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK   0x0000FFFF
164826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
165826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
166826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3))
167826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
168826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3))
169826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\
170826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3))
171826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
172e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VALID_TS(ts)      ((ts < LLONG_MAX)? true : false)
173e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
174e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* STATUS CODES */
175e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Base value for status codes */
176e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_BASE	0x40000000
177e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Success */
178e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_SUCCESS	(VDPP_S_BASE)
179e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* General failure */
180e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_EFAIL	(VDPP_S_BASE + 1)
181e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Fatal irrecoverable  failure. Need to  tear down session. */
182e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_EFATAL   (VDPP_S_BASE + 2)
183e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Error detected in the passed  parameters */
184e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_EBADPARAM	(VDPP_S_BASE + 3)
185e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Command called in invalid  state. */
186e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_EINVALSTATE	(VDPP_S_BASE + 4)
187e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* Insufficient OS  resources - thread, memory etc. */
188e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ENOSWRES	(VDPP_S_BASE + 5)
189e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /* Insufficient HW resources -  core capacity  maxed  out. */
190e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ENOHWRES	(VDPP_S_BASE + 6)
191e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Invalid command  called */
192e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_EINVALCMD	(VDPP_S_BASE + 7)
193e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Command timeout. */
194e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ETIMEOUT	(VDPP_S_BASE + 8)
195e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Pre-requirement is  not met for API. */
196e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ENOPREREQ	(VDPP_S_BASE + 9)
197e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Command queue is full. */
198e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ECMDQFULL	(VDPP_S_BASE + 10)
199e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Command is not supported  by this driver */
200e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ENOTSUPP	(VDPP_S_BASE + 11)
201e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Command is not implemented by thedriver. */
202e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_ENOTIMPL	(VDPP_S_BASE + 12)
203e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Command is not implemented by the driver.  */
204e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_BUSY	(VDPP_S_BASE + 13)
205e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_S_INPUT_BITSTREAM_ERR (VDPP_S_BASE + 14)
206e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
207e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_INTF_VER	1
208e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_BASE	0x0000000
209e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/* Codes to identify asynchronous message responses and events that driver
210e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin  wants to communicate to the app.*/
211e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_INVALID	(VDPP_MSG_BASE + 0)
212e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_INPUT_BUFFER_DONE	(VDPP_MSG_BASE + 1)
213e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_OUTPUT_BUFFER_DONE	(VDPP_MSG_BASE + 2)
214e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_INPUT_FLUSHED	(VDPP_MSG_BASE + 3)
215e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_OUTPUT_FLUSHED	(VDPP_MSG_BASE + 4)
216e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_FLUSH_INPUT_DONE	(VDPP_MSG_BASE + 5)
217e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_FLUSH_OUTPUT_DONE	(VDPP_MSG_BASE + 6)
218e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_START_DONE	(VDPP_MSG_BASE + 7)
219e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_STOP_DONE	(VDPP_MSG_BASE + 8)
220e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_PAUSE_DONE	(VDPP_MSG_BASE + 9)
221e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_RESUME_DONE	(VDPP_MSG_BASE + 10)
222e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_RESP_RESOURCE_LOADED	(VDPP_MSG_BASE + 11)
223e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_EVT_RESOURCES_LOST	(VDPP_MSG_BASE + 12)
224e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_EVT_CONFIG_CHANGED	(VDPP_MSG_BASE + 13)
225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_EVT_HW_ERROR	(VDPP_MSG_BASE + 14)
226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_EVT_INFO_CONFIG_CHANGED	(VDPP_MSG_BASE + 15)
227e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_EVT_INFO_FIELD_DROPPED	(VDPP_MSG_BASE + 16)
228e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
229e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_MSG_EVT_ACTIVE_REGION_DETECTION_STATUS	(VDPP_MSG_BASE + 17)
230e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
231e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
232e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VP_INPUT_BUFFER_COUNT_INTERLACE 4
233e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VP_OUTPUT_BUFFER_COUNT 4
234e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
235e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define VDPP_SESSION 1
236e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin//#define STUB_VPU 1
237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA)
238826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum port_indexes
240826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_INPUT_PORT_INDEX        =0,
242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_CORE_OUTPUT_PORT_INDEX       =1
243826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
244826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
245e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_ion
246826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
247826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int ion_device_fd;
248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_fd_data fd_ion_data;
249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ion_allocation_data ion_alloc_data;
250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
252e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
253e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct extradata_buffer_info {
254e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	int buffer_size;
255e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	char* uaddr;
256e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	int count;
257e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	int size;
258e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef USE_ION
259e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	struct vdpp_ion ion;
260e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
261e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
262e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
263e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_picsize {
264e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t frame_width;
265e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t frame_height;
266e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t stride;
267e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t scan_lines;
268e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
269e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
270e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinenum vdpp_interlaced_format {
271e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	VDPP_InterlaceFrameProgressive = 0x1,
272e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	VDPP_InterlaceInterleaveFrameTopFieldFirst = 0x2,
273e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	VDPP_InterlaceInterleaveFrameBottomFieldFirst = 0x4
274e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
275e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
276e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinenum vdpp_buffer {
277e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	VDPP_BUFFER_TYPE_INPUT,
278e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	VDPP_BUFFER_TYPE_OUTPUT
279e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
280e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
281e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_allocatorproperty {
282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	enum vdpp_buffer buffer_type;
283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t mincount;
284e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t maxcount;
285e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t actualcount;
286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t buffer_size;
287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t alignment;
288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t buf_poolid;
289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t frame_size;
290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
292e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_bufferpayload {
293e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	void *bufferaddr;
294e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t buffer_len;
295e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	int pmem_fd;
296e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t offset;
297e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t mmaped_size;
298e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
299e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
300e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_framesize {
301e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t   left;
302e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t   top;
303e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t   right;
304e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t   bottom;
305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
307e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_setbuffer_cmd {
308e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	enum vdpp_buffer buffer_type;
309e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	struct vdpp_bufferpayload buffer;
310e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
311e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
312e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_output_frameinfo {
313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	void *bufferaddr;
314e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t offset;
315e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t len;
316e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t flags;
317e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	int64_t time_stamp;
318e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	void *client_data;
319e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	struct vdpp_framesize framesize;
320e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
321e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
322e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
323e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinunion vdpp_msgdata {
324e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct v4l2_rect ar_result;
325e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	struct vdpp_output_frameinfo output_frame;
326e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	void *input_frame_clientdata;
327e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
328e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
329e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_msginfo {
330e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t status_code;
331e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	uint32_t msgcode;
332e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	union vdpp_msgdata msgdata;
333e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t msgdatasize;
334e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
335e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
336e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdpp_framerate {
337e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	unsigned long fps_denominator;
338e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	unsigned long fps_numerator;
339e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin};
340e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
341e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef STUB_VPU
342e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct vcap_etb_ftb_info
343e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
344e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int etb_cnt; // only simulate 1-to-1
345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    __u32	etb_index;
346e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t  etb_len;
347e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int ftb_cnt;
348e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    __u32   ftb_index;
349e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	size_t  ftb_len;
350e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}vcap_etb_ftb_info;
351e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
352e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
353e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct video_vpu_context
354e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
355e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int video_vpu_fd;
356e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    uint32_t output_format;
357e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    enum   v4l2_field interlace;
358e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_picsize video_resolution_input;
359e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_picsize video_resolution_output;
360e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_allocatorproperty ip_buf;
361e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_allocatorproperty op_buf;
362e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_bufferpayload *ptr_inputbuffer;
363e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_bufferpayload *ptr_outputbuffer;
364e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_output_frameinfo *ptr_respbuffer;
365826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
366e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_ion *ip_buf_ion_info;
367e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_ion *op_buf_ion_info;
368826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
369e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_framerate frame_rate;
370826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool timestamp_adjust;
371e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    char kind[128];
372e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	struct extradata_buffer_info extradata_info;
373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int input_num_planes;
374e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int output_num_planes;
375e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    double input_bytesperpixel[2];
376e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    double output_bytesperpixel[2];
377e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int sessionsSupported;
378e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int sessionAttached;
379e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef STUB_VPU
380e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool thread_exit;
381e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    vcap_etb_ftb_info etb_ftb_info;
382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    sem_t             async_lock;
383e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
384e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
385e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
386e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct _VdppExtensionData_t
387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{
388e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool                           activeRegionDetectionDirtyFlag;
389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    QOMX_ACTIVEREGIONDETECTIONTYPE activeRegionDetection;
390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool                                  activeRegionDetectionStatusDirtyFlag;
391e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    QOMX_ACTIVEREGIONDETECTION_STATUSTYPE activeRegionDetectionStatus;
392e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool                  scalingModeDirtyFlag;
393e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    QOMX_SCALINGMODETYPE  scalingMode;
394e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool                    noiseReductionDirtyFlag;
395e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    QOMX_NOISEREDUCTIONTYPE noiseReduction;
396e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool                      imageEnhancementDirtyFlag;
397e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    QOMX_IMAGEENHANCEMENTTYPE imageEnhancement;
398e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} VdppExtensionData_t;
399e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
400e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class
401e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinclass omx_vdpp: public qc_omx_component
402e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{
403e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
404e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypublic:
405e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    omx_vdpp();  // constructor
406e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    virtual ~omx_vdpp();  // destructor
407e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
408e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static int async_message_process (void *context, void* message);
409e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    static void process_event_cb(void *ctxt,unsigned char id);
410e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct omx_event
411e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
412e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned param1;
413e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned param2;
414e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned id;
415e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    };
416e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct omx_cmd_queue
417e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
418e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE];
419e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned m_read;
420e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned m_write;
421e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned m_size;
422e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
423e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        omx_cmd_queue();
424e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        ~omx_cmd_queue();
425e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool insert_entry(unsigned p1, unsigned p2, unsigned id);
426e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id);
427e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        // get msgtype of the first ele from the queue
428e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        unsigned get_q_msg_type();
429e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
430e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    };
431e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
432e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_buffer(
433e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_HANDLETYPE hComp,
434e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE **bufferHdr,
435e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 port,
436e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR appData,
437e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32 bytes
438e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                  );
439e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
440e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
441e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp);
442e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
443e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_init(OMX_STRING role);
444e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
445e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_role_enum(
446e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_HANDLETYPE hComp,
447e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U8 *role,
448e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_U32 index
449e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
450e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
451e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE component_tunnel_request(
452e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE hComp,
453e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 port,
454e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_HANDLETYPE  peerComponent,
455e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_U32 peerPort,
456e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                            OMX_TUNNELSETUPTYPE *tunnelSetup
457e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                           );
458e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
459e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer(
460e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_HANDLETYPE hComp,
461e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_BUFFERHEADERTYPE *buffer
462e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    );
463e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
464e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
465e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
466e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer(
467e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_HANDLETYPE hComp,
468e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE *buffer
469e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   );
470e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
471e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
472e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_buffer(
473e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
474e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_U32 port,
475e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_BUFFERHEADERTYPE *buffer
476e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              );
477e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
478e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_component_version(
479e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_HANDLETYPE hComp,
480e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_STRING componentName,
481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *componentVersion,
482e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_VERSIONTYPE *specVersion,
483e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_UUIDTYPE *componentUUID
484e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        );
485e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
486e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_config(
487e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_HANDLETYPE hComp,
488e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_INDEXTYPE configIndex,
489e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                              OMX_PTR configData
490e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             );
491e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
492e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_extension_index(
493e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_HANDLETYPE hComp,
494e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_STRING paramName,
495e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      OMX_INDEXTYPE *indexType
496e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                      );
497e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
498e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp,
499e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
500e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
501e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
502e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp,
503e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                            OMX_STATETYPE *state);
504e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
505e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
506e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
507e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command(OMX_HANDLETYPE  hComp,
508e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_COMMANDTYPE cmd,
509e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_U32         param1,
510e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                               OMX_PTR         cmdData);
511e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
512e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
513e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE   hComp,
514e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_CALLBACKTYPE *callbacks,
515e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR          appData);
516e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
517e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp,
518e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_INDEXTYPE  configIndex,
519e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR        configData);
520e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
521e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp,
522e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_INDEXTYPE  paramIndex,
523e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR        paramData);
524e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
525e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE      hComp,
526e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_BUFFERHEADERTYPE **bufferHdr,
527e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              port,
528e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_PTR              appData,
529e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U32              bytes,
530e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                             OMX_U8               *buffer);
531e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
532826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE  use_input_heap_buffers(
533826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_HANDLETYPE            hComp,
534826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_BUFFERHEADERTYPE** bufferHdr,
535826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   port,
536826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_PTR                   appData,
537826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U32                   bytes,
538826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                          OMX_U8*                   buffer);
539e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
540e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE  use_input_buffers(
541e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                          OMX_HANDLETYPE            hComp,
542e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                          OMX_BUFFERHEADERTYPE** bufferHdr,
543e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                          OMX_U32                   port,
544e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                          OMX_PTR                   appData,
545e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                          OMX_U32                   bytes,
546e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                          OMX_U8*                   buffer);
547e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
548e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE     hComp,
549e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_BUFFERHEADERTYPE **bufferHdr,
550e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_U32              port,
551e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                OMX_PTR              appData,
552e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                void *               eglImage);
553e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void complete_pending_buffer_done_cbs();
555e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct video_vpu_context drv_ctx;
556e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int update_resolution(uint32_t width, uint32_t height, uint32_t stride, uint32_t scan_lines);
557e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
558e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_in;
559e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int  m_pipe_out;
560e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int  m_ctrl_in;
561e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int  m_ctrl_out;
562e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
563e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t msg_thread_id;
564e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_t async_thread_id;
565e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    omx_cmd_queue m_index_q_ftb;
566e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    omx_cmd_queue m_index_q_etb;
567e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool m_ar_callback_setup;
568e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyprivate:
569e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Bit Positions
570e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum flags_bit_positions
571e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
572e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to IDLE
573e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_IDLE_PENDING            =0x1,
574e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to LOADING
575e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_LOADING_PENDING         =0x2,
576e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // First  Buffer Pending
577e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_FIRST_BUFFER_PENDING    =0x3,
578e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Second Buffer Pending
579e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_SECOND_BUFFER_PENDING   =0x4,
580e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
581e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_ENABLE_PENDING    =0x5,
582e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Enable
583e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_ENABLE_PENDING   =0x6,
584e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
585e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_DISABLE_PENDING   =0x7,
586e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Defer transition to Disable
587e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_DISABLE_PENDING  =0x8,
588e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //defer flush notification
589e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_OUTPUT_FLUSH_PENDING    =0x9,
590e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_INPUT_FLUSH_PENDING    =0xA,
591e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PAUSE_PENDING          =0xB,
592826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_EXECUTE_PENDING        =0xC,
593826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD,
594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE
595e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
596e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
597e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Deferred callback identifiers
598e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    enum
599e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
600e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        //Event Callbacks from the vidpp component thread context
601e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT       = 0x1,
602e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        //Buffer Done callbacks from the vidpp component thread context
603e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2,
604e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        //Frame Done callbacks from the vidpp component thread context
605e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FRAME_DONE  = 0x3,
606e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        //Buffer Done callbacks from the vidpp component thread context
607e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FTB         = 0x4,
608e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        //Frame Done callbacks from the vidpp component thread context
609e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_ETB         = 0x5,
610e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Command
611e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_COMMAND     = 0x6,
612e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        //Push-Pending Buffers
613e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_PUSH_PENDING_BUFS    = 0x7,
614e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        // Empty Buffer Done callbacks
615e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EBD         = 0x8,
616e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        //Flush Event Callbacks from the vidpp component thread context
617e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_FLUSH       = 0x9,
618e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A,
619e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B,
620e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_FBD = 0xc,
621e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_START_DONE = 0xD,
622e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE,
623e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF,
624e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_STOP_DONE = 0x10,
625e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11,
626826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12,
627826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13,
628826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_EOS_DONE = 0x14,
629826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15,
630826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16,
631e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17,
632e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
633e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        // extensions
634e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        OMX_COMPONENT_GENERATE_ACTIVE_REGION_DETECTION_STATUS = 0x18,
635e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    };
636e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
637826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    enum v4l2_ports
638826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
639826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        CAPTURE_PORT,
640826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OUTPUT_PORT,
641826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        MAX_PORT
642826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
643e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
644826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
645826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_entry
646826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
647826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        OMX_TICKS timestamp;
648826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool valid;
649826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
650826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
651826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    struct ts_arr_list
652826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    {
653826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS];
654e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
655826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ts_arr_list();
656826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        ~ts_arr_list();
657e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
658826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool insert_ts(OMX_TICKS ts);
659826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool pop_min_ts(OMX_TICKS &ts);
660826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev        bool reset_ts_list();
661826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    };
662826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
663826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
664e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_done(void);
665e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_input_done(void);
666e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool allocate_output_done(void);
667e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
668e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
669e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr);
670826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_output_buffer_header();
671826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void free_input_buffer_header();
672e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
673e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE       hComp,
674e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_BUFFERHEADERTYPE **bufferHdr,
675e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              port,
676e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_PTR              appData,
677e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                             OMX_U32              bytes);
678e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
679e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE       hComp,
680e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE **bufferHdr,
681e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              port,
682e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_PTR              appData,
683e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_U32              bytes);
684e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
685e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE       hComp,
686e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_BUFFERHEADERTYPE **bufferHdr,
687e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32 port,OMX_PTR appData,
688e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                         OMX_U32              bytes);
689e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp,
690e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_BUFFERHEADERTYPE   **bufferHdr,
691e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                port,
692e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_PTR                appData,
693e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U32                bytes,
694e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                   OMX_U8                 *buffer);
695d3e4bca920af3d894529d2106b6645bc4a9b8268Praveen Chavan
696826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE allocate_output_headers();
697e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool execute_omx_flush(OMX_U32);
698826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_output_flush();
699826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool execute_input_flush();
700e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp,
701e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
702e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
703e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp,
704e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                    OMX_BUFFERHEADERTYPE * buffer);
705e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE       hComp,
706e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                        OMX_BUFFERHEADERTYPE *buffer);
707e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
708e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE       hComp,
709e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                       OMX_BUFFERHEADERTYPE *buffer);
710e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_done();
711e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
712e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_output_done();
713e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool release_input_done();
714e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE get_buffer_req(vdpp_allocatorproperty *buffer_prop);
715e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_ERRORTYPE set_buffer_req(vdpp_allocatorproperty *buffer_prop);
716826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE start_port_reconfig();
717e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
718e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int stream_off(OMX_U32 port);
719826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void adjust_timestamp(OMX_S64 &act_timestamp);
720826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    void set_frame_rate(OMX_S64 act_timestamp);
721826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
722826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn);
723e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size,
724e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                            OMX_U32 alignment);
725826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION
726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int alloc_map_ion_memory(OMX_U32 buffer_size,
727826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              OMX_U32 alignment, struct ion_allocation_data *alloc_data,
728826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev              struct ion_fd_data *fd_data,int flag);
729e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void free_ion_memory(struct vdpp_ion *buf_ion_info);
730826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
731826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
732e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
733e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE  hComp,
734e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_COMMANDTYPE cmd,
735e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_U32         param1,
736e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                                     OMX_PTR         cmdData);
737e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool post_event( unsigned int p1,
738e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                     unsigned int p2,
739e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                     unsigned int id
740e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                    );
741e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
742e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    void setFormatParams(int pixelFormat, double bytesperpixel[], unsigned char *planesCount);
743e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
744e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int openInput(const char* inputName);
745e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
746e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    /**
747e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * int clip2 - return an integer value in 2 to the nth power
748e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * legacy code from video decoder  (rounded up till 256)
749e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      *
750e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      */
751e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline int clip2(int x)
752e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
753e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x -1;
754e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 1;
755e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 2;
756e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 4;
757e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x | x >> 16;
758e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        x = x + 1;
759e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        return x;
760e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
761e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    /**
762e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * int paddedFrameWidth - return frame width in a multiple of 128 (rounded up).
763e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      *
764e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * @width - the original frame width.
765e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      */
766e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    inline int paddedFrameWidth128(int width)
767e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
768e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return  (((width + 127) / 128 )* 128);
769e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
770e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
771e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    /**
772e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * int paddedFrameWidth32 - return frame width in a multiple of 32 (rounded up).
773e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      *
774e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * @width - the original frame width.
775e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      */
776e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    inline int paddedFrameWidth32(int width)
777e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
778e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        return  (((width + 31) / 32 )* 32);
779e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
780e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
781e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    /**
782e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * int roundToNearestInt - round to nearest integer value.
783e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      *
784e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      * @value - the decimal value to be rounded to nearest integer.
785e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin      */
786e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    inline int roundToNearestInt(double value)
787e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
788e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	    if((ceil(value) - value) > 0.5)
789e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin		    return floor(value);
790e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	    else
791e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin		    return ceil(value);
792e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
793826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
794e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    inline void omx_report_error ()
795e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    {
796e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        if (m_cb.EventHandler && !m_error_propogated)
797e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        {
798826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev            ALOGE("\nERROR: Sending OMX_EventError to Client");
799e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_error_propogated = true;
800e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly            m_cb.EventHandler(&m_cmp,m_app_data,
801e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly                  OMX_EventError,OMX_ErrorHardware,0,NULL);
802e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly        }
803e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    }
804e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
805e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    inline void omx_report_unsupported_setting ()
806e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    {
807e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        if (m_cb.EventHandler && !m_error_propogated)
808e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        {
809e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            DEBUG_PRINT_ERROR(
810e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin               "\nERROR: Sending OMX_ErrorUnsupportedSetting to Client");
811e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            m_error_propogated = true;
812e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin            m_cb.EventHandler(&m_cmp,m_app_data,
813e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin                  OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL);
814e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        }
815e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    }
816e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
817826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
818826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data);
819826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
820e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#if defined (_ANDROID_ICS_)
821e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct nativebuffer{
822e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        native_handle_t *nativehandle;
823e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	private_handle_t *privatehandle;
824e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin        int inuse;
825e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    };
826e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS];
827e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
828e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
829e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
830e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
831e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*******************MEMBER VARIABLES *************************
832e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //*************************************************************
833e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    pthread_mutex_t       m_lock;
834e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //sem to handle the minimum procesing of commands
835e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    sem_t                 m_cmd_lock;
836e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool              m_error_propogated;
837e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
838e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // OMX State
839e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_STATETYPE m_state;
840e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application data
841e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PTR m_app_data;
842e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Application callbacks
843e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_CALLBACKTYPE m_cb;
844e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PRIORITYMGMTTYPE m_priority_mgm ;
845e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier;
846e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // fill this buffer queue
847e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_ftb_q;
848e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Command Q for rest of the events
849e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_cmd_q;
850e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue         m_etb_q;
851e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Input memory pointer
852e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_mem_ptr;
853e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Output memory pointer
854e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_out_mem_ptr;
855826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // number of input bitstream error frame count
856826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    unsigned int m_inp_err_count;
857826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
858826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    // Timestamp list
859826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    ts_arr_list           m_timestamp_list;
860826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
861e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
862e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_flush_progress;
863e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_flush_progress;
864e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool input_use_buffer;
865e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    bool output_use_buffer;
866826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool ouput_egl_buffers;
867826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_use_output_pmem;
868826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_mem_region_smi;
869826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_BOOL m_out_pvt_entry_pmem;
870826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
871e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_input_buffers;
872e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    int pending_output_buffers;
873e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
874e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int input_qbuf_count;
875e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int input_dqbuf_count;
876e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int output_qbuf_count;
877e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int output_dqbuf_count;
878e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
879e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef OUTPUT_BUFFER_LOG
880e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int output_buffer_write_counter;
881e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    int input_buffer_write_counter;
882e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif
883e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for output side
884e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_out_bm_count;
885e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // bitmask array size for input side
886e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_inp_bm_count;
887e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Input port Populated
888e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bPopulated;
889e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    //Output port Populated
890e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bPopulated;
891e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // encapsulate the waiting states.
892e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_flags;
893e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
894e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store I/P PORT state
895e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_inp_bEnabled;
896e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // store O/P PORT state
897e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BOOL m_out_bEnabled;
898826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 m_in_alloc_cnt;
899e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_U8                m_cRole[OMX_MAX_STRINGNAME_SIZE];
900e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    // Platform specific details
901e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_LIST      *m_platform_list;
902e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_ENTRY     *m_platform_entry;
903e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info;
904e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly
905e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    /*Variables for arbitrary Byte parsing support*/
906e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_pending_q;
907e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    omx_cmd_queue m_input_free_q;
908e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
909e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *psource_frame;
910e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *pdest_frame;
911e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  *m_inp_heap_ptr;
912e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    OMX_BUFFERHEADERTYPE  **m_phdr_pmem_ptr;
913e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly    unsigned int m_heap_inp_bm_count;
914826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
915826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_S64 prev_ts;
916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool rst_prev_ts;
917826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 frm_int;
918826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
919e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    struct vdpp_allocatorproperty op_buf_rcnfg;
920826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool in_reconfig;
921826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 client_extradata;
922826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_
923826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_timestamp;
924826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool perf_flag;
925826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_U32 proc_frms, latency;
926826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_enable_android_native_buffers;
927826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_use_android_native_buffers;
928826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_extradata;
929826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool m_debug_concealedmb;
930826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif
931826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
932826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    OMX_PARAM_PORTDEFINITIONTYPE m_port_def;
933e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin
934826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int capture_capability;
935826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    int output_capability;
936826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    bool streaming[MAX_PORT];
937e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    OMX_CONFIG_RECTTYPE rectangle;
938e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin	int prev_n_filled_len;
939b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan
940e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool msg_thread_created;
941e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool async_thread_created;
942b597ba5fbaa5e26b54c1e0b5382d3448aad82cbcPraveen Chavan
94340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George    unsigned int m_fill_output_msg;
944e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool client_set_fps;
945e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    bool interlace_user_flag;
946e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    // OMX extensions
947e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin    VdppExtensionData_t mExtensionData;
948e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly};
949e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif // __OMX_VDPP_H__
950