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