• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* ------------------------------------------------------------------
2   * Copyright (C) 1998-2009 PacketVideo
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13   * express or implied.
14   * See the License for the specific language governing permissions
15   * and limitations under the License.
16   * -------------------------------------------------------------------
17   */
18  /*
19   * Copyright (c) 2008 The Khronos Group Inc.
20   *
21   * Permission is hereby granted, free of charge, to any person obtaining
22   * a copy of this software and associated documentation files (the
23   * "Software"), to deal in the Software without restriction, including
24   * without limitation the rights to use, copy, modify, merge, publish,
25   * distribute, sublicense, and/or sell copies of the Software, and to
26   * permit persons to whom the Software is furnished to do so, subject
27   * to the following conditions:
28   * The above copyright notice and this permission notice shall be included
29   * in all copies or substantial portions of the Software.
30   *
31   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
34   * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
35   * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
36   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
37   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38   *
39   */
40  
41  /** OMX_Component.h - OpenMax IL version 1.1.2
42   *  The OMX_Component header file contains the definitions used to define
43   *  the public interface of a component.  This header file is intended to
44   *  be used by both the application and the component.
45   */
46  
47  #ifndef OMX_Component_h
48  #define OMX_Component_h
49  
50  #ifdef __cplusplus
51  extern "C" {
52  #endif /* __cplusplus */
53  
54  
55  
56  /* Each OMX header must include all required header files to allow the
57   *  header to compile without errors.  The includes below are required
58   *  for this header file to compile successfully
59   */
60  
61  #include <OMX_Audio.h>
62  #include <OMX_Video.h>
63  #include <OMX_Image.h>
64  #include <OMX_Other.h>
65  
66  /** @ingroup comp */
67  typedef enum OMX_PORTDOMAINTYPE {
68      OMX_PortDomainAudio,
69      OMX_PortDomainVideo,
70      OMX_PortDomainImage,
71      OMX_PortDomainOther,
72      OMX_PortDomainKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
73      OMX_PortDomainVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
74      OMX_PortDomainMax = 0x7ffffff
75  } OMX_PORTDOMAINTYPE;
76  
77  /** @ingroup comp */
78  typedef struct OMX_PARAM_PORTDEFINITIONTYPE {
79      OMX_U32 nSize;                 /**< Size of the structure in bytes */
80      OMX_VERSIONTYPE nVersion;      /**< OMX specification version information */
81      OMX_U32 nPortIndex;            /**< Port number the structure applies to */
82      OMX_DIRTYPE eDir;              /**< Direction (input or output) of this port */
83      OMX_U32 nBufferCountActual;    /**< The actual number of buffers allocated on this port */
84      OMX_U32 nBufferCountMin;       /**< The minimum number of buffers this port requires */
85      OMX_U32 nBufferSize;           /**< Size, in bytes, for buffers to be used for this channel */
86      OMX_BOOL bEnabled;             /**< Ports default to enabled and are enabled/disabled by
87                                          OMX_CommandPortEnable/OMX_CommandPortDisable.
88                                          When disabled a port is unpopulated. A disabled port
89                                          is not populated with buffers on a transition to IDLE. */
90      OMX_BOOL bPopulated;           /**< Port is populated with all of its buffers as indicated by
91                                          nBufferCountActual. A disabled port is always unpopulated.
92                                          An enabled port is populated on a transition to OMX_StateIdle
93                                          and unpopulated on a transition to loaded. */
94      OMX_PORTDOMAINTYPE eDomain;    /**< Domain of the port. Determines the contents of metadata below. */
95      union {
96          OMX_AUDIO_PORTDEFINITIONTYPE audio;
97          OMX_VIDEO_PORTDEFINITIONTYPE video;
98          OMX_IMAGE_PORTDEFINITIONTYPE image;
99          OMX_OTHER_PORTDEFINITIONTYPE other;
100      } format;
101      OMX_BOOL bBuffersContiguous;
102      OMX_U32 nBufferAlignment;
103  } OMX_PARAM_PORTDEFINITIONTYPE;
104  
105  /** @ingroup comp */
106  typedef struct OMX_PARAM_U32TYPE {
107      OMX_U32 nSize;                    /**< Size of this structure, in Bytes */
108      OMX_VERSIONTYPE nVersion;         /**< OMX specification version information */
109      OMX_U32 nPortIndex;               /**< port that this structure applies to */
110      OMX_U32 nU32;                     /**< U32 value */
111  } OMX_PARAM_U32TYPE;
112  
113  /** @ingroup rpm */
114  typedef enum OMX_SUSPENSIONPOLICYTYPE {
115      OMX_SuspensionDisabled, /**< No suspension; v1.0 behavior */
116      OMX_SuspensionEnabled,  /**< Suspension allowed */
117      OMX_SuspensionPolicyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
118      OMX_SuspensionPolicyStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
119      OMX_SuspensionPolicyMax = 0x7fffffff
120  } OMX_SUSPENSIONPOLICYTYPE;
121  
122  /** @ingroup rpm */
123  typedef struct OMX_PARAM_SUSPENSIONPOLICYTYPE {
124      OMX_U32 nSize;
125      OMX_VERSIONTYPE nVersion;
126      OMX_SUSPENSIONPOLICYTYPE ePolicy;
127  } OMX_PARAM_SUSPENSIONPOLICYTYPE;
128  
129  /** @ingroup rpm */
130  typedef enum OMX_SUSPENSIONTYPE {
131      OMX_NotSuspended, /**< component is not suspended */
132      OMX_Suspended,    /**< component is suspended */
133      OMX_SuspensionKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
134      OMX_SuspensionVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
135      OMX_SuspendMax = 0x7FFFFFFF
136  } OMX_SUSPENSIONTYPE;
137  
138  /** @ingroup rpm */
139  typedef struct OMX_PARAM_SUSPENSIONTYPE {
140      OMX_U32 nSize;
141      OMX_VERSIONTYPE nVersion;
142      OMX_SUSPENSIONTYPE eType;
143  } OMX_PARAM_SUSPENSIONTYPE ;
144  
145  typedef struct OMX_CONFIG_BOOLEANTYPE {
146      OMX_U32 nSize;
147      OMX_VERSIONTYPE nVersion;
148      OMX_BOOL bEnabled;
149  } OMX_CONFIG_BOOLEANTYPE;
150  
151  /* Parameter specifying the content uri to use. */
152  /** @ingroup cp */
153  typedef struct OMX_PARAM_CONTENTURITYPE
154  {
155      OMX_U32 nSize;                      /**< size of the structure in bytes, including
156                                               actual URI name */
157      OMX_VERSIONTYPE nVersion;           /**< OMX specification version information */
158      OMX_U8 contentURI[1];               /**< The URI name */
159  } OMX_PARAM_CONTENTURITYPE;
160  
161  /* Parameter specifying the pipe to use. */
162  /** @ingroup cp */
163  typedef struct OMX_PARAM_CONTENTPIPETYPE
164  {
165      OMX_U32 nSize;              /**< size of the structure in bytes */
166      OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
167      OMX_HANDLETYPE hPipe;       /**< The pipe handle*/
168  } OMX_PARAM_CONTENTPIPETYPE;
169  
170  /** @ingroup rpm */
171  typedef struct OMX_RESOURCECONCEALMENTTYPE {
172      OMX_U32 nSize;             /**< size of the structure in bytes */
173      OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
174      OMX_BOOL bResourceConcealmentForbidden; /**< disallow the use of resource concealment
175                                              methods (like degrading algorithm quality to
176                                              lower resource consumption or functional bypass)
177                                              on a component as a resolution to resource conflicts. */
178  } OMX_RESOURCECONCEALMENTTYPE;
179  
180  
181  /** @ingroup metadata */
182  typedef enum OMX_METADATACHARSETTYPE {
183      OMX_MetadataCharsetUnknown = 0,
184      OMX_MetadataCharsetASCII,
185      OMX_MetadataCharsetBinary,
186      OMX_MetadataCharsetCodePage1252,
187      OMX_MetadataCharsetUTF8,
188      OMX_MetadataCharsetJavaConformantUTF8,
189      OMX_MetadataCharsetUTF7,
190      OMX_MetadataCharsetImapUTF7,
191      OMX_MetadataCharsetUTF16LE,
192      OMX_MetadataCharsetUTF16BE,
193      OMX_MetadataCharsetGB12345,
194      OMX_MetadataCharsetHZGB2312,
195      OMX_MetadataCharsetGB2312,
196      OMX_MetadataCharsetGB18030,
197      OMX_MetadataCharsetGBK,
198      OMX_MetadataCharsetBig5,
199      OMX_MetadataCharsetISO88591,
200      OMX_MetadataCharsetISO88592,
201      OMX_MetadataCharsetISO88593,
202      OMX_MetadataCharsetISO88594,
203      OMX_MetadataCharsetISO88595,
204      OMX_MetadataCharsetISO88596,
205      OMX_MetadataCharsetISO88597,
206      OMX_MetadataCharsetISO88598,
207      OMX_MetadataCharsetISO88599,
208      OMX_MetadataCharsetISO885910,
209      OMX_MetadataCharsetISO885913,
210      OMX_MetadataCharsetISO885914,
211      OMX_MetadataCharsetISO885915,
212      OMX_MetadataCharsetShiftJIS,
213      OMX_MetadataCharsetISO2022JP,
214      OMX_MetadataCharsetISO2022JP1,
215      OMX_MetadataCharsetISOEUCJP,
216      OMX_MetadataCharsetSMS7Bit,
217      OMX_MetadataCharsetKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
218      OMX_MetadataCharsetVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
219      OMX_MetadataCharsetTypeMax= 0x7FFFFFFF
220  } OMX_METADATACHARSETTYPE;
221  
222  /** @ingroup metadata */
223  typedef enum OMX_METADATASCOPETYPE
224  {
225      OMX_MetadataScopeAllLevels,
226      OMX_MetadataScopeTopLevel,
227      OMX_MetadataScopePortLevel,
228      OMX_MetadataScopeNodeLevel,
229      OMX_MetadataScopeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
230      OMX_MetadataScopeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
231      OMX_MetadataScopeTypeMax = 0x7fffffff
232  } OMX_METADATASCOPETYPE;
233  
234  /** @ingroup metadata */
235  typedef enum OMX_METADATASEARCHMODETYPE
236  {
237      OMX_MetadataSearchValueSizeByIndex,
238      OMX_MetadataSearchItemByIndex,
239      OMX_MetadataSearchNextItemByKey,
240      OMX_MetadataSearchKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
241      OMX_MetadataSearchVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
242      OMX_MetadataSearchTypeMax = 0x7fffffff
243  } OMX_METADATASEARCHMODETYPE;
244  /** @ingroup metadata */
245  typedef struct OMX_CONFIG_METADATAITEMCOUNTTYPE
246  {
247      OMX_U32 nSize;
248      OMX_VERSIONTYPE nVersion;
249      OMX_METADATASCOPETYPE eScopeMode;
250      OMX_U32 nScopeSpecifier;
251      OMX_U32 nMetadataItemCount;
252  } OMX_CONFIG_METADATAITEMCOUNTTYPE;
253  
254  /** @ingroup metadata */
255  typedef struct OMX_CONFIG_METADATAITEMTYPE
256  {
257      OMX_U32 nSize;
258      OMX_VERSIONTYPE nVersion;
259      OMX_METADATASCOPETYPE eScopeMode;
260      OMX_U32 nScopeSpecifier;
261      OMX_U32 nMetadataItemIndex;
262      OMX_METADATASEARCHMODETYPE eSearchMode;
263      OMX_METADATACHARSETTYPE eKeyCharset;
264      OMX_U8 nKeySizeUsed;
265      OMX_U8 nKey[128];
266      OMX_METADATACHARSETTYPE eValueCharset;
267      OMX_STRING sLanguageCountry;
268      OMX_U32 nValueMaxSize;
269      OMX_U32 nValueSizeUsed;
270      OMX_U8 nValue[1];
271  } OMX_CONFIG_METADATAITEMTYPE;
272  
273  /* @ingroup metadata */
274  typedef struct OMX_CONFIG_CONTAINERNODECOUNTTYPE
275  {
276      OMX_U32 nSize;
277      OMX_VERSIONTYPE nVersion;
278      OMX_BOOL bAllKeys;
279      OMX_U32 nParentNodeID;
280      OMX_U32 nNumNodes;
281  } OMX_CONFIG_CONTAINERNODECOUNTTYPE;
282  
283  /** @ingroup metadata */
284  typedef struct OMX_CONFIG_CONTAINERNODEIDTYPE
285  {
286      OMX_U32 nSize;
287      OMX_VERSIONTYPE nVersion;
288      OMX_BOOL bAllKeys;
289      OMX_U32 nParentNodeID;
290      OMX_U32 nNodeIndex;
291      OMX_U32 nNodeID;
292      OMX_STRING cNodeName;
293      OMX_BOOL bIsLeafType;
294  } OMX_CONFIG_CONTAINERNODEIDTYPE;
295  
296  /** @ingroup metadata */
297  typedef struct OMX_PARAM_METADATAFILTERTYPE
298  {
299      OMX_U32 nSize;
300      OMX_VERSIONTYPE nVersion;
301      OMX_BOOL bAllKeys;  /* if true then this structure refers to all keys and
302                           * the three key fields below are ignored */
303      OMX_METADATACHARSETTYPE eKeyCharset;
304      OMX_U32 nKeySizeUsed;
305      OMX_U8   nKey [128];
306      OMX_U32 nLanguageCountrySizeUsed;
307      OMX_U8 nLanguageCountry[128];
308      OMX_BOOL bEnabled;  /* if true then key is part of filter (e.g.
309                           * retained for query later). If false then
310                           * key is not part of filter */
311  } OMX_PARAM_METADATAFILTERTYPE;
312  
313  /** The OMX_HANDLETYPE structure defines the component handle.  The component
314   *  handle is used to access all of the component's public methods and also
315   *  contains pointers to the component's private data area.  The component
316   *  handle is initialized by the OMX core (with help from the component)
317   *  during the process of loading the component.  After the component is
318   *  successfully loaded, the application can safely access any of the
319   *  component's public functions (although some may return an error because
320   *  the state is inappropriate for the access).
321   *
322   *  @ingroup comp
323   */
324  typedef struct OMX_COMPONENTTYPE
325  {
326      /** The size of this structure, in bytes.  It is the responsibility
327          of the allocator of this structure to fill in this value.  Since
328          this structure is allocated by the GetHandle function, this
329          function will fill in this value. */
330      OMX_U32 nSize;
331  
332      /** nVersion is the version of the OMX specification that the structure
333          is built against.  It is the responsibility of the creator of this
334          structure to initialize this value and every user of this structure
335          should verify that it knows how to use the exact version of
336          this structure found herein. */
337      OMX_VERSIONTYPE nVersion;
338  
339      /** pComponentPrivate is a pointer to the component private data area.
340          This member is allocated and initialized by the component when the
341          component is first loaded.  The application should not access this
342          data area. */
343      OMX_PTR pComponentPrivate;
344  
345      /** pApplicationPrivate is a pointer that is a parameter to the
346          OMX_GetHandle method, and contains an application private value
347          provided by the IL client.  This application private data is
348          returned to the IL Client by OMX in all callbacks */
349      OMX_PTR pApplicationPrivate;
350  
351      /** refer to OMX_GetComponentVersion in OMX_core.h or the OMX IL
352          specification for details on the GetComponentVersion method.
353       */
354      OMX_ERRORTYPE (*GetComponentVersion)(
355              OMX_IN  OMX_HANDLETYPE hComponent,
356              OMX_OUT OMX_STRING pComponentName,
357              OMX_OUT OMX_VERSIONTYPE* pComponentVersion,
358              OMX_OUT OMX_VERSIONTYPE* pSpecVersion,
359              OMX_OUT OMX_UUIDTYPE* pComponentUUID);
360  
361      /** refer to OMX_SendCommand in OMX_core.h or the OMX IL
362          specification for details on the SendCommand method.
363       */
364      OMX_ERRORTYPE (*SendCommand)(
365              OMX_IN  OMX_HANDLETYPE hComponent,
366              OMX_IN  OMX_COMMANDTYPE Cmd,
367              OMX_IN  OMX_U32 nParam1,
368              OMX_IN  OMX_PTR pCmdData);
369  
370      /** refer to OMX_GetParameter in OMX_core.h or the OMX IL
371          specification for details on the GetParameter method.
372       */
373      OMX_ERRORTYPE (*GetParameter)(
374              OMX_IN  OMX_HANDLETYPE hComponent,
375              OMX_IN  OMX_INDEXTYPE nParamIndex,
376              OMX_INOUT OMX_PTR pComponentParameterStructure);
377  
378  
379      /** refer to OMX_SetParameter in OMX_core.h or the OMX IL
380          specification for details on the SetParameter method.
381       */
382      OMX_ERRORTYPE (*SetParameter)(
383              OMX_IN  OMX_HANDLETYPE hComponent,
384              OMX_IN  OMX_INDEXTYPE nIndex,
385              OMX_IN  OMX_PTR pComponentParameterStructure);
386  
387  
388      /** refer to OMX_GetConfig in OMX_core.h or the OMX IL
389          specification for details on the GetConfig method.
390       */
391      OMX_ERRORTYPE (*GetConfig)(
392              OMX_IN  OMX_HANDLETYPE hComponent,
393              OMX_IN  OMX_INDEXTYPE nIndex,
394              OMX_INOUT OMX_PTR pComponentConfigStructure);
395  
396  
397      /** refer to OMX_SetConfig in OMX_core.h or the OMX IL
398          specification for details on the SetConfig method.
399       */
400      OMX_ERRORTYPE (*SetConfig)(
401              OMX_IN  OMX_HANDLETYPE hComponent,
402              OMX_IN  OMX_INDEXTYPE nIndex,
403              OMX_IN  OMX_PTR pComponentConfigStructure);
404  
405  
406      /** refer to OMX_GetExtensionIndex in OMX_core.h or the OMX IL
407          specification for details on the GetExtensionIndex method.
408       */
409      OMX_ERRORTYPE (*GetExtensionIndex)(
410              OMX_IN  OMX_HANDLETYPE hComponent,
411              OMX_IN  OMX_STRING cParameterName,
412              OMX_OUT OMX_INDEXTYPE* pIndexType);
413  
414  
415      /** refer to OMX_GetState in OMX_core.h or the OMX IL
416          specification for details on the GetState method.
417       */
418      OMX_ERRORTYPE (*GetState)(
419              OMX_IN  OMX_HANDLETYPE hComponent,
420              OMX_OUT OMX_STATETYPE* pState);
421  
422  
423      /** The ComponentTunnelRequest method will interact with another OMX
424          component to determine if tunneling is possible and to setup the
425          tunneling.  The return codes for this method can be used to
426          determine if tunneling is not possible, or if tunneling is not
427          supported.
428  
429          Base profile components (i.e. non-interop) do not support this
430          method and should return OMX_ErrorNotImplemented
431  
432          The interop profile component MUST support tunneling to another
433          interop profile component with a compatible port parameters.
434          A component may also support proprietary communication.
435  
436          If proprietary communication is supported the negotiation of
437          proprietary communication is done outside of OMX in a vendor
438          specific way. It is only required that the proper result be
439          returned and the details of how the setup is done is left
440          to the component implementation.
441  
442          When this method is invoked when nPort in an output port, the
443          component will:
444          1.  Populate the pTunnelSetup structure with the output port's
445              requirements and constraints for the tunnel.
446  
447          When this method is invoked when nPort in an input port, the
448          component will:
449          1.  Query the necessary parameters from the output port to
450              determine if the ports are compatible for tunneling
451          2.  If the ports are compatible, the component should store
452              the tunnel step provided by the output port
453          3.  Determine which port (either input or output) is the buffer
454              supplier, and call OMX_SetParameter on the output port to
455              indicate this selection.
456  
457          The component will return from this call within 5 msec.
458  
459          @param [in] hComp
460              Handle of the component to be accessed.  This is the component
461              handle returned by the call to the OMX_GetHandle method.
462          @param [in] nPort
463              nPort is used to select the port on the component to be used
464              for tunneling.
465          @param [in] hTunneledComp
466              Handle of the component to tunnel with.  This is the component
467              handle returned by the call to the OMX_GetHandle method.  When
468              this parameter is 0x0 the component should setup the port for
469              communication with the application / IL Client.
470          @param [in] nPortOutput
471              nPortOutput is used indicate the port the component should
472              tunnel with.
473          @param [in] pTunnelSetup
474              Pointer to the tunnel setup structure.  When nPort is an output port
475              the component should populate the fields of this structure.  When
476              When nPort is an input port the component should review the setup
477              provided by the component with the output port.
478          @return OMX_ERRORTYPE
479              If the command successfully executes, the return code will be
480              OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
481          @ingroup tun
482      */
483  
484      OMX_ERRORTYPE (*ComponentTunnelRequest)(
485          OMX_IN  OMX_HANDLETYPE hComp,
486          OMX_IN  OMX_U32 nPort,
487          OMX_IN  OMX_HANDLETYPE hTunneledComp,
488          OMX_IN  OMX_U32 nTunneledPort,
489          OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
490  
491      /** refer to OMX_UseBuffer in OMX_core.h or the OMX IL
492          specification for details on the UseBuffer method.
493          @ingroup buf
494       */
495      OMX_ERRORTYPE (*UseBuffer)(
496              OMX_IN OMX_HANDLETYPE hComponent,
497              OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
498              OMX_IN OMX_U32 nPortIndex,
499              OMX_IN OMX_PTR pAppPrivate,
500              OMX_IN OMX_U32 nSizeBytes,
501              OMX_IN OMX_U8* pBuffer);
502  
503      /** refer to OMX_AllocateBuffer in OMX_core.h or the OMX IL
504          specification for details on the AllocateBuffer method.
505          @ingroup buf
506       */
507      OMX_ERRORTYPE (*AllocateBuffer)(
508              OMX_IN OMX_HANDLETYPE hComponent,
509              OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer,
510              OMX_IN OMX_U32 nPortIndex,
511              OMX_IN OMX_PTR pAppPrivate,
512              OMX_IN OMX_U32 nSizeBytes);
513  
514      /** refer to OMX_FreeBuffer in OMX_core.h or the OMX IL
515          specification for details on the FreeBuffer method.
516          @ingroup buf
517       */
518      OMX_ERRORTYPE (*FreeBuffer)(
519              OMX_IN  OMX_HANDLETYPE hComponent,
520              OMX_IN  OMX_U32 nPortIndex,
521              OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
522  
523      /** refer to OMX_EmptyThisBuffer in OMX_core.h or the OMX IL
524          specification for details on the EmptyThisBuffer method.
525          @ingroup buf
526       */
527      OMX_ERRORTYPE (*EmptyThisBuffer)(
528              OMX_IN  OMX_HANDLETYPE hComponent,
529              OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
530  
531      /** refer to OMX_FillThisBuffer in OMX_core.h or the OMX IL
532          specification for details on the FillThisBuffer method.
533          @ingroup buf
534       */
535      OMX_ERRORTYPE (*FillThisBuffer)(
536              OMX_IN  OMX_HANDLETYPE hComponent,
537              OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
538  
539      /** The SetCallbacks method is used by the core to specify the callback
540          structure from the application to the component.  This is a blocking
541          call.  The component will return from this call within 5 msec.
542          @param [in] hComponent
543              Handle of the component to be accessed.  This is the component
544              handle returned by the call to the GetHandle function.
545          @param [in] pCallbacks
546              pointer to an OMX_CALLBACKTYPE structure used to provide the
547              callback information to the component
548          @param [in] pAppData
549              pointer to an application defined value.  It is anticipated that
550              the application will pass a pointer to a data structure or a "this
551              pointer" in this area to allow the callback (in the application)
552              to determine the context of the call
553          @return OMX_ERRORTYPE
554              If the command successfully executes, the return code will be
555              OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
556       */
557      OMX_ERRORTYPE (*SetCallbacks)(
558              OMX_IN  OMX_HANDLETYPE hComponent,
559              OMX_IN  OMX_CALLBACKTYPE* pCallbacks,
560              OMX_IN  OMX_PTR pAppData);
561  
562      /** ComponentDeInit method is used to deinitialize the component
563          providing a means to free any resources allocated at component
564          initialization.  NOTE:  After this call the component handle is
565          not valid for further use.
566          @param [in] hComponent
567              Handle of the component to be accessed.  This is the component
568              handle returned by the call to the GetHandle function.
569          @return OMX_ERRORTYPE
570              If the command successfully executes, the return code will be
571              OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
572       */
573      OMX_ERRORTYPE (*ComponentDeInit)(
574              OMX_IN  OMX_HANDLETYPE hComponent);
575  
576      /** @ingroup buf */
577      OMX_ERRORTYPE (*UseEGLImage)(
578              OMX_IN OMX_HANDLETYPE hComponent,
579              OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
580              OMX_IN OMX_U32 nPortIndex,
581              OMX_IN OMX_PTR pAppPrivate,
582              OMX_IN void* eglImage);
583  
584      OMX_ERRORTYPE (*ComponentRoleEnum)(
585          OMX_IN OMX_HANDLETYPE hComponent,
586          OMX_OUT OMX_U8 *cRole,
587          OMX_IN OMX_U32 nIndex);
588  
589  } OMX_COMPONENTTYPE;
590  
591  #ifdef __cplusplus
592  }
593  #endif /* __cplusplus */
594  
595  #endif
596  /* File EOF */
597