1826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev/*--------------------------------------------------------------------------
26eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalCopyright (c) 2009, The Linux Foundation. All rights reserved.
3826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
4826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevRedistribution and use in source and binary forms, with or without
5826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevmodification, are permitted provided that the following conditions are met:
6826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    * Redistributions of source code must retain the above copyright
7826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      notice, this list of conditions and the following disclaimer.
8826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev    * Redistributions in binary form must reproduce the above copyright
9826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      notice, this list of conditions and the following disclaimer in the
10826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      documentation and/or other materials provided with the distribution.
116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal    * Neither the name of The Linux Foundation nor
12826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      the names of its contributors may be used to endorse or promote
13826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      products derived from this software without specific prior written
14826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev      permission.
15826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
16826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevNON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev--------------------------------------------------------------------------*/
28826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev/*============================================================================
29826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            O p e n M A X   w r a p p e r s
30826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                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
31826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
32826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev*//** @file qc_omx_component.h
33826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  This module contains the abstract interface for the OpenMAX components.
34826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
35826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev*//*========================================================================*/
36826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
37826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef QC_OMX_COMPONENT_H
38826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define QC_OMX_COMPONENT_H
39826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//////////////////////////////////////////////////////////////////////////////
40826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//                             Include Files
41826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev//////////////////////////////////////////////////////////////////////////////
42826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "OMX_Core.h"
43826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include "OMX_Component.h"
44826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
45826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevclass qc_omx_component
46826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{
47826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
48826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevpublic:
49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  /* single member to hold the vtable */
50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_COMPONENTTYPE m_cmp;
51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevpublic:
53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
54826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // this is critical, otherwise, sub class destructor will not be called
55826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual ~qc_omx_component(){}
56826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Initialize the component after creation
58826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual OMX_ERRORTYPE component_init(OMX_IN OMX_STRING componentName)=0;
59826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
60826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  /*******************************************************************/
61826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  /*           Standard OpenMAX Methods                              */
62826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  /*******************************************************************/
63826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
64826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Query the component for its information
65826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
66826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  get_component_version(OMX_HANDLETYPE       cmp_handle,
67826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       OMX_STRING             cmp_name,
68826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       OMX_VERSIONTYPE*    cmp_version,
69826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       OMX_VERSIONTYPE*   spec_version,
70826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                       OMX_UUIDTYPE*          cmp_UUID)=0;
71826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
72826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Invoke a command on the component
73826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
74826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  send_command(OMX_HANDLETYPE cmp_handle,
75826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                              OMX_COMMANDTYPE       cmd,
76826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                              OMX_U32            param1,
77826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                              OMX_PTR          cmd_data)=0;
78826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
79826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Get a Parameter setting from the component
80826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
81826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  get_parameter(OMX_HANDLETYPE     cmp_handle,
82826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_INDEXTYPE     param_index,
83826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_PTR            param_data)=0;
84826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
85826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Send a parameter structure to the component
86826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
87826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  set_parameter(OMX_HANDLETYPE     cmp_handle,
88826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_INDEXTYPE     param_index,
89826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_PTR            param_data)=0;
90826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
91826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Get a configuration structure from the component
92826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
93826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  get_config(OMX_HANDLETYPE      cmp_handle,
94826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_INDEXTYPE     config_index,
95826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_PTR            config_data)=0;
96826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
97826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Set a component configuration value
98826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  set_config(OMX_HANDLETYPE      cmp_handle,
100826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_INDEXTYPE     config_index,
101826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_PTR            config_data)=0;
102826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
103826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Translate the vendor specific extension string to
104826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // standardized index type
105826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
106826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  get_extension_index(OMX_HANDLETYPE  cmp_handle,
107826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                     OMX_STRING       paramName,
108826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                     OMX_INDEXTYPE*   indexType)=0;
109826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
110826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Get Current state information
111826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
112826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  get_state(OMX_HANDLETYPE  cmp_handle,
113826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                           OMX_STATETYPE*       state)=0;
114826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
115826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Component Tunnel Request
116826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
117826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  component_tunnel_request(OMX_HANDLETYPE           cmp_handle,
118826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                          OMX_U32                        port,
119826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                          OMX_HANDLETYPE       peer_component,
120826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                          OMX_U32                   peer_port,
121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                          OMX_TUNNELSETUPTYPE*   tunnel_setup)=0;
122826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
123826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Use a buffer already allocated by the IL client
124826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // or a buffer already supplied by a tunneled component
125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
126826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  use_buffer(OMX_HANDLETYPE                cmp_handle,
127826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_BUFFERHEADERTYPE**        buffer_hdr,
128826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_U32                             port,
129826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_PTR                         app_data,
130826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_U32                            bytes,
131826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                            OMX_U8*                           buffer)=0;
132826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
133826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
134826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Request that the component allocate new buffer and associated header
135826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
136826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  allocate_buffer(OMX_HANDLETYPE                cmp_handle,
137826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                 OMX_BUFFERHEADERTYPE**        buffer_hdr,
138826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                 OMX_U32                             port,
139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                 OMX_PTR                         app_data,
140826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                 OMX_U32                            bytes)=0;
141826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
142826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Release the buffer and associated header from the component
143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
144826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  free_buffer(OMX_HANDLETYPE         cmp_handle,
145826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                             OMX_U32                      port,
146826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                             OMX_BUFFERHEADERTYPE*      buffer)=0;
147826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
148826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Send a filled buffer to an input port of a component
149826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
150826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  empty_this_buffer(OMX_HANDLETYPE         cmp_handle,
151826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                   OMX_BUFFERHEADERTYPE*      buffer)=0;
152826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
153826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Send an empty buffer to an output port of a component
154826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
155826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  fill_this_buffer(OMX_HANDLETYPE         cmp_handle,
156826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                  OMX_BUFFERHEADERTYPE*      buffer)=0;
157826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
158826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Set callbacks
159826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
160826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  set_callbacks( OMX_HANDLETYPE        cmp_handle,
161826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                OMX_CALLBACKTYPE*      callbacks,
162826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                OMX_PTR                 app_data)=0;
163826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
164826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Component De-Initialize
165826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
166826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  component_deinit( OMX_HANDLETYPE cmp_handle)=0;
167826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
168826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Use the Image already allocated via EGL
169826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
170826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  use_EGL_image(OMX_HANDLETYPE                cmp_handle,
171826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_BUFFERHEADERTYPE**        buffer_hdr,
172826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_U32                             port,
173826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               OMX_PTR                         app_data,
174826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                               void*                          egl_image)=0;
175826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
176826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  // Component Role enum
177826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  virtual
178826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev  OMX_ERRORTYPE  component_role_enum( OMX_HANDLETYPE cmp_handle,
179826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                      OMX_U8*              role,
180826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev                                      OMX_U32             index)=0;
181826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev
182826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev};
183826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif /* QC_OMX_COMPONENT_H */
184