111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*-------------------------------------------------------------------------- 211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelCopyright (c) 2013-2014, The Linux Foundation. All rights reserved. 311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel Redistribution and use in source and binary forms, with or without 511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel modification, are permitted provided that the following conditions 611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel are met: 711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Redistributions of source code must retain the above copyright 911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel notice, this list of conditions and the following disclaimer. 1011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Redistributions in binary form must reproduce the above 1111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel copyright notice, this list of conditions and the following 1211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel disclaimer in the documentation and/or other materials provided 1311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel with the distribution. 1411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Neither the name of The Linux Foundation nor the names of its 1511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel contributors may be used to endorse or promote products derived 1611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel from this software without specific prior written permission. 1711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 1811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 2011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 2111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel--------------------------------------------------------------------------*/ 3011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifndef __OMX_VDPP_H__ 3111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define __OMX_VDPP_H__ 3211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*============================================================================ 3311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel O p e n M A X Component 3411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel Video Decoder 3511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*//** @file omx_vdpp.h 3711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel This module contains the class definition for openMAX video post-processing component. 3811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*//*========================================================================*/ 4011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 4111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 4211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// Include Files 4311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 4411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 4511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <stdlib.h> 4611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <stdio.h> 4711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <string.h> 4811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <inttypes.h> 4911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <cstddef> 5011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <math.h> 5111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef _ANDROID_ 5311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define LOG_TAG "OMX-VDPP" 5411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef USE_ION 5611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <linux/msm_ion.h> 5711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 5811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <binder/MemoryHeapBase.h> 5911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <ui/ANativeObjectBase.h> 6011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelextern "C"{ 6111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <utils/Log.h> 6211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} 6311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <linux/videodev2.h> 6411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <poll.h> 6511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define TIMEOUT 5000 6611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_LOW(x, ...) ALOGV("[Entry] "x, ##__VA_ARGS__) 6911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_HIGH(x, ...) ALOGV("[Step] "x, ##__VA_ARGS__) 7011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_ERROR(x, ...) ALOGE("[Error] "x, ##__VA_ARGS__) 7111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 7211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*#define DEBUG_PRINT_LOW(x, ...) 7311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_HIGH(x, ...) 7411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_ERROR(x, ...) */ 7511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 7611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#else //_ANDROID_ 7711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_LOW printf 7811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_HIGH printf 7911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DEBUG_PRINT_ERROR printf 8011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif // _ANDROID_ 8111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 8211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_) 8311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <media/hardware/HardwareAPI.h> 8411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 8511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 8611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <unistd.h> 8711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 8811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#if defined (_ANDROID_ICS_) 8911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <gralloc_priv.h> 9011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 9111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 9211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <pthread.h> 9311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifndef PC_DEBUG 9411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <semaphore.h> 9511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 9611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "OMX_Core.h" 9711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "OMX_QCOMExtns.h" 9811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "OMX_CoreExt.h" 9911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "OMX_IndexExt.h" 10011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "qc_omx_component.h" 10111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <linux/android_pmem.h> 10211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <dlfcn.h> 10311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 10411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <media/msm_vpu.h> 10511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelextern "C" { 10611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_API void * get_omx_component_factory_fn(void); //used by qc_omx_core 10711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} 10811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 10911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef _ANDROID_ 11011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel using namespace android; 11111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif // _ANDROID_ 11211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 11311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// Module specific globals 11411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 11511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_SPEC_VERSION 0x00000101 11611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 11711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// #define OUTPUT_BUFFER_LOG 1 11811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// #define INPUT_BUFFER_LOG 1 11911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 12011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// Macros 12111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 12211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\ 12311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel (unsigned) bufHdr,\ 12411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\ 12511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\ 12611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp) 12711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 12811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// BitMask Management logic 12911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITS_PER_BYTE 32 13011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE) 13111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE) 13211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE)) 13311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 13411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel &= ~(BITMASK_FLAG(mIndex)) 13511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_SET(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 13611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel |= BITMASK_FLAG(mIndex) 13711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 13811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel & BITMASK_FLAG(mIndex)) 13911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 14011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel & BITMASK_FLAG(mIndex)) == 0x0) 14111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 14211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel & BITMASK_FLAG(mIndex)) 14311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 14411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel & BITMASK_FLAG(mIndex)) == 0x0) 14511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 14611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_CONTROL_CMDQ_SIZE 200//100 14711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_QCIF_HEIGHT 144 14811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_QCIF_WIDTH 176 14911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_VGA_HEIGHT 480 15011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_VGA_WIDTH 640 15111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_WVGA_HEIGHT 480 15211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_CORE_WVGA_WIDTH 800 15311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 15411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef _ANDROID_ 15511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32 15611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 15711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 15811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_FRAMEINFO_EXTRADATA 0x00010000 15911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_INTERLACE_EXTRADATA 0x00020000 16011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_TIMEINFO_EXTRADATA 0x00040000 16111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_PORTDEF_EXTRADATA 0x00080000 16211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_EXTNUSER_EXTRADATA 0x00100000 16311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define DRIVER_EXTRADATA_MASK 0x0000FFFF 16411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 16511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 16611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3)) 16711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 16811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3)) 16911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 17011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3)) 17111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 17211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VALID_TS(ts) ((ts < LLONG_MAX)? true : false) 17311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 17411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* STATUS CODES */ 17511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Base value for status codes */ 17611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_BASE 0x40000000 17711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Success */ 17811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_SUCCESS (VDPP_S_BASE) 17911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* General failure */ 18011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_EFAIL (VDPP_S_BASE + 1) 18111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Fatal irrecoverable failure. Need to tear down session. */ 18211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_EFATAL (VDPP_S_BASE + 2) 18311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Error detected in the passed parameters */ 18411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_EBADPARAM (VDPP_S_BASE + 3) 18511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Command called in invalid state. */ 18611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_EINVALSTATE (VDPP_S_BASE + 4) 18711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /* Insufficient OS resources - thread, memory etc. */ 18811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ENOSWRES (VDPP_S_BASE + 5) 18911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /* Insufficient HW resources - core capacity maxed out. */ 19011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ENOHWRES (VDPP_S_BASE + 6) 19111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Invalid command called */ 19211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_EINVALCMD (VDPP_S_BASE + 7) 19311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Command timeout. */ 19411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ETIMEOUT (VDPP_S_BASE + 8) 19511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Pre-requirement is not met for API. */ 19611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ENOPREREQ (VDPP_S_BASE + 9) 19711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Command queue is full. */ 19811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ECMDQFULL (VDPP_S_BASE + 10) 19911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Command is not supported by this driver */ 20011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ENOTSUPP (VDPP_S_BASE + 11) 20111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Command is not implemented by thedriver. */ 20211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_ENOTIMPL (VDPP_S_BASE + 12) 20311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Command is not implemented by the driver. */ 20411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_BUSY (VDPP_S_BASE + 13) 20511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_S_INPUT_BITSTREAM_ERR (VDPP_S_BASE + 14) 20611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 20711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_INTF_VER 1 20811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_BASE 0x0000000 20911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Codes to identify asynchronous message responses and events that driver 21011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel wants to communicate to the app.*/ 21111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_INVALID (VDPP_MSG_BASE + 0) 21211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_INPUT_BUFFER_DONE (VDPP_MSG_BASE + 1) 21311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_OUTPUT_BUFFER_DONE (VDPP_MSG_BASE + 2) 21411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_INPUT_FLUSHED (VDPP_MSG_BASE + 3) 21511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_OUTPUT_FLUSHED (VDPP_MSG_BASE + 4) 21611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_FLUSH_INPUT_DONE (VDPP_MSG_BASE + 5) 21711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_FLUSH_OUTPUT_DONE (VDPP_MSG_BASE + 6) 21811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_START_DONE (VDPP_MSG_BASE + 7) 21911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_STOP_DONE (VDPP_MSG_BASE + 8) 22011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_PAUSE_DONE (VDPP_MSG_BASE + 9) 22111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_RESUME_DONE (VDPP_MSG_BASE + 10) 22211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_RESP_RESOURCE_LOADED (VDPP_MSG_BASE + 11) 22311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_EVT_RESOURCES_LOST (VDPP_MSG_BASE + 12) 22411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_EVT_CONFIG_CHANGED (VDPP_MSG_BASE + 13) 22511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_EVT_HW_ERROR (VDPP_MSG_BASE + 14) 22611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_EVT_INFO_CONFIG_CHANGED (VDPP_MSG_BASE + 15) 22711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_EVT_INFO_FIELD_DROPPED (VDPP_MSG_BASE + 16) 22811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 22911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_MSG_EVT_ACTIVE_REGION_DETECTION_STATUS (VDPP_MSG_BASE + 17) 23011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 23111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 23211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VP_INPUT_BUFFER_COUNT_INTERLACE 4 23311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VP_OUTPUT_BUFFER_COUNT 4 23411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 23511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define VDPP_SESSION 1 23611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel//#define STUB_VPU 1 23711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA) 23811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 23911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelenum port_indexes 24011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 24111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_CORE_INPUT_PORT_INDEX =0, 24211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_CORE_OUTPUT_PORT_INDEX =1 24311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 24411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef USE_ION 24511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_ion 24611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 24711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int ion_device_fd; 24811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct ion_fd_data fd_ion_data; 24911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct ion_allocation_data ion_alloc_data; 25011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 25111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 25211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 25311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct extradata_buffer_info { 25411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int buffer_size; 25511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel char* uaddr; 25611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int count; 25711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int size; 25811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef USE_ION 25911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_ion ion; 26011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 26111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 26211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 26311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_picsize { 26411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t frame_width; 26511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t frame_height; 26611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t stride; 26711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t scan_lines; 26811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 26911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 27011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelenum vdpp_interlaced_format { 27111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel VDPP_InterlaceFrameProgressive = 0x1, 27211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel VDPP_InterlaceInterleaveFrameTopFieldFirst = 0x2, 27311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel VDPP_InterlaceInterleaveFrameBottomFieldFirst = 0x4 27411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 27511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 27611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelenum vdpp_buffer { 27711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel VDPP_BUFFER_TYPE_INPUT, 27811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel VDPP_BUFFER_TYPE_OUTPUT 27911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 28011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 28111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_allocatorproperty { 28211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel enum vdpp_buffer buffer_type; 28311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t mincount; 28411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t maxcount; 28511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t actualcount; 28611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t buffer_size; 28711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t alignment; 28811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t buf_poolid; 28911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t frame_size; 29011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 29111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 29211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_bufferpayload { 29311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *bufferaddr; 29411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t buffer_len; 29511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int pmem_fd; 29611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t offset; 29711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t mmaped_size; 29811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 29911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 30011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_framesize { 30111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t left; 30211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t top; 30311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t right; 30411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t bottom; 30511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 30611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 30711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_setbuffer_cmd { 30811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel enum vdpp_buffer buffer_type; 30911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_bufferpayload buffer; 31011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 31111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 31211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_output_frameinfo { 31311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *bufferaddr; 31411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t offset; 31511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t len; 31611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t flags; 31711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int64_t time_stamp; 31811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *client_data; 31911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_framesize framesize; 32011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 32111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 32211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 32311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelunion vdpp_msgdata { 32411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct v4l2_rect ar_result; 32511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_output_frameinfo output_frame; 32611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void *input_frame_clientdata; 32711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 32811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 32911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_msginfo { 33011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t status_code; 33111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t msgcode; 33211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel union vdpp_msgdata msgdata; 33311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t msgdatasize; 33411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 33511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 33611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct vdpp_framerate { 33711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned long fps_denominator; 33811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned long fps_numerator; 33911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 34011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 34111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef STUB_VPU 34211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct vcap_etb_ftb_info 34311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 34411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int etb_cnt; // only simulate 1-to-1 34511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel __u32 etb_index; 34611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t etb_len; 34711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int ftb_cnt; 34811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel __u32 ftb_index; 34911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel size_t ftb_len; 35011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}vcap_etb_ftb_info; 35111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 35211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 35311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelstruct video_vpu_context 35411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 35511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int video_vpu_fd; 35611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel uint32_t output_format; 35711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel enum v4l2_field interlace; 35811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_picsize video_resolution_input; 35911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_picsize video_resolution_output; 36011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_allocatorproperty ip_buf; 36111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_allocatorproperty op_buf; 36211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_bufferpayload *ptr_inputbuffer; 36311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_bufferpayload *ptr_outputbuffer; 36411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_output_frameinfo *ptr_respbuffer; 36511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef USE_ION 36611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_ion *ip_buf_ion_info; 36711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_ion *op_buf_ion_info; 36811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 36911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_framerate frame_rate; 37011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool timestamp_adjust; 37111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel char kind[128]; 37211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct extradata_buffer_info extradata_info; 37311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int input_num_planes; 37411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int output_num_planes; 37511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel double input_bytesperpixel[2]; 37611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel double output_bytesperpixel[2]; 37711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int sessionsSupported; 37811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int sessionAttached; 37911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef STUB_VPU 38011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool thread_exit; 38111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel vcap_etb_ftb_info etb_ftb_info; 38211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel sem_t async_lock; 38311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 38411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 38511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 38611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct _VdppExtensionData_t 38711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 38811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool activeRegionDetectionDirtyFlag; 38911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel QOMX_ACTIVEREGIONDETECTIONTYPE activeRegionDetection; 39011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool activeRegionDetectionStatusDirtyFlag; 39111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel QOMX_ACTIVEREGIONDETECTION_STATUSTYPE activeRegionDetectionStatus; 39211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool scalingModeDirtyFlag; 39311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel QOMX_SCALINGMODETYPE scalingMode; 39411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool noiseReductionDirtyFlag; 39511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel QOMX_NOISEREDUCTIONTYPE noiseReduction; 39611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool imageEnhancementDirtyFlag; 39711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel QOMX_IMAGEENHANCEMENTTYPE imageEnhancement; 39811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} VdppExtensionData_t; 39911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 40011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// OMX video decoder class 40111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelclass omx_vdpp: public qc_omx_component 40211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 40311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 40411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelpublic: 40511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_vdpp(); // constructor 40611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual ~omx_vdpp(); // destructor 40711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 40811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel static int async_message_process (void *context, void* message); 40911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel static void process_event_cb(void *ctxt,unsigned char id); 41011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct omx_event 41111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 41211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned param1; 41311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned param2; 41411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned id; 41511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 41611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct omx_cmd_queue 41711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 41811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE]; 41911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned m_read; 42011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned m_write; 42111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned m_size; 42211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 42311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue(); 42411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ~omx_cmd_queue(); 42511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool insert_entry(unsigned p1, unsigned p2, unsigned id); 42611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id); 42711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // get msgtype of the first ele from the queue 42811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned get_q_msg_type(); 42911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 43011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 43111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 43211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE allocate_buffer( 43311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 43411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 43511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 43611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 43711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes 43811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 43911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 44011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 44111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp); 44211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 44311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_init(OMX_STRING role); 44411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 44511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_role_enum( 44611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 44711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8 *role, 44811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 index 44911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 45011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 45111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_tunnel_request( 45211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 45311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 45411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE peerComponent, 45511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 peerPort, 45611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_TUNNELSETUPTYPE *tunnelSetup 45711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 45811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 45911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE empty_this_buffer( 46011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 46111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *buffer 46211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 46311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 46411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 46511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 46611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE fill_this_buffer( 46711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 46811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *buffer 46911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 47011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 47111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 47211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE free_buffer( 47311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 47411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 47511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *buffer 47611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 47711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 47811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_component_version( 47911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 48011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STRING componentName, 48111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_VERSIONTYPE *componentVersion, 48211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_VERSIONTYPE *specVersion, 48311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_UUIDTYPE *componentUUID 48411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 48511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 48611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_config( 48711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 48811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE configIndex, 48911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR configData 49011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 49111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 49211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_extension_index( 49311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 49411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STRING paramName, 49511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE *indexType 49611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 49711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 49811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp, 49911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE paramIndex, 50011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR paramData); 50111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 50211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp, 50311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STATETYPE *state); 50411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 50511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 50611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 50711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE send_command(OMX_HANDLETYPE hComp, 50811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMMANDTYPE cmd, 50911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 param1, 51011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR cmdData); 51111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 51211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 51311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE hComp, 51411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_CALLBACKTYPE *callbacks, 51511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData); 51611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 51711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp, 51811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE configIndex, 51911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR configData); 52011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 52111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp, 52211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE paramIndex, 52311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR paramData); 52411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 52511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE hComp, 52611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 52711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 52811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 52911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes, 53011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8 *buffer); 53111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 53211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_input_heap_buffers( 53311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 53411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE** bufferHdr, 53511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 53611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 53711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes, 53811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8* buffer); 53911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 54011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_input_buffers( 54111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE hComp, 54211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE** bufferHdr, 54311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 54411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 54511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes, 54611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8* buffer); 54711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 54811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE hComp, 54911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 55011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 55111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 55211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void * eglImage); 55311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 55411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void complete_pending_buffer_done_cbs(); 55511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct video_vpu_context drv_ctx; 55611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int update_resolution(uint32_t width, uint32_t height, uint32_t stride, uint32_t scan_lines); 55711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 55811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int m_pipe_in; 55911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int m_pipe_out; 56011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int m_ctrl_in; 56111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int m_ctrl_out; 56211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 56311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel pthread_t msg_thread_id; 56411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel pthread_t async_thread_id; 56511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_index_q_ftb; 56611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_index_q_etb; 56711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_ar_callback_setup; 56811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelprivate: 56911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Bit Positions 57011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel enum flags_bit_positions 57111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 57211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Defer transition to IDLE 57311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_IDLE_PENDING =0x1, 57411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Defer transition to LOADING 57511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_LOADING_PENDING =0x2, 57611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // First Buffer Pending 57711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_FIRST_BUFFER_PENDING =0x3, 57811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Second Buffer Pending 57911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_SECOND_BUFFER_PENDING =0x4, 58011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Defer transition to Enable 58111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_INPUT_ENABLE_PENDING =0x5, 58211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Defer transition to Enable 58311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_OUTPUT_ENABLE_PENDING =0x6, 58411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Defer transition to Disable 58511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_INPUT_DISABLE_PENDING =0x7, 58611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Defer transition to Disable 58711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_OUTPUT_DISABLE_PENDING =0x8, 58811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //defer flush notification 58911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_OUTPUT_FLUSH_PENDING =0x9, 59011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_INPUT_FLUSH_PENDING =0xA, 59111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_PAUSE_PENDING =0xB, 59211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_EXECUTE_PENDING =0xC, 59311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD, 59411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE 59511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 59611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 59711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Deferred callback identifiers 59811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel enum 59911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 60011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Event Callbacks from the vidpp component thread context 60111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_EVENT = 0x1, 60211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Buffer Done callbacks from the vidpp component thread context 60311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2, 60411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Frame Done callbacks from the vidpp component thread context 60511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_FRAME_DONE = 0x3, 60611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Buffer Done callbacks from the vidpp component thread context 60711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_FTB = 0x4, 60811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Frame Done callbacks from the vidpp component thread context 60911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_ETB = 0x5, 61011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Command 61111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_COMMAND = 0x6, 61211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Push-Pending Buffers 61311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_PUSH_PENDING_BUFS = 0x7, 61411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Empty Buffer Done callbacks 61511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_EBD = 0x8, 61611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Flush Event Callbacks from the vidpp component thread context 61711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_EVENT_FLUSH = 0x9, 61811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A, 61911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B, 62011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_FBD = 0xc, 62111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_START_DONE = 0xD, 62211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE, 62311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF, 62411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_STOP_DONE = 0x10, 62511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11, 62611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12, 62711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13, 62811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_EOS_DONE = 0x14, 62911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15, 63011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16, 63111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17, 63211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 63311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // extensions 63411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENT_GENERATE_ACTIVE_REGION_DETECTION_STATUS = 0x18, 63511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 63611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 63711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel enum v4l2_ports 63811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 63911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel CAPTURE_PORT, 64011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OUTPUT_PORT, 64111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel MAX_PORT 64211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 64311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 64411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef _ANDROID_ 64511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct ts_entry 64611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 64711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_TICKS timestamp; 64811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool valid; 64911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 65011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 65111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct ts_arr_list 65211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 65311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS]; 65411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 65511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ts_arr_list(); 65611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ~ts_arr_list(); 65711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 65811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool insert_ts(OMX_TICKS ts); 65911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool pop_min_ts(OMX_TICKS &ts); 66011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool reset_ts_list(); 66111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 66211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 66311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 66411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool allocate_done(void); 66511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool allocate_input_done(void); 66611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool allocate_output_done(void); 66711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 66811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 66911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 67011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void free_output_buffer_header(); 67111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void free_input_buffer_header(); 67211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 67311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE hComp, 67411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 67511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 67611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 67711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes); 67811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 67911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE hComp, 68011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 68111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 68211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 68311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes); 68411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 68511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE hComp, 68611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 68711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port,OMX_PTR appData, 68811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes); 68911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp, 69011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **bufferHdr, 69111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 69211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR appData, 69311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes, 69411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8 *buffer); 69511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 69611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE allocate_output_headers(); 69711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool execute_omx_flush(OMX_U32); 69811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool execute_output_flush(); 69911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool execute_input_flush(); 70011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp, 70111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE * buffer); 70211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 70311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp, 70411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE * buffer); 70511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp, 70611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *buffer); 70711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 70811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp, 70911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *buffer); 71011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool release_done(); 71111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 71211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool release_output_done(); 71311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool release_input_done(); 71411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_buffer_req(vdpp_allocatorproperty *buffer_prop); 71511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_buffer_req(vdpp_allocatorproperty *buffer_prop); 71611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE start_port_reconfig(); 71711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 71811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int stream_off(OMX_U32 port); 71911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void adjust_timestamp(OMX_S64 &act_timestamp); 72011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void set_frame_rate(OMX_S64 act_timestamp); 72111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true); 72211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn); 72311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size, 72411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 alignment); 72511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef USE_ION 72611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int alloc_map_ion_memory(OMX_U32 buffer_size, 72711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 alignment, struct ion_allocation_data *alloc_data, 72811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct ion_fd_data *fd_data,int flag); 72911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void free_ion_memory(struct vdpp_ion *buf_ion_info); 73011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 73111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 73211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 73311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE hComp, 73411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMMANDTYPE cmd, 73511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 param1, 73611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR cmdData); 73711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool post_event( unsigned int p1, 73811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int p2, 73911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int id 74011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ); 74111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 74211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void setFormatParams(int pixelFormat, double bytesperpixel[], unsigned char *planesCount); 74311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 74411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int openInput(const char* inputName); 74511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 74611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /** 74711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * int clip2 - return an integer value in 2 to the nth power 74811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * legacy code from video decoder (rounded up till 256) 74911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 75011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */ 75111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel inline int clip2(int x) 75211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 75311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel x = x -1; 75411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel x = x | x >> 1; 75511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel x = x | x >> 2; 75611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel x = x | x >> 4; 75711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel x = x | x >> 16; 75811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel x = x + 1; 75911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel return x; 76011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 76111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /** 76211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * int paddedFrameWidth - return frame width in a multiple of 128 (rounded up). 76311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 76411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @width - the original frame width. 76511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */ 76611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel inline int paddedFrameWidth128(int width) 76711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 76811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel return (((width + 127) / 128 )* 128); 76911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 77011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 77111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /** 77211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * int paddedFrameWidth32 - return frame width in a multiple of 32 (rounded up). 77311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 77411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @width - the original frame width. 77511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */ 77611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel inline int paddedFrameWidth32(int width) 77711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 77811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel return (((width + 31) / 32 )* 32); 77911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 78011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 78111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /** 78211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * int roundToNearestInt - round to nearest integer value. 78311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * 78411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @value - the decimal value to be rounded to nearest integer. 78511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */ 78611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel inline int roundToNearestInt(double value) 78711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 78811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel if((ceil(value) - value) > 0.5) 78911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel return floor(value); 79011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel else 79111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel return ceil(value); 79211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 79311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 79411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel inline void omx_report_error () 79511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 79611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel if (m_cb.EventHandler && !m_error_propogated) 79711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 79811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ALOGE("\nERROR: Sending OMX_EventError to Client"); 79911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel m_error_propogated = true; 80011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel m_cb.EventHandler(&m_cmp,m_app_data, 80111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_EventError,OMX_ErrorHardware,0,NULL); 80211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 80311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 80411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 80511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel inline void omx_report_unsupported_setting () 80611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 80711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel if (m_cb.EventHandler && !m_error_propogated) 80811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel { 80911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel DEBUG_PRINT_ERROR( 81011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel "\nERROR: Sending OMX_ErrorUnsupportedSetting to Client"); 81111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel m_error_propogated = true; 81211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel m_cb.EventHandler(&m_cmp,m_app_data, 81311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL); 81411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 81511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel } 81611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 81711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_) 81811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data); 81911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 82011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#if defined (_ANDROID_ICS_) 82111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct nativebuffer{ 82211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel native_handle_t *nativehandle; 82311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel private_handle_t *privatehandle; 82411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int inuse; 82511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel }; 82611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS]; 82711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 82811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 82911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 83011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //************************************************************* 83111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //*******************MEMBER VARIABLES ************************* 83211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //************************************************************* 83311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel pthread_mutex_t m_lock; 83411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //sem to handle the minimum procesing of commands 83511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel sem_t m_cmd_lock; 83611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_error_propogated; 83711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 83811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // OMX State 83911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STATETYPE m_state; 84011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Application data 84111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR m_app_data; 84211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Application callbacks 84311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_CALLBACKTYPE m_cb; 84411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PRIORITYMGMTTYPE m_priority_mgm ; 84511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier; 84611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // fill this buffer queue 84711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_ftb_q; 84811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Command Q for rest of the events 84911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_cmd_q; 85011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_etb_q; 85111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Input memory pointer 85211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *m_inp_mem_ptr; 85311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Output memory pointer 85411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *m_out_mem_ptr; 85511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // number of input bitstream error frame count 85611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int m_inp_err_count; 85711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef _ANDROID_ 85811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Timestamp list 85911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel ts_arr_list m_timestamp_list; 86011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 86111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 86211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool input_flush_progress; 86311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool output_flush_progress; 86411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool input_use_buffer; 86511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool output_use_buffer; 86611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool ouput_egl_buffers; 86711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_use_output_pmem; 86811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_out_mem_region_smi; 86911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_out_pvt_entry_pmem; 87011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 87111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int pending_input_buffers; 87211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int pending_output_buffers; 87311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 87411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int input_qbuf_count; 87511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int input_dqbuf_count; 87611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int output_qbuf_count; 87711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int output_dqbuf_count; 87811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 87911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef OUTPUT_BUFFER_LOG 88011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int output_buffer_write_counter; 88111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int input_buffer_write_counter; 88211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 88311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // bitmask array size for output side 88411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int m_out_bm_count; 88511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // bitmask array size for input side 88611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int m_inp_bm_count; 88711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Input port Populated 88811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_inp_bPopulated; 88911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel //Output port Populated 89011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_out_bPopulated; 89111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // encapsulate the waiting states. 89211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int m_flags; 89311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 89411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // store I/P PORT state 89511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_inp_bEnabled; 89611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // store O/P PORT state 89711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BOOL m_out_bEnabled; 89811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 m_in_alloc_cnt; 89911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8 m_cRole[OMX_MAX_STRINGNAME_SIZE]; 90011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Platform specific details 90111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_QCOM_PLATFORM_PRIVATE_LIST *m_platform_list; 90211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_QCOM_PLATFORM_PRIVATE_ENTRY *m_platform_entry; 90311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info; 90411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 90511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /*Variables for arbitrary Byte parsing support*/ 90611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_input_pending_q; 90711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel omx_cmd_queue m_input_free_q; 90811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 90911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *psource_frame; 91011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *pdest_frame; 91111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE *m_inp_heap_ptr; 91211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE **m_phdr_pmem_ptr; 91311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int m_heap_inp_bm_count; 91411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 91511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_S64 prev_ts; 91611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool rst_prev_ts; 91711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 frm_int; 91811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 91911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel struct vdpp_allocatorproperty op_buf_rcnfg; 92011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool in_reconfig; 92111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 client_extradata; 92211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef _ANDROID_ 92311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_debug_timestamp; 92411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool perf_flag; 92511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 proc_frms, latency; 92611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_enable_android_native_buffers; 92711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_use_android_native_buffers; 92811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_debug_extradata; 92911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool m_debug_concealedmb; 93011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif 93111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 93211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PARAM_PORTDEFINITIONTYPE m_port_def; 93311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 93411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int capture_capability; 93511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int output_capability; 93611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool streaming[MAX_PORT]; 93711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_CONFIG_RECTTYPE rectangle; 93811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel int prev_n_filled_len; 93911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 94011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool msg_thread_created; 94111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool async_thread_created; 94211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 94311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel unsigned int m_fill_output_msg; 94411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool client_set_fps; 94511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel bool interlace_user_flag; 94611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // OMX extensions 94711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel VdppExtensionData_t mExtensionData; 94811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 94911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif // __OMX_VDPP_H__ 950