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