1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*-------------------------------------------------------------------------- 26eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCopyright (c) 2013, The Linux Foundation. All rights reserved. 36eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 46eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal Redistribution and use in source and binary forms, with or without 56eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal modification, are permitted provided that the following conditions 66eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal are met: 7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Redistributions of source code must retain the above copyright 96eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal notice, this list of conditions and the following disclaimer. 106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Redistributions in binary form must reproduce the above 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal copyright notice, this list of conditions and the following 126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal disclaimer in the documentation and/or other materials provided 136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal with the distribution. 146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation nor the names of its 156eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal contributors may be used to endorse or promote products derived 166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal from this software without specific prior written permission. 176eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 186eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 196eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 206eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 216eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 226eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 236eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 246eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 256eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 266eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 276eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 286eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/ 306eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef __OMX_VDEC_HEVC_H__ 316eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define __OMX_VDEC_HEVC_H__ 32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================ 33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly O p e n M A X Component 34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Video Decoder 35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 366eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal*//** @file comx_vdec_hevc.h 37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly This module contains the class definition for openMAX decoder component. 38e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//*========================================================================*/ 40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 41e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Include Files 43e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <stdlib.h> 46e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <stdio.h> 47826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <string.h> 48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <inttypes.h> 49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <cstddef> 50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x; 52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P 556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-720P" 566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#elif MAX_RES_1080P 576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-1080P" 586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC" 606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 63278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h> 64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 65e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h> 66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h> 6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanextern "C" { 686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <utils/Log.h> 69e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 70826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h> 71826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h> 726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include "hevc_utils.h" 73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000 74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 75e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_ 76e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 78826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_) 79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h> 80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h> 83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 84dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#if defined (_ANDROID_ICS_) 856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <gralloc_priv.h> 86dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#endif 87dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand 88e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h> 89e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG 90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h> 91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h" 93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h" 94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h" 95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h> 966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <media/msm_vidc.h> 97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h" 98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h" 100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h" 102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h" 10340f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h" 1048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h" 105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" { 10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_API void * get_omx_component_factory_fn(void); 107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanusing namespace android; 111826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase 11361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 114826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev public: 115826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev VideoHeap(int devicefd, size_t size, void* base,struct ion_handle *handle,int mapfd); 116826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev virtual ~VideoHeap() {} 117826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev private: 11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_ion_device_fd; 11961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_handle *m_ion_handle; 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 12140f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else 12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan// local pmem heap object 12361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase 12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 125e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly public: 126e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly VideoHeap(int fd, size_t size, void* base); 127e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly virtual ~VideoHeap() {} 12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 130e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_ 131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Module specific globals 133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION 0x00000101 135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Macros 139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\ 14161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned) bufHdr,\ 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\ 14361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\ 14461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp) 145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic 147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE 32 148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE) 149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE) 150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE)) 151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &= ~(BITMASK_FLAG(mIndex)) 153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan |= BITMASK_FLAG(mIndex) 155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) 157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan & BITMASK_FLAG(mIndex)) == 0x0) 159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) 161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan & BITMASK_FLAG(mIndex)) == 0x0) 163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE 100 165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT 144 166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH 176 167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT 480 168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH 640 169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT 480 170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH 800 171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 172826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16) 173826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 174826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 175826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32 176826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 177826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 178826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000 179826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000 180826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA 0x00040000 181826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA 0x00080000 1826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define OMX_EXTNUSER_EXTRADATA 0x00100000 183826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK 0x0000FFFF 184826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 185826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 18661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3)) 187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3)) 189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3)) 191826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 192826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// Define next macro with required values to enable default extradata, 193826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// VDEC_EXTRADATA_MB_ERROR_MAP 194826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// OMX_INTERLACE_EXTRADATA 195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// OMX_FRAMEINFO_EXTRADATA 196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// OMX_TIMEINFO_EXTRADATA 197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA) 199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 20061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanenum port_indexes { 201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev OMX_CORE_INPUT_PORT_INDEX =0, 202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev OMX_CORE_OUTPUT_PORT_INDEX =1 203826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 204826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct vdec_ion { 206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev int ion_device_fd; 207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct ion_fd_data fd_ion_data; 208826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct ion_allocation_data ion_alloc_data; 209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 210826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 211e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 2126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 2136eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info { 21461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int buffer_size; 21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan char* uaddr; 21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int count; 21761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 2186eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION 21961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_ion ion; 2206eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 2216eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}; 2226eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 2236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct video_driver_context { 225e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int video_driver_fd; 226e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vdec_codec decoder_format; 227e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vdec_output_fromat output_format; 228826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev enum vdec_interlaced_format interlace; 229826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev enum vdec_output_order picture_order; 230826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_picsize video_resolution; 231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_allocatorproperty ip_buf; 232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_allocatorproperty op_buf; 233e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_bufferpayload *ptr_inputbuffer; 234e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_bufferpayload *ptr_outputbuffer; 235e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_output_frameinfo *ptr_respbuffer; 236826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_ion *ip_buf_ion_info; 238826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_ion *op_buf_ion_info; 239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_ion h264_mv; 2406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal struct vdec_ion meta_buffer; 2416eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal struct vdec_ion meta_buffer_iommu; 242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 243826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_framerate frame_rate; 244826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev unsigned extradata; 245826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev bool timestamp_adjust; 246e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly char kind[128]; 247826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev bool idr_only_decoding; 248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev unsigned disable_dmx; 2496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct extradata_buffer_info extradata_info; 25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int num_planes; 2526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 253e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 254e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 255826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 256826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt; 257826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_ 258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class 260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component 261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{ 262e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_vdec(); // constructor 26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan virtual ~omx_vdec(); // destructor 266e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan static int async_message_process (void *context, void* message); 26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan static void process_event_cb(void *ctxt,unsigned char id); 269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_buffer( 27161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 27261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes 27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp); 28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 28161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_init(OMX_STRING role); 28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_role_enum( 28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *role, 28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 index 28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_tunnel_request( 29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE peerComponent, 29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 peerPort, 29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_TUNNELSETUPTYPE *tunnelSetup 29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_this_buffer( 29861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 29961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE fill_this_buffer( 30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 30661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_buffer( 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 31361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_component_version( 31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 31861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STRING componentName, 31961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VERSIONTYPE *componentVersion, 32061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VERSIONTYPE *specVersion, 32161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_UUIDTYPE *componentUUID 32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_config( 32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE configIndex, 32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR configData 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_extension_index( 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STRING paramName, 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE *indexType 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp, 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE paramIndex, 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR paramData); 33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp, 34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STATETYPE *state); 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE send_command(OMX_HANDLETYPE hComp, 34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMMANDTYPE cmd, 34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 param1, 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR cmdData); 34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE hComp, 35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CALLBACKTYPE *callbacks, 35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData); 35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp, 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE configIndex, 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR configData); 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp, 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE paramIndex, 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR paramData); 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE hComp, 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes, 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *buffer); 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_input_heap_buffers( 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE** bufferHdr, 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes, 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8* buffer); 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE hComp, 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void * eglImage); 38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void complete_pending_buffer_done_cbs(); 38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct video_driver_context drv_ctx; 3856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_extradata(); 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_extradata(); 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void update_resolution(int width, int height); 3896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_pipe_in; 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_pipe_out; 39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_t msg_thread_id; 39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_t async_thread_id; 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool is_component_secure(); 39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Bit Positions 39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum flags_bit_positions { 39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to IDLE 40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_IDLE_PENDING =0x1, 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to LOADING 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_LOADING_PENDING =0x2, 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // First Buffer Pending 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_FIRST_BUFFER_PENDING =0x3, 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Second Buffer Pending 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_SECOND_BUFFER_PENDING =0x4, 40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Enable 40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_ENABLE_PENDING =0x5, 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Enable 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_ENABLE_PENDING =0x6, 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Disable 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_DISABLE_PENDING =0x7, 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Disable 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_DISABLE_PENDING =0x8, 41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //defer flush notification 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_FLUSH_PENDING =0x9, 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_FLUSH_PENDING =0xA, 41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_PAUSE_PENDING =0xB, 41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_EXECUTE_PENDING =0xC, 42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD, 42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE 42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Deferred callback identifiers 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum { 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Event Callbacks from the vdec component thread context 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT = 0x1, 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Buffer Done callbacks from the vdec component thread context 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2, 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Frame Done callbacks from the vdec component thread context 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FRAME_DONE = 0x3, 43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Buffer Done callbacks from the vdec component thread context 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FTB = 0x4, 43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Frame Done callbacks from the vdec component thread context 43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_ETB = 0x5, 43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Command 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_COMMAND = 0x6, 43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Push-Pending Buffers 43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_PUSH_PENDING_BUFS = 0x7, 44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Empty Buffer Done callbacks 44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EBD = 0x8, 44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Flush Event Callbacks from the vdec component thread context 44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_FLUSH = 0x9, 44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A, 44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B, 44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FBD = 0xc, 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_START_DONE = 0xD, 44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE, 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF, 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_STOP_DONE = 0x10, 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11, 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12, 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13, 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EOS_DONE = 0x14, 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15, 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16, 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum vc1_profile_type { 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan VC1_SP_MP_RCV = 1, 46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan VC1_AP = 2 46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 463e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 4646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum v4l2_ports { 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan CAPTURE_PORT, 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OUTPUT_PORT, 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAX_PORT 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 470826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 471826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct omx_event { 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned param1; 47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned param2; 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned id; 47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct omx_cmd_queue { 47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE]; 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned m_read; 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned m_write; 48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned m_size; 48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue(); 48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~omx_cmd_queue(); 48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool insert_entry(unsigned p1, unsigned p2, unsigned id); 48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id); 48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // get msgtype of the first ele from the queue 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned get_q_msg_type(); 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 492e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 493826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ts_entry { 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_TICKS timestamp; 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool valid; 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ts_arr_list { 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS]; 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts_arr_list(); 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~ts_arr_list(); 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool insert_ts(OMX_TICKS ts); 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool pop_min_ts(OMX_TICKS &ts); 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool reset_ts_list(); 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 509826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 510826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct desc_buffer_hdr { 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *buf_addr; 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 desc_data_size; 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool allocate_done(void); 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool allocate_input_done(void); 51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool allocate_output_done(void); 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex, 52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *pmem_bufferHdr); 52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_output_buffer_header(); 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_input_buffer_header(); 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE hComp, 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE hComp, 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE hComp, 54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port,OMX_PTR appData, 54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp, 54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes, 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *buffer); 549826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType); 551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType); 554826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 555e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index); 55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_output_headers(); 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool execute_omx_flush(OMX_U32); 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool execute_output_flush(); 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool execute_input_flush(); 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp, 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE * buffer); 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp, 56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE * buffer); 56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp, 56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer); 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp, 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp); 57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp); 57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp); 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_hevc (OMX_HANDLETYPE hComp); 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp); 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp, 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer); 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool release_done(); 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool release_output_done(); 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool release_input_done(); 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop); 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop); 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE start_port_reconfig(); 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE update_picture_resolution(); 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int stream_off(OMX_U32 port); 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void adjust_timestamp(OMX_S64 &act_timestamp); 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void set_frame_rate(OMX_S64 act_timestamp); 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr); 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr); 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra); 5956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra, 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 interlaced_format_type); 59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal, 59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool enable = true); 60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra, 60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 num_conceal_mb, 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 picture_type, 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 frame_rate, 60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_vidc_panscan_window_payload *panscan_payload, 60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_aspectratioinfo *aspect_ratio_info); 6066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra, 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 interlaced_format_type, OMX_U32 buf_index); 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true); 6106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra, 61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 num_conceal_mb, 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 picture_type, 61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S64 timestamp, 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 frame_rate, 61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_aspectratioinfo *aspect_ratio_info); 61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info, 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info); 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra); 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn); 62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra); 62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn); 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user); 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void insert_demux_addr_offset(OMX_U32 address_offset); 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr); 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr); 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra); 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size, 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 alignment); 631826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int alloc_map_ion_memory(OMX_U32 buffer_size, 63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 alignment, struct ion_allocation_data *alloc_data, 63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_fd_data *fd_data,int flag); 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_ion_memory(struct vdec_ion *buf_ion_info); 636826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 637826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 638e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE hComp, 64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMMANDTYPE cmd, 64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 param1, 64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR cmdData); 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool post_event( unsigned int p1, 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int p2, 64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int id 64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline int clip2(int x) { 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x -1; 64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 1; 65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 2; 65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 4; 65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 16; 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x + 1; 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return x; 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 656e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 657826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE vdec_alloc_h264_mv(); 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void vdec_dealloc_h264_mv(); 66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE vdec_alloc_meta_buffers(); 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void vdec_dealloc_meta_buffers(); 662826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 663826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline void omx_report_error () { 66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_cb.EventHandler && !m_error_propogated) { 66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ALOGE("\nERROR: Sending OMX_EventError to Client"); 66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_error_propogated = true; 66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cb.EventHandler(&m_cmp,m_app_data, 66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError,OMX_ErrorHardware,0,NULL); 67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 671e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 672826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE createDivxDrmContext(); 674826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_ 675826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_) 67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data); 677826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 6786eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_ANDROID_ICS_) 67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct nativebuffer { 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan native_handle_t *nativehandle; 68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *privatehandle; 68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int inuse; 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS]; 6856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 6866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 687e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //************************************************************* 68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //*******************MEMBER VARIABLES ************************* 69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //************************************************************* 69161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_t m_lock; 69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_t c_lock; 69361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //sem to handle the minimum procesing of commands 69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_t m_cmd_lock; 69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_error_propogated; 69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // compression format 69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CODINGTYPE eCompressionFormat; 69861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX State 69961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STATETYPE m_state; 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Application data 70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR m_app_data; 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Application callbacks 70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CALLBACKTYPE m_cb; 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PRIORITYMGMTTYPE m_priority_mgm ; 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier; 70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // fill this buffer queue 70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_ftb_q; 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Command Q for rest of the events 70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_cmd_q; 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_etb_q; 71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Input memory pointer 71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *m_inp_mem_ptr; 71361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Output memory pointer 71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *m_out_mem_ptr; 71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // number of input bitstream error frame count 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_inp_err_count; 717826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Timestamp list 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts_arr_list m_timestamp_list; 720826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 721e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool input_flush_progress; 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool output_flush_progress; 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool input_use_buffer; 72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool output_use_buffer; 72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ouput_egl_buffers; 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_use_output_pmem; 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_mem_region_smi; 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_pvt_entry_pmem; 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pending_input_buffers; 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pending_output_buffers; 73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // bitmask array size for output side 73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_out_bm_count; 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // bitmask array size for input side 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_inp_bm_count; 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Input port Populated 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_inp_bPopulated; 73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Output port Populated 74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_bPopulated; 74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // encapsulate the waiting states. 74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_flags; 743e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 744e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Heap pointer to frame buffers 74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap { 74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sp<MemoryHeapBase> video_heap_ptr; 74861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap *m_heap_ptr; 75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_heap_count; 751e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_ 75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // store I/P PORT state 75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_inp_bEnabled; 75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // store O/P PORT state 75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_bEnabled; 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_in_alloc_cnt; 75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 m_cRole[OMX_MAX_STRINGNAME_SIZE]; 75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Platform specific details 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_LIST *m_platform_list; 76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_ENTRY *m_platform_entry; 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info; 76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // SPS+PPS sent as part of set_config 76361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VENDOR_EXTRADATATYPE m_vendor_config; 76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Variables for arbitrary Byte parsing support*/ 76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frame_parse m_frame_parser; 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_input_pending_q; 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_input_free_q; 76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool arbitrary_bytes; 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE h264_scratch; 77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *psource_frame; 77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *pdest_frame; 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *m_inp_heap_ptr; 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **m_phdr_pmem_ptr; 77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_heap_inp_bm_count; 77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type codec_type_parse; 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool first_frame_meta; 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned frame_count; 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned nal_count; 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned nal_length; 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool look_ahead_nal; 78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int first_frame; 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *first_buffer; 78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int first_frame_size; 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char m_hwdevice_name[80]; 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FILE *m_device_file_ptr; 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum vc1_profile_type m_vc1_profile; 78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S64 h264_last_au_ts; 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 h264_last_au_flags; 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_demux_offsets[8192]; 79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_demux_entries; 79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_disp_hor_size; 79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_disp_vert_size; 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S64 prev_ts; 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool rst_prev_ts; 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 frm_int; 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_allocatorproperty op_buf_rcnfg; 80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool in_reconfig; 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_NATIVE_WINDOWTYPE m_display_id; 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan h264_stream_parser *h264_parser; 80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 client_extradata; 804826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_debug_timestamp; 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool perf_flag; 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 proc_frms, latency; 80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan perf_metrics fps_metrics; 80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan perf_metrics dec_time; 81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_enable_android_native_buffers; 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_use_android_native_buffers; 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_debug_extradata; 81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_debug_concealedmb; 814826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MP4_Utils mp4_headerparser; 817826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 818826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct h264_mv_buffer { 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char* buffer; 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int count; 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd; 82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int offset; 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan h264_mv_buffer h264_mv_buff; 82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct meta_buffer { 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char* buffer; 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int count; 83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd; 83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd_iommu; 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int offset; 83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer meta_buff; 83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan extra_data_handler extra_data_handle; 838826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DivXDrmDecrypt* iDivXDrmDecrypt; 840826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_ 84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE m_port_def; 84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_time_stamp_reorder time_stamp_dts; 84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan desc_buffer_hdr *m_desc_buffer_ptr; 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool secure_mode; 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool external_meta_buffer; 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool external_meta_buffer_iommu; 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata; 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool codec_config_flag; 8496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int capture_capability; 85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int output_capability; 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool streaming[MAX_PORT]; 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_RECTTYPE rectangle; 854826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_power_hinted; 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE power_module_register(); 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE power_module_deregister(); 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool msg_thread_created; 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool async_thread_created; 86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_fill_output_msg; 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan class allocate_color_convert_buf 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocate_color_convert_buf(); 86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~allocate_color_convert_buf(); 86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void set_vdec_client(void *); 86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void update_client(); 86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format); 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format); 87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool update_buffer_req(); 87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool get_buffer_req(unsigned int &buffer_size); 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* get_il_buf_hdr(); 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr); 87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr); 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header); 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header); 87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp, 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData, 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MAX_COUNT 32 88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_vdec *omx; 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool enabled; 88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COLOR_FORMATTYPE ColorFormat; 88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void init_members(); 88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool color_convert_mode; 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ColorConvertFormat dest_format; 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan class omx_c2d_conv c2d; 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int allocated_count; 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int buffer_size_req; 89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int buffer_alignment_req; 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_LIST m_platform_list_client[MAX_COUNT]; 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_ENTRY m_platform_entry_client[MAX_COUNT]; 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT]; 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE m_out_mem_ptr_client[MAX_COUNT]; 8986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_ion op_buf_ion_info[MAX_COUNT]; 9006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *pmem_baseaddress[MAX_COUNT]; 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd[MAX_COUNT]; 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap { 90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sp<MemoryHeapBase> video_heap_ptr; 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap m_heap_ptr[MAX_COUNT]; 90740f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George }; 9086eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_MSM8960_) || defined (_MSM8974_) 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocate_color_convert_buf client_buffers; 9106eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan HEVC_Utils mHEVCutils; 912e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 913e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 9146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 915826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state { 91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_UNINIT_DONE = 0x0001, 91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_INIT, 91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_INIT_DONE, 91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_OPEN, 92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_OPEN_DONE, 92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_LOAD_RESOURCES, 92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_LOAD_RESOURCES_DONE, 92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_START, 92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_START_DONE, 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_STOP, 92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_STOP_DONE, 92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_RELEASE_RESOURCES, 92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_RELEASE_RESOURCES_DONE, 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CLOSE, 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CLOSE_DONE, 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_UNINIT, 932826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 933826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 934826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id { 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_DECODER_FLUSH_DONE = 0x11, 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_DECODER_EVENT_CHANGE, 937826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 938826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 9396eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif // _MSM8974_ 940826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 941e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__ 942