1dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand/*--------------------------------------------------------------------------
26eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCopyright (c) 2009, The Linux Foundation. All rights reserved.
3dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
4dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandRedistribution and use in source and binary forms, with or without
5dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchandmodification, are permitted provided that the following conditions are met:
6dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand    * Redistributions of source code must retain the above copyright
7dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand      notice, this list of conditions and the following disclaimer.
8dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand    * Redistributions in binary form must reproduce the above copyright
9dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand      notice, this list of conditions and the following disclaimer in the
10dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand      documentation and/or other materials provided with the distribution.
116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Neither the name of The Linux Foundation nor
12dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand      the names of its contributors may be used to endorse or promote
13dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand      products derived from this software without specific prior written
14dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand      permission.
15dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
16dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandNON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26dd5743ee305c8db17facba3e0176a3d07adc7499Rom LemarchandADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand--------------------------------------------------------------------------*/
28dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand/*============================================================================
29dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            O p e n M A X   w r a p p e r s
30dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                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
31dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
32dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand*//** @file qc_omx_component.h
33dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  This module contains the abstract interface for the OpenMAX components.
34dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
35dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand*//*========================================================================*/
36dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
37dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#ifndef QC_OMX_COMPONENT_H
38dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#define QC_OMX_COMPONENT_H
39dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand//////////////////////////////////////////////////////////////////////////////
40dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand//                             Include Files
41dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand//////////////////////////////////////////////////////////////////////////////
42dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#include "OMX_Core.h"
43dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#include "OMX_Component.h"
44dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
45dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchandclass qc_omx_component
46dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand{
47dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
48dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchandpublic:
49dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  /* single member to hold the vtable */
50dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_COMPONENTTYPE m_cmp;
51dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
52dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchandpublic:
53dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
54dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // this is critical, otherwise, sub class destructor will not be called
55dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual ~qc_omx_component(){}
56dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
57dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Initialize the component after creation
58dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual OMX_ERRORTYPE component_init(OMX_IN OMX_STRING componentName)=0;
59dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
60dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  /*******************************************************************/
61dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  /*           Standard OpenMAX Methods                              */
62dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  /*******************************************************************/
63dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
64dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Query the component for its information
65dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
66dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  get_component_version(OMX_HANDLETYPE       cmp_handle,
67dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                       OMX_STRING             cmp_name,
68dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                       OMX_VERSIONTYPE*    cmp_version,
69dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                       OMX_VERSIONTYPE*   spec_version,
70dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                       OMX_UUIDTYPE*          cmp_UUID)=0;
71dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
72dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Invoke a command on the component
73dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
74dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  send_command(OMX_HANDLETYPE cmp_handle,
75dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                              OMX_COMMANDTYPE       cmd,
76dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                              OMX_U32            param1,
77dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                              OMX_PTR          cmd_data)=0;
78dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
79dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Get a Parameter setting from the component
80dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
81dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  get_parameter(OMX_HANDLETYPE     cmp_handle,
82dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_INDEXTYPE     param_index,
83dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_PTR            param_data)=0;
84dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
85dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Send a parameter structure to the component
86dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
87dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  set_parameter(OMX_HANDLETYPE     cmp_handle,
88dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_INDEXTYPE     param_index,
89dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_PTR            param_data)=0;
90dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
91dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Get a configuration structure from the component
92dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
93dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  get_config(OMX_HANDLETYPE      cmp_handle,
94dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_INDEXTYPE     config_index,
95dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_PTR            config_data)=0;
96dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
97dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Set a component configuration value
98dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
99dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  set_config(OMX_HANDLETYPE      cmp_handle,
100dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_INDEXTYPE     config_index,
101dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_PTR            config_data)=0;
102dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
103dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Translate the vendor specific extension string to
104dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // standardized index type
105dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
106dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  get_extension_index(OMX_HANDLETYPE  cmp_handle,
107dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                     OMX_STRING       paramName,
108dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                     OMX_INDEXTYPE*   indexType)=0;
109dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
110dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Get Current state information
111dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
112dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  get_state(OMX_HANDLETYPE  cmp_handle,
113dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                           OMX_STATETYPE*       state)=0;
114dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
115dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Component Tunnel Request
116dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
117dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  component_tunnel_request(OMX_HANDLETYPE           cmp_handle,
118dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                          OMX_U32                        port,
119dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                          OMX_HANDLETYPE       peer_component,
120dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                          OMX_U32                   peer_port,
121dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                          OMX_TUNNELSETUPTYPE*   tunnel_setup)=0;
122dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
123dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Use a buffer already allocated by the IL client
124dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // or a buffer already supplied by a tunneled component
125dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
126dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  use_buffer(OMX_HANDLETYPE                cmp_handle,
127dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_BUFFERHEADERTYPE**        buffer_hdr,
128dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_U32                             port,
129dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_PTR                         app_data,
130dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_U32                            bytes,
131dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                            OMX_U8*                           buffer)=0;
132dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
133dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
134dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Request that the component allocate new buffer and associated header
135dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
136dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  allocate_buffer(OMX_HANDLETYPE                cmp_handle,
137dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                 OMX_BUFFERHEADERTYPE**        buffer_hdr,
138dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                 OMX_U32                             port,
139dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                 OMX_PTR                         app_data,
140dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                 OMX_U32                            bytes)=0;
141dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
142dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Release the buffer and associated header from the component
143dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
144dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  free_buffer(OMX_HANDLETYPE         cmp_handle,
145dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                             OMX_U32                      port,
146dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                             OMX_BUFFERHEADERTYPE*      buffer)=0;
147dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
148dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Send a filled buffer to an input port of a component
149dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
150dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  empty_this_buffer(OMX_HANDLETYPE         cmp_handle,
151dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                   OMX_BUFFERHEADERTYPE*      buffer)=0;
152dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
153dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Send an empty buffer to an output port of a component
154dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
155dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  fill_this_buffer(OMX_HANDLETYPE         cmp_handle,
156dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                  OMX_BUFFERHEADERTYPE*      buffer)=0;
157dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
158dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Set callbacks
159dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
160dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  set_callbacks( OMX_HANDLETYPE        cmp_handle,
161dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                OMX_CALLBACKTYPE*      callbacks,
162dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                OMX_PTR                 app_data)=0;
163dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
164dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Component De-Initialize
165dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
166dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  component_deinit( OMX_HANDLETYPE cmp_handle)=0;
167dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
168dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Use the Image already allocated via EGL
169dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
170dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  use_EGL_image(OMX_HANDLETYPE                cmp_handle,
171dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_BUFFERHEADERTYPE**        buffer_hdr,
172dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_U32                             port,
173dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               OMX_PTR                         app_data,
174dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                               void*                          egl_image)=0;
175dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
176dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  // Component Role enum
177dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  virtual
178dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand  OMX_ERRORTYPE  component_role_enum( OMX_HANDLETYPE cmp_handle,
179dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                      OMX_U8*              role,
180dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand                                      OMX_U32             index)=0;
181dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand
182dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand};
183dd5743ee305c8db17facba3e0176a3d07adc7499Rom Lemarchand#endif /* QC_OMX_COMPONENT_H */
184