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
51extern "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 */
67typedef 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 */
78typedef 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 */
106typedef 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 */
114typedef 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 */
123typedef struct OMX_PARAM_SUSPENSIONPOLICYTYPE {
124    OMX_U32 nSize;
125    OMX_VERSIONTYPE nVersion;
126    OMX_SUSPENSIONPOLICYTYPE ePolicy;
127} OMX_PARAM_SUSPENSIONPOLICYTYPE;
128
129/** @ingroup rpm */
130typedef 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 */
139typedef struct OMX_PARAM_SUSPENSIONTYPE {
140    OMX_U32 nSize;
141    OMX_VERSIONTYPE nVersion;
142    OMX_SUSPENSIONTYPE eType;
143} OMX_PARAM_SUSPENSIONTYPE ;
144
145typedef 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 */
153typedef 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 */
163typedef 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 */
171typedef 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 */
182typedef 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 */
223typedef 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 */
235typedef 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 */
245typedef 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 */
255typedef 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 */
274typedef 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 */
284typedef 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 */
297typedef 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 */
324typedef 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