111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*-------------------------------------------------------------------------- 211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelCopyright (c) 2009, The Linux Foundation. All rights reserved. 311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelRedistribution and use in source and binary forms, with or without 511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelmodification, are permitted provided that the following conditions are met: 611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Redistributions of source code must retain the above copyright 711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel notice, this list of conditions and the following disclaimer. 811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Redistributions in binary form must reproduce the above copyright 911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel notice, this list of conditions and the following disclaimer in the 1011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel documentation and/or other materials provided with the distribution. 1111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Neither the name of The Linux Foundation nor 1211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel the names of its contributors may be used to endorse or promote 1311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel products derived from this software without specific prior written 1411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel permission. 1511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 1611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel--------------------------------------------------------------------------*/ 2811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*============================================================================ 2911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel O p e n M A X w r a p p e r s 3011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel O p e n M A X C o m p o n e n t I n t e r f a c e 3111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*//** @file qc_omx_component.h 3311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel This module contains the abstract interface for the OpenMAX components. 3411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*//*========================================================================*/ 3611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 3711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifndef QC_OMX_COMPONENT_H 3811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define QC_OMX_COMPONENT_H 3911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 4011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel// Include Files 4111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel////////////////////////////////////////////////////////////////////////////// 4211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "OMX_Core.h" 4311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include "OMX_Component.h" 4411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 4511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelclass qc_omx_component 4611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{ 4711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 4811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelpublic: 4911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /* single member to hold the vtable */ 5011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMPONENTTYPE m_cmp; 5111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelpublic: 5311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // this is critical, otherwise, sub class destructor will not be called 5511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual ~qc_omx_component(){} 5611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 5711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Initialize the component after creation 5811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual OMX_ERRORTYPE component_init(OMX_IN OMX_STRING componentName)=0; 5911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /*******************************************************************/ 6111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /* Standard OpenMAX Methods */ 6211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel /*******************************************************************/ 6311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 6411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Query the component for its information 6511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 6611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_component_version(OMX_HANDLETYPE cmp_handle, 6711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STRING cmp_name, 6811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_VERSIONTYPE* cmp_version, 6911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_VERSIONTYPE* spec_version, 7011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_UUIDTYPE* cmp_UUID)=0; 7111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 7211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Invoke a command on the component 7311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 7411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE send_command(OMX_HANDLETYPE cmp_handle, 7511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_COMMANDTYPE cmd, 7611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 param1, 7711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR cmd_data)=0; 7811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 7911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Get a Parameter setting from the component 8011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 8111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_parameter(OMX_HANDLETYPE cmp_handle, 8211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE param_index, 8311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR param_data)=0; 8411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 8511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Send a parameter structure to the component 8611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 8711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_parameter(OMX_HANDLETYPE cmp_handle, 8811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE param_index, 8911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR param_data)=0; 9011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 9111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Get a configuration structure from the component 9211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 9311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_config(OMX_HANDLETYPE cmp_handle, 9411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE config_index, 9511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR config_data)=0; 9611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 9711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Set a component configuration value 9811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 9911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_config(OMX_HANDLETYPE cmp_handle, 10011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE config_index, 10111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR config_data)=0; 10211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 10311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Translate the vendor specific extension string to 10411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // standardized index type 10511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 10611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_extension_index(OMX_HANDLETYPE cmp_handle, 10711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STRING paramName, 10811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_INDEXTYPE* indexType)=0; 10911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 11011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Get Current state information 11111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 11211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE get_state(OMX_HANDLETYPE cmp_handle, 11311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_STATETYPE* state)=0; 11411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 11511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Component Tunnel Request 11611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 11711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_tunnel_request(OMX_HANDLETYPE cmp_handle, 11811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 11911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_HANDLETYPE peer_component, 12011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 peer_port, 12111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_TUNNELSETUPTYPE* tunnel_setup)=0; 12211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 12311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Use a buffer already allocated by the IL client 12411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // or a buffer already supplied by a tunneled component 12511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 12611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_buffer(OMX_HANDLETYPE cmp_handle, 12711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE** buffer_hdr, 12811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 12911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR app_data, 13011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes, 13111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8* buffer)=0; 13211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 13311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 13411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Request that the component allocate new buffer and associated header 13511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 13611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE allocate_buffer(OMX_HANDLETYPE cmp_handle, 13711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE** buffer_hdr, 13811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 13911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR app_data, 14011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 bytes)=0; 14111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 14211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Release the buffer and associated header from the component 14311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 14411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE free_buffer(OMX_HANDLETYPE cmp_handle, 14511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 14611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE* buffer)=0; 14711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 14811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Send a filled buffer to an input port of a component 14911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 15011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE empty_this_buffer(OMX_HANDLETYPE cmp_handle, 15111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE* buffer)=0; 15211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 15311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Send an empty buffer to an output port of a component 15411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 15511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE fill_this_buffer(OMX_HANDLETYPE cmp_handle, 15611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE* buffer)=0; 15711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 15811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Set callbacks 15911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 16011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE set_callbacks( OMX_HANDLETYPE cmp_handle, 16111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_CALLBACKTYPE* callbacks, 16211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR app_data)=0; 16311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 16411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Component De-Initialize 16511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 16611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_deinit( OMX_HANDLETYPE cmp_handle)=0; 16711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 16811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Use the Image already allocated via EGL 16911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 17011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE use_EGL_image(OMX_HANDLETYPE cmp_handle, 17111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_BUFFERHEADERTYPE** buffer_hdr, 17211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 port, 17311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_PTR app_data, 17411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel void* egl_image)=0; 17511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 17611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel // Component Role enum 17711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel virtual 17811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_ERRORTYPE component_role_enum( OMX_HANDLETYPE cmp_handle, 17911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U8* role, 18011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 index)=0; 18111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel 18211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}; 18311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif /* QC_OMX_COMPONENT_H */ 184