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