omx_vdec_hevc_swvdec.h revision e7273837b521d16f87dd5fb6eea3750a51ea92da
1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*-------------------------------------------------------------------------- 2e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyCopyright (c) 2010, Code Aurora Forum. All rights reserved. 3e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 4e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyRedistribution and use in source and binary forms, with or without 5e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellymodification, are permitted provided that the following conditions are met: 6e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Redistributions of source code must retain the above copyright 7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly notice, this list of conditions and the following disclaimer. 8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Redistributions in binary form must reproduce the above copyright 9e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly notice, this list of conditions and the following disclaimer in the 10e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly documentation and/or other materials provided with the distribution. 11e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Neither the name of Code Aurora nor 12e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly the names of its contributors may be used to endorse or promote 13e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly products derived from this software without specific prior written 14e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly permission. 15e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 16e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 20e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 26e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly--------------------------------------------------------------------------*/ 28e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef __OMX_VDEC_H__ 29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define __OMX_VDEC_H__ 30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/*============================================================================ 31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly O p e n M A X Component 32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Video Decoder 33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//** @file comx_vdec.h 35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly This module contains the class definition for openMAX decoder component. 36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly*//*========================================================================*/ 38e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Include Files 41e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 43e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include<stdlib.h> 44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 45e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <stdio.h> 46e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 47e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 48e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <binder/MemoryHeapBase.h> 49e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C"{ 50e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include<utils/Log.h> 51e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define LOG_TAG "OMX-VDEC-720P" 53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_LOW 54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_LOW LOGE 55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else 56e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_LOW 57e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_HIGH 59e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_HIGH LOGE 60e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else 61e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_HIGH 62e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 63e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef ENABLE_DEBUG_ERROR 64e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_ERROR LOGE 65e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else 66e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define DEBUG_PRINT_ERROR 67e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 68e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_ 69e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 70e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <pthread.h> 71e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifndef PC_DEBUG 72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <semaphore.h> 73e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 74e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_Core.h" 75e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "OMX_QCOMExtns.h" 76e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//#include "vdec.h" 77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "qc_omx_component.h" 78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//#include "Map.h" 79e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly//#include "OmxUtils.h" 80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/msm_vidc_dec.h> 81e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "frameparser.h" 82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include <linux/android_pmem.h> 83e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 84e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyextern "C" { 85e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_API void * get_omx_component_factory_fn(void); 86e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 87e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 88e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 89e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly using namespace android; 91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // local pmem heap object 92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly class VideoHeap : public MemoryHeapBase 93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly public: 95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly VideoHeap(int fd, size_t size, void* base); 96e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly virtual ~VideoHeap() {} 97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // _ANDROID_ 99e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Module specific globals 101e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_SPEC_VERSION 0x00000101 103e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 104e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 106e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Macros 107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly////////////////////////////////////////////////////////////////////////////// 108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define PrintFrameHdr(bufHdr) DEBUG_PRINT("bufHdr %x buf %x size %d TS %d\n",\ 109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (unsigned) bufHdr,\ 110e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->pBuffer,\ 111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nFilledLen,\ 112e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (unsigned)((OMX_BUFFERHEADERTYPE *)bufHdr)->nTimeStamp) 113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// BitMask Management logic 115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITS_PER_BYTE 32 116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SIZE(mIndex) (((mIndex) + BITS_PER_BYTE - 1)/BITS_PER_BYTE) 117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_OFFSET(mIndex) ((mIndex)/BITS_PER_BYTE) 118e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_FLAG(mIndex) (1 << ((mIndex) % BITS_PER_BYTE)) 119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_CLEAR(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly &= ~(BITMASK_FLAG(mIndex)) 121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_SET(mArray,mIndex) (mArray)[BITMASK_OFFSET(mIndex)] \ 122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly |= BITMASK_FLAG(mIndex) 123e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 124e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) 125e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 126e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) == 0x0) 127e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_PRESENT(mArray,mIndex) ((mArray)[BITMASK_OFFSET(mIndex)] \ 128e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) 129e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define BITMASK_ABSENT(mArray,mIndex) (((mArray)[BITMASK_OFFSET(mIndex)] \ 130e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly & BITMASK_FLAG(mIndex)) == 0x0) 131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_VIDEO_DEC_NUM_INPUT_BUFFERS 2 133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_VIDEO_DEC_NUM_OUTPUT_BUFFERS 2 134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef FEATURE_QTV_WVGA_ENABLE 136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_VIDEO_DEC_INPUT_BUFFER_SIZE (256*1024) 137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#else 138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_VIDEO_DEC_INPUT_BUFFER_SIZE (128*1024) 139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_CONTROL_CMDQ_SIZE 100 142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_HEIGHT 144 143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_QCIF_WIDTH 176 144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_HEIGHT 480 145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_VGA_WIDTH 640 146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_HEIGHT 480 147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define OMX_CORE_WVGA_WIDTH 800 148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellystruct video_driver_context 151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{ 152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int video_driver_fd; 153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vdec_codec decoder_format; 154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vdec_output_fromat output_format; 155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_picsize video_resoultion; 156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_allocatorproperty input_buffer; 157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_allocatorproperty output_buffer; 158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_bufferpayload *ptr_inputbuffer; 159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_bufferpayload *ptr_outputbuffer; 160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct vdec_output_frameinfo *ptr_respbuffer; 161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly char kind[128]; 162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass OmxUtils; 165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// OMX video decoder class 167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyclass omx_vdec: public qc_omx_component 168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly{ 169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellypublic: 171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_vdec(); // constructor 172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly virtual ~omx_vdec(); // destructor 173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly static int async_message_process (void *context, void* message); 175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly static void process_event_cb(void *ctxt,unsigned char id); 176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE allocate_buffer( 178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes 183e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 184e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 185e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 186e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE hComp); 187e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 188e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE component_init(OMX_STRING role); 189e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 190e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE component_role_enum( 191e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 192e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U8 *role, 193e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 index 194e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 195e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 196e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE component_tunnel_request( 197e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 198e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 199e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE peerComponent, 200e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 peerPort, 201e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_TUNNELSETUPTYPE *tunnelSetup 202e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 203e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 204e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE empty_this_buffer( 205e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 206e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *buffer 207e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 208e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 209e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 210e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 211e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE fill_this_buffer( 212e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 213e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *buffer 214e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 215e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 216e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 217e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE free_buffer( 218e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 219e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 220e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *buffer 221e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 222e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 223e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE get_component_version( 224e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 225e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_STRING componentName, 226e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_VERSIONTYPE *componentVersion, 227e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_VERSIONTYPE *specVersion, 228e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_UUIDTYPE *componentUUID 229e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 230e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 231e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE get_config( 232e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 233e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_INDEXTYPE configIndex, 234e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR configData 235e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 236e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 237e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE get_extension_index( 238e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_HANDLETYPE hComp, 239e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_STRING paramName, 240e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_INDEXTYPE *indexType 241e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 242e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 243e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE hComp, 244e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_INDEXTYPE paramIndex, 245e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR paramData); 246e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 247e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE get_state(OMX_HANDLETYPE hComp, 248e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_STATETYPE *state); 249e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 250e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 251e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 252e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE send_command(OMX_HANDLETYPE hComp, 253e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMMANDTYPE cmd, 254e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 param1, 255e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR cmdData); 256e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 257e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE hComp, 259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_CALLBACKTYPE *callbacks, 260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData); 261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 262e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE set_config(OMX_HANDLETYPE hComp, 263e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_INDEXTYPE configIndex, 264e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR configData); 265e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 266e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE hComp, 267e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_INDEXTYPE paramIndex, 268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR paramData); 269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE hComp, 271e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 272e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 273e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 274e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes, 275e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U8 *buffer); 276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE hComp, 279e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 280e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 281e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 282e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly void * eglImage); 283e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 284e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 285e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 286e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct video_driver_context driver_context; 287e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int m_pipe_in; 288e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int m_pipe_out; 289e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly pthread_t msg_thread_id; 290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly pthread_t async_thread_id; 291e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 292e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyprivate: 293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Bit Positions 294e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum flags_bit_positions 295e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 296e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Defer transition to IDLE 297e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_IDLE_PENDING =0x1, 298e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Defer transition to LOADING 299e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_LOADING_PENDING =0x2, 300e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // First Buffer Pending 301e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_FIRST_BUFFER_PENDING =0x3, 302e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Second Buffer Pending 303e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_SECOND_BUFFER_PENDING =0x4, 304e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Defer transition to Enable 305e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_INPUT_ENABLE_PENDING =0x5, 306e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Defer transition to Enable 307e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_OUTPUT_ENABLE_PENDING =0x6, 308e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Defer transition to Disable 309e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_INPUT_DISABLE_PENDING =0x7, 310e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Defer transition to Disable 311e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_OUTPUT_DISABLE_PENDING =0x8, 312e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //defer flush notification 313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_OUTPUT_FLUSH_PENDING =0x9, 314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_INPUT_FLUSH_PENDING =0xA, 315e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_PAUSE_PENDING =0xB, 316e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_EXECUTE_PENDING =0xC 317e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Deferred callback identifiers 321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum 322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 323e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Event Callbacks from the vdec component thread context 324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_EVENT = 0x1, 325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Buffer Done callbacks from the vdec component thread context 326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_BUFFER_DONE = 0x2, 327e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Frame Done callbacks from the vdec component thread context 328e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_FRAME_DONE = 0x3, 329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Buffer Done callbacks from the vdec component thread context 330e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_FTB = 0x4, 331e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Frame Done callbacks from the vdec component thread context 332e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_ETB = 0x5, 333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Command 334e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_COMMAND = 0x6, 335e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Push-Pending Buffers 336e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_PUSH_PENDING_BUFS = 0x7, 337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Empty Buffer Done callbacks 338e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_EBD = 0x8, 339e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Flush Event Callbacks from the vdec component thread context 340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_EVENT_FLUSH = 0x9, 341e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH = 0x0A, 342e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH = 0x0B, 343e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_FBD = 0xc, 344e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_START_DONE = 0xD, 345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_PAUSE_DONE = 0xE, 346e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_RESUME_DONE = 0xF, 347e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_STOP_DONE = 0x10, 348e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_HARDWARE_ERROR = 0x11, 349e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMPONENT_GENERATE_ETB_ARBITRARY = 0x12 350e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 351e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum port_indexes 353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 354e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_CORE_INPUT_PORT_INDEX =0, 355e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_CORE_OUTPUT_PORT_INDEX =1 356e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 357e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 358e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vc1_profile_type 359e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 360e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly VC1_SP_MP_RCV = 1, 361e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly VC1_AP = 2 362e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 363e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct omx_event 365e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 366e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned param1; 367e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned param2; 368e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned id; 369e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 370e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 371e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly struct omx_cmd_queue 372e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 373e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_event m_q[OMX_CORE_CONTROL_CMDQ_SIZE]; 374e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned m_read; 375e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned m_write; 376e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned m_size; 377e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 378e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_cmd_queue(); 379e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ~omx_cmd_queue(); 380e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool insert_entry(unsigned p1, unsigned p2, unsigned id); 381e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool pop_entry(unsigned *p1,unsigned *p2, unsigned *id); 382e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // get msgtype of the first ele from the queue 383e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned get_q_msg_type(); 384e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 385e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly }; 386e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 387e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE omx_vdec_check_port_settings(bool *port_setting_changed); 388e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE omx_vdec_validate_port_param(int height, int width); 389e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 390e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 391e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool allocate_done(void); 392e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool allocate_input_done(void); 393e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool allocate_output_done(void); 394e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 395e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 396e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr); 397e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 398e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE allocate_input_heap_buffer(OMX_HANDLETYPE hComp, 399e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 400e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 401e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 402e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes); 403e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 404e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 405e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE allocate_input_buffer(OMX_HANDLETYPE hComp, 406e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 407e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 408e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 409e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes); 410e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 411e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE allocate_output_buffer(OMX_HANDLETYPE hComp, 412e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 413e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port,OMX_PTR appData, 414e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes); 415e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 416e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE use_input_buffer(OMX_HANDLETYPE hComp, 417e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 418e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 419e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 420e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes, 421e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U8 *buffer); 422e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 423e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE use_output_buffer(OMX_HANDLETYPE hComp, 424e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **bufferHdr, 425e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 port, 426e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR appData, 427e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 bytes, 428e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U8 *buffer); 429e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 430e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool execute_omx_flush(OMX_U32); 431e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool execute_output_flush(OMX_U32); 432e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool execute_input_flush(OMX_U32); 433e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool register_output_buffers(); 434e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE empty_buffer_done(OMX_HANDLETYPE hComp, 435e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE * buffer); 436e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 437e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE fill_buffer_done(OMX_HANDLETYPE hComp, 438e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE * buffer); 439e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE empty_this_buffer_proxy(OMX_HANDLETYPE hComp, 440e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *buffer); 441e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 442e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE empty_this_buffer_proxy_arbitrary(OMX_HANDLETYPE hComp, 443e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *buffer 444e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 445e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 446e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE push_input_buffer (OMX_HANDLETYPE hComp); 447e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE push_input_sc_codec (OMX_HANDLETYPE hComp); 448e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE push_input_h264 (OMX_HANDLETYPE hComp); 449e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE push_input_vc1 (OMX_HANDLETYPE hComp); 450e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 451e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE fill_this_buffer_proxy(OMX_HANDLETYPE hComp, 452e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *buffer); 453e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool release_done(); 454e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 455e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool release_output_done(); 456e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool release_input_done(); 457e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 458e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool align_pmem_buffers(int pmem_fd, OMX_U32 buffer_size, 459e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 alignment); 460e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 461e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_ERRORTYPE send_command_proxy(OMX_HANDLETYPE hComp, 462e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COMMANDTYPE cmd, 463e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U32 param1, 464e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR cmdData); 465e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool post_event( unsigned int p1, 466e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int p2, 467e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int id 468e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly ); 469e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly inline int clip2(int x) 470e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 471e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly x = x -1; 472e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly x = x | x >> 1; 473e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly x = x | x >> 2; 474e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly x = x | x >> 4; 475e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly x = x | x >> 16; 476e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly x = x + 1; 477e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return x; 478e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 479e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 480e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly inline void omx_report_error () 481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 482e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DEBUG_PRINT_ERROR("\nERROR: Sending OMX_EventError to Client"); 483e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly if (m_cb.EventHandler && !m_error_propogated) 484e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly { 485e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly m_error_propogated = true; 486e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly m_cb.EventHandler(&m_cmp,m_app_data, 487e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_EventError,OMX_ErrorHardware,0,NULL); 488e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 489e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 490e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 491e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 492e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //************************************************************* 493e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //*******************MEMBER VARIABLES ************************* 494e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //************************************************************* 495e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly pthread_mutex_t m_lock; 496e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //sem to handle the minimum procesing of commands 497e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly sem_t m_cmd_lock; 498e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool m_error_propogated; 499e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // compression format 500e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_VIDEO_CODINGTYPE eCompressionFormat; 501e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // OMX State 502e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_STATETYPE m_state; 503e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Application data 504e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PTR m_app_data; 505e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Application callbacks 506e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_CALLBACKTYPE m_cb; 507e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_COLOR_FORMATTYPE m_color_format; 508e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PRIORITYMGMTTYPE m_priority_mgm ; 509e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_PARAM_BUFFERSUPPLIERTYPE m_buffer_supplier; 510e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // fill this buffer queue 511e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_cmd_queue m_ftb_q; 512e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Command Q for rest of the events 513e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_cmd_queue m_cmd_q; 514e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_cmd_queue m_etb_q; 515e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Input memory pointer 516e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *m_inp_mem_ptr; 517e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Output memory pointer 518e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *m_out_mem_ptr; 519e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 520e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool input_flush_progress; 521e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool output_flush_progress; 522e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool input_use_buffer; 523e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool output_use_buffer; 524e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int pending_input_buffers; 525e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int pending_output_buffers; 526e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int m_ineos_reached; 527e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int m_outeos_pending; 528e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int m_outeos_reached; 529e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // bitmask array size for output side 530e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_bm_count; 531e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Number of Output Buffers 532e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_buf_count; 533e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_buf_count_min; 534e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_buf_size; 535e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Number of Input Buffers 536e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_inp_buf_count; 537e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_inp_buf_count_min; 538e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Size of Input Buffers 539e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_inp_buf_size; 540e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // bitmask array size for input side 541e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_inp_bm_count; 542e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Input port Populated 543e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BOOL m_inp_bPopulated; 544e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Output port Populated 545e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BOOL m_out_bPopulated; 546e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly //Height 547e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_height; 548e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Width 549e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_width; 550e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int stride; 551e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int scan_lines; 552e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Storage of HxW during dynamic port reconfig 553e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_port_height; 554e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_port_width; 555e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 556e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_crop_x; 557e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_crop_y; 558e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_crop_dx; 559e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_crop_dy; 560e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // encapsulate the waiting states. 561e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_flags; 562e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 563e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#ifdef _ANDROID_ 564e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Heap pointer to frame buffers 565e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly sp<MemoryHeapBase> m_heap_ptr; 566e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif //_ANDROID_ 567e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // store I/P PORT state 568e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BOOL m_inp_bEnabled; 569e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // store O/P PORT state 570e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BOOL m_out_bEnabled; 571e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // to know whether Event Port Settings change has been triggered or not. 572e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool m_event_port_settings_sent; 573e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_U8 m_cRole[OMX_MAX_STRINGNAME_SIZE]; 574e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // Platform specific details 575e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_QCOM_PLATFORM_PRIVATE_LIST *m_platform_list; 576e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_QCOM_PLATFORM_PRIVATE_ENTRY *m_platform_entry; 577e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *m_pmem_info; 578e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly // SPS+PPS sent as part of set_config 579e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_VENDOR_EXTRADATATYPE m_vendor_config; 580e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 581e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly /*Variables for arbitrary Byte parsing support*/ 582e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly frame_parse m_frame_parser; 583e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_cmd_queue m_input_pending_q; 584e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly omx_cmd_queue m_input_free_q; 585e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool arbitrary_bytes; 586e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE h264_scratch; 587e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *psource_frame; 588e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *pdest_frame; 589e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE *m_inp_heap_ptr; 590e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OMX_BUFFERHEADERTYPE **m_phdr_pmem_ptr; 591e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_heap_inp_bm_count; 592e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly codec_type codec_type_parse; 593e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool first_frame_meta; 594e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned frame_count; 595e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned nal_count; 596e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned nal_length; 597e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool look_ahead_nal; 598e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int first_frame; 599e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned char *first_buffer; 600e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int first_frame_size; 601e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int mp4h263_flags; 602e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int mp4h263_timestamp; 603e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool set_seq_header_done; 604e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool gate_output_buffers; 605e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool gate_input_buffers; 606e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool sent_first_frame; 607e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_buf_count_recon; 608e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_buf_count_min_recon; 609e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned int m_out_buf_size_recon; 610e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly unsigned char m_hwdevice_name[80]; 611e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly FILE *m_device_file_ptr; 612e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly enum vc1_profile_type m_vc1_profile; 613e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 614e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 615e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif // __OMX_VDEC_H__ 616