111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*
211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Copyright (c) 2008 The Khronos Group Inc.
311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * Permission is hereby granted, free of charge, to any person obtaining
511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * a copy of this software and associated documentation files (the
611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * "Software"), to deal in the Software without restriction, including
711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * without limitation the rights to use, copy, modify, merge, publish,
811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * distribute, sublicense, and/or sell copies of the Software, and to
911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * permit persons to whom the Software is furnished to do so, subject
1011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * to the following conditions:
1111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * The above copyright notice and this permission notice shall be included
1211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * in all copies or substantial portions of the Software.
1311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
1411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
1711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
1811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
1911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
2211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
2311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
2411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** OMX_Core.h - OpenMax IL version 1.1.2
2511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  The OMX_Core header file contains the definitions used by both the
2611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  application and the component to access common items.
2711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
2811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
2911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifndef OMX_Core_h
3011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_Core_h
3111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
3211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef __cplusplus
3311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelextern "C" {
3411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif /* __cplusplus */
3511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
3611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
3711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Each OMX header shall include all required header files to allow the
3811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  header to compile without errors.  The includes below are required
3911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  for this header file to compile successfully
4011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
4111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
4211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#include <OMX_Index.h>
4311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
4411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
4511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_COMMANDTYPE enumeration is used to specify the action in the
4611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  OMX_SendCommand macro.
4711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  @ingroup core
4811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
4911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum OMX_COMMANDTYPE
5011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
5111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandStateSet,    /**< Change the component state */
5211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandFlush,       /**< Flush the data queue(s) of a component */
5311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandPortDisable, /**< Disable a port on a component. */
5411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandPortEnable,  /**< Enable a port on a component. */
5511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandMarkBuffer,  /**< Mark a component/buffer for observation */
5611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
5711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
5811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_CommandMax = 0X7FFFFFFF
5911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_COMMANDTYPE;
6011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
6111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
6211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
6311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_STATETYPE enumeration is used to indicate or change the component
6411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  state.  This enumeration reflects the current state of the component when
6511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  used with the OMX_GetState macro or becomes the parameter in a state change
6611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  command when used with the OMX_SendCommand macro.
6711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
6811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  The component will be in the Loaded state after the component is initially
6911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  loaded into memory.  In the Loaded state, the component is not allowed to
7011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  allocate or hold resources other than to build it's internal parameter
7111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  and configuration tables.  The application will send one or more
7211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  SetParameters/GetParameters and SetConfig/GetConfig commands to the
7311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  component and the component will record each of these parameter and
7411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  configuration changes for use later.  When the application sends the
7511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  Idle command, the component will acquire the resources needed for the
7611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  specified configuration and will transition to the idle state if the
7711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  allocation is successful.  If the component cannot successfully
7811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  transition to the idle state for any reason, the state of the component
7911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  shall be fully rolled back to the Loaded state (e.g. all allocated
8011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  resources shall be released).  When the component receives the command
8111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  to go to the Executing state, it shall begin processing buffers by
8211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  sending all input buffers it holds to the application.  While
8311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  the component is in the Idle state, the application may also send the
8411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  Pause command.  If the component receives the pause command while in the
8511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  Idle state, the component shall send all input buffers it holds to the
8611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  application, but shall not begin processing buffers.  This will allow the
8711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  application to prefill buffers.
8811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
8911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  @ingroup comp
9011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
9111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
9211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum OMX_STATETYPE
9311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
9411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateInvalid,      /**< component has detected that it's internal data
9511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                structures are corrupted to the point that
9611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                it cannot determine it's state properly */
9711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateLoaded,      /**< component has been loaded but has not completed
9811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                initialization.  The OMX_SetParameter macro
9911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                and the OMX_GetParameter macro are the only
10011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                valid macros allowed to be sent to the
10111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                component in this state. */
10211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateIdle,        /**< component initialization has been completed
10311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                successfully and the component is ready to
10411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                to start. */
10511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateExecuting,   /**< component has accepted the start command and
10611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                is processing data (if data is available) */
10711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StatePause,       /**< component has received pause command */
10811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateWaitForResources, /**< component is waiting for resources, either after
10911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                preemption or before it gets the resources requested.
11011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                See specification for complete details. */
11111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
11211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
11311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateMax = 0X7FFFFFFF
11411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_STATETYPE;
11511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
11611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_ERRORTYPE enumeration defines the standard OMX Errors.  These
11711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  errors should cover most of the common failure cases.  However,
11811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  vendors are free to add additional error messages of their own as
11911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  long as they follow these rules:
12011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  1.  Vendor error messages shall be in the range of 0x90000000 to
12111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *      0x9000FFFF.
12211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  2.  Vendor error messages shall be defined in a header file provided
12311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *      with the component.  No error messages are allowed that are
12411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *      not defined.
12511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
12611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum OMX_ERRORTYPE
12711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
12811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorNone = 0,
12911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
13011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** There were insufficient resources to perform the requested operation */
13111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorInsufficientResources = (OMX_S32) 0x80001000,
13211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
13311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** There was an error, but the cause of the error could not be determined */
13411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorUndefined = (OMX_S32) 0x80001001,
13511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
13611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The component name string was not valid */
13711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorInvalidComponentName = (OMX_S32) 0x80001002,
13811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
13911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** No component with the specified name string was found */
14011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorComponentNotFound = (OMX_S32) 0x80001003,
14111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
14211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The component specified did not have a "OMX_ComponentInit" or
14311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      "OMX_ComponentDeInit entry point */
14411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorInvalidComponent = (OMX_S32) 0x80001004,
14511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
14611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** One or more parameters were not valid */
14711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorBadParameter = (OMX_S32) 0x80001005,
14811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
14911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The requested function is not implemented */
15011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorNotImplemented = (OMX_S32) 0x80001006,
15111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
15211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The buffer was emptied before the next buffer was ready */
15311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorUnderflow = (OMX_S32) 0x80001007,
15411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
15511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The buffer was not available when it was needed */
15611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorOverflow = (OMX_S32) 0x80001008,
15711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
15811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The hardware failed to respond as expected */
15911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorHardware = (OMX_S32) 0x80001009,
16011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
16111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The component is in the state OMX_StateInvalid */
16211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorInvalidState = (OMX_S32) 0x8000100A,
16311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
16411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Stream is found to be corrupt */
16511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorStreamCorrupt = (OMX_S32) 0x8000100B,
16611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
16711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Ports being connected are not compatible */
16811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorPortsNotCompatible = (OMX_S32) 0x8000100C,
16911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
17011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Resources allocated to an idle component have been
17111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      lost resulting in the component returning to the loaded state */
17211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorResourcesLost = (OMX_S32) 0x8000100D,
17311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
17411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** No more indicies can be enumerated */
17511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorNoMore = (OMX_S32) 0x8000100E,
17611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
17711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The component detected a version mismatch */
17811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorVersionMismatch = (OMX_S32) 0x8000100F,
17911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
18011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The component is not ready to return data at this time */
18111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorNotReady = (OMX_S32) 0x80001010,
18211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
18311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** There was a timeout that occurred */
18411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorTimeout = (OMX_S32) 0x80001011,
18511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
18611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** This error occurs when trying to transition into the state you are already in */
18711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorSameState = (OMX_S32) 0x80001012,
18811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
18911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Resources allocated to an executing or paused component have been
19011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      preempted, causing the component to return to the idle state */
19111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorResourcesPreempted = (OMX_S32) 0x80001013,
19211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
19311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** A non-supplier port sends this error to the IL client (via the EventHandler callback)
19411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      during the allocation of buffers (on a transition from the LOADED to the IDLE state or
19511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      on a port restart) when it deems that it has waited an unusually long time for the supplier
19611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      to send it an allocated buffer via a UseBuffer call. */
19711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorPortUnresponsiveDuringAllocation = (OMX_S32) 0x80001014,
19811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
19911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** A non-supplier port sends this error to the IL client (via the EventHandler callback)
20011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      during the deallocation of buffers (on a transition from the IDLE to LOADED state or
20111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      on a port stop) when it deems that it has waited an unusually long time for the supplier
20211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      to request the deallocation of a buffer header via a FreeBuffer call. */
20311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorPortUnresponsiveDuringDeallocation = (OMX_S32) 0x80001015,
20411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
20511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** A supplier port sends this error to the IL client (via the EventHandler callback)
20611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      during the stopping of a port (either on a transition from the IDLE to LOADED
20711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      state or a port stop) when it deems that it has waited an unusually long time for
20811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      the non-supplier to return a buffer via an EmptyThisBuffer or FillThisBuffer call. */
20911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorPortUnresponsiveDuringStop = (OMX_S32) 0x80001016,
21011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
21111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Attempting a state transtion that is not allowed */
21211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorIncorrectStateTransition = (OMX_S32) 0x80001017,
21311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
21411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /* Attempting a command that is not allowed during the present state. */
21511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorIncorrectStateOperation = (OMX_S32) 0x80001018,
21611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
21711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The values encapsulated in the parameter or config structure are not supported. */
21811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorUnsupportedSetting = (OMX_S32) 0x80001019,
21911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
22011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The parameter or config indicated by the given index is not supported. */
22111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorUnsupportedIndex = (OMX_S32) 0x8000101A,
22211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
22311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The port index supplied is incorrect. */
22411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorBadPortIndex = (OMX_S32) 0x8000101B,
22511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
22611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The port has lost one or more of its buffers and it thus unpopulated. */
22711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorPortUnpopulated = (OMX_S32) 0x8000101C,
22811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
22911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Component suspended due to temporary loss of resources */
23011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorComponentSuspended = (OMX_S32) 0x8000101D,
23111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
23211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Component suspended due to an inability to acquire dynamic resources */
23311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorDynamicResourcesUnavailable = (OMX_S32) 0x8000101E,
23411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
23511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** When the macroblock error reporting is enabled the component returns new error
23611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  for every frame that has errors */
23711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorMbErrorsInFrame = (OMX_S32) 0x8000101F,
23811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
23911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** A component reports this error when it cannot parse or determine the format of an input stream. */
24011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorFormatNotDetected = (OMX_S32) 0x80001020,
24111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
24211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The content open operation failed. */
24311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorContentPipeOpenFailed = (OMX_S32) 0x80001021,
24411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
24511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** The content creation operation failed. */
24611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorContentPipeCreationFailed = (OMX_S32) 0x80001022,
24711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
24811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Separate table information is being used */
24911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorSeperateTablesUsed = (OMX_S32) 0x80001023,
25011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
25111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  /** Tunneling is unsupported by the component*/
25211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorTunnelingUnsupported = (OMX_S32) 0x80001024,
25311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
25411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorKhronosExtensions = (OMX_S32)0x8F000000, /**< Reserved region for introducing Khronos Standard Extensions */
25511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorVendorStartUnused = (OMX_S32)0x90000000, /**< Reserved region for introducing Vendor Extensions */
25611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_ErrorMax = 0x7FFFFFFF
25711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_ERRORTYPE;
25811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
25911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup core */
26011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef OMX_ERRORTYPE (* OMX_COMPONENTINITTYPE)(OMX_IN  OMX_HANDLETYPE hComponent);
26111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
26211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup core */
26311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_COMPONENTREGISTERTYPE
26411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
26511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  const char          * pName;       /* Component name, 128 byte limit (including '\0') applies */
26611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_COMPONENTINITTYPE pInitialize; /* Component instance initialization function */
26711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_COMPONENTREGISTERTYPE;
26811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
26911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup core */
27011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudelextern OMX_COMPONENTREGISTERTYPE OMX_ComponentRegistered[];
27111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
27211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup rpm */
27311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_PRIORITYMGMTTYPE {
27411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 nSize;             /**< size of the structure in bytes */
27511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
27611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 nGroupPriority;            /**< Priority of the component group */
27711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_U32 nGroupID;                  /**< ID of the component group */
27811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_PRIORITYMGMTTYPE;
27911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
28011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Component name and Role names are limited to 128 characters including the terminating '\0'. */
28111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_MAX_STRINGNAME_SIZE 128
28211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
28311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup comp */
28411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_PARAM_COMPONENTROLETYPE {
28511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nSize;              /**< size of the structure in bytes */
28611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
28711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U8 cRole[OMX_MAX_STRINGNAME_SIZE];  /**< name of standard component which defines component role */
28811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_PARAM_COMPONENTROLETYPE;
28911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
29011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** End of Stream Buffer Flag:
29111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  *
29211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  * A component sets EOS when it has no more data to emit on a particular
29311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  * output port. Thus an output port shall set EOS on the last buffer it
29411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  * emits. A component's determination of when an output port should
29511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  * cease sending data is implemenation specific.
29611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  * @ingroup buf
29711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  */
29811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
29911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_EOS 0x00000001
30011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
30111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** Start Time Buffer Flag:
30211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
30311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * The source of a stream (e.g. a demux component) sets the STARTTIME
30411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * flag on the buffer that contains the starting timestamp for the
30511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * stream. The starting timestamp corresponds to the first data that
30611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * should be displayed at startup or after a seek.
30711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * The first timestamp of the stream is not necessarily the start time.
30811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * For instance, in the case of a seek to a particular video frame,
30911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * the target frame may be an interframe. Thus the first buffer of
31011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * the stream will be the intra-frame preceding the target frame and
31111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * the starttime will occur with the target frame (with any other
31211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * required frames required to reconstruct the target intervening).
31311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
31411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * The STARTTIME flag is directly associated with the buffer's
31511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * timestamp ' thus its association to buffer data and its
31611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * propagation is identical to the timestamp's.
31711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
31811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * When a Sync Component client receives a buffer with the
31911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * STARTTIME flag it shall perform a SetConfig on its sync port
32011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * using OMX_ConfigTimeClientStartTime and passing the buffer's
32111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * timestamp.
32211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
32311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup buf
32411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
32511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
32611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_STARTTIME 0x00000002
32711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
32811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
32911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
33011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** Decode Only Buffer Flag:
33111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
33211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * The source of a stream (e.g. a demux component) sets the DECODEONLY
33311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * flag on any buffer that should shall be decoded but should not be
33411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * displayed. This flag is used, for instance, when a source seeks to
33511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * a target interframe that requires the decode of frames preceding the
33611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * target to facilitate the target's reconstruction. In this case the
33711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * source would emit the frames preceding the target downstream
33811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * but mark them as decode only.
33911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
34011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * The DECODEONLY is associated with buffer data and propagated in a
34111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * manner identical to the buffer timestamp.
34211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
34311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * A component that renders data should ignore all buffers with
34411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * the DECODEONLY flag set.
34511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *
34611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup buf
34711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
34811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
34911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_DECODEONLY 0x00000004
35011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
35111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
35211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Data Corrupt Flag: This flag is set when the IL client believes the data in the associated buffer is corrupt
35311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup buf
35411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
35511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
35611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_DATACORRUPT 0x00000008
35711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
35811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* End of Frame: The buffer contains exactly one end of frame and no data
35911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  occurs after the end of frame. This flag is an optional hint. The absence
36011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  of this flag does not imply the absence of an end of frame within the buffer.
36111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup buf
36211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*/
36311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_ENDOFFRAME 0x00000010
36411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
36511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Sync Frame Flag: This flag is set when the buffer content contains a coded sync frame '
36611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  a frame that has no dependency on any other frame information
36711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel *  @ingroup buf
36811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
36911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_SYNCFRAME 0x00000020
37011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
37111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* Extra data present flag: there is extra data appended to the data stream
37211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * residing in the buffer
37311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup buf
37411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
37511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_EXTRADATA 0x00000040
37611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
37711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** Codec Config Buffer Flag:
37811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* OMX_BUFFERFLAG_CODECCONFIG is an optional flag that is set by an
37911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* output port when all bytes in the buffer form part or all of a set of
38011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* codec specific configuration data.  Examples include SPS/PPS nal units
38111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* for OMX_VIDEO_CodingAVC or AudioSpecificConfig data for
38211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* OMX_AUDIO_CodingAAC.  Any component that for a given stream sets
38311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* OMX_BUFFERFLAG_CODECCONFIG shall not mix codec configuration bytes
38411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* with frame data in the same buffer, and shall send all buffers
38511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* containing codec configuration bytes before any buffers containing
38611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* frame data that those configurations bytes describe.
38711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* If the stream format for a particular codec has a frame specific
38811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* header at the start of each frame, for example OMX_AUDIO_CodingMP3 or
38911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* OMX_AUDIO_CodingAAC in ADTS mode, then these shall be presented as
39011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* normal without setting OMX_BUFFERFLAG_CODECCONFIG.
39111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup buf
39211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
39311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_CODECCONFIG 0x00000080
39411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
39511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/*
39611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* OMX_BUFFERFLAG_READONLY: This flag is set when a component emitting the
39711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* buffer on an output port or the IL client wishes to identify the buffer
39811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* payload contents to be read-only. An IL client or an input port
39911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* shall not alter the contents of the buffer. This flag shall only be
40011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* cleared by the originator of the buffer when the buffer is returned.
40111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* For tunneled ports, the usage of this flag shall be allowed only if the
40211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel* components negotiated a read-only tunnel
40311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*/
40411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_BUFFERFLAG_READONLY 0x00000200
40511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
40611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup buf */
40711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_BUFFERHEADERTYPE
40811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
40911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nSize;              /**< size of the structure in bytes */
41011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
41111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U8* pBuffer;            /**< Pointer to actual block of memory
41211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     that is acting as the buffer */
41311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nAllocLen;          /**< size of the buffer allocated, in bytes */
41411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nFilledLen;         /**< number of bytes currently in the
41511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     buffer */
41611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nOffset;            /**< start offset of valid data in bytes from
41711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     the start of the buffer */
41811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_PTR pAppPrivate;        /**< pointer to any data the application
41911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     wants to associate with this buffer */
42011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_PTR pPlatformPrivate;   /**< pointer to any data the platform
42111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     wants to associate with this buffer */
42211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_PTR pInputPortPrivate;  /**< pointer to any data the input port
42311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     wants to associate with this buffer */
42411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_PTR pOutputPortPrivate; /**< pointer to any data the output port
42511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     wants to associate with this buffer */
42611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will generate a
42711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                              mark event upon processing this buffer. */
42811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_PTR pMarkData;          /**< Application specific data associated with
42911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     the mark sent on a mark event to disambiguate
43011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     this mark from others. */
43111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nTickCount;         /**< Optional entry that the component and
43211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     application can update with a tick count
43311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     when they access the component.  This
43411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     value should be in microseconds.  Since
43511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     this is a value relative to an arbitrary
43611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     starting point, this value cannot be used
43711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     to determine absolute time.  This is an
43811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     optional entry and not all components
43911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     will update it.*/
44011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel OMX_TICKS nTimeStamp;          /**< Timestamp corresponding to the sample
44111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     starting at the first logical sample
44211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     boundary in the buffer. Timestamps of
44311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     successive samples within the buffer may
44411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     be inferred by adding the duration of the
44511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     of the preceding buffer to the timestamp
44611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     of the preceding buffer.*/
44711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_U32     nFlags;           /**< buffer specific flags */
44811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_U32 nOutputPortIndex;     /**< The index of the output port (if any) using
44911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     this buffer */
45011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel  OMX_U32 nInputPortIndex;      /**< The index of the input port (if any) using
45111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                     this buffer */
45211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_BUFFERHEADERTYPE;
45311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
45411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_EXTRADATATYPE enumeration is used to define the
45511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * possible extra data payload types.
45611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * NB: this enum is binary backwards compatible with the previous
45711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * OMX_EXTRADATA_QUANT define.  This should be replaced with
45811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * OMX_ExtraDataQuantization.
45911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
46011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum OMX_EXTRADATATYPE
46111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
46211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_ExtraDataNone = 0,                       /**< Indicates that no more extra data sections follow */
46311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_ExtraDataQuantization,                   /**< The data payload contains quantization data */
46411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_ExtraDataKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
46511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_ExtraDataVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
46611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_ExtraDataMax = 0x7FFFFFFF
46711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_EXTRADATATYPE;
46811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
46911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
47011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_OTHER_EXTRADATATYPE  {
47111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nSize;
47211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_VERSIONTYPE nVersion;
47311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nPortIndex;
47411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EXTRADATATYPE eType;       /* Extra Data type */
47511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nDataSize;   /* Size of the supporting data to follow */
47611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U8  data[1];     /* Supporting data hint  */
47711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_OTHER_EXTRADATATYPE;
47811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
47911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup comp */
48011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_PORT_PARAM_TYPE {
48111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nSize;              /**< size of the structure in bytes */
48211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
48311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nPorts;             /**< The number of ports for this component */
48411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nStartPortNumber;   /** first port number for this type of port */
48511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_PORT_PARAM_TYPE;
48611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
48711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup comp */
48811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum OMX_EVENTTYPE
48911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
49011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EventCmdComplete,         /**< component has sucessfully completed a command */
49111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EventError,               /**< component has detected an error condition */
49211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EventMark,                /**< component has detected a buffer mark */
49311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EventPortSettingsChanged, /**< component is reported a port settings change */
49411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EventBufferFlag,          /**< component has detected an EOS */
49511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_EventResourcesAcquired,   /**< component has been granted resources and is
49611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                       automatically starting the state change from
49711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                       OMX_StateWaitForResources to OMX_StateIdle. */
49811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_EventComponentResumed,     /**< Component resumed due to reacquisition of resources */
49911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_EventDynamicResourcesAvailable, /**< Component has acquired previously unavailable dynamic resources */
50011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_EventPortFormatDetected,      /**< Component has detected a supported format. */
50111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
50211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
50311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_EventMax = 0x7FFFFFFF
50411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_EVENTTYPE;
50511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
50611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_CALLBACKTYPE
50711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
50811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    /** The EventHandler method is used to notify the application when an
50911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        event of interest occurs.  Events are defined in the OMX_EVENTTYPE
51011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        enumeration.  Please see that enumeration for details of what will
51111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        be returned for each type of event. Callbacks should not return
51211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        an error to the component, so if an error occurs, the application
51311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        shall handle it internally.  This is a blocking call.
51411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
51511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        The application should return from this call within 5 msec to avoid
51611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        blocking the component for an excessively long period of time.
51711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
51811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param hComponent
51911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            handle of the component to access.  This is the component
52011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            handle returned by the call to the GetHandle function.
52111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param pAppData
52211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pointer to an application defined value that was provided in the
52311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pAppData parameter to the OMX_GetHandle method for the component.
52411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            This application defined value is provided so that the application
52511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            can have a component specific context when receiving the callback.
52611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param eEvent
52711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            Event that the component wants to notify the application about.
52811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param nData1
52911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            nData will be the OMX_ERRORTYPE for an error event and will be
53011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            an OMX_COMMANDTYPE for a command complete event and OMX_INDEXTYPE for a OMX_PortSettingsChanged event.
53111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         @param nData2
53211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            nData2 will hold further information related to the event. Can be OMX_STATETYPE for
53311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            a OMX_CommandStateSet command or port index for a OMX_PortSettingsChanged event.
53411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            Default value is 0 if not used. )
53511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param pEventData
53611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            Pointer to additional event-specific data (see spec for meaning).
53711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel      */
53811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
53911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   OMX_ERRORTYPE (*EventHandler)(
54011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_HANDLETYPE hComponent,
54111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_PTR pAppData,
54211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_EVENTTYPE eEvent,
54311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_U32 nData1,
54411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_U32 nData2,
54511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_PTR pEventData);
54611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
54711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    /** The EmptyBufferDone method is used to return emptied buffers from an
54811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        input port back to the application for reuse.  This is a blocking call
54911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        so the application should not attempt to refill the buffers during this
55011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        call, but should queue them and refill them in another thread.  There
55111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        is no error return, so the application shall handle any errors generated
55211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        internally.
55311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
55411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        The application should return from this call within 5 msec.
55511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
55611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param hComponent
55711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            handle of the component to access.  This is the component
55811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            handle returned by the call to the GetHandle function.
55911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param pAppData
56011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pointer to an application defined value that was provided in the
56111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pAppData parameter to the OMX_GetHandle method for the component.
56211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            This application defined value is provided so that the application
56311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            can have a component specific context when receiving the callback.
56411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param pBuffer
56511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
56611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            or AllocateBuffer indicating the buffer that was emptied.
56711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @ingroup buf
56811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel     */
56911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_ERRORTYPE (*EmptyBufferDone)(
57011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_HANDLETYPE hComponent,
57111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_PTR pAppData,
57211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
57311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
57411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    /** The FillBufferDone method is used to return filled buffers from an
57511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        output port back to the application for emptying and then reuse.
57611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        This is a blocking call so the application should not attempt to
57711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        empty the buffers during this call, but should queue the buffers
57811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        and empty them in another thread.  There is no error return, so
57911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the application shall handle any errors generated internally.  The
58011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        application shall also update the buffer header to indicate the
58111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        number of bytes placed into the buffer.
58211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
58311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        The application should return from this call within 5 msec.
58411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
58511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param hComponent
58611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            handle of the component to access.  This is the component
58711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            handle returned by the call to the GetHandle function.
58811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param pAppData
58911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pointer to an application defined value that was provided in the
59011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pAppData parameter to the OMX_GetHandle method for the component.
59111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            This application defined value is provided so that the application
59211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            can have a component specific context when receiving the callback.
59311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @param pBuffer
59411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
59511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel            or AllocateBuffer indicating the buffer that was filled.
59611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        @ingroup buf
59711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel     */
59811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_ERRORTYPE (*FillBufferDone)(
59911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_OUT OMX_HANDLETYPE hComponent,
60011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_OUT OMX_PTR pAppData,
60111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer);
60211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
60311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_CALLBACKTYPE;
60411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
60511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_BUFFERSUPPLIERTYPE enumeration is used to dictate port supplier
60611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    preference when tunneling between two ports.
60711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup tun buf
60811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*/
60911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef enum OMX_BUFFERSUPPLIERTYPE
61011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
61111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BufferSupplyUnspecified = 0x0, /**< port supplying the buffers is unspecified,
61211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel                                              or don't care */
61311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BufferSupplyInput,             /**< input port supplies the buffers */
61411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BufferSupplyOutput,            /**< output port supplies the buffers */
61511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BufferSupplyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
61611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BufferSupplyVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
61711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BufferSupplyMax = 0x7FFFFFFF
61811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_BUFFERSUPPLIERTYPE;
61911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
62011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
62111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** buffer supplier parameter
62211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel * @ingroup tun
62311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
62411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_PARAM_BUFFERSUPPLIERTYPE {
62511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nSize; /**< size of the structure in bytes */
62611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
62711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nPortIndex; /**< port that this structure applies to */
62811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BUFFERSUPPLIERTYPE eBufferSupplier; /**< buffer supplier */
62911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_PARAM_BUFFERSUPPLIERTYPE;
63011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
63111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
63211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/**< indicates that buffers received by an input port of a tunnel
63311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel     may not modify the data in the buffers
63411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel     @ingroup tun
63511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
63611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_PORTTUNNELFLAG_READONLY 0x00000001
63711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
63811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
63911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_TUNNELSETUPTYPE structure is used to pass data from an output
64011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    port to an input port as part the two ComponentTunnelRequest calls
64111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    resulting from a OMX_SetupTunnel call from the IL Client.
64211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup tun
64311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
64411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudeltypedef struct OMX_TUNNELSETUPTYPE
64511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel{
64611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_U32 nTunnelFlags;             /**< bit flags for tunneling */
64711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_BUFFERSUPPLIERTYPE eSupplier; /**< supplier preference */
64811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel} OMX_TUNNELSETUPTYPE;
64911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
65011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* OMX Component headers is included to enable the core to use
65111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   macros for functions into the component for OMX release 1.0.
65211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   Developers should not access any structures or data from within
65311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel   the component header directly */
65411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* TO BE REMOVED - #include <OMX_Component.h> */
65511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
65611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** GetComponentVersion will return information about the component.
65711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This is a blocking call.  This macro will go directly from the
65811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    application to the component (via a core macro).  The
65911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    component will return from this call within 5 msec.
66011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
66111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle of component to execute the command
66211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pComponentName
66311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an empty string of length 128 bytes.  The component
66411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        will write its name into this string.  The name will be
66511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        terminated by a single zero byte.  The name of a component will
66611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        be 127 bytes or less to leave room for the trailing zero byte.
66711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        An example of a valid component name is "OMX.ABC.ChannelMixer\0".
66811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pComponentVersion
66911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX Version structure that the component will fill
67011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        in.  The component will fill in a value that indicates the
67111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component version.  NOTE: the component version is NOT the same
67211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        as the OMX Specification version (found in all structures).  The
67311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component version is defined by the vendor of the component and
67411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        its value is entirely up to the component vendor.
67511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pSpecVersion
67611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX Version structure that the component will fill
67711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        in.  The SpecVersion is the version of the specification that the
67811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component was built against.  Please note that this value may or
67911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        may not match the structure's version.  For example, if the
68011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component was built against the 2.0 specification, but the
68111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        application (which creates the structure is built against the
68211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        1.0 specification the versions would be different.
68311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pComponentUUID
68411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to the UUID of the component which will be filled in by
68511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the component.  The UUID is a unique identifier that is set at
68611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        RUN time for the component and is unique to each instantion of
68711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the component.
68811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
68911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
69011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
69111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
69211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
69311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_GetComponentVersion(                            \
69411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
69511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentName,                                     \
69611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentVersion,                                  \
69711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pSpecVersion,                                       \
69811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentUUID)                                     \
69911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->GetComponentVersion(  \
70011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
70111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentName,                                     \
70211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentVersion,                                  \
70311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pSpecVersion,                                       \
70411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentUUID)                 /* Macro End */
70511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
70611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
70711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** Send a command to the component.  This call is a non-blocking call.
70811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should check the parameters and then queue the command
70911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    to the component thread to be executed.  The component thread shall
71011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    send the EventHandler() callback at the conclusion of the command.
71111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This macro will go directly from the application to the component (via
71211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    a core macro).  The component will return from this call within 5 msec.
71311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
71411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    When the command is "OMX_CommandStateSet" the component will queue a
71511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    state transition to the new state idenfied in nParam.
71611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
71711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    When the command is "OMX_CommandFlush", to flush a port's buffer queues,
71811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the command will force the component to return all buffers NOT CURRENTLY
71911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    BEING PROCESSED to the application, in the order in which the buffers
72011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    were received.
72111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
72211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    When the command is "OMX_CommandPortDisable" or
72311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    "OMX_CommandPortEnable", the component's port (given by the value of
72411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    nParam) will be stopped or restarted.
72511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
72611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    When the command "OMX_CommandMarkBuffer" is used to mark a buffer, the
72711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    pCmdData will point to a OMX_MARKTYPE structure containing the component
72811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    handle of the component to examine the buffer chain for the mark.  nParam1
72911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    contains the index of the port on which the buffer mark is applied.
73011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
73111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    Specification text for more details.
73211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
73311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
73411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle of component to execute the command
73511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] Cmd
73611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Command for the component to execute
73711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nParam
73811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Parameter for the command to be executed.  When Cmd has the value
73911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_CommandStateSet, value is a member of OMX_STATETYPE.  When Cmd has
74011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the value OMX_CommandFlush, value of nParam indicates which port(s)
74111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        to flush. -1 is used to flush all ports a single port index will
74211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        only flush that port.  When Cmd has the value "OMX_CommandPortDisable"
74311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        or "OMX_CommandPortEnable", the component's port is given by
74411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the value of nParam.  When Cmd has the value "OMX_CommandMarkBuffer"
74511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the components pot is given by the value of nParam.
74611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pCmdData
74711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Parameter pointing to the OMX_MARKTYPE structure when Cmd has the value
74811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        "OMX_CommandMarkBuffer".
74911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
75011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
75111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
75211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
75311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
75411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_SendCommand(                                    \
75511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         hComponent,                                        \
75611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         Cmd,                                               \
75711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         nParam,                                            \
75811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         pCmdData)                                          \
75911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel     ((OMX_COMPONENTTYPE*)hComponent)->SendCommand(         \
76011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         hComponent,                                        \
76111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         Cmd,                                               \
76211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         nParam,                                            \
76311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel         pCmdData)                          /* Macro End */
76411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
76511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
76611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetParameter macro will get one of the current parameter
76711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    settings from the component.  This macro cannot only be invoked when
76811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the component is in the OMX_StateInvalid state.  The nParamIndex
76911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    parameter is used to indicate which structure is being requested from
77011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the component.  The application shall allocate the correct structure
77111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    and shall fill in the structure size and version information before
77211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    invoking this macro.  When the parameter applies to a port, the
77311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    caller shall fill in the appropriate nPortIndex value indicating the
77411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    port on which the parameter applies. If the component has not had
77511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    any settings changed, then the component should return a set of
77611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    valid DEFAULT  parameters for the component.  This is a blocking
77711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    call.
77811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
77911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 20 msec.
78011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
78111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
78211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
78311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
78411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nParamIndex
78511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Index of the structure to be filled.  This value is from the
78611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_INDEXTYPE enumeration.
78711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in,out] pComponentParameterStructure
78811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Pointer to application allocated structure to be filled by the
78911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component.
79011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
79111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
79211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
79311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
79411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
79511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_GetParameter(                                   \
79611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
79711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nParamIndex,                                        \
79811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentParameterStructure)                        \
79911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->GetParameter(         \
80011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
80111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nParamIndex,                                        \
80211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentParameterStructure)    /* Macro End */
80311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
80411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
80511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_SetParameter macro will send an initialization parameter
80611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    structure to a component.  Each structure shall be sent one at a time,
80711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    in a separate invocation of the macro.  This macro can only be
80811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    invoked when the component is in the OMX_StateLoaded state, or the
80911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    port is disabled (when the parameter applies to a port). The
81011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    nParamIndex parameter is used to indicate which structure is being
81111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    passed to the component.  The application shall allocate the
81211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    correct structure and shall fill in the structure size and version
81311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    information (as well as the actual data) before invoking this macro.
81411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The application is free to dispose of this structure after the call
81511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    as the component is required to copy any data it shall retain.  This
81611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    is a blocking call.
81711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
81811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 20 msec.
81911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
82011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
82111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
82211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
82311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nIndex
82411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Index of the structure to be sent.  This value is from the
82511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_INDEXTYPE enumeration.
82611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pComponentParameterStructure
82711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to application allocated structure to be used for
82811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        initialization by the component.
82911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
83011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
83111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
83211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
83311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
83411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_SetParameter(                                   \
83511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
83611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nParamIndex,                                        \
83711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentParameterStructure)                        \
83811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->SetParameter(         \
83911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
84011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nParamIndex,                                        \
84111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentParameterStructure)    /* Macro End */
84211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
84311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
84411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetConfig macro will get one of the configuration structures
84511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    from a component.  This macro can be invoked anytime after the
84611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    component has been loaded.  The nParamIndex call parameter is used to
84711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    indicate which structure is being requested from the component.  The
84811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    application shall allocate the correct structure and shall fill in the
84911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    structure size and version information before invoking this macro.
85011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    If the component has not had this configuration parameter sent before,
85111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    then the component should return a set of valid DEFAULT values for the
85211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    component.  This is a blocking call.
85311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
85411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
85511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
85611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
85711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
85811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
85911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nIndex
86011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Index of the structure to be filled.  This value is from the
86111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_INDEXTYPE enumeration.
86211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in,out] pComponentConfigStructure
86311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to application allocated structure to be filled by the
86411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component.
86511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
86611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
86711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
86811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
86911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel*/
87011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_GetConfig(                                      \
87111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
87211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nConfigIndex,                                       \
87311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentConfigStructure)                           \
87411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->GetConfig(            \
87511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
87611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nConfigIndex,                                       \
87711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentConfigStructure)       /* Macro End */
87811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
87911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
88011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_SetConfig macro will send one of the configuration
88111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    structures to a component.  Each structure shall be sent one at a time,
88211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    each in a separate invocation of the macro.  This macro can be invoked
88311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    anytime after the component has been loaded.  The application shall
88411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    allocate the correct structure and shall fill in the structure size
88511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    and version information (as well as the actual data) before invoking
88611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    this macro.  The application is free to dispose of this structure after
88711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the call as the component is required to copy any data it shall retain.
88811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This is a blocking call.
88911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
89011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
89111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
89211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
89311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
89411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
89511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nConfigIndex
89611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Index of the structure to be sent.  This value is from the
89711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_INDEXTYPE enumeration above.
89811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pComponentConfigStructure
89911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to application allocated structure to be used for
90011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        initialization by the component.
90111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
90211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
90311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
90411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
90511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
90611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_SetConfig(                                      \
90711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
90811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nConfigIndex,                                       \
90911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentConfigStructure)                           \
91011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->SetConfig(            \
91111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
91211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nConfigIndex,                                       \
91311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pComponentConfigStructure)       /* Macro End */
91411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
91511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
91611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetExtensionIndex macro will invoke a component to translate
91711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    a vendor specific configuration or parameter string into an OMX
91811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    structure index.  There is no requirement for the vendor to support
91911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    this command for the indexes already found in the OMX_INDEXTYPE
92011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    enumeration (this is done to save space in small components).  The
92111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    component shall support all vendor supplied extension indexes not found
92211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    in the master OMX_INDEXTYPE enumeration.  This is a blocking call.
92311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
92411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
92511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
92611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
92711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
92811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the GetHandle function.
92911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] cParameterName
93011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_STRING that shall be less than 128 characters long including
93111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the trailing null byte.  This is the string that will get
93211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        translated by the component into a configuration index.
93311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pIndexType
93411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        a pointer to a OMX_INDEXTYPE to receive the index value.
93511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
93611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
93711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
93811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
93911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
94011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_GetExtensionIndex(                              \
94111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
94211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        cParameterName,                                     \
94311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pIndexType)                                         \
94411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->GetExtensionIndex(    \
94511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
94611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        cParameterName,                                     \
94711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pIndexType)                     /* Macro End */
94811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
94911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
95011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetState macro will invoke the component to get the current
95111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    state of the component and place the state value into the location
95211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    pointed to by pState.
95311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
95411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
95511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
95611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
95711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
95811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
95911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pState
96011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to the location to receive the state.  The value returned
96111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        is one of the OMX_STATETYPE members
96211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
96311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
96411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
96511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp
96611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
96711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_GetState(                                       \
96811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
96911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pState)                                             \
97011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->GetState(             \
97111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
97211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pState)                         /* Macro End */
97311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
97411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
97511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_UseBuffer macro will request that the component use
97611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    a buffer (and allocate its own buffer header) already allocated
97711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    by another component, or by the IL Client. This is a blocking
97811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    call.
97911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
98011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 20 msec.
98111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
98211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
98311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
98411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
98511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] ppBuffer
98611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_BUFFERHEADERTYPE structure used to receive the
98711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to the buffer header
98811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
98911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
99011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
99111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp buf
99211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
99311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
99411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_UseBuffer(                                      \
99511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           hComponent,                                      \
99611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           ppBufferHdr,                                     \
99711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           nPortIndex,                                      \
99811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           pAppPrivate,                                     \
99911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           nSizeBytes,                                      \
100011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           pBuffer)                                         \
100111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->UseBuffer(            \
100211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           hComponent,                                      \
100311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           ppBufferHdr,                                     \
100411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           nPortIndex,                                      \
100511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           pAppPrivate,                                     \
100611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           nSizeBytes,                                      \
100711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           pBuffer)
100811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
100911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
101011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_AllocateBuffer macro will request that the component allocate
101111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    a new buffer and buffer header.  The component will allocate the
101211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    buffer and the buffer header and return a pointer to the buffer
101311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    header.  This is a blocking call.
101411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
101511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
101611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
101711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
101811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
101911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
102011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] ppBuffer
102111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_BUFFERHEADERTYPE structure used to receive
102211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the pointer to the buffer header
102311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nPortIndex
102411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex is used to select the port on the component the buffer will
102511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        be used with.  The port can be found by using the nPortIndex
102611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        value as an index into the Port Definition array of the component.
102711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pAppPrivate
102811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pAppPrivate is used to initialize the pAppPrivate member of the
102911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        buffer header structure.
103011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nSizeBytes
103111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        size of the buffer to allocate.  Used when bAllocateNew is true.
103211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
103311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
103411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
103511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp buf
103611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
103711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_AllocateBuffer(                                 \
103811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
103911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        ppBuffer,                                           \
104011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex,                                         \
104111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pAppPrivate,                                        \
104211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nSizeBytes)                                         \
104311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->AllocateBuffer(       \
104411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
104511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        ppBuffer,                                           \
104611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex,                                         \
104711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pAppPrivate,                                        \
104811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nSizeBytes)                     /* Macro End */
104911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
105011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
105111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_FreeBuffer macro will release a buffer header from the component
105211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    which was allocated using either OMX_AllocateBuffer or OMX_UseBuffer. If
105311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the component allocated the buffer (see the OMX_UseBuffer macro) then
105411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the component shall free the buffer and buffer header. This is a
105511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    blocking call.
105611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
105711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 20 msec.
105811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
105911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
106011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
106111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
106211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nPortIndex
106311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex is used to select the port on the component the buffer will
106411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        be used with.
106511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pBuffer
106611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
106711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        or AllocateBuffer.
106811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
106911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
107011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
107111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp buf
107211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
107311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_FreeBuffer(                                     \
107411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
107511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex,                                         \
107611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pBuffer)                                            \
107711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->FreeBuffer(           \
107811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
107911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex,                                         \
108011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pBuffer)                        /* Macro End */
108111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
108211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
108311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_EmptyThisBuffer macro will send a buffer full of data to an
108411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    input port of a component.  The buffer will be emptied by the component
108511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    and returned to the application via the EmptyBufferDone call back.
108611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This is a non-blocking call in that the component will record the buffer
108711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    and return immediately and then empty the buffer, later, at the proper
108811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    time.  As expected, this macro may be invoked only while the component
108911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    is in the OMX_StateExecuting.  If nPortIndex does not specify an input
109011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    port, the component shall return an error.
109111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
109211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
109311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
109411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
109511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
109611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
109711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pBuffer
109811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
109911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        or AllocateBuffer.
110011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
110111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
110211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
110311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp buf
110411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
110511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_EmptyThisBuffer(                                \
110611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
110711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pBuffer)                                            \
110811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->EmptyThisBuffer(      \
110911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
111011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pBuffer)                        /* Macro End */
111111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
111211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
111311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_FillThisBuffer macro will send an empty buffer to an
111411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    output port of a component.  The buffer will be filled by the component
111511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    and returned to the application via the FillBufferDone call back.
111611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This is a non-blocking call in that the component will record the buffer
111711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    and return immediately and then fill the buffer, later, at the proper
111811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    time.  As expected, this macro may be invoked only while the component
111911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    is in the OMX_ExecutingState.  If nPortIndex does not specify an output
112011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    port, the component shall return an error.
112111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
112211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 5 msec.
112311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
112411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
112511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
112611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
112711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pBuffer
112811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
112911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        or AllocateBuffer.
113011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
113111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
113211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
113311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp buf
113411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
113511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_FillThisBuffer(                                 \
113611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
113711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pBuffer)                                            \
113811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->FillThisBuffer(       \
113911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        hComponent,                                         \
114011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pBuffer)                        /* Macro End */
114111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
114211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
114311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
114411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_UseEGLImage macro will request that the component use
114511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    a EGLImage provided by EGL (and allocate its own buffer header)
114611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This is a blocking call.
114711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
114811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The component should return from this call within 20 msec.
114911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
115011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
115111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
115211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the OMX_GetHandle function.
115311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] ppBuffer
115411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_BUFFERHEADERTYPE structure used to receive the
115511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to the buffer header.  Note that the memory location used
115611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        for this buffer is NOT visible to the IL Client.
115711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nPortIndex
115811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortIndex is used to select the port on the component the buffer will
115911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        be used with.  The port can be found by using the nPortIndex
116011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        value as an index into the Port Definition array of the component.
116111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pAppPrivate
116211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pAppPrivate is used to initialize the pAppPrivate member of the
116311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        buffer header structure.
116411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] eglImage
116511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        eglImage contains the handle of the EGLImage to use as a buffer on the
116611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        specified port.  The component is expected to validate properties of
116711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the EGLImage against the configuration of the port to ensure the component
116811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        can use the EGLImage as a buffer.
116911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
117011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
117111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
117211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup comp buf
117311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
117411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#define OMX_UseEGLImage(                                    \
117511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           hComponent,                                      \
117611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           ppBufferHdr,                                     \
117711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           nPortIndex,                                      \
117811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           pAppPrivate,                                     \
117911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           eglImage)                                        \
118011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    ((OMX_COMPONENTTYPE*)hComponent)->UseEGLImage(          \
118111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           hComponent,                                      \
118211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           ppBufferHdr,                                     \
118311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           nPortIndex,                                      \
118411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           pAppPrivate,                                     \
118511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel           eglImage)
118611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
118711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_Init method is used to initialize the OMX core.  It shall be the
118811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    first call made into OMX and it should only be executed one time without
118911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    an interviening OMX_Deinit call.
119011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
119111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 20 msec.
119211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
119311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
119411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
119511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
119611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
119711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
119811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Init(void);
119911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
120011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
120111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_Deinit method is used to deinitialize the OMX core.  It shall be
120211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the last call made into OMX. In the event that the core determines that
120311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    thare are components loaded when this call is made, the core may return
120411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    with an error rather than try to unload the components.
120511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
120611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 20 msec.
120711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
120811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
120911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
121011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
121111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
121211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
121311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Deinit(void);
121411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
121511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
121611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_ComponentNameEnum method will enumerate through all the names of
121711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    recognised valid components in the system. This function is provided
121811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    as a means to detect all the components in the system run-time. There is
121911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    no strict ordering to the enumeration order of component names, although
122011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    each name will only be enumerated once.  If the OMX core supports run-time
122111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    installation of new components, it is only requried to detect newly
122211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    installed components when the first call to enumerate component names
122311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    is made (i.e. when nIndex is 0x0).
122411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
122511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call in 20 msec.
122611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
122711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] cComponentName
122811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to a null terminated string with the component name.  The
122911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        names of the components are strings less than 127 bytes in length
123011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        plus the trailing null for a maximum size of 128 bytes.  An example
123111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0".  Names are
123211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        assigned by the vendor, but shall start with "OMX." and then have
123311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the Vendor designation next.
123411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nNameLength
123511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        number of characters in the cComponentName string.  With all
123611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component name strings restricted to less than 128 characters
123711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        (including the trailing null) it is recomended that the caller
123811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        provide a input string for the cComponentName of 128 characters.
123911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nIndex
124011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        number containing the enumeration index for the component.
124111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Multiple calls to OMX_ComponentNameEnum with increasing values
124211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        of nIndex will enumerate through the component names in the
124311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        system until OMX_ErrorNoMore is returned.  The value of nIndex
124411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        is 0 to (N-1), where N is the number of valid installed components
124511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        in the system.
124611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
124711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
124811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  When the value of nIndex exceeds the number of
124911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        components in the system minus 1, OMX_ErrorNoMore will be
125011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        returned. Otherwise the appropriate OMX error will be returned.
125111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
125211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
125311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_ComponentNameEnum(
125411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_OUT OMX_STRING cComponentName,
125511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_U32 nNameLength,
125611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_U32 nIndex);
125711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
125811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
125911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetHandle method will locate the component specified by the
126011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    component name given, load that component into memory and then invoke
126111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the component's methods to create an instance of the component.
126211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
126311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 20 msec.
126411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
126511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] pHandle
126611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an OMX_HANDLETYPE pointer to be filled in by this method.
126711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] cComponentName
126811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to a null terminated string with the component name.  The
126911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        names of the components are strings less than 127 bytes in length
127011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        plus the trailing null for a maximum size of 128 bytes.  An example
127111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0".  Names are
127211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        assigned by the vendor, but shall start with "OMX." and then have
127311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the Vendor designation next.
127411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pAppData
127511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to an application defined value that will be returned
127611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        during callbacks so that the application can identify the source
127711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        of the callback.
127811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] pCallBacks
127911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        pointer to a OMX_CALLBACKTYPE structure that will be passed to the
128011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        component to initialize it with.
128111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
128211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
128311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
128411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
128511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
128611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_GetHandle(
128711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_OUT OMX_HANDLETYPE* pHandle,
128811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_STRING cComponentName,
128911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_PTR pAppData,
129011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_CALLBACKTYPE* pCallBacks);
129111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
129211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
129311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_FreeHandle method will free a handle allocated by the OMX_GetHandle
129411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    method.  If the component reference count goes to zero, the component will
129511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    be unloaded from memory.
129611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
129711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 20 msec when the component is
129811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    in the OMX_StateLoaded state.
129911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
130011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hComponent
130111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  This is the component
130211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        handle returned by the call to the GetHandle function.
130311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
130411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
130511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
130611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
130711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
130811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_FreeHandle(
130911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_HANDLETYPE hComponent);
131011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
131111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
131211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
131311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_SetupTunnel method will handle the necessary calls to the components
131411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    to setup the specified tunnel the two components.  NOTE: This is
131511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    an actual method (not a #define macro).  This method will make calls into
131611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    the component ComponentTunnelRequest method to do the actual tunnel
131711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    connection.
131811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
131911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The ComponentTunnelRequest method on both components will be called.
132011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    This method shall not be called unless the component is in the
132111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StateLoaded state except when the ports used for the tunnel are
132211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    disabled. In this case, the component may be in the OMX_StateExecuting,
132311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_StatePause, or OMX_StateIdle states.
132411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
132511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 20 msec.
132611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
132711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hOutput
132811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Handle of the component to be accessed.  Also this is the handle
132911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        of the component whose port, specified in the nPortOutput parameter
133011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        will be used the source for the tunnel. This is the component handle
133111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        returned by the call to the OMX_GetHandle function.  There is a
133211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        requirement that hOutput be the source for the data when
133311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        tunelling (i.e. nPortOutput is an output port).  If 0x0, the component
133411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        specified in hInput will have it's port specified in nPortInput
133511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        setup for communication with the application / IL client.
133611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nPortOutput
133711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortOutput is used to select the source port on component to be
133811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        used in the tunnel.
133911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] hInput
134011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        This is the component to setup the tunnel with. This is the handle
134111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        of the component whose port, specified in the nPortInput parameter
134211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        will be used the destination for the tunnel. This is the component handle
134311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        returned by the call to the OMX_GetHandle function.  There is a
134411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        requirement that hInput be the destination for the data when
134511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        tunelling (i.e. nPortInut is an input port).   If 0x0, the component
134611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        specified in hOutput will have it's port specified in nPortPOutput
134711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        setup for communication with the application / IL client.
134811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] nPortInput
134911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        nPortInput is used to select the destination port on component to be
135011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        used in the tunnel.
135111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @return OMX_ERRORTYPE
135211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If the command successfully executes, the return code will be
135311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
135411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        When OMX_ErrorNotImplemented is returned, one or both components is
135511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        a non-interop component and does not support tunneling.
135611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
135711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        On failure, the ports of both components are setup for communication
135811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        with the application / IL Client.
135911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core tun
136011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
136111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_SetupTunnel(
136211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_HANDLETYPE hOutput,
136311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_U32 nPortOutput,
136411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_HANDLETYPE hInput,
136511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN  OMX_U32 nPortInput);
136611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
136711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** @ingroup cp */
136811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE   OMX_GetContentPipe(
136911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_OUT OMX_HANDLETYPE *hPipe,
137011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_IN OMX_STRING szURI);
137111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
137211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetComponentsOfRole method will return the number of components that support the given
137311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    role and (if the compNames field is non-NULL) the names of those components. The call will fail if
137411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the
137511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    client should:
137611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        * first call this function with the compNames field NULL to determine the number of component names
137711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        * second call this function with the compNames field pointing to an array of names allocated
137811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel          according to the number returned by the first call.
137911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
138011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 5 msec.
138111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
138211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] role
138311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        This is generic standard component name consisting only of component class
138411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        name and the type within that class (e.g. 'audio_decoder.aac').
138511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [inout] pNumComps
138611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        This is used both as input and output.
138711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
138811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If compNames is NULL, the input is ignored and the output specifies how many components support
138911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        the given role.
139011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
139111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If compNames is not NULL, on input it bounds the size of the input structure and
139211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        on output, it specifies the number of components string names listed within the compNames parameter.
139311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [inout] compNames
139411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings which accepts
139511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        a list of the names of all physical components that implement the specified standard component name.
139611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        Each name is NULL terminated. numComps indicates the number of names.
139711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
139811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
139911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_GetComponentsOfRole (
140011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel	OMX_IN      OMX_STRING role,
140111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_INOUT   OMX_U32 *pNumComps,
140211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_INOUT   OMX_U8  **compNames);
140311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
140411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/** The OMX_GetRolesOfComponent method will return the number of roles supported by the given
140511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    component and (if the roles field is non-NULL) the names of those roles. The call will fail if
140611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the
140711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    client should:
140811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        * first call this function with the roles field NULL to determine the number of role names
140911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        * second call this function with the roles field pointing to an array of names allocated
141011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel          according to the number returned by the first call.
141111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
141211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    The core should return from this call within 5 msec.
141311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
141411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [in] compName
141511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        This is the name of the component being queried about.
141611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [inout] pNumRoles
141711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        This is used both as input and output.
141811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
141911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If roles is NULL, the input is ignored and the output specifies how many roles the component supports.
142011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
142111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If compNames is not NULL, on input it bounds the size of the input structure and
142211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        on output, it specifies the number of roles string names listed within the roles parameter.
142311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @param [out] roles
142411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings
142511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        which accepts a list of the names of all standard components roles implemented on the
142611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel        specified component name. numComps indicates the number of names.
142711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    @ingroup core
142811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel */
142911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry StrudelOMX_API OMX_ERRORTYPE OMX_GetRolesOfComponent (
143011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel	OMX_IN      OMX_STRING compName,
143111e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_INOUT   OMX_U32 *pNumRoles,
143211e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel    OMX_OUT     OMX_U8 **roles);
143311e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
143411e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#ifdef __cplusplus
143511e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel}
143611e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif /* __cplusplus */
143711e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
143811e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel#endif
143911e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel/* File EOF */
144011e4d07ddf6a35f55d6ad06edb850b015218c7acThierry Strudel
1441