omx_vdec.h revision eb0227e4c228b54e9b56d3753054a8b3cc8f49ae
1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*-------------------------------------------------------------------------- 28767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanCopyright (c) 2010 - 2014, 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--------------------------------------------------------------------------*/ 30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef __OMX_VDEC_H__ 31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define __OMX_VDEC_H__ 32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================ 33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly O p e n M A X Component 34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Video Decoder 35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//** @file comx_vdec.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> 508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cutils/atomic.h> 51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevstatic ptrdiff_t x; 53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P 566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-720P" 576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#elif MAX_RES_1080P 586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC-1080P" 596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define LOG_TAG "OMX-VDEC" 616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 64278952ff92fab2da0c47b912daeb662130676be1Haynes Mathew George#include <linux/msm_ion.h> 6561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#include <binder/MemoryHeapIon.h> 6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan//#else 67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 68e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h> 69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <ui/ANativeObjectBase.h> 7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanextern "C" { 716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <utils/Log.h> 72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <linux/videodev2.h> 74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <poll.h> 758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "hevc_utils.h" 76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define TIMEOUT 5000 77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_ 78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_) 80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h> 81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <unistd.h> 84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 85dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#if defined (_ANDROID_ICS_) 866eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <gralloc_priv.h> 87dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#endif 88dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand 89e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h> 90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG 91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h> 92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h" 94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h" 95f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#include "OMX_VideoExt.h" 96eb0227e4c228b54e9b56d3753054a8b3cc8f49aePraveen Chavan#include "OMX_IndexExt.h" 97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h" 98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h> 996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#include <media/msm_vidc.h> 100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h" 101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "mp4_utils.h" 103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "extra_data_handler.h" 105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "ts_parser.h" 10640f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#include "vidc_color_converter.h" 1078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include "vidc_debug.h" 1088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _ANDROID_ 1098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cutils/properties.h> 1108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else 1118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define PROPERTY_VALUE_MAX 92 1128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" { 11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_API void * get_omx_component_factory_fn(void); 115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanusing namespace android; 119826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase 12161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev public: 123f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan VideoHeap(int devicefd, size_t size, void* base,ion_user_handle_t handle,int mapfd); 124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev virtual ~VideoHeap() {} 125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev private: 12661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_ion_device_fd; 127f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan ion_user_handle_t m_ion_handle; 12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 12940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George#else 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan// local pmem heap object 13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass VideoHeap : public MemoryHeapBase 13261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly public: 134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly VideoHeap(int fd, size_t size, void* base); 135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly virtual ~VideoHeap() {} 13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}; 137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_ 139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Module specific globals 141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION 0x00000101 143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 1448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan//PC:TODO------------ kernel update ---------- 1458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */ 1468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan//----------- 147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Macros 150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\ 15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned) bufHdr,\ 15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\ 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\ 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp) 156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic 158f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITS_PER_INDEX 64 159f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_INDEX - 1)/BITS_PER_INDEX) 160f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_INDEX) 161f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define BITMASK_FLAG(mIndex) ((uint64_t)1 << ((mIndex) % BITS_PER_INDEX)) 162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &= ~(BITMASK_FLAG(mIndex)) 164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 16561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan |= BITMASK_FLAG(mIndex) 166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) 168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan & BITMASK_FLAG(mIndex)) == 0x0) 170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) 172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan & BITMASK_FLAG(mIndex)) == 0x0) 174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE 100 176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT 144 177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH 176 178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT 480 179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH 640 180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT 480 181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH 800 182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 183826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DESC_BUFFER_SIZE (8192 * 16) 184826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 185826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 186826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define MAX_NUM_INPUT_OUTPUT_BUFFERS 32 187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 188826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1899157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#ifdef _ION_HEAP_MASK_COMPATIBILITY_WA 1909157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan #define ION_HEAP_MASK heap_mask 1919157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#else 1929157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan #define ION_HEAP_MASK heap_id_mask 1939157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan#endif 1949157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan 195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA 0x00010000 196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA 0x00020000 197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_TIMEINFO_EXTRADATA 0x00040000 198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA 0x00080000 1996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#define OMX_EXTNUSER_EXTRADATA 0x00100000 2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA 0x00200000 2018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA 0x00400000 2028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA 0x00800000 2038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA 0x01000000 204f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define OMX_MPEG2SEQDISP_EXTRADATA 0x02000000 205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define DRIVER_EXTRADATA_MASK 0x0000FFFF 206826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 207826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_INTERLACE_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sizeof(OMX_STREAMINTERLACEFORMAT) + 3)&(~3)) 209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_FRAMEINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sizeof(OMX_QCOM_EXTRADATA_FRAMEINFO) + 3)&(~3)) 211826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define OMX_PORTDEF_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sizeof(OMX_PARAM_PORTDEFINITIONTYPE) + 3)&(~3)) 2138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEDIMENSION_EXTRADATA_SIZE (sizeof(OMX_OTHER_EXTRADATATYPE) +\ 2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan sizeof(OMX_QCOM_EXTRADATA_FRAMEDIMENSION) + 3)&(~3) 2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_FRAMEPACK_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan sizeof(OMX_QCOM_FRAME_PACK_ARRANGEMENT) + 3)&(~3)) 2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_QP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan sizeof(OMX_QCOM_EXTRADATA_QP) + 3)&(~3)) 2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_BITSINFO_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan sizeof(OMX_QCOM_EXTRADATA_BITS_INFO) + 3)&(~3)) 221f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define OMX_MPEG2SEQDISP_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 222f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan sizeof(OMX_QCOM_EXTRADATA_MPEG2SEQDISPLAY) + 3)&(~3)) 2238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define OMX_USERDATA_EXTRADATA_SIZE ((sizeof(OMX_OTHER_EXTRADATATYPE) +\ 224f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan + 3)&(~3)) 225826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// Define next macro with required values to enable default extradata, 227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// VDEC_EXTRADATA_MB_ERROR_MAP 228826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// OMX_INTERLACE_EXTRADATA 229826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// OMX_FRAMEINFO_EXTRADATA 230826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev// OMX_TIMEINFO_EXTRADATA 231826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 232826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//#define DEFAULT_EXTRADATA (OMX_FRAMEINFO_EXTRADATA|OMX_INTERLACE_EXTRADATA) 233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanenum port_indexes { 235826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev OMX_CORE_INPUT_PORT_INDEX =0, 236826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev OMX_CORE_OUTPUT_PORT_INDEX =1 237826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 238826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 23961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct vdec_ion { 240826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev int ion_device_fd; 241826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct ion_fd_data fd_ion_data; 242826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct ion_allocation_data ion_alloc_data; 243826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 244826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 245e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 2466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 2476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct extradata_buffer_info { 2488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long buffer_size; 24961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan char* uaddr; 25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int count; 25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 2526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION 25361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_ion ion; 2546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 2556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}; 2566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 2576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanstruct video_driver_context { 259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int video_driver_fd; 260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vdec_codec decoder_format; 261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vdec_output_fromat output_format; 262826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev enum vdec_interlaced_format interlace; 263826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev enum vdec_output_order picture_order; 264f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan struct vdec_framesize frame_size; 265826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_picsize video_resolution; 266826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_allocatorproperty ip_buf; 267826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_allocatorproperty op_buf; 268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_bufferpayload *ptr_inputbuffer; 269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_bufferpayload *ptr_outputbuffer; 270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_output_frameinfo *ptr_respbuffer; 271826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 272826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_ion *ip_buf_ion_info; 273826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_ion *op_buf_ion_info; 274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_ion h264_mv; 2756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal struct vdec_ion meta_buffer; 2766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal struct vdec_ion meta_buffer_iommu; 277826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev struct vdec_framerate frame_rate; 279826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev unsigned extradata; 280826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev bool timestamp_adjust; 281e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly char kind[128]; 282826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev bool idr_only_decoding; 283826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev unsigned disable_dmx; 2846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct extradata_buffer_info extradata_info; 28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int num_planes; 2876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 288e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 289e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 290826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 291826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass DivXDrmDecrypt; 292826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_ 293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 2946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalstruct video_decoder_capability { 2956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int min_width; 2966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int max_width; 2976eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int min_height; 2986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal unsigned int max_height; 2996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal}; 300576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon 3018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanstruct debug_cap { 3028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool in_buffer_log; 3038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool out_buffer_log; 3048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char infile_name[PROPERTY_VALUE_MAX + 36]; 3058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char outfile_name[PROPERTY_VALUE_MAX + 36]; 3068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char log_loc[PROPERTY_VALUE_MAX]; 3078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan FILE *infile; 3088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan FILE *outfile; 3098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan}; 3108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 311576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menonstruct dynamic_buf_list { 312576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon OMX_U32 fd; 313576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon OMX_U32 dup_fd; 314576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon OMX_U32 offset; 315576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon OMX_U32 ref_count; 316576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon}; 317576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon 318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class 319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component 320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{ 321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 32261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_vdec(); // constructor 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan virtual ~omx_vdec(); // destructor 325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan static int async_message_process (void *context, void* message); 32761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan static void process_event_cb(void *ctxt,unsigned char id); 328e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_buffer( 33061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 336e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp); 33961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_init(OMX_STRING role); 34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_role_enum( 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *role, 34561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 index 34661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 34761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE component_tunnel_request( 34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE peerComponent, 35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 peerPort, 35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_TUNNELSETUPTYPE *tunnelSetup 35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_this_buffer( 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE fill_this_buffer( 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 36661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_buffer( 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_component_version( 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STRING componentName, 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VERSIONTYPE *componentVersion, 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VERSIONTYPE *specVersion, 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_UUIDTYPE *componentUUID 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_config( 38461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE configIndex, 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR configData 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_extension_index( 39061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STRING paramName, 39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE *indexType 39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp, 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE paramIndex, 39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR paramData); 39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp, 40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STATETYPE *state); 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE send_command(OMX_HANDLETYPE hComp, 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMMANDTYPE cmd, 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 param1, 40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR cmdData); 40861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE hComp, 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CALLBACKTYPE *callbacks, 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData); 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp, 41561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE configIndex, 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR configData); 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp, 41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INDEXTYPE paramIndex, 42061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR paramData); 42161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE hComp, 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes, 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *buffer); 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_input_heap_buffers( 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE** bufferHdr, 43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes, 43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8* buffer); 43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE hComp, 43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void * eglImage); 44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void complete_pending_buffer_done_cbs(); 44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct video_driver_context drv_ctx; 4446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_extradata(); 44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_extradata(); 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int update_resolution(int width, int height, int stride, int scan_lines); 44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE is_video_session_supported(); 4496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_pipe_in; 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int m_pipe_out; 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_t msg_thread_id; 45361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_t async_thread_id; 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool is_component_secure(); 455576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon void buf_ref_add(OMX_U32 fd, OMX_U32 offset); 456576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon void buf_ref_remove(OMX_U32 fd, OMX_U32 offset); 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Bit Positions 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum flags_bit_positions { 46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to IDLE 46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_IDLE_PENDING =0x1, 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to LOADING 46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_LOADING_PENDING =0x2, 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // First Buffer Pending 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_FIRST_BUFFER_PENDING =0x3, 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Second Buffer Pending 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_SECOND_BUFFER_PENDING =0x4, 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Enable 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_ENABLE_PENDING =0x5, 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Enable 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_ENABLE_PENDING =0x6, 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Disable 47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_DISABLE_PENDING =0x7, 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Defer transition to Disable 47661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_DISABLE_PENDING =0x8, 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //defer flush notification 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_FLUSH_PENDING =0x9, 47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_FLUSH_PENDING =0xA, 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_PAUSE_PENDING =0xB, 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_EXECUTE_PENDING =0xC, 48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_FLUSH_IN_DISABLE_PENDING =0xD, 483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_COMPONENT_DISABLE_OUTPUT_DEFERRED=0xE, 484f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_COMPONENT_FLUSH_DEFERRED = 0xF 48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Deferred callback identifiers 48861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum { 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Event Callbacks from the vdec component thread context 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT = 0x1, 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Buffer Done callbacks from the vdec component thread context 49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2, 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Frame Done callbacks from the vdec component thread context 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FRAME_DONE = 0x3, 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Buffer Done callbacks from the vdec component thread context 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FTB = 0x4, 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Frame Done callbacks from the vdec component thread context 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_ETB = 0x5, 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Command 50061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_COMMAND = 0x6, 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Push-Pending Buffers 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_PUSH_PENDING_BUFS = 0x7, 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Empty Buffer Done callbacks 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EBD = 0x8, 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Flush Event Callbacks from the vdec component thread context 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_FLUSH = 0x9, 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A, 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B, 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_FBD = 0xc, 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_START_DONE = 0xD, 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE, 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF, 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_STOP_DONE = 0x10, 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11, 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12, 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_PORT_RECONFIG = 0x13, 51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EOS_DONE = 0x14, 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_INFO_PORT_RECONFIG = 0x15, 51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_INFO_FIELD_DROPPED = 0x16, 52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING = 0x17, 521f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD = 0x18, 52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum vc1_profile_type { 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan VC1_SP_MP_RCV = 1, 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan VC1_AP = 2 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 528e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 5296eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum v4l2_ports { 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan CAPTURE_PORT, 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OUTPUT_PORT, 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAX_PORT 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 535826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 536826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct omx_event { 5388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long param1; 5398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long param2; 5408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long id; 54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct omx_cmd_queue { 54461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE]; 5458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long m_read; 5468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long m_write; 5478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long m_size; 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue(); 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~omx_cmd_queue(); 5518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool insert_entry(unsigned long p1, unsigned long p2, unsigned long id); 5528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool pop_entry(unsigned long *p1,unsigned long *p2, unsigned long *id); 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // get msgtype of the first ele from the queue 55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned get_q_msg_type(); 55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 557e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 558826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ts_entry { 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_TICKS timestamp; 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool valid; 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ts_arr_list { 56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts_entry m_ts_arr_list[MAX_NUM_INPUT_OUTPUT_BUFFERS]; 56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts_arr_list(); 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~ts_arr_list(); 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool insert_ts(OMX_TICKS ts); 57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool pop_min_ts(OMX_TICKS &ts); 57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool reset_ts_list(); 57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 574826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 575826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct desc_buffer_hdr { 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *buf_addr; 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 desc_data_size; 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool allocate_done(void); 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool allocate_input_done(void); 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool allocate_output_done(void); 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_input_buffer(unsigned int bufferindex, 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *pmem_bufferHdr); 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_output_buffer_header(); 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_input_buffer_header(); 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE hComp, 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE hComp, 59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE hComp, 60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port,OMX_PTR appData, 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp, 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 port, 61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes, 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *buffer); 614826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_supported_profile_level_for_720p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType); 616826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 617826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_supported_profile_level_for_1080p(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType); 619826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 620e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_desc_buffer(OMX_U32 index); 62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_output_headers(); 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool execute_omx_flush(OMX_U32); 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool execute_output_flush(); 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool execute_input_flush(); 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp, 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE * buffer); 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp, 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE * buffer); 63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp, 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer); 63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp, 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer 63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp); 63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp); 64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp); 6418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_ERRORTYPE push_input_hevc (OMX_HANDLETYPE hComp); 64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp); 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp, 64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *buffer); 64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool release_done(); 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool release_output_done(); 64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool release_input_done(); 65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE get_buffer_req(vdec_allocatorproperty *buffer_prop); 65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE set_buffer_req(vdec_allocatorproperty *buffer_prop); 65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE start_port_reconfig(); 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE update_picture_resolution(); 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int stream_off(OMX_U32 port); 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void adjust_timestamp(OMX_S64 &act_timestamp); 65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void set_frame_rate(OMX_S64 act_timestamp); 65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr); 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr); 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra); 6606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra, 6628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 interlaced_format_type, bool is_mbaff); 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool is_internal, 66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool enable = true); 66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra, 66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 num_conceal_mb, 66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 picture_type, 66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 frame_rate, 6698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_TICKS time_stamp, 67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct msm_vidc_panscan_window_payload *panscan_payload, 67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_aspectratioinfo *aspect_ratio_info); 6726eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra, 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 interlaced_format_type, OMX_U32 buf_index); 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true); 6766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra, 67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 num_conceal_mb, 67961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 picture_type, 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S64 timestamp, 68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 frame_rate, 68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_aspectratioinfo *aspect_ratio_info); 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void fill_aspect_ratio_info(struct vdec_aspectratioinfo *aspect_ratio_info, 68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_EXTRADATA_FRAMEINFO *frame_info); 68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_terminator_extradata(OMX_OTHER_EXTRADATATYPE *extra); 68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn); 68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_portdef_extradata(OMX_OTHER_EXTRADATATYPE *extra); 6888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void append_frame_dimension_extradata(OMX_OTHER_EXTRADATATYPE *extra); 68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_extn_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_extn); 69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void append_user_extradata(OMX_OTHER_EXTRADATATYPE *extra, OMX_OTHER_EXTRADATATYPE *p_user); 6918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void append_concealmb_extradata(OMX_OTHER_EXTRADATATYPE *extra, 6928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_OTHER_EXTRADATATYPE *p_concealmb, OMX_U8 *conceal_mb_data); 6938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void append_framepack_extradata(OMX_OTHER_EXTRADATATYPE *extra, 6948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload); 6958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void append_qp_extradata(OMX_OTHER_EXTRADATATYPE *extra, 6968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_vidc_frame_qp_payload *qp_payload); 6978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void append_bitsinfo_extradata(OMX_OTHER_EXTRADATATYPE *extra, 6988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct msm_vidc_frame_bits_info_payload *bits_payload); 699f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan void append_mpeg2_seqdisplay_extradata(OMX_OTHER_EXTRADATATYPE *extra, 700f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan struct msm_vidc_mpeg2_seqdisp_payload* seq_display_payload); 70161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void insert_demux_addr_offset(OMX_U32 address_offset); 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void extract_demux_addr_offsets(OMX_BUFFERHEADERTYPE *buf_hdr); 70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE handle_demux_data(OMX_BUFFERHEADERTYPE *buf_hdr); 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 count_MB_in_extradata(OMX_OTHER_EXTRADATATYPE *extra); 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size, 70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 alignment); 708826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int alloc_map_ion_memory(OMX_U32 buffer_size, 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 alignment, struct ion_allocation_data *alloc_data, 71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_fd_data *fd_data,int flag); 71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void free_ion_memory(struct vdec_ion *buf_ion_info); 713826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 714826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 715e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE hComp, 71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMMANDTYPE cmd, 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 param1, 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR cmdData); 7208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool post_event( unsigned long p1, 7218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2, 7228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long id 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ); 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline int clip2(int x) { 72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x -1; 72661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 1; 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 2; 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 4; 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x | x >> 16; 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan x = x + 1; 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return x; 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 733e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 734826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE vdec_alloc_h264_mv(); 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void vdec_dealloc_h264_mv(); 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE vdec_alloc_meta_buffers(); 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void vdec_dealloc_meta_buffers(); 739826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 740826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline void omx_report_error () { 74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_cb.EventHandler && !m_error_propogated) { 743f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("ERROR: Sending OMX_ErrorHardware to Client"); 74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_error_propogated = true; 74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cb.EventHandler(&m_cmp,m_app_data, 74661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError,OMX_ErrorHardware,0,NULL); 74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 748e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 7496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan inline void omx_report_unsupported_setting () { 75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_cb.EventHandler && !m_error_propogated) { 75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR( 753f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan "ERROR: Sending OMX_ErrorUnsupportedSetting to Client"); 75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_error_propogated = true; 75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cb.EventHandler(&m_cmp,m_app_data, 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError,OMX_ErrorUnsupportedSetting,0,NULL); 75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 7586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 759f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan inline void omx_report_hw_overload () { 760f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (m_cb.EventHandler && !m_error_propogated) { 761f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR( 762f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan "ERROR: Sending OMX_ErrorInsufficientResources to Client"); 763f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_error_propogated = true; 764f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_cb.EventHandler(&m_cmp, m_app_data, 765f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_EventError, OMX_ErrorInsufficientResources, 0, NULL); 766f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 767f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 768f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 769826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE createDivxDrmContext(); 771826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_ 772826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_) 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE use_android_native_buffer(OMX_IN OMX_HANDLETYPE hComp, OMX_PTR data); 774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 7756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_ANDROID_ICS_) 77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct nativebuffer { 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan native_handle_t *nativehandle; 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *privatehandle; 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int inuse; 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nativebuffer native_buffer[MAX_NUM_INPUT_OUTPUT_BUFFERS]; 7826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 7836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 7848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //************************************************************* 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //*******************MEMBER VARIABLES ************************* 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //************************************************************* 78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_t m_lock; 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_t c_lock; 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //sem to handle the minimum procesing of commands 79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_t m_cmd_lock; 7928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan sem_t m_safe_flush; 79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_error_propogated; 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // compression format 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CODINGTYPE eCompressionFormat; 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX State 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STATETYPE m_state; 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Application data 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR m_app_data; 80061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Application callbacks 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CALLBACKTYPE m_cb; 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PRIORITYMGMTTYPE m_priority_mgm ; 80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier; 80461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // fill this buffer queue 80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_ftb_q; 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Command Q for rest of the events 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_cmd_q; 80861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_etb_q; 80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Input memory pointer 81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *m_inp_mem_ptr; 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Output memory pointer 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *m_out_mem_ptr; 81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // number of input bitstream error frame count 81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_inp_err_count; 815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Timestamp list 81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ts_arr_list m_timestamp_list; 818826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 819e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool input_flush_progress; 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool output_flush_progress; 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool input_use_buffer; 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool output_use_buffer; 82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ouput_egl_buffers; 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_use_output_pmem; 82661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_mem_region_smi; 82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_pvt_entry_pmem; 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pending_input_buffers; 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pending_output_buffers; 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // bitmask array size for output side 832f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan uint64_t m_out_bm_count; 83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // bitmask array size for input side 834f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan uint64_t m_inp_bm_count; 83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Input port Populated 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_inp_bPopulated; 83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Output port Populated 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_bPopulated; 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // encapsulate the waiting states. 84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_flags; 841e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 842e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Heap pointer to frame buffers 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap { 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sp<MemoryHeapBase> video_heap_ptr; 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap *m_heap_ptr; 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_heap_count; 849e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_ 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // store I/P PORT state 85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_inp_bEnabled; 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // store O/P PORT state 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BOOL m_out_bEnabled; 85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_in_alloc_cnt; 85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 m_cRole[OMX_MAX_STRINGNAME_SIZE]; 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Platform specific details 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_LIST *m_platform_list; 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_ENTRY *m_platform_entry; 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info; 86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // SPS+PPS sent as part of set_config 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VENDOR_EXTRADATATYPE m_vendor_config; 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Variables for arbitrary Byte parsing support*/ 86461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan frame_parse m_frame_parser; 8658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan h264_stream_parser *h264_parser; 8668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan MP4_Utils mp4_headerparser; 8678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan HEVC_Utils m_hevc_utils; 8688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_input_pending_q; 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue m_input_free_q; 87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool arbitrary_bytes; 87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE h264_scratch; 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *psource_frame; 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *pdest_frame; 87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *m_inp_heap_ptr; 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **m_phdr_pmem_ptr; 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_heap_inp_bm_count; 87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan codec_type codec_type_parse; 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool first_frame_meta; 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned frame_count; 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned nal_count; 88261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned nal_length; 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool look_ahead_nal; 88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int first_frame; 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *first_buffer; 88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int first_frame_size; 88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char m_hwdevice_name[80]; 88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FILE *m_device_file_ptr; 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan enum vc1_profile_type m_vc1_profile; 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S64 h264_last_au_ts; 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 h264_last_au_flags; 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_demux_offsets[8192]; 89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_demux_entries; 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_disp_hor_size; 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_disp_vert_size; 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_S64 prev_ts; 89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool rst_prev_ts; 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 frm_int; 90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_allocatorproperty op_buf_rcnfg; 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool in_reconfig; 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_NATIVE_WINDOWTYPE m_display_id; 90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 client_extradata; 905826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_debug_timestamp; 90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool perf_flag; 90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 proc_frms, latency; 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan perf_metrics fps_metrics; 91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan perf_metrics dec_time; 9118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool m_reject_avc_1080p_mp; 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_enable_android_native_buffers; 91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_use_android_native_buffers; 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_debug_extradata; 91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_debug_concealedmb; 9168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool m_disable_dynamic_buf_mode; 9178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 m_conceal_color; 918826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 919826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct h264_mv_buffer { 92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char* buffer; 92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int count; 92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd; 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int offset; 92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan h264_mv_buffer h264_mv_buff; 92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct meta_buffer { 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char* buffer; 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int size; 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int count; 93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd; 93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int pmem_fd_iommu; 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int offset; 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer meta_buff; 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan extra_data_handler extra_data_handle; 939826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ 94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DivXDrmDecrypt* iDivXDrmDecrypt; 941826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif //_ANDROID_ 94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE m_port_def; 9438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_FRAME_PACK_ARRANGEMENT m_frame_pack_arrangement; 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_time_stamp_reorder time_stamp_dts; 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan desc_buffer_hdr *m_desc_buffer_ptr; 94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool secure_mode; 94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool external_meta_buffer; 94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool external_meta_buffer_iommu; 94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_EXTRADATA_FRAMEINFO *m_extradata; 9508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_OTHER_EXTRADATATYPE *m_other_extradata; 95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool codec_config_flag; 9526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int capture_capability; 95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int output_capability; 95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool streaming[MAX_PORT]; 956f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_FRAMESIZETYPE framesize; 95761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_RECTTYPE rectangle; 958f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_U32 prev_n_filled_len; 9598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool is_down_scalar_enabled; 960826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 961f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan struct custom_buffersize { 962f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_U32 input_buffersize; 963f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } m_custom_buffersize; 96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool m_power_hinted; 9658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool is_q6_platform; 96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE power_module_register(); 96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE power_module_deregister(); 96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool msg_thread_created; 96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool async_thread_created; 97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE m_profile_lvl; 97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 m_profile; 97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 974576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon //variables to handle dynamic buffer mode 975576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon bool dynamic_buf_mode; 976576efc8b5f9ab640e1a769e0524f0bf07fdfec7dArun Menon struct dynamic_buf_list *out_dynamic_list; 9778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool m_smoothstreaming_mode; 9788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 m_smoothstreaming_width; 9798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 m_smoothstreaming_height; 9808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_ERRORTYPE enable_smoothstreaming(); 981f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_ERRORTYPE enable_adaptive_playback(unsigned long width, unsigned long height); 98250ad2f6e2dc3f0fca5f2b9a5d1e2f7b056133036Praveen Chavan 98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int m_fill_output_msg; 98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool client_set_fps; 98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan class allocate_color_convert_buf 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 98761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan public: 98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocate_color_convert_buf(); 98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ~allocate_color_convert_buf(); 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void set_vdec_client(void *); 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void update_client(); 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool set_color_format(OMX_COLOR_FORMATTYPE dest_color_format); 99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool get_color_format(OMX_COLOR_FORMATTYPE &dest_color_format); 99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool update_buffer_req(); 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool get_buffer_req(unsigned int &buffer_size); 99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* get_il_buf_hdr(); 99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* get_il_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr); 99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* get_dr_buf_hdr(OMX_BUFFERHEADERTYPE *input_hdr); 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* convert(OMX_BUFFERHEADERTYPE *header); 100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* queue_buffer(OMX_BUFFERHEADERTYPE *header); 100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE allocate_buffers_color_convert(OMX_HANDLETYPE hComp, 100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr,OMX_U32 port,OMX_PTR appData, 100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes); 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 1005f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool is_color_conversion_enabled() {return enabled;} 100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private: 100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define MAX_COUNT 32 100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_vdec *omx; 100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool enabled; 101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COLOR_FORMATTYPE ColorFormat; 101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan void init_members(); 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool color_convert_mode; 101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ColorConvertFormat dest_format; 101461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan class omx_c2d_conv c2d; 101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int allocated_count; 101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int buffer_size_req; 101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int buffer_alignment_req; 101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_LIST m_platform_list_client[MAX_COUNT]; 101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_ENTRY m_platform_entry_client[MAX_COUNT]; 102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO m_pmem_info_client[MAX_COUNT]; 102161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE m_out_mem_ptr_client[MAX_COUNT]; 10226eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef USE_ION 102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vdec_ion op_buf_ion_info[MAX_COUNT]; 10246eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *pmem_baseaddress[MAX_COUNT]; 10268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long pmem_fd[MAX_COUNT]; 102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap { 102861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sp<MemoryHeapBase> video_heap_ptr; 102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan }; 103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct vidc_heap m_heap_ptr[MAX_COUNT]; 1031f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 1032f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_ERRORTYPE cache_ops(unsigned int index, unsigned int cmd); 1033f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan inline OMX_ERRORTYPE cache_clean_buffer(unsigned int index) { 1034f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return cache_ops(index, ION_IOC_CLEAN_CACHES); 1035f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1036f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_ERRORTYPE cache_clean_invalidate_buffer(unsigned int index) { 1037f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return cache_ops(index, ION_IOC_CLEAN_INV_CACHES); 1038f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 103940f34d83af63a67dfa16c98767e582c4a2b2fdecHaynes Mathew George }; 10406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if defined (_MSM8960_) || defined (_MSM8974_) 104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan allocate_color_convert_buf client_buffers; 10426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct video_decoder_capability m_decoder_capability; 10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct debug_cap m_debug; 10458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int log_input_buffers(const char *, int); 10468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int log_output_buffers(OMX_BUFFERHEADERTYPE *); 1047a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#ifdef _MSM8974_ 1048a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan void send_codec_config(); 1049a7cc922ab8aacc121d0abca2ba687d5551ad7523Praveen Chavan#endif 10508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_TICKS m_last_rendered_TS; 1051f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan volatile int32_t m_queued_codec_config_count; 1052f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan bool secure_scaling_to_non_secure_opb; 10538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 10548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan class perf_control { 10558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan // 2 cores will be requested if framerate is beyond 45 fps 10568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan static const int MIN_FRAME_DURATION_FOR_PERF_REQUEST_US = (1e6 / 45); 10578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan typedef int (*perf_lock_acquire_t)(int, int, int*, int); 10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan typedef int (*perf_lock_release_t)(int); 10598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 10608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan public: 10618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan perf_control(); 10628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan ~perf_control(); 10638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void request_cores(int frame_duration_us); 10648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan private: 10658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void *m_perf_lib; 10668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan int m_perf_handle; 10678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan perf_lock_acquire_t m_perf_lock_acquire; 10688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan perf_lock_release_t m_perf_lock_release; 10698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //void (*perf_cpu_boost)(int ntasks); 10708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan void load_lib(); 10718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan }; 10728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan perf_control m_perf_control; 10738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 1074f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan static OMX_COLOR_FORMATTYPE getPreferredColorFormatNonSurfaceMode(OMX_U32 index) { 1075f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan //On Android, we default to standard YUV formats for non-surface use-cases 1076f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan //where apps prefer known color formats. 1077f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_COLOR_FORMATTYPE formatsNonSurfaceMode[] = { 1078f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan [0] = OMX_COLOR_FormatYUV420SemiPlanar, 1079f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan [1] = OMX_COLOR_FormatYUV420Planar, 1080f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan [2] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, 1081f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView, 1082f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan }; 1083f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return (index < sizeof(formatsNonSurfaceMode) / sizeof(OMX_COLOR_FORMATTYPE)) ? 1084f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan formatsNonSurfaceMode[index] : OMX_COLOR_FormatMax; 1085f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1086f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 1087f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan static OMX_COLOR_FORMATTYPE getPreferredColorFormatDefaultMode(OMX_U32 index) { 1088f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan //for surface mode (normal playback), advertise native/accelerated formats first 1089f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_COLOR_FORMATTYPE formatsDefault[] = { 10908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan [0] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, 10915edf3e6c4e8e6a2ffefabd692903bbb291adadd7Praveen Chavan [1] = OMX_COLOR_FormatYUV420SemiPlanar, 10925edf3e6c4e8e6a2ffefabd692903bbb291adadd7Praveen Chavan [2] = OMX_COLOR_FormatYUV420Planar, 10938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan [3] = (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView, 10948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan }; 1095f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return (index < sizeof(formatsDefault) / sizeof(OMX_COLOR_FORMATTYPE)) ? 1096f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan formatsDefault[index] : OMX_COLOR_FormatMax; 10978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 1098709179c13220590b748a585a698f8c57f0f59b75Praveen Chavan 1099f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan static OMX_ERRORTYPE describeColorFormat(OMX_PTR params); 1100f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 1101e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 1102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 11036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 1104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum instance_state { 110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_UNINIT_DONE = 0x0001, 110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_INIT, 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_INIT_DONE, 110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_OPEN, 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_OPEN_DONE, 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_LOAD_RESOURCES, 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_LOAD_RESOURCES_DONE, 111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_START, 111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_START_DONE, 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_STOP, 111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_STOP_DONE, 111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_RELEASE_RESOURCES, 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_RELEASE_RESOURCES_DONE, 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CLOSE, 111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CLOSE_DONE, 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_CORE_UNINIT, 1121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 1122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1123826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevenum vidc_resposes_id { 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_DECODER_FLUSH_DONE = 0x11, 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MSM_VIDC_DECODER_EVENT_CHANGE, 1126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev}; 1127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 11286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif // _MSM8974_ 1129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 1130e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__ 1131