1e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/** 2e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * @copyright 3e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 4e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * Copyright (c) 2015, The Linux Foundation. All rights reserved. 5e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 6e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * Redistribution and use in source and binary forms, with or without 7e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * modification, are permitted provided that the following conditions are met: 8e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 9e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * * Redistributions of source code must retain the above copyright notice, 10e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * this list of conditions and the following disclaimer. 11e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * * Redistributions in binary form must reproduce the above copyright notice, 12e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * this list of conditions and the following disclaimer in the documentation 13e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * and/or other materials provided with the distribution. 14e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * * Neither the name of The Linux Foundation nor the names of its 15e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * contributors may be used to endorse or promote products derived from 16e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * this software without specific prior written permission. 17e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 18e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 19e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 20e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE DISCLAIMED. 21e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY 22e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 28e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * DAMAGE. 29e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 30e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * @file 31e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 32e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * omx_swvdec.h 33e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 34e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * @brief 35e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * 36e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin * OMX software video decoder component header. 37e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin */ 38e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 39e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef _OMX_SWVDEC_H_ 40e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define _OMX_SWVDEC_H_ 41e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 42e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <pthread.h> 43e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <semaphore.h> 44e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 45e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <linux/msm_ion.h> 46e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include <linux/msm_vidc_dec.h> 47e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 48e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "qc_omx_component.h" 49e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 50e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "omx_swvdec_utils.h" 51e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 52e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#include "swvdec_types.h" 53e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 54e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinusing namespace android; 55e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 56e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// OMX SwVdec version date 57e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_SWVDEC_VERSION_DATE "2015-11-09T18:33:31+0530" 58e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 59e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_SPEC_VERSION 0x00000101 ///< OMX specification version 60e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 61e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_SWVDEC_NUM_INSTANCES 1 ///< number of OMX SwVdec instances 62e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 63e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin// @todo Make this macro default and store in a variable? 64e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_SWVDEC_IP_BUFFER_COUNT 5 ///< OMX SwVdec input buffer count 65e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 66e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// frame rate structure 67e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 68e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int fps_numerator; ///< fps numerator 69e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int fps_denominator; ///< fps denominator 70e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} FRAME_RATE; 71e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 72e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_FPS_NUMERATOR 30 ///< default fps numerator 73e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_FPS_DENOMINATOR 1 ///< default fps denominator 74e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 75e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// frame dimensions structure 76e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 77e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int width; ///< frame width 78e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int height; ///< frame height 79e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} FRAME_DIMENSIONS; 80e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 81e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// frame attributes structure 82e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 83e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int stride; ///< frame stride 84e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int scanlines; ///< frame scanlines 85e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int size; ///< frame size 86e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} FRAME_ATTRIBUTES; 87e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 88e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// asynchronous thread structure 89e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 90e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin sem_t sem_thread_created; ///< thread created semaphore 91e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin sem_t sem_event; ///< event semaphore 92e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pthread_t handle; ///< thread handle 93e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool created; ///< thread created? 94e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool exit; ///< thread exit variable 95e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} ASYNC_THREAD; 96e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 97e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// @cond 98e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinstruct vdec_ion { 100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int ion_fd_device; 101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct ion_fd_data ion_fd_data; 102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct ion_allocation_data ion_alloc_data; 103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE buffer_header; 107e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct vdec_ion ion_info; 108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct vdec_bufferpayload buffer_payload; 109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_BUFFER buffer_swvdec; 110e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool buffer_populated; 111e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} OMX_SWVDEC_BUFFER_INFO; 112e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 113e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// @endcond 114e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 115e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// port structure 116e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PARAM_PORTDEFINITIONTYPE def; ///< definition 118e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BOOL enabled; ///< enabled? 119e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BOOL populated; ///< populated? 120e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BOOL unpopulated; ///< unpopulated? 121e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BOOL flush_inprogress; ///< flush inprogress? 122e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int num_pending_buffers; ///< # of pending buffers 123e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} OMX_SWVDEC_PORT; 124e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 125e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// meta_buffer information structure 126e4010605f233a213cf0d972397bb33c34c364227Patrick Tjintypedef struct { 127e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int fd; ///< file descriptor 128e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int dup_fd; ///< duplicate file descriptor 129e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int offset; ///< offset 130e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int ref_count; ///< reference count 131e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} OMX_SWVDEC_META_BUFFER_INFO; 132e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 133e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_FRAME_WIDTH 1920 ///< default frame width 134e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_FRAME_HEIGHT 1088 ///< default frame height 135e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 136e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_ALIGNMENT_STRIDE 128 ///< default stride alignment 137e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_ALIGNMENT_SCANLINES_Y 32 ///< default Y scanlines alignment 138e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_ALIGNMENT_SCANLINES_UV 16 ///< default UV scanlines alignment 139e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define DEFAULT_ALIGNMENT_SIZE 4096 ///< default size alignment 140e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 141e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MAX(x, y) (((x) > (y)) ? (x) : (y)) ///< maximum 142e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MIN(x, y) (((x) < (y)) ? (x) : (y)) ///< minimum 143e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define ALIGN(x, y) (((x) + ((y) - 1)) & (~((y) - 1))) 144e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ///< align 'x' to next highest multiple of 'y' 145e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 146e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// macro to print 'command type' string 147e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_COMMANDTYPE_STRING(x) \ 148e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_CommandStateSet) ? "OMX_CommandStateSet" : \ 149e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_CommandFlush) ? "OMX_CommandFlush" : \ 150e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_CommandPortDisable) ? "OMX_CommandPortDisable" : \ 151e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_CommandPortEnable) ? "OMX_CommandPortEnable" : \ 152e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "unknown")))) 153e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 154e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// macro to print 'state type' string 155e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define OMX_STATETYPE_STRING(x) \ 156e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_StateInvalid) ? "OMX_StateInvalid" : \ 157e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_StateLoaded) ? "OMX_StateLoaded" : \ 158e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_StateIdle) ? "OMX_StateIdle" : \ 159e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_StateExecuting) ? "OMX_StateExecuting" : \ 160e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_StatePause) ? "OMX_StatePause" : \ 161e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ((x == OMX_StateWaitForResources) ? "OMX_StateWaitForResources" : \ 162e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "unknown")))))) 163e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 164e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinenum { 165e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_CORE_PORT_INDEX_IP = 0, ///< input port index 166e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_CORE_PORT_INDEX_OP = 1 ///< output port index 167e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 168e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 169e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinextern "C" { 170e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_API void *get_omx_component_factory_fn(void); 171e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 172e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 173e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin/// OMX SwVdec component class; derived from QC OMX component base class 174e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinclass omx_swvdec : public qc_omx_component 175e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 176e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinpublic: 177e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 178e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_swvdec(); 179e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 180e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin virtual ~omx_swvdec(); 181e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 182e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // derived class versions of base class pure virtual functions 183e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 184e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE component_init(OMX_STRING cmp_name); 185e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE component_deinit(OMX_HANDLETYPE cmp_handle); 186e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_component_version(OMX_HANDLETYPE cmp_handle, 187e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_STRING cmp_name, 188e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_VERSIONTYPE *p_cmp_version, 189e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_VERSIONTYPE *p_spec_version, 190e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_UUIDTYPE *p_cmp_UUID); 191e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE send_command(OMX_HANDLETYPE cmp_handle, 192e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_COMMANDTYPE cmd, 193e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 param, 194e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_cmd_data); 195e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE cmp_handle, 196e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_INDEXTYPE param_index, 197e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_param_data); 198e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE cmp_handle, 199e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_INDEXTYPE param_index, 200e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_param_data); 201e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_config(OMX_HANDLETYPE cmp_handle, 202e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_INDEXTYPE config_index, 203e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_config_data); 204e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_config(OMX_HANDLETYPE cmp_handle, 205e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_INDEXTYPE config_index, 206e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_config_data); 207e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_extension_index(OMX_HANDLETYPE cmp_handle, 208e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_STRING param_name, 209e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_INDEXTYPE *p_index_type); 210e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_state(OMX_HANDLETYPE cmp_handle, 211e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_STATETYPE *p_state); 212e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE component_tunnel_request(OMX_HANDLETYPE cmp_handle, 213e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 port, 214e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_HANDLETYPE peer_component, 215e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 peer_port, 216e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_TUNNELSETUPTYPE *p_tunnel_setup); 217e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE cmp_handle, 218e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE **pp_buffer_hdr, 219e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 port, 220e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data, 221e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 bytes, 222e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U8 *p_buffer); 223e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE allocate_buffer(OMX_HANDLETYPE cmp_handle, 224e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE **pp_buffer_hdr, 225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 port, 226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data, 227e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 bytes); 228e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE free_buffer(OMX_HANDLETYPE cmp_handle, 229e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 port, 230e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE *p_buffer); 231e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE empty_this_buffer(OMX_HANDLETYPE cmp_handle, 232e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE *p_buffer_hdr); 233e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE fill_this_buffer(OMX_HANDLETYPE cmp_handle, 234e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE *p_buffer_hdr); 235e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_callbacks(OMX_HANDLETYPE cmp_handle, 236e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_CALLBACKTYPE *p_callbacks, 237e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data); 238e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE cmp_handle, 239e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BUFFERHEADERTYPE **pp_buffer_hdr, 240e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 port, 241e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data, 242e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *egl_image); 243e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE component_role_enum(OMX_HANDLETYPE cmp_handle, 244e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U8 *p_role, 245e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 index); 246e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 247e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // SwVdec callback functions 248e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 249e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static SWVDEC_STATUS swvdec_empty_buffer_done_callback( 250e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_HANDLE swvdec_handle, 251e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_BUFFER *p_buffer_ip, 252e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *p_client_handle); 253e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static SWVDEC_STATUS swvdec_fill_buffer_done_callback( 254e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_HANDLE swvdec_handle, 255e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_BUFFER *p_buffer_op, 256e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *p_client_handle); 257e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static SWVDEC_STATUS swvdec_event_handler_callback( 258e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_HANDLE swvdec_handle, 259e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_EVENT event, 260e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *p_data, 261e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void *p_client_handle); 262e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 263e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinprivate: 264e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 265e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_STATETYPE m_state; ///< component state 266e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 267e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int m_status_flags; ///< status flags 268e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 269e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin char m_cmp_name[OMX_MAX_STRINGNAME_SIZE]; ///< component name 270e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin char m_role_name[OMX_MAX_STRINGNAME_SIZE]; ///< component role name 271e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 272e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_CODEC m_swvdec_codec; ///< SwVdec codec type 273e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin SWVDEC_HANDLE m_swvdec_handle; ///< SwVdec handle 274e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool m_swvdec_created; ///< SwVdec created? 275e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 276e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_VIDEO_CODINGTYPE m_omx_video_codingtype; ///< OMX video coding type 277e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_COLOR_FORMATTYPE m_omx_color_formattype; ///< OMX color format type 278e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 279e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FRAME_RATE m_frame_rate; ///< frame rate 280e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FRAME_DIMENSIONS m_frame_dimensions; ///< frame dimensions 281e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FRAME_ATTRIBUTES m_frame_attributes; ///< frame attributes 282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ASYNC_THREAD m_async_thread; ///< asynchronous thread 284e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 285e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_swvdec_queue m_queue_command; ///< command queue 286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_swvdec_queue m_queue_port_ip; ///< input port queue for ETBs & EBDs 287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_swvdec_queue m_queue_port_op; ///< output port queue for FTBs & FBDs 288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_PORT m_port_ip; ///< input port 290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_PORT m_port_op; ///< output port 291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 292e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_CALLBACKTYPE m_callback; ///< IL client callback structure 293e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR m_app_data; ///< IL client app data pointer 294e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 295e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PRIORITYMGMTTYPE m_prio_mgmt; ///< priority management 296e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 297e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool m_sync_frame_decoding_mode; ///< sync frame decoding mode enabled? 298e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool m_android_native_buffers; ///< android native buffers enabled? 299e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool m_meta_buffer_mode; ///< meta buffer mode enabled? 300e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 301e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool m_port_reconfig_inprogress; ///< port reconfiguration in progress? 302e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 303e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin sem_t m_sem_cmd; ///< semaphore for command processing 304e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_BUFFER_INFO *m_buffer_array_ip; ///< input buffer info array 306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_BUFFER_INFO *m_buffer_array_op; ///< output buffer info array 307e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 308e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_META_BUFFER_INFO *m_meta_buffer_array; ///< metabuffer info array 309e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pthread_mutex_t m_meta_buffer_array_mutex; 310e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ///< mutex for metabuffer info array 311e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 312e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_swvdec_ts_list m_ts_list; ///< timestamp list 313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 314e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_swvdec_diag m_diag; ///< diagnostics class variable 315e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 316e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_frame_dimensions(unsigned int width, 317e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int height); 318e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_frame_attributes(unsigned int alignment_stride, 319e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int alignment_scanlines_y, 320e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int alignment_scanlines_uv, 321e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int alignment_size); 322e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 323e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_video_port_format( 324e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_VIDEO_PARAM_PORTFORMATTYPE *p_port_format); 325e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_video_port_format( 326e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_VIDEO_PARAM_PORTFORMATTYPE *p_port_format); 327e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 328e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_port_definition(OMX_PARAM_PORTDEFINITIONTYPE *p_port_def); 329e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_port_definition(OMX_PARAM_PORTDEFINITIONTYPE *p_port_def); 330e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 331e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_supported_profilelevel( 332e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_VIDEO_PARAM_PROFILELEVELTYPE *p_profilelevel); 333e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 334e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE describe_color_format(DescribeColorFormatParams *p_params); 335e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 336e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_port_definition_qcom( 337e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_QCOM_PARAM_PORTDEFINITIONTYPE *p_port_def); 338e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 339e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // functions to set SwVdec properties with OMX component properties 340e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 341e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_frame_dimensions_swvdec(); 342e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE set_frame_attributes_swvdec(); 343e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 344e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // functions to get SwVdec properties and set OMX component properties 345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 346e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_frame_dimensions_swvdec(); 347e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_frame_attributes_swvdec(); 348e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE get_buffer_requirements_swvdec(unsigned int port_index); 349e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 350e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // buffer allocation & de-allocation functions 351e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_allocate_ip(OMX_BUFFERHEADERTYPE **pp_buffer_hdr, 352e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data, 353e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 size); 354e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_allocate_op(OMX_BUFFERHEADERTYPE **pp_buffer_hdr, 355e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data, 356e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 size); 357e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_allocate_ip_info_array(); 358e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_allocate_op_info_array(); 359e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_use_op(OMX_BUFFERHEADERTYPE **pp_buffer_hdr, 360e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PTR p_app_data, 361e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 size, 362e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U8 *p_buffer); 363e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_deallocate_ip(OMX_BUFFERHEADERTYPE *p_buffer_hdr); 364e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE buffer_deallocate_op(OMX_BUFFERHEADERTYPE *p_buffer_hdr); 365e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void buffer_deallocate_ip_info_array(); 366e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void buffer_deallocate_op_info_array(); 367e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 368e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE meta_buffer_array_allocate(); 369e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void meta_buffer_array_deallocate(); 370e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void meta_buffer_ref_add(unsigned int index, 371e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int fd, 372e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int offset); 373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void meta_buffer_ref_remove(unsigned int fd, unsigned int offset); 374e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 375e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BOOL port_ip_populated(); 376e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_BOOL port_op_populated(); 377e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 378e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE flush(unsigned int port_index); 379e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 380e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int ion_memory_alloc_map(struct ion_allocation_data *p_alloc_data, 381e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct ion_fd_data *p_fd_data, 382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 size, 383e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 alignment); 384e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void ion_memory_free(struct vdec_ion *p_ion_buf_info); 385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 386e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // component callback functions 387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 388e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void swvdec_empty_buffer_done(SWVDEC_BUFFER *p_buffer_ip); 389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void swvdec_fill_buffer_done(SWVDEC_BUFFER *p_buffer_op); 390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void swvdec_event_handler(SWVDEC_EVENT event, void *p_data); 391e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 392e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE retval_swvdec2omx(SWVDEC_STATUS retval_swvdec); 393e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 394e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // status bits for pending events 395e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin enum { 396e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_STATE_LOADED_TO_IDLE, ///< loaded to idle state 397e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_STATE_EXECUTING_TO_IDLE, ///< executing to idle state 398e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_STATE_IDLE_TO_LOADED, ///< idle to loaded state 399e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_PORT_ENABLE_IP, ///< enablement of ip port 400e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_PORT_ENABLE_OP, ///< enablement of op port 401e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_PORT_DISABLE_IP, ///< disablement of ip port 402e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_PORT_DISABLE_OP, ///< disablement of op port 403e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_PORT_FLUSH_IP, ///< flush of ip port 404e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PENDING_PORT_FLUSH_OP ///< flush of op port 405e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 406e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 407e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // events raised internally 408e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin enum { 409e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_CMD, ///< command event 410e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_CMD_ACK, ///< command acknowledgement 411e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_ERROR, ///< error event 412e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_ETB, ///< ETB event 413e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_EBD, ///< EBD event 414e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_FTB, ///< FTB event 415e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_FBD, ///< FBD event 416e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_EOS, ///< EOS event 417e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_FLUSH_PORT_IP, ///< flush ip port event 418e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_FLUSH_PORT_OP, ///< flush op port event 419e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SWVDEC_EVENT_PORT_RECONFIG ///< port reconfig event 420e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 421e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 422e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_thread_create(); 423e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin void async_thread_destroy(); 424e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 425e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static void async_thread(void *p_cmp); 426e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 427e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool async_post_event(unsigned long event_id, 428e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned long event_param1, 429e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned long event_param2); 430e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 431e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin static void async_process_event(void *p_cmp); 432e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 433e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_cmd(OMX_COMMANDTYPE cmd, OMX_U32 param); 434e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_cmd_ack(OMX_COMMANDTYPE cmd, 435e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 param); 436e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_error(OMX_ERRORTYPE error_code); 437e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_cmd_state_set(bool *p_cmd_ack, 438e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_STATETYPE state_new); 439e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_cmd_flush(unsigned int port_index); 440e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_cmd_port_disable( 441e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool *p_cmd_ack, 442e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int port_index); 443e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_cmd_port_enable(bool *p_cmd_ack, 444e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int port_index); 445e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_etb(OMX_BUFFERHEADERTYPE *p_buffer_hdr, 446e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int index); 447e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_ftb(OMX_BUFFERHEADERTYPE *p_buffer_hdr, 448e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int index); 449e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_ebd(OMX_BUFFERHEADERTYPE *p_buffer_hdr, 450e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int index); 451e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_fbd(OMX_BUFFERHEADERTYPE *p_buffer_hdr, 452e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned int index); 453e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_eos(); 454e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_flush_port_ip(); 455e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_flush_port_op(); 456e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_ERRORTYPE async_process_event_port_reconfig(); 457e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin}; 458e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 459e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif // #ifndef _OMX_SWVDEC_H_ 460