[Buildroot] [PATCH 1/1] nvidia-tegra23: new package

Yann E. MORIN yann.morin.1998 at free.fr
Tue Nov 18 20:22:46 UTC 2014


Nicolas, All,

On 2014-11-05 16:52 +0100, Nicolas Serafini spake thusly:
> This patch adds a new package for all libraries, drivers and codecs
> provided by Nvidia Linux 4 Tegra release 16.4.0.

I'm already working on a package for the Nvidia blobs for i386 and
x86_64, so I think your submision could fit in that effort.

I'll take a look at this patch and carry it in my branch to see if it
was posible to commonalise stuff between the Tegra and PC worlds.

Regards,
Yann E. MORIN.

> Signed-off-by: Nicolas Serafini <nicolas.serafini at sensefly.com>
> ---
>  package/Config.in                                  |     1 +
>  package/jpeg/Config.in                             |    10 +
>  package/nvidia-tegra23/Config.in                   |     2 +
>  .../nvidia-tegra23-binaries/Config.in              |   119 +
>  .../nvidia-tegra23-binaries-000-headers.patch      | 14047 +++++++++++++++++++
>  .../nvidia-tegra23-binaries-001-pkgconfig.patch    |    42 +
>  .../nvidia-tegra23-binaries.hash                   |     3 +
>  .../nvidia-tegra23-binaries.mk                     |   187 +
>  .../nvidia-tegra23/nvidia-tegra23-codecs/Config.in |     9 +
>  .../nvidia-tegra23-codecs.hash                     |     3 +
>  .../nvidia-tegra23-codecs/nvidia-tegra23-codecs.mk |    42 +
>  package/nvidia-tegra23/nvidia-tegra23.mk           |    10 +
>  12 files changed, 14475 insertions(+)
>  create mode 100644 package/nvidia-tegra23/Config.in
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-binaries/Config.in
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-000-headers.patch
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-001-pkgconfig.patch
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.hash
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.mk
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-codecs/Config.in
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.hash
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.mk
>  create mode 100644 package/nvidia-tegra23/nvidia-tegra23.mk
> 
> diff --git a/package/Config.in b/package/Config.in
> index 28cf703..47d2dcd 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -344,6 +344,7 @@ endif
>  	source "package/minicom/Config.in"
>  	source "package/nanocom/Config.in"
>  	source "package/neard/Config.in"
> +	source "package/nvidia-tegra23/Config.in"
>  	source "package/ofono/Config.in"
>  	source "package/ola/Config.in"
>  	source "package/on2-8170-modules/Config.in"
> diff --git a/package/jpeg/Config.in b/package/jpeg/Config.in
> index f337aeb..a1a99aa 100644
> --- a/package/jpeg/Config.in
> +++ b/package/jpeg/Config.in
> @@ -30,6 +30,15 @@ config BR2_PACKAGE_JPEG_TURBO
>  
>  	  http://www.libjpeg-turbo.org
>  
> +config BR2_PACKAGE_JPEG_TEGRA23
> +	bool "jpeg accelerated for tegra2 or tegra3"
> +	depends on BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES
> +	select BR2_PACKAGE_HAS_JPEG
> +	help
> +	  Accelerated libjpeg for tegra
> +
> +	  https://developer.nvidia.com/linux-tegra
> +
>  endchoice
>  
>  config BR2_PACKAGE_HAS_JPEG
> @@ -39,5 +48,6 @@ config BR2_PACKAGE_PROVIDES_JPEG
>  	string
>  	default "libjpeg"    if BR2_PACKAGE_LIBJPEG
>  	default "jpeg-turbo" if BR2_PACKAGE_JPEG_TURBO
> +	default "nvidia-tegra23-binaries" if BR2_PACKAGE_JPEG_TEGRA23
>  
>  endif
> diff --git a/package/nvidia-tegra23/Config.in b/package/nvidia-tegra23/Config.in
> new file mode 100644
> index 0000000..0bc28c2
> --- /dev/null
> +++ b/package/nvidia-tegra23/Config.in
> @@ -0,0 +1,2 @@
> +source "package/nvidia-tegra23/nvidia-tegra23-binaries/Config.in"
> +source "package/nvidia-tegra23/nvidia-tegra23-codecs/Config.in"
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-binaries/Config.in b/package/nvidia-tegra23/nvidia-tegra23-binaries/Config.in
> new file mode 100644
> index 0000000..a5a0681
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-binaries/Config.in
> @@ -0,0 +1,119 @@
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES
> +	bool "nvidia-tegra23"
> +	depends on BR2_arm && BR2_cortex_a9
> +	depends on BR2_ARM_EABIHF && BR2_TOOLCHAIN_USES_GLIBC
> +	depends on BR2_PACKAGE_XORG7
> +	select BR2_PACKAGE_XLIB_LIBXT
> +	select BR2_PACKAGE_XLIB_LIBXEXT
> +	select BR2_PACKAGE_XLIB_LIBXV
> +	select BR2_PACKAGE_HAS_LIBEGL
> +	select BR2_PACKAGE_HAS_LIBGLES
> +	select BR2_PACKAGE_HAS_LIBOPENMAX
> +	help
> +	  Those packages provide libraries, drivers and firmware that comes from
> +	  NVIDIA Linux For Tegra.
> +
> +	  https://developer.nvidia.com/linux-tegra
> +
> +if BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES
> +
> +config BR2_PACKAGE_PROVIDES_LIBEGL
> +	default "nvidia-tegra23-binaries"
> +
> +config BR2_PACKAGE_PROVIDES_LIBGLES
> +	default "nvidia-tegra23-binaries"
> +
> +config BR2_PACKAGE_PROVIDES_LIBOPENMAX
> +	default "nvidia-tegra23-binaries"
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS
> +	bool "GStreamer 0.10.x plugins"
> +	select BR2_PACKAGE_GSTREAMER
> +	help
> +	  GStreamer 0.10.x plugins
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS
> +	bool "NVIDIA multimedia sample apps"
> +	depends on BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS
> +	help
> +	  nvgstplayer and nvgstcapture multimedia test applications.
> +
> +choice
> +	prompt "Tegra platform"
> +	help
> +	  Select the SOC platform.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA2
> +	bool "Tegra 2"
> +	depends on !BR2_ARM_CPU_HAS_NEON
> +	help
> +	  NVIDIA Tegra 2 is a dual cores Cortex-A9 without NEON.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA3
> +	bool "Tegra 3"
> +	help
> +	  NVIDIA Tegra 3 is a quad cores Cortex-A9 with NEON.
> +
> +endchoice
> +
> +choice
> +	prompt "X11 ABI version"
> +	default BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V11
> +	help
> +	  Select Tegra X11 ABI version.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V5
> +	bool "X11 ABI 5"
> +	help
> +	  Tegra X11 ABI 5.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V6
> +	bool "X11 ABI 6"
> +	help
> +	  Tegra X11 ABI 6.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V7
> +	bool "X11 ABI 7"
> +	help
> +	  Tegra X11 ABI 7.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V8
> +	bool "X11 ABI 8"
> +	help
> +	  Tegra X11 ABI 8.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V10
> +	bool "X11 ABI 10"
> +	help
> +	  Tegra X11 ABI 10.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V11
> +	bool "X11 ABI 11"
> +	help
> +	  Tegra X11 ABI 11.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V12
> +	bool "X11 ABI 12"
> +	help
> +	  Tegra X11 ABI 12.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V13
> +	bool "X11 ABI 13"
> +	help
> +	  Tegra X11 ABI 13.
> +
> +config BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V14
> +	bool "X11 ABI 14"
> +	help
> +	  Tegra X11 ABI 14.
> +
> +endchoice
> +
> +comment "tegra2 platform need NEON SIMD disabled"
> +	depends on BR2_ARM_CPU_HAS_NEON
> +
> +endif
> +
> +comment "nvidia-tegra23-binaries needs a (e)glibc toolchain w/ EABIhf"
> +	depends on BR2_arm && BR2_cortex_a9
> +	depends on !(BR2_ARM_EABIHF && BR2_TOOLCHAIN_USES_GLIBC)
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-000-headers.patch b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-000-headers.patch
> new file mode 100644
> index 0000000..e7fb106
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-000-headers.patch
> @@ -0,0 +1,14047 @@
> +diff -rupN a/usr/include/EGL/eglext.h b/usr/include/EGL/eglext.h
> +--- a/usr/include/EGL/eglext.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/EGL/eglext.h	2013-10-09 09:57:33.000000000 +0200
> +@@ -0,0 +1,618 @@
> ++#ifndef __eglext_h_
> ++#define __eglext_h_ 1
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/*
> ++** Copyright (c) 2013 The Khronos Group Inc.
> ++**
> ++** Permission is hereby granted, free of charge, to any person obtaining a
> ++** copy of this software and/or associated documentation files (the
> ++** "Materials"), to deal in the Materials without restriction, including
> ++** without limitation the rights to use, copy, modify, merge, publish,
> ++** distribute, sublicense, and/or sell copies of the Materials, and to
> ++** permit persons to whom the Materials are furnished to do so, subject to
> ++** the following conditions:
> ++**
> ++** The above copyright notice and this permission notice shall be included
> ++** in all copies or substantial portions of the Materials.
> ++**
> ++** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ++** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
> ++*/
> ++/*
> ++** This header is generated from the Khronos OpenGL / OpenGL ES XML
> ++** API Registry. The current version of the Registry, generator scripts
> ++** used to make the header, and the header can be found at
> ++**   http://www.opengl.org/registry/
> ++**
> ++** Khronos $Revision: 23328 $ on $Date: 2013-10-02 02:28:28 -0700 (Wed, 02 Oct 2013) $
> ++*/
> ++
> ++#include <EGL/eglplatform.h>
> ++
> ++#define EGL_EGLEXT_VERSION 20130917
> ++
> ++/* Generated C header for:
> ++ * API: egl
> ++ * Versions considered: .*
> ++ * Versions emitted: _nomatch_^
> ++ * Default extensions included: egl
> ++ * Additional extensions included: _nomatch_^
> ++ * Extensions removed: _nomatch_^
> ++ */
> ++
> ++#ifndef EGL_KHR_cl_event
> ++#define EGL_KHR_cl_event 1
> ++#define EGL_CL_EVENT_HANDLE_KHR           0x309C
> ++#define EGL_SYNC_CL_EVENT_KHR             0x30FE
> ++#define EGL_SYNC_CL_EVENT_COMPLETE_KHR    0x30FF
> ++#endif /* EGL_KHR_cl_event */
> ++
> ++#ifndef EGL_KHR_client_get_all_proc_addresses
> ++#define EGL_KHR_client_get_all_proc_addresses 1
> ++#endif /* EGL_KHR_client_get_all_proc_addresses */
> ++
> ++#ifndef EGL_KHR_config_attribs
> ++#define EGL_KHR_config_attribs 1
> ++#define EGL_CONFORMANT_KHR                0x3042
> ++#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR  0x0020
> ++#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR   0x0040
> ++#endif /* EGL_KHR_config_attribs */
> ++
> ++#ifndef EGL_KHR_create_context
> ++#define EGL_KHR_create_context 1
> ++#define EGL_CONTEXT_MAJOR_VERSION_KHR     0x3098
> ++#define EGL_CONTEXT_MINOR_VERSION_KHR     0x30FB
> ++#define EGL_CONTEXT_FLAGS_KHR             0x30FC
> ++#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD
> ++#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
> ++#define EGL_NO_RESET_NOTIFICATION_KHR     0x31BE
> ++#define EGL_LOSE_CONTEXT_ON_RESET_KHR     0x31BF
> ++#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR  0x00000001
> ++#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002
> ++#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004
> ++#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001
> ++#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002
> ++#define EGL_OPENGL_ES3_BIT_KHR            0x00000040
> ++#endif /* EGL_KHR_create_context */
> ++
> ++#ifndef EGL_KHR_fence_sync
> ++#define EGL_KHR_fence_sync 1
> ++#ifdef KHRONOS_SUPPORT_INT64
> ++#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
> ++#define EGL_SYNC_CONDITION_KHR            0x30F8
> ++#define EGL_SYNC_FENCE_KHR                0x30F9
> ++#endif /* KHRONOS_SUPPORT_INT64 */
> ++#endif /* EGL_KHR_fence_sync */
> ++
> ++#ifndef EGL_KHR_get_all_proc_addresses
> ++#define EGL_KHR_get_all_proc_addresses 1
> ++#endif /* EGL_KHR_get_all_proc_addresses */
> ++
> ++#ifndef EGL_KHR_gl_renderbuffer_image
> ++#define EGL_KHR_gl_renderbuffer_image 1
> ++#define EGL_GL_RENDERBUFFER_KHR           0x30B9
> ++#endif /* EGL_KHR_gl_renderbuffer_image */
> ++
> ++#ifndef EGL_KHR_gl_texture_2D_image
> ++#define EGL_KHR_gl_texture_2D_image 1
> ++#define EGL_GL_TEXTURE_2D_KHR             0x30B1
> ++#define EGL_GL_TEXTURE_LEVEL_KHR          0x30BC
> ++#endif /* EGL_KHR_gl_texture_2D_image */
> ++
> ++#ifndef EGL_KHR_gl_texture_3D_image
> ++#define EGL_KHR_gl_texture_3D_image 1
> ++#define EGL_GL_TEXTURE_3D_KHR             0x30B2
> ++#define EGL_GL_TEXTURE_ZOFFSET_KHR        0x30BD
> ++#endif /* EGL_KHR_gl_texture_3D_image */
> ++
> ++#ifndef EGL_KHR_gl_texture_cubemap_image
> ++#define EGL_KHR_gl_texture_cubemap_image 1
> ++#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3
> ++#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4
> ++#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5
> ++#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6
> ++#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7
> ++#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8
> ++#endif /* EGL_KHR_gl_texture_cubemap_image */
> ++
> ++#ifndef EGL_KHR_image
> ++#define EGL_KHR_image 1
> ++typedef void *EGLImageKHR;
> ++#define EGL_NATIVE_PIXMAP_KHR             0x30B0
> ++#define EGL_NO_IMAGE_KHR                  ((EGLImageKHR)0)
> ++typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
> ++#endif
> ++#endif /* EGL_KHR_image */
> ++
> ++#ifndef EGL_KHR_image_base
> ++#define EGL_KHR_image_base 1
> ++#define EGL_IMAGE_PRESERVED_KHR           0x30D2
> ++#endif /* EGL_KHR_image_base */
> ++
> ++#ifndef EGL_KHR_image_pixmap
> ++#define EGL_KHR_image_pixmap 1
> ++#endif /* EGL_KHR_image_pixmap */
> ++
> ++#ifndef EGL_KHR_lock_surface
> ++#define EGL_KHR_lock_surface 1
> ++#define EGL_READ_SURFACE_BIT_KHR          0x0001
> ++#define EGL_WRITE_SURFACE_BIT_KHR         0x0002
> ++#define EGL_LOCK_SURFACE_BIT_KHR          0x0080
> ++#define EGL_OPTIMAL_FORMAT_BIT_KHR        0x0100
> ++#define EGL_MATCH_FORMAT_KHR              0x3043
> ++#define EGL_FORMAT_RGB_565_EXACT_KHR      0x30C0
> ++#define EGL_FORMAT_RGB_565_KHR            0x30C1
> ++#define EGL_FORMAT_RGBA_8888_EXACT_KHR    0x30C2
> ++#define EGL_FORMAT_RGBA_8888_KHR          0x30C3
> ++#define EGL_MAP_PRESERVE_PIXELS_KHR       0x30C4
> ++#define EGL_LOCK_USAGE_HINT_KHR           0x30C5
> ++#define EGL_BITMAP_POINTER_KHR            0x30C6
> ++#define EGL_BITMAP_PITCH_KHR              0x30C7
> ++#define EGL_BITMAP_ORIGIN_KHR             0x30C8
> ++#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR   0x30C9
> ++#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA
> ++#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR  0x30CB
> ++#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC
> ++#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
> ++#define EGL_LOWER_LEFT_KHR                0x30CE
> ++#define EGL_UPPER_LEFT_KHR                0x30CF
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay display, EGLSurface surface);
> ++#endif
> ++#endif /* EGL_KHR_lock_surface */
> ++
> ++#ifndef EGL_KHR_lock_surface2
> ++#define EGL_KHR_lock_surface2 1
> ++#define EGL_BITMAP_PIXEL_SIZE_KHR         0x3110
> ++#endif /* EGL_KHR_lock_surface2 */
> ++
> ++#ifndef EGL_KHR_reusable_sync
> ++#define EGL_KHR_reusable_sync 1
> ++typedef void *EGLSyncKHR;
> ++typedef khronos_utime_nanoseconds_t EGLTimeKHR;
> ++#ifdef KHRONOS_SUPPORT_INT64
> ++#define EGL_SYNC_STATUS_KHR               0x30F1
> ++#define EGL_SIGNALED_KHR                  0x30F2
> ++#define EGL_UNSIGNALED_KHR                0x30F3
> ++#define EGL_TIMEOUT_EXPIRED_KHR           0x30F5
> ++#define EGL_CONDITION_SATISFIED_KHR       0x30F6
> ++#define EGL_SYNC_TYPE_KHR                 0x30F7
> ++#define EGL_SYNC_REUSABLE_KHR             0x30FA
> ++#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR   0x0001
> ++#define EGL_FOREVER_KHR                   0xFFFFFFFFFFFFFFFFull
> ++#define EGL_NO_SYNC_KHR                   ((EGLSyncKHR)0)
> ++typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
> ++typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
> ++EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
> ++#endif
> ++#endif /* KHRONOS_SUPPORT_INT64 */
> ++#endif /* EGL_KHR_reusable_sync */
> ++
> ++#ifndef EGL_KHR_stream
> ++#define EGL_KHR_stream 1
> ++typedef void *EGLStreamKHR;
> ++typedef khronos_uint64_t EGLuint64KHR;
> ++#ifdef KHRONOS_SUPPORT_INT64
> ++#define EGL_NO_STREAM_KHR                 ((EGLStreamKHR)0)
> ++#define EGL_CONSUMER_LATENCY_USEC_KHR     0x3210
> ++#define EGL_PRODUCER_FRAME_KHR            0x3212
> ++#define EGL_CONSUMER_FRAME_KHR            0x3213
> ++#define EGL_STREAM_STATE_KHR              0x3214
> ++#define EGL_STREAM_STATE_CREATED_KHR      0x3215
> ++#define EGL_STREAM_STATE_CONNECTING_KHR   0x3216
> ++#define EGL_STREAM_STATE_EMPTY_KHR        0x3217
> ++#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218
> ++#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219
> ++#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A
> ++#define EGL_BAD_STREAM_KHR                0x321B
> ++#define EGL_BAD_STATE_KHR                 0x321C
> ++typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
> ++#endif
> ++#endif /* KHRONOS_SUPPORT_INT64 */
> ++#endif /* EGL_KHR_stream */
> ++
> ++#ifndef EGL_KHR_stream_consumer_gltexture
> ++#define EGL_KHR_stream_consumer_gltexture 1
> ++#ifdef EGL_KHR_stream
> ++#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream);
> ++#endif
> ++#endif /* EGL_KHR_stream */
> ++#endif /* EGL_KHR_stream_consumer_gltexture */
> ++
> ++#ifndef EGL_KHR_stream_cross_process_fd
> ++#define EGL_KHR_stream_cross_process_fd 1
> ++typedef int EGLNativeFileDescriptorKHR;
> ++#ifdef EGL_KHR_stream
> ++#define EGL_NO_FILE_DESCRIPTOR_KHR        ((EGLNativeFileDescriptorKHR)(-1))
> ++typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
> ++typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream);
> ++EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
> ++#endif
> ++#endif /* EGL_KHR_stream */
> ++#endif /* EGL_KHR_stream_cross_process_fd */
> ++
> ++#ifndef EGL_KHR_stream_fifo
> ++#define EGL_KHR_stream_fifo 1
> ++#ifdef EGL_KHR_stream
> ++#define EGL_STREAM_FIFO_LENGTH_KHR        0x31FC
> ++#define EGL_STREAM_TIME_NOW_KHR           0x31FD
> ++#define EGL_STREAM_TIME_CONSUMER_KHR      0x31FE
> ++#define EGL_STREAM_TIME_PRODUCER_KHR      0x31FF
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
> ++#endif
> ++#endif /* EGL_KHR_stream */
> ++#endif /* EGL_KHR_stream_fifo */
> ++
> ++#ifndef EGL_KHR_stream_producer_aldatalocator
> ++#define EGL_KHR_stream_producer_aldatalocator 1
> ++#ifdef EGL_KHR_stream
> ++#endif /* EGL_KHR_stream */
> ++#endif /* EGL_KHR_stream_producer_aldatalocator */
> ++
> ++#ifndef EGL_KHR_stream_producer_eglsurface
> ++#define EGL_KHR_stream_producer_eglsurface 1
> ++#ifdef EGL_KHR_stream
> ++#define EGL_STREAM_BIT_KHR                0x0800
> ++typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
> ++#endif
> ++#endif /* EGL_KHR_stream */
> ++#endif /* EGL_KHR_stream_producer_eglsurface */
> ++
> ++#ifndef EGL_KHR_surfaceless_context
> ++#define EGL_KHR_surfaceless_context 1
> ++#endif /* EGL_KHR_surfaceless_context */
> ++
> ++#ifndef EGL_KHR_vg_parent_image
> ++#define EGL_KHR_vg_parent_image 1
> ++#define EGL_VG_PARENT_IMAGE_KHR           0x30BA
> ++#endif /* EGL_KHR_vg_parent_image */
> ++
> ++#ifndef EGL_KHR_wait_sync
> ++#define EGL_KHR_wait_sync 1
> ++typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
> ++#endif
> ++#endif /* EGL_KHR_wait_sync */
> ++
> ++#ifndef EGL_ANDROID_blob_cache
> ++#define EGL_ANDROID_blob_cache 1
> ++typedef khronos_ssize_t EGLsizeiANDROID;
> ++typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);
> ++typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);
> ++typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
> ++#endif
> ++#endif /* EGL_ANDROID_blob_cache */
> ++
> ++#ifndef EGL_ANDROID_framebuffer_target
> ++#define EGL_ANDROID_framebuffer_target 1
> ++#define EGL_FRAMEBUFFER_TARGET_ANDROID    0x3147
> ++#endif /* EGL_ANDROID_framebuffer_target */
> ++
> ++#ifndef EGL_ANDROID_image_native_buffer
> ++#define EGL_ANDROID_image_native_buffer 1
> ++#define EGL_NATIVE_BUFFER_ANDROID         0x3140
> ++#endif /* EGL_ANDROID_image_native_buffer */
> ++
> ++#ifndef EGL_ANDROID_native_fence_sync
> ++#define EGL_ANDROID_native_fence_sync 1
> ++#define EGL_SYNC_NATIVE_FENCE_ANDROID     0x3144
> ++#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID  0x3145
> ++#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146
> ++#define EGL_NO_NATIVE_FENCE_FD_ANDROID    -1
> ++typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync);
> ++#endif
> ++#endif /* EGL_ANDROID_native_fence_sync */
> ++
> ++#ifndef EGL_ANDROID_recordable
> ++#define EGL_ANDROID_recordable 1
> ++#define EGL_RECORDABLE_ANDROID            0x3142
> ++#endif /* EGL_ANDROID_recordable */
> ++
> ++#ifndef EGL_ANGLE_d3d_share_handle_client_buffer
> ++#define EGL_ANGLE_d3d_share_handle_client_buffer 1
> ++#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
> ++#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
> ++
> ++#ifndef EGL_ANGLE_query_surface_pointer
> ++#define EGL_ANGLE_query_surface_pointer 1
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
> ++#endif
> ++#endif /* EGL_ANGLE_query_surface_pointer */
> ++
> ++#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
> ++#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
> ++#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
> ++
> ++#ifndef EGL_ARM_pixmap_multisample_discard
> ++#define EGL_ARM_pixmap_multisample_discard 1
> ++#define EGL_DISCARD_SAMPLES_ARM           0x3286
> ++#endif /* EGL_ARM_pixmap_multisample_discard */
> ++
> ++#ifndef EGL_EXT_buffer_age
> ++#define EGL_EXT_buffer_age 1
> ++#define EGL_BUFFER_AGE_EXT                0x313D
> ++#endif /* EGL_EXT_buffer_age */
> ++
> ++#ifndef EGL_EXT_client_extensions
> ++#define EGL_EXT_client_extensions 1
> ++#endif /* EGL_EXT_client_extensions */
> ++
> ++#ifndef EGL_EXT_create_context_robustness
> ++#define EGL_EXT_create_context_robustness 1
> ++#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
> ++#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
> ++#define EGL_NO_RESET_NOTIFICATION_EXT     0x31BE
> ++#define EGL_LOSE_CONTEXT_ON_RESET_EXT     0x31BF
> ++#endif /* EGL_EXT_create_context_robustness */
> ++
> ++#ifndef EGL_EXT_image_dma_buf_import
> ++#define EGL_EXT_image_dma_buf_import 1
> ++#define EGL_LINUX_DMA_BUF_EXT             0x3270
> ++#define EGL_LINUX_DRM_FOURCC_EXT          0x3271
> ++#define EGL_DMA_BUF_PLANE0_FD_EXT         0x3272
> ++#define EGL_DMA_BUF_PLANE0_OFFSET_EXT     0x3273
> ++#define EGL_DMA_BUF_PLANE0_PITCH_EXT      0x3274
> ++#define EGL_DMA_BUF_PLANE1_FD_EXT         0x3275
> ++#define EGL_DMA_BUF_PLANE1_OFFSET_EXT     0x3276
> ++#define EGL_DMA_BUF_PLANE1_PITCH_EXT      0x3277
> ++#define EGL_DMA_BUF_PLANE2_FD_EXT         0x3278
> ++#define EGL_DMA_BUF_PLANE2_OFFSET_EXT     0x3279
> ++#define EGL_DMA_BUF_PLANE2_PITCH_EXT      0x327A
> ++#define EGL_YUV_COLOR_SPACE_HINT_EXT      0x327B
> ++#define EGL_SAMPLE_RANGE_HINT_EXT         0x327C
> ++#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
> ++#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
> ++#define EGL_ITU_REC601_EXT                0x327F
> ++#define EGL_ITU_REC709_EXT                0x3280
> ++#define EGL_ITU_REC2020_EXT               0x3281
> ++#define EGL_YUV_FULL_RANGE_EXT            0x3282
> ++#define EGL_YUV_NARROW_RANGE_EXT          0x3283
> ++#define EGL_YUV_CHROMA_SITING_0_EXT       0x3284
> ++#define EGL_YUV_CHROMA_SITING_0_5_EXT     0x3285
> ++#endif /* EGL_EXT_image_dma_buf_import */
> ++
> ++#ifndef EGL_EXT_multiview_window
> ++#define EGL_EXT_multiview_window 1
> ++#define EGL_MULTIVIEW_VIEW_COUNT_EXT      0x3134
> ++#endif /* EGL_EXT_multiview_window */
> ++
> ++#ifndef EGL_EXT_platform_base
> ++#define EGL_EXT_platform_base 1
> ++typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
> ++typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
> ++typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list);
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
> ++#endif
> ++#endif /* EGL_EXT_platform_base */
> ++
> ++#ifndef EGL_EXT_platform_x11
> ++#define EGL_EXT_platform_x11 1
> ++#define EGL_PLATFORM_X11_EXT              0x31D5
> ++#define EGL_PLATFORM_X11_SCREEN_EXT       0x31D6
> ++#endif /* EGL_EXT_platform_x11 */
> ++
> ++#ifndef EGL_EXT_swap_buffers_with_damage
> ++#define EGL_EXT_swap_buffers_with_damage 1
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
> ++#endif
> ++#endif /* EGL_EXT_swap_buffers_with_damage */
> ++
> ++#ifndef EGL_HI_clientpixmap
> ++#define EGL_HI_clientpixmap 1
> ++struct EGLClientPixmapHI {
> ++    void  *pData;
> ++    EGLint iWidth;
> ++    EGLint iHeight;
> ++    EGLint iStride;
> ++};
> ++#define EGL_CLIENT_PIXMAP_POINTER_HI      0x8F74
> ++typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
> ++#endif
> ++#endif /* EGL_HI_clientpixmap */
> ++
> ++#ifndef EGL_HI_colorformats
> ++#define EGL_HI_colorformats 1
> ++#define EGL_COLOR_FORMAT_HI               0x8F70
> ++#define EGL_COLOR_RGB_HI                  0x8F71
> ++#define EGL_COLOR_RGBA_HI                 0x8F72
> ++#define EGL_COLOR_ARGB_HI                 0x8F73
> ++#endif /* EGL_HI_colorformats */
> ++
> ++#ifndef EGL_IMG_context_priority
> ++#define EGL_IMG_context_priority 1
> ++#define EGL_CONTEXT_PRIORITY_LEVEL_IMG    0x3100
> ++#define EGL_CONTEXT_PRIORITY_HIGH_IMG     0x3101
> ++#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG   0x3102
> ++#define EGL_CONTEXT_PRIORITY_LOW_IMG      0x3103
> ++#endif /* EGL_IMG_context_priority */
> ++
> ++#ifndef EGL_MESA_drm_image
> ++#define EGL_MESA_drm_image 1
> ++#define EGL_DRM_BUFFER_FORMAT_MESA        0x31D0
> ++#define EGL_DRM_BUFFER_USE_MESA           0x31D1
> ++#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2
> ++#define EGL_DRM_BUFFER_MESA               0x31D3
> ++#define EGL_DRM_BUFFER_STRIDE_MESA        0x31D4
> ++#define EGL_DRM_BUFFER_USE_SCANOUT_MESA   0x00000001
> ++#define EGL_DRM_BUFFER_USE_SHARE_MESA     0x00000002
> ++typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
> ++#endif
> ++#endif /* EGL_MESA_drm_image */
> ++
> ++#ifndef EGL_NV_3dvision_surface
> ++#define EGL_NV_3dvision_surface 1
> ++#define EGL_AUTO_STEREO_NV                0x3136
> ++#endif /* EGL_NV_3dvision_surface */
> ++
> ++#ifndef EGL_NV_coverage_sample
> ++#define EGL_NV_coverage_sample 1
> ++#define EGL_COVERAGE_BUFFERS_NV           0x30E0
> ++#define EGL_COVERAGE_SAMPLES_NV           0x30E1
> ++#endif /* EGL_NV_coverage_sample */
> ++
> ++#ifndef EGL_NV_coverage_sample_resolve
> ++#define EGL_NV_coverage_sample_resolve 1
> ++#define EGL_COVERAGE_SAMPLE_RESOLVE_NV    0x3131
> ++#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132
> ++#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
> ++#endif /* EGL_NV_coverage_sample_resolve */
> ++
> ++#ifndef EGL_NV_depth_nonlinear
> ++#define EGL_NV_depth_nonlinear 1
> ++#define EGL_DEPTH_ENCODING_NV             0x30E2
> ++#define EGL_DEPTH_ENCODING_NONE_NV        0
> ++#define EGL_DEPTH_ENCODING_NONLINEAR_NV   0x30E3
> ++#endif /* EGL_NV_depth_nonlinear */
> ++
> ++#ifndef EGL_NV_native_query
> ++#define EGL_NV_native_query 1
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
> ++#endif
> ++#endif /* EGL_NV_native_query */
> ++
> ++#ifndef EGL_NV_post_convert_rounding
> ++#define EGL_NV_post_convert_rounding 1
> ++#endif /* EGL_NV_post_convert_rounding */
> ++
> ++#ifndef EGL_NV_post_sub_buffer
> ++#define EGL_NV_post_sub_buffer 1
> ++#define EGL_POST_SUB_BUFFER_SUPPORTED_NV  0x30BE
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
> ++#endif
> ++#endif /* EGL_NV_post_sub_buffer */
> ++
> ++#ifndef EGL_NV_stream_sync
> ++#define EGL_NV_stream_sync 1
> ++#define EGL_SYNC_NEW_FRAME_NV             0x321F
> ++typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
> ++#endif
> ++#endif /* EGL_NV_stream_sync */
> ++
> ++#ifndef EGL_NV_sync
> ++#define EGL_NV_sync 1
> ++typedef void *EGLSyncNV;
> ++typedef khronos_utime_nanoseconds_t EGLTimeNV;
> ++#ifdef KHRONOS_SUPPORT_INT64
> ++#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6
> ++#define EGL_SYNC_STATUS_NV                0x30E7
> ++#define EGL_SIGNALED_NV                   0x30E8
> ++#define EGL_UNSIGNALED_NV                 0x30E9
> ++#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV    0x0001
> ++#define EGL_FOREVER_NV                    0xFFFFFFFFFFFFFFFFull
> ++#define EGL_ALREADY_SIGNALED_NV           0x30EA
> ++#define EGL_TIMEOUT_EXPIRED_NV            0x30EB
> ++#define EGL_CONDITION_SATISFIED_NV        0x30EC
> ++#define EGL_SYNC_TYPE_NV                  0x30ED
> ++#define EGL_SYNC_CONDITION_NV             0x30EE
> ++#define EGL_SYNC_FENCE_NV                 0x30EF
> ++#define EGL_NO_SYNC_NV                    ((EGLSyncNV)0)
> ++typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
> ++typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
> ++typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync);
> ++EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value);
> ++#endif
> ++#endif /* KHRONOS_SUPPORT_INT64 */
> ++#endif /* EGL_NV_sync */
> ++
> ++#ifndef EGL_NV_system_time
> ++#define EGL_NV_system_time 1
> ++typedef khronos_utime_nanoseconds_t EGLuint64NV;
> ++#ifdef KHRONOS_SUPPORT_INT64
> ++typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);
> ++typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);
> ++#ifdef EGL_EGLEXT_PROTOTYPES
> ++EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void);
> ++EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
> ++#endif
> ++#endif /* KHRONOS_SUPPORT_INT64 */
> ++#endif /* EGL_NV_system_time */
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif
> +diff -rupN a/usr/include/EGL/egl.h b/usr/include/EGL/egl.h
> +--- a/usr/include/EGL/egl.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/EGL/egl.h	2013-10-09 09:57:33.000000000 +0200
> +@@ -0,0 +1,329 @@
> ++/* -*- mode: c; tab-width: 8; -*- */
> ++/* vi: set sw=4 ts=8: */
> ++/* Reference version of egl.h for EGL 1.4.
> ++ * $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
> ++ */
> ++
> ++/*
> ++** Copyright (c) 2007-2009 The Khronos Group Inc.
> ++**
> ++** Permission is hereby granted, free of charge, to any person obtaining a
> ++** copy of this software and/or associated documentation files (the
> ++** "Materials"), to deal in the Materials without restriction, including
> ++** without limitation the rights to use, copy, modify, merge, publish,
> ++** distribute, sublicense, and/or sell copies of the Materials, and to
> ++** permit persons to whom the Materials are furnished to do so, subject to
> ++** the following conditions:
> ++**
> ++** The above copyright notice and this permission notice shall be included
> ++** in all copies or substantial portions of the Materials.
> ++**
> ++** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ++** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
> ++*/
> ++
> ++#ifndef __egl_h_
> ++#define __egl_h_
> ++
> ++/* All platform-dependent types and macro boilerplate (such as EGLAPI
> ++ * and EGLAPIENTRY) should go in eglplatform.h.
> ++ */
> ++#include <EGL/eglplatform.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/* EGL Types */
> ++/* EGLint is defined in eglplatform.h */
> ++typedef unsigned int EGLBoolean;
> ++typedef unsigned int EGLenum;
> ++typedef void *EGLConfig;
> ++typedef void *EGLContext;
> ++typedef void *EGLDisplay;
> ++typedef void *EGLSurface;
> ++typedef void *EGLClientBuffer;
> ++
> ++/* EGL Versioning */
> ++#define EGL_VERSION_1_0			1
> ++#define EGL_VERSION_1_1			1
> ++#define EGL_VERSION_1_2			1
> ++#define EGL_VERSION_1_3			1
> ++#define EGL_VERSION_1_4			1
> ++
> ++/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
> ++ * enums are assigned unique values starting at 0x3000.
> ++ */
> ++
> ++/* EGL aliases */
> ++#define EGL_FALSE			0
> ++#define EGL_TRUE			1
> ++
> ++/* Out-of-band handle values */
> ++#define EGL_DEFAULT_DISPLAY		((EGLNativeDisplayType)0)
> ++#define EGL_NO_CONTEXT			((EGLContext)0)
> ++#define EGL_NO_DISPLAY			((EGLDisplay)0)
> ++#define EGL_NO_SURFACE			((EGLSurface)0)
> ++
> ++/* Out-of-band attribute value */
> ++#define EGL_DONT_CARE			((EGLint)-1)
> ++
> ++/* Errors / GetError return values */
> ++#define EGL_SUCCESS			0x3000
> ++#define EGL_NOT_INITIALIZED		0x3001
> ++#define EGL_BAD_ACCESS			0x3002
> ++#define EGL_BAD_ALLOC			0x3003
> ++#define EGL_BAD_ATTRIBUTE		0x3004
> ++#define EGL_BAD_CONFIG			0x3005
> ++#define EGL_BAD_CONTEXT			0x3006
> ++#define EGL_BAD_CURRENT_SURFACE		0x3007
> ++#define EGL_BAD_DISPLAY			0x3008
> ++#define EGL_BAD_MATCH			0x3009
> ++#define EGL_BAD_NATIVE_PIXMAP		0x300A
> ++#define EGL_BAD_NATIVE_WINDOW		0x300B
> ++#define EGL_BAD_PARAMETER		0x300C
> ++#define EGL_BAD_SURFACE			0x300D
> ++#define EGL_CONTEXT_LOST		0x300E	/* EGL 1.1 - IMG_power_management */
> ++
> ++/* Reserved 0x300F-0x301F for additional errors */
> ++
> ++/* Config attributes */
> ++#define EGL_BUFFER_SIZE			0x3020
> ++#define EGL_ALPHA_SIZE			0x3021
> ++#define EGL_BLUE_SIZE			0x3022
> ++#define EGL_GREEN_SIZE			0x3023
> ++#define EGL_RED_SIZE			0x3024
> ++#define EGL_DEPTH_SIZE			0x3025
> ++#define EGL_STENCIL_SIZE		0x3026
> ++#define EGL_CONFIG_CAVEAT		0x3027
> ++#define EGL_CONFIG_ID			0x3028
> ++#define EGL_LEVEL			0x3029
> ++#define EGL_MAX_PBUFFER_HEIGHT		0x302A
> ++#define EGL_MAX_PBUFFER_PIXELS		0x302B
> ++#define EGL_MAX_PBUFFER_WIDTH		0x302C
> ++#define EGL_NATIVE_RENDERABLE		0x302D
> ++#define EGL_NATIVE_VISUAL_ID		0x302E
> ++#define EGL_NATIVE_VISUAL_TYPE		0x302F
> ++#define EGL_SAMPLES			0x3031
> ++#define EGL_SAMPLE_BUFFERS		0x3032
> ++#define EGL_SURFACE_TYPE		0x3033
> ++#define EGL_TRANSPARENT_TYPE		0x3034
> ++#define EGL_TRANSPARENT_BLUE_VALUE	0x3035
> ++#define EGL_TRANSPARENT_GREEN_VALUE	0x3036
> ++#define EGL_TRANSPARENT_RED_VALUE	0x3037
> ++#define EGL_NONE			0x3038	/* Attrib list terminator */
> ++#define EGL_BIND_TO_TEXTURE_RGB		0x3039
> ++#define EGL_BIND_TO_TEXTURE_RGBA	0x303A
> ++#define EGL_MIN_SWAP_INTERVAL		0x303B
> ++#define EGL_MAX_SWAP_INTERVAL		0x303C
> ++#define EGL_LUMINANCE_SIZE		0x303D
> ++#define EGL_ALPHA_MASK_SIZE		0x303E
> ++#define EGL_COLOR_BUFFER_TYPE		0x303F
> ++#define EGL_RENDERABLE_TYPE		0x3040
> ++#define EGL_MATCH_NATIVE_PIXMAP		0x3041	/* Pseudo-attribute (not queryable) */
> ++#define EGL_CONFORMANT			0x3042
> ++
> ++/* Reserved 0x3041-0x304F for additional config attributes */
> ++
> ++/* Config attribute values */
> ++#define EGL_SLOW_CONFIG			0x3050	/* EGL_CONFIG_CAVEAT value */
> ++#define EGL_NON_CONFORMANT_CONFIG	0x3051	/* EGL_CONFIG_CAVEAT value */
> ++#define EGL_TRANSPARENT_RGB		0x3052	/* EGL_TRANSPARENT_TYPE value */
> ++#define EGL_RGB_BUFFER			0x308E	/* EGL_COLOR_BUFFER_TYPE value */
> ++#define EGL_LUMINANCE_BUFFER		0x308F	/* EGL_COLOR_BUFFER_TYPE value */
> ++
> ++/* More config attribute values, for EGL_TEXTURE_FORMAT */
> ++#define EGL_NO_TEXTURE			0x305C
> ++#define EGL_TEXTURE_RGB			0x305D
> ++#define EGL_TEXTURE_RGBA		0x305E
> ++#define EGL_TEXTURE_2D			0x305F
> ++
> ++/* Config attribute mask bits */
> ++#define EGL_PBUFFER_BIT			0x0001	/* EGL_SURFACE_TYPE mask bits */
> ++#define EGL_PIXMAP_BIT			0x0002	/* EGL_SURFACE_TYPE mask bits */
> ++#define EGL_WINDOW_BIT			0x0004	/* EGL_SURFACE_TYPE mask bits */
> ++#define EGL_VG_COLORSPACE_LINEAR_BIT	0x0020	/* EGL_SURFACE_TYPE mask bits */
> ++#define EGL_VG_ALPHA_FORMAT_PRE_BIT	0x0040	/* EGL_SURFACE_TYPE mask bits */
> ++#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200	/* EGL_SURFACE_TYPE mask bits */
> ++#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400	/* EGL_SURFACE_TYPE mask bits */
> ++
> ++#define EGL_OPENGL_ES_BIT		0x0001	/* EGL_RENDERABLE_TYPE mask bits */
> ++#define EGL_OPENVG_BIT			0x0002	/* EGL_RENDERABLE_TYPE mask bits */
> ++#define EGL_OPENGL_ES2_BIT		0x0004	/* EGL_RENDERABLE_TYPE mask bits */
> ++#define EGL_OPENGL_BIT			0x0008	/* EGL_RENDERABLE_TYPE mask bits */
> ++
> ++/* QueryString targets */
> ++#define EGL_VENDOR			0x3053
> ++#define EGL_VERSION			0x3054
> ++#define EGL_EXTENSIONS			0x3055
> ++#define EGL_CLIENT_APIS			0x308D
> ++
> ++/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
> ++#define EGL_HEIGHT			0x3056
> ++#define EGL_WIDTH			0x3057
> ++#define EGL_LARGEST_PBUFFER		0x3058
> ++#define EGL_TEXTURE_FORMAT		0x3080
> ++#define EGL_TEXTURE_TARGET		0x3081
> ++#define EGL_MIPMAP_TEXTURE		0x3082
> ++#define EGL_MIPMAP_LEVEL		0x3083
> ++#define EGL_RENDER_BUFFER		0x3086
> ++#define EGL_VG_COLORSPACE		0x3087
> ++#define EGL_VG_ALPHA_FORMAT		0x3088
> ++#define EGL_HORIZONTAL_RESOLUTION	0x3090
> ++#define EGL_VERTICAL_RESOLUTION		0x3091
> ++#define EGL_PIXEL_ASPECT_RATIO		0x3092
> ++#define EGL_SWAP_BEHAVIOR		0x3093
> ++#define EGL_MULTISAMPLE_RESOLVE		0x3099
> ++
> ++/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
> ++#define EGL_BACK_BUFFER			0x3084
> ++#define EGL_SINGLE_BUFFER		0x3085
> ++
> ++/* OpenVG color spaces */
> ++#define EGL_VG_COLORSPACE_sRGB		0x3089	/* EGL_VG_COLORSPACE value */
> ++#define EGL_VG_COLORSPACE_LINEAR	0x308A	/* EGL_VG_COLORSPACE value */
> ++
> ++/* OpenVG alpha formats */
> ++#define EGL_VG_ALPHA_FORMAT_NONPRE	0x308B	/* EGL_ALPHA_FORMAT value */
> ++#define EGL_VG_ALPHA_FORMAT_PRE		0x308C	/* EGL_ALPHA_FORMAT value */
> ++
> ++/* Constant scale factor by which fractional display resolutions &
> ++ * aspect ratio are scaled when queried as integer values.
> ++ */
> ++#define EGL_DISPLAY_SCALING		10000
> ++
> ++/* Unknown display resolution/aspect ratio */
> ++#define EGL_UNKNOWN			((EGLint)-1)
> ++
> ++/* Back buffer swap behaviors */
> ++#define EGL_BUFFER_PRESERVED		0x3094	/* EGL_SWAP_BEHAVIOR value */
> ++#define EGL_BUFFER_DESTROYED		0x3095	/* EGL_SWAP_BEHAVIOR value */
> ++
> ++/* CreatePbufferFromClientBuffer buffer types */
> ++#define EGL_OPENVG_IMAGE		0x3096
> ++
> ++/* QueryContext targets */
> ++#define EGL_CONTEXT_CLIENT_TYPE		0x3097
> ++
> ++/* CreateContext attributes */
> ++#define EGL_CONTEXT_CLIENT_VERSION	0x3098
> ++
> ++/* Multisample resolution behaviors */
> ++#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A	/* EGL_MULTISAMPLE_RESOLVE value */
> ++#define EGL_MULTISAMPLE_RESOLVE_BOX	0x309B	/* EGL_MULTISAMPLE_RESOLVE value */
> ++
> ++/* BindAPI/QueryAPI targets */
> ++#define EGL_OPENGL_ES_API		0x30A0
> ++#define EGL_OPENVG_API			0x30A1
> ++#define EGL_OPENGL_API			0x30A2
> ++
> ++/* GetCurrentSurface targets */
> ++#define EGL_DRAW			0x3059
> ++#define EGL_READ			0x305A
> ++
> ++/* WaitNative engines */
> ++#define EGL_CORE_NATIVE_ENGINE		0x305B
> ++
> ++/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
> ++#define EGL_COLORSPACE			EGL_VG_COLORSPACE
> ++#define EGL_ALPHA_FORMAT		EGL_VG_ALPHA_FORMAT
> ++#define EGL_COLORSPACE_sRGB		EGL_VG_COLORSPACE_sRGB
> ++#define EGL_COLORSPACE_LINEAR		EGL_VG_COLORSPACE_LINEAR
> ++#define EGL_ALPHA_FORMAT_NONPRE		EGL_VG_ALPHA_FORMAT_NONPRE
> ++#define EGL_ALPHA_FORMAT_PRE		EGL_VG_ALPHA_FORMAT_PRE
> ++
> ++/* EGL extensions must request enum blocks from the Khronos
> ++ * API Registrar, who maintains the enumerant registry. Submit
> ++ * a bug in Khronos Bugzilla against task "Registry".
> ++ */
> ++
> ++
> ++
> ++/* EGL Functions */
> ++
> ++EGLAPI EGLint EGLAPIENTRY eglGetError(void);
> ++
> ++EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
> ++
> ++EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
> ++			 EGLint config_size, EGLint *num_config);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
> ++			   EGLConfig *configs, EGLint config_size,
> ++			   EGLint *num_config);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
> ++			      EGLint attribute, EGLint *value);
> ++
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
> ++				  EGLNativeWindowType win,
> ++				  const EGLint *attrib_list);
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
> ++				   const EGLint *attrib_list);
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
> ++				  EGLNativePixmapType pixmap,
> ++				  const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
> ++			   EGLint attribute, EGLint *value);
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
> ++EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);
> ++
> ++EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
> ++	      EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
> ++	      EGLConfig config, const EGLint *attrib_list);
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
> ++			    EGLint attribute, EGLint value);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
> ++
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);
> ++
> ++
> ++EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
> ++			    EGLContext share_context,
> ++			    const EGLint *attrib_list);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
> ++			  EGLSurface read, EGLContext ctx);
> ++
> ++EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
> ++EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
> ++EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
> ++			   EGLint attribute, EGLint *value);
> ++
> ++EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
> ++EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
> ++			  EGLNativePixmapType target);
> ++
> ++/* This is a generic function pointer type, whose name indicates it must
> ++ * be cast to the proper type *and calling convention* before use.
> ++ */
> ++typedef void (*__eglMustCastToProperFunctionPointerType)(void);
> ++
> ++/* Now, define eglGetProcAddress using the generic function ptr. type */
> ++EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY
> ++       eglGetProcAddress(const char *procname);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __egl_h_ */
> +diff -rupN a/usr/include/EGL/eglplatform.h b/usr/include/EGL/eglplatform.h
> +--- a/usr/include/EGL/eglplatform.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/EGL/eglplatform.h	2014-11-03 15:56:55.376739000 +0100
> +@@ -0,0 +1,146 @@
> ++#ifndef __eglplatform_h_
> ++#define __eglplatform_h_
> ++
> ++/*
> ++** Copyright (c) 2007-2009 The Khronos Group Inc.
> ++**
> ++** Permission is hereby granted, free of charge, to any person obtaining a
> ++** copy of this software and/or associated documentation files (the
> ++** "Materials"), to deal in the Materials without restriction, including
> ++** without limitation the rights to use, copy, modify, merge, publish,
> ++** distribute, sublicense, and/or sell copies of the Materials, and to
> ++** permit persons to whom the Materials are furnished to do so, subject to
> ++** the following conditions:
> ++**
> ++** The above copyright notice and this permission notice shall be included
> ++** in all copies or substantial portions of the Materials.
> ++**
> ++** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ++** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
> ++*/
> ++
> ++/* Platform-specific types and definitions for egl.h
> ++ * $Revision: 12306 $ on $Date: 2010-08-25 09:51:28 -0700 (Wed, 25 Aug 2010) $
> ++ *
> ++ * Adopters may modify khrplatform.h and this file to suit their platform.
> ++ * You are encouraged to submit all modifications to the Khronos group so that
> ++ * they can be included in future versions of this file.  Please submit changes
> ++ * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
> ++ * by filing a bug against product "EGL" component "Registry".
> ++ */
> ++
> ++#include <KHR/khrplatform.h>
> ++
> ++/* Macros used in EGL function prototype declarations.
> ++ *
> ++ * EGL functions should be prototyped as:
> ++ *
> ++ * EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
> ++ * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
> ++ *
> ++ * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
> ++ */
> ++
> ++#ifndef EGLAPI
> ++#define EGLAPI KHRONOS_APICALL
> ++#endif
> ++
> ++#ifndef EGLAPIENTRY
> ++#define EGLAPIENTRY  KHRONOS_APIENTRY
> ++#endif
> ++#define EGLAPIENTRYP EGLAPIENTRY*
> ++
> ++/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
> ++ * are aliases of window-system-dependent types, such as X Display * or
> ++ * Windows Device Context. They must be defined in platform-specific
> ++ * code below. The EGL-prefixed versions of Native*Type are the same
> ++ * types, renamed in EGL 1.3 so all types in the API start with "EGL".
> ++ *
> ++ * Khronos STRONGLY RECOMMENDS that you use the default definitions
> ++ * provided below, since these changes affect both binary and source
> ++ * portability of applications using EGL running on different EGL
> ++ * implementations.
> ++ */
> ++
> ++#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
> ++#ifndef WIN32_LEAN_AND_MEAN
> ++#define WIN32_LEAN_AND_MEAN 1
> ++#endif
> ++#include <windows.h>
> ++
> ++typedef HDC     EGLNativeDisplayType;
> ++typedef HBITMAP EGLNativePixmapType;
> ++typedef HWND    EGLNativeWindowType;
> ++
> ++#elif defined(__WINSCW__) || defined(__SYMBIAN32__)  /* Symbian */
> ++
> ++typedef int   EGLNativeDisplayType;
> ++typedef void *EGLNativeWindowType;
> ++typedef void *EGLNativePixmapType;
> ++
> ++#elif defined(WL_EGL_PLATFORM)
> ++
> ++typedef struct wl_display     *EGLNativeDisplayType;
> ++typedef struct wl_egl_pixmap  *EGLNativePixmapType;
> ++typedef struct wl_egl_window  *EGLNativeWindowType;
> ++
> ++#elif defined(__GBM__)
> ++
> ++typedef struct gbm_device  *EGLNativeDisplayType;
> ++typedef struct gbm_bo      *EGLNativePixmapType;
> ++typedef void               *EGLNativeWindowType;
> ++
> ++#elif defined(ANDROID) /* Android */
> ++
> ++struct ANativeWindow;
> ++struct egl_native_pixmap_t;
> ++
> ++typedef struct ANativeWindow        *EGLNativeWindowType;
> ++typedef struct egl_native_pixmap_t  *EGLNativePixmapType;
> ++typedef void                        *EGLNativeDisplayType;
> ++
> ++#elif defined(__unix__)
> ++
> ++#if 1
> ++
> ++typedef void            *EGLNativeDisplayType;
> ++typedef khronos_uint32_t EGLNativePixmapType;
> ++typedef khronos_uint32_t EGLNativeWindowType;
> ++
> ++#else
> ++
> ++/* X11 (tentative)  */
> ++#include <X11/Xlib.h>
> ++#include <X11/Xutil.h>
> ++
> ++typedef Display *EGLNativeDisplayType;
> ++typedef Pixmap   EGLNativePixmapType;
> ++typedef Window   EGLNativeWindowType;
> ++
> ++#endif /* MESA_EGL_NO_X11_HEADERS */
> ++
> ++#else
> ++#error "Platform not recognized"
> ++#endif
> ++
> ++/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
> ++typedef EGLNativeDisplayType NativeDisplayType;
> ++typedef EGLNativePixmapType  NativePixmapType;
> ++typedef EGLNativeWindowType  NativeWindowType;
> ++
> ++
> ++/* Define EGLint. This must be a signed integral type large enough to contain
> ++ * all legal attribute names and values passed into and out of EGL, whether
> ++ * their type is boolean, bitmask, enumerant (symbolic constant), integer,
> ++ * handle, or other.  While in general a 32-bit integer will suffice, if
> ++ * handles are 64 bit types, then EGLint should be defined as a signed 64-bit
> ++ * integer type.
> ++ */
> ++typedef khronos_int32_t EGLint;
> ++
> ++#endif /* __eglplatform_h */
> +diff -rupN a/usr/include/GLES/egl.h b/usr/include/GLES/egl.h
> +--- a/usr/include/GLES/egl.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES/egl.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,15 @@
> ++/*
> ++ * Skeleton egl.h to provide compatibility for early GLES 1.0
> ++ * applications. Several early implementations included gl.h
> ++ * in egl.h leading applications to include only egl.h
> ++ *
> ++ * $Revision: 6252 $ on $Date:: 2008-08-06 16:35:08 -0700 #$
> ++ */
> ++
> ++#ifndef __legacy_egl_h_
> ++#define __legacy_egl_h_
> ++
> ++#include <EGL/egl.h>
> ++#include <GLES/gl.h>
> ++
> ++#endif /* __legacy_egl_h_ */
> +diff -rupN a/usr/include/GLES/glext.h b/usr/include/GLES/glext.h
> +--- a/usr/include/GLES/glext.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES/glext.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,1278 @@
> ++#ifndef __glext_h_
> ++#define __glext_h_
> ++
> ++/* $Revision: 20798 $ on $Date:: 2013-03-07 01:19:34 -0800 #$ */
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/*
> ++ * This document is licensed under the SGI Free Software B License Version
> ++ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
> ++ */
> ++
> ++#ifndef GL_APIENTRYP
> ++#   define GL_APIENTRYP GL_APIENTRY*
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * OES extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_OES_blend_equation_separate */
> ++#ifndef GL_OES_blend_equation_separate
> ++/* BLEND_EQUATION_RGB_OES same as BLEND_EQUATION_OES */
> ++#define GL_BLEND_EQUATION_RGB_OES                               0x8009
> ++#define GL_BLEND_EQUATION_ALPHA_OES                             0x883D
> ++#endif
> ++
> ++/* GL_OES_blend_func_separate */
> ++#ifndef GL_OES_blend_func_separate
> ++#define GL_BLEND_DST_RGB_OES                                    0x80C8
> ++#define GL_BLEND_SRC_RGB_OES                                    0x80C9
> ++#define GL_BLEND_DST_ALPHA_OES                                  0x80CA
> ++#define GL_BLEND_SRC_ALPHA_OES                                  0x80CB
> ++#endif
> ++
> ++/* GL_OES_blend_subtract */
> ++#ifndef GL_OES_blend_subtract
> ++#define GL_BLEND_EQUATION_OES                                   0x8009
> ++#define GL_FUNC_ADD_OES                                         0x8006
> ++#define GL_FUNC_SUBTRACT_OES                                    0x800A
> ++#define GL_FUNC_REVERSE_SUBTRACT_OES                            0x800B
> ++#endif
> ++
> ++/* GL_OES_compressed_ETC1_RGB8_texture */
> ++#ifndef GL_OES_compressed_ETC1_RGB8_texture
> ++#define GL_ETC1_RGB8_OES                                        0x8D64
> ++#endif
> ++
> ++/* GL_OES_depth24 */
> ++#ifndef GL_OES_depth24
> ++#define GL_DEPTH_COMPONENT24_OES                                0x81A6
> ++#endif
> ++
> ++/* GL_OES_depth32 */
> ++#ifndef GL_OES_depth32
> ++#define GL_DEPTH_COMPONENT32_OES                                0x81A7
> ++#endif
> ++
> ++/* GL_OES_draw_texture */
> ++#ifndef GL_OES_draw_texture
> ++#define GL_TEXTURE_CROP_RECT_OES                                0x8B9D
> ++#endif
> ++
> ++/* GL_OES_EGL_image */
> ++#ifndef GL_OES_EGL_image
> ++typedef void* GLeglImageOES;
> ++#endif
> ++
> ++/* GL_OES_EGL_image_external */
> ++#ifndef GL_OES_EGL_image_external
> ++/* GLeglImageOES defined in GL_OES_EGL_image already. */
> ++#define GL_TEXTURE_EXTERNAL_OES                                 0x8D65
> ++#define GL_TEXTURE_BINDING_EXTERNAL_OES                         0x8D67
> ++#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES                     0x8D68
> ++#endif
> ++
> ++/* GL_OES_element_index_uint */
> ++#ifndef GL_OES_element_index_uint
> ++#define GL_UNSIGNED_INT                                         0x1405
> ++#endif
> ++
> ++/* GL_OES_fixed_point */
> ++#ifndef GL_OES_fixed_point
> ++#define GL_FIXED_OES                                            0x140C
> ++#endif
> ++
> ++/* GL_OES_framebuffer_object */
> ++#ifndef GL_OES_framebuffer_object
> ++#define GL_NONE_OES                                             0
> ++#define GL_FRAMEBUFFER_OES                                      0x8D40
> ++#define GL_RENDERBUFFER_OES                                     0x8D41
> ++#define GL_RGBA4_OES                                            0x8056
> ++#define GL_RGB5_A1_OES                                          0x8057
> ++#define GL_RGB565_OES                                           0x8D62
> ++#define GL_DEPTH_COMPONENT16_OES                                0x81A5
> ++#define GL_RENDERBUFFER_WIDTH_OES                               0x8D42
> ++#define GL_RENDERBUFFER_HEIGHT_OES                              0x8D43
> ++#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES                     0x8D44
> ++#define GL_RENDERBUFFER_RED_SIZE_OES                            0x8D50
> ++#define GL_RENDERBUFFER_GREEN_SIZE_OES                          0x8D51
> ++#define GL_RENDERBUFFER_BLUE_SIZE_OES                           0x8D52
> ++#define GL_RENDERBUFFER_ALPHA_SIZE_OES                          0x8D53
> ++#define GL_RENDERBUFFER_DEPTH_SIZE_OES                          0x8D54
> ++#define GL_RENDERBUFFER_STENCIL_SIZE_OES                        0x8D55
> ++#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES               0x8CD0
> ++#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES               0x8CD1
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES             0x8CD2
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES     0x8CD3
> ++#define GL_COLOR_ATTACHMENT0_OES                                0x8CE0
> ++#define GL_DEPTH_ATTACHMENT_OES                                 0x8D00
> ++#define GL_STENCIL_ATTACHMENT_OES                               0x8D20
> ++#define GL_FRAMEBUFFER_COMPLETE_OES                             0x8CD5
> ++#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES                0x8CD6
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES        0x8CD7
> ++#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES                0x8CD9
> ++#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES                   0x8CDA
> ++#define GL_FRAMEBUFFER_UNSUPPORTED_OES                          0x8CDD
> ++#define GL_FRAMEBUFFER_BINDING_OES                              0x8CA6
> ++#define GL_RENDERBUFFER_BINDING_OES                             0x8CA7
> ++#define GL_MAX_RENDERBUFFER_SIZE_OES                            0x84E8
> ++#define GL_INVALID_FRAMEBUFFER_OPERATION_OES                    0x0506
> ++#endif
> ++
> ++/* GL_OES_mapbuffer */
> ++#ifndef GL_OES_mapbuffer
> ++#define GL_WRITE_ONLY_OES                                       0x88B9
> ++#define GL_BUFFER_ACCESS_OES                                    0x88BB
> ++#define GL_BUFFER_MAPPED_OES                                    0x88BC
> ++#define GL_BUFFER_MAP_POINTER_OES                               0x88BD
> ++#endif
> ++
> ++/* GL_OES_matrix_get */
> ++#ifndef GL_OES_matrix_get
> ++#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES               0x898D
> ++#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES              0x898E
> ++#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES                 0x898F
> ++#endif
> ++
> ++/* GL_OES_matrix_palette */
> ++#ifndef GL_OES_matrix_palette
> ++#define GL_MAX_VERTEX_UNITS_OES                                 0x86A4
> ++#define GL_MAX_PALETTE_MATRICES_OES                             0x8842
> ++#define GL_MATRIX_PALETTE_OES                                   0x8840
> ++#define GL_MATRIX_INDEX_ARRAY_OES                               0x8844
> ++#define GL_WEIGHT_ARRAY_OES                                     0x86AD
> ++#define GL_CURRENT_PALETTE_MATRIX_OES                           0x8843
> ++#define GL_MATRIX_INDEX_ARRAY_SIZE_OES                          0x8846
> ++#define GL_MATRIX_INDEX_ARRAY_TYPE_OES                          0x8847
> ++#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES                        0x8848
> ++#define GL_MATRIX_INDEX_ARRAY_POINTER_OES                       0x8849
> ++#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES                0x8B9E
> ++#define GL_WEIGHT_ARRAY_SIZE_OES                                0x86AB
> ++#define GL_WEIGHT_ARRAY_TYPE_OES                                0x86A9
> ++#define GL_WEIGHT_ARRAY_STRIDE_OES                              0x86AA
> ++#define GL_WEIGHT_ARRAY_POINTER_OES                             0x86AC
> ++#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES                      0x889E
> ++#endif
> ++
> ++/* GL_OES_packed_depth_stencil */
> ++#ifndef GL_OES_packed_depth_stencil
> ++#define GL_DEPTH_STENCIL_OES                                    0x84F9
> ++#define GL_UNSIGNED_INT_24_8_OES                                0x84FA
> ++#define GL_DEPTH24_STENCIL8_OES                                 0x88F0
> ++#endif
> ++
> ++/* GL_OES_required_internalformat */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/* GL_OES_rgb8_rgba8 */
> ++#ifndef GL_OES_rgb8_rgba8
> ++#define GL_RGB8_OES                                             0x8051
> ++#define GL_RGBA8_OES                                            0x8058
> ++#endif
> ++
> ++/* GL_OES_stencil1 */
> ++#ifndef GL_OES_stencil1
> ++#define GL_STENCIL_INDEX1_OES                                   0x8D46
> ++#endif
> ++
> ++/* GL_OES_stencil4 */
> ++#ifndef GL_OES_stencil4
> ++#define GL_STENCIL_INDEX4_OES                                   0x8D47
> ++#endif
> ++
> ++/* GL_OES_stencil8 */
> ++#ifndef GL_OES_stencil8
> ++#define GL_STENCIL_INDEX8_OES                                   0x8D48
> ++#endif
> ++
> ++/* GL_OES_stencil_wrap */
> ++#ifndef GL_OES_stencil_wrap
> ++#define GL_INCR_WRAP_OES                                        0x8507
> ++#define GL_DECR_WRAP_OES                                        0x8508
> ++#endif
> ++
> ++/* GL_OES_texture_cube_map */
> ++#ifndef GL_OES_texture_cube_map
> ++#define GL_NORMAL_MAP_OES                                       0x8511
> ++#define GL_REFLECTION_MAP_OES                                   0x8512
> ++#define GL_TEXTURE_CUBE_MAP_OES                                 0x8513
> ++#define GL_TEXTURE_BINDING_CUBE_MAP_OES                         0x8514
> ++#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES                      0x8515
> ++#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES                      0x8516
> ++#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES                      0x8517
> ++#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES                      0x8518
> ++#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES                      0x8519
> ++#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES                      0x851A
> ++#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES                        0x851C
> ++#define GL_TEXTURE_GEN_MODE_OES                                 0x2500
> ++#define GL_TEXTURE_GEN_STR_OES                                  0x8D60
> ++#endif
> ++
> ++/* GL_OES_texture_mirrored_repeat */
> ++#ifndef GL_OES_texture_mirrored_repeat
> ++#define GL_MIRRORED_REPEAT_OES                                  0x8370
> ++#endif
> ++
> ++/* GL_OES_vertex_array_object */
> ++#ifndef GL_OES_vertex_array_object
> ++#define GL_VERTEX_ARRAY_BINDING_OES                             0x85B5
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * AMD extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_AMD_compressed_3DC_texture */
> ++#ifndef GL_AMD_compressed_3DC_texture
> ++#define GL_3DC_X_AMD                                            0x87F9
> ++#define GL_3DC_XY_AMD                                           0x87FA
> ++#endif
> ++
> ++/* GL_AMD_compressed_ATC_texture */
> ++#ifndef GL_AMD_compressed_ATC_texture
> ++#define GL_ATC_RGB_AMD                                          0x8C92
> ++#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                          0x8C93
> ++#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD                      0x87EE
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * APPLE extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_APPLE_copy_texture_levels */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/* GL_APPLE_framebuffer_multisample */
> ++#ifndef GL_APPLE_framebuffer_multisample
> ++#define GL_RENDERBUFFER_SAMPLES_APPLE                           0x8CAB
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE             0x8D56
> ++#define GL_MAX_SAMPLES_APPLE                                    0x8D57
> ++#define GL_READ_FRAMEBUFFER_APPLE                               0x8CA8
> ++#define GL_DRAW_FRAMEBUFFER_APPLE                               0x8CA9
> ++#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE                       0x8CA6
> ++#define GL_READ_FRAMEBUFFER_BINDING_APPLE                       0x8CAA
> ++#endif
> ++
> ++/* GL_APPLE_sync */
> ++#ifndef GL_APPLE_sync
> ++
> ++/* These types are defined with reference to <inttypes.h>
> ++ * in the Apple extension spec, but here we use the Khronos
> ++ * portable types in khrplatform.h, and assume those types
> ++ * are always defined.
> ++ * If any other extensions using these types are defined,
> ++ * the typedefs must move out of this block and be shared.
> ++ */
> ++typedef khronos_int64_t GLint64;
> ++typedef khronos_uint64_t GLuint64;
> ++typedef struct __GLsync *GLsync;
> ++
> ++#define GL_SYNC_OBJECT_APPLE                                    0x8A53
> ++#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE                        0x9111
> ++#define GL_OBJECT_TYPE_APPLE                                    0x9112
> ++#define GL_SYNC_CONDITION_APPLE                                 0x9113
> ++#define GL_SYNC_STATUS_APPLE                                    0x9114
> ++#define GL_SYNC_FLAGS_APPLE                                     0x9115
> ++#define GL_SYNC_FENCE_APPLE                                     0x9116
> ++#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE                     0x9117
> ++#define GL_UNSIGNALED_APPLE                                     0x9118
> ++#define GL_SIGNALED_APPLE                                       0x9119
> ++#define GL_ALREADY_SIGNALED_APPLE                               0x911A
> ++#define GL_TIMEOUT_EXPIRED_APPLE                                0x911B
> ++#define GL_CONDITION_SATISFIED_APPLE                            0x911C
> ++#define GL_WAIT_FAILED_APPLE                                    0x911D
> ++#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE                        0x00000001
> ++#define GL_TIMEOUT_IGNORED_APPLE                                0xFFFFFFFFFFFFFFFFull
> ++#endif
> ++
> ++/* GL_APPLE_texture_2D_limited_npot */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/* GL_APPLE_texture_format_BGRA8888 */
> ++#ifndef GL_APPLE_texture_format_BGRA8888
> ++#define GL_BGRA_EXT                                             0x80E1
> ++#endif
> ++
> ++/* GL_APPLE_texture_max_level */
> ++#ifndef GL_APPLE_texture_max_level
> ++#define GL_TEXTURE_MAX_LEVEL_APPLE                              0x813D
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * ARM extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_ARM_rgba8 */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/*------------------------------------------------------------------------*
> ++ * EXT extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_EXT_blend_minmax */
> ++#ifndef GL_EXT_blend_minmax
> ++#define GL_MIN_EXT                                              0x8007
> ++#define GL_MAX_EXT                                              0x8008
> ++#endif
> ++
> ++/* GL_EXT_discard_framebuffer */
> ++#ifndef GL_EXT_discard_framebuffer
> ++#define GL_COLOR_EXT                                            0x1800
> ++#define GL_DEPTH_EXT                                            0x1801
> ++#define GL_STENCIL_EXT                                          0x1802
> ++#endif
> ++
> ++/* GL_EXT_map_buffer_range */
> ++#ifndef GL_EXT_map_buffer_range
> ++#define GL_MAP_READ_BIT_EXT                                     0x0001
> ++#define GL_MAP_WRITE_BIT_EXT                                    0x0002
> ++#define GL_MAP_INVALIDATE_RANGE_BIT_EXT                         0x0004
> ++#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT                        0x0008
> ++#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT                           0x0010
> ++#define GL_MAP_UNSYNCHRONIZED_BIT_EXT                           0x0020
> ++#endif
> ++
> ++/* GL_EXT_multisampled_render_to_texture */
> ++#ifndef GL_EXT_multisampled_render_to_texture
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT           0x8D6C
> ++/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */
> ++#define GL_RENDERBUFFER_SAMPLES_EXT                             0x8CAB
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT               0x8D56
> ++#define GL_MAX_SAMPLES_EXT                                      0x8D57
> ++#endif
> ++
> ++/* GL_EXT_multi_draw_arrays */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/* GL_EXT_read_format_bgra */
> ++#ifndef GL_EXT_read_format_bgra
> ++#define GL_BGRA_EXT                                             0x80E1
> ++#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT                       0x8365
> ++#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT                       0x8366
> ++#endif
> ++
> ++/* GL_EXT_robustness */
> ++#ifndef GL_EXT_robustness
> ++/* reuse GL_NO_ERROR */
> ++#define GL_GUILTY_CONTEXT_RESET_EXT                             0x8253
> ++#define GL_INNOCENT_CONTEXT_RESET_EXT                           0x8254
> ++#define GL_UNKNOWN_CONTEXT_RESET_EXT                            0x8255
> ++#define GL_CONTEXT_ROBUST_ACCESS_EXT                            0x90F3
> ++#define GL_RESET_NOTIFICATION_STRATEGY_EXT                      0x8256
> ++#define GL_LOSE_CONTEXT_ON_RESET_EXT                            0x8252
> ++#define GL_NO_RESET_NOTIFICATION_EXT                            0x8261
> ++#endif
> ++
> ++/* GL_EXT_sRGB */
> ++#ifndef GL_EXT_sRGB
> ++#define GL_SRGB_EXT                                             0x8C40
> ++#define GL_SRGB_ALPHA_EXT                                       0x8C42
> ++#define GL_SRGB8_ALPHA8_EXT                                     0x8C43
> ++#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT            0x8210
> ++#endif
> ++
> ++/* GL_EXT_texture_compression_dxt1 */
> ++#ifndef GL_EXT_texture_compression_dxt1
> ++#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT                         0x83F0
> ++#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                        0x83F1
> ++#endif
> ++
> ++/* GL_EXT_texture_filter_anisotropic */
> ++#ifndef GL_EXT_texture_filter_anisotropic
> ++#define GL_TEXTURE_MAX_ANISOTROPY_EXT                           0x84FE
> ++#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                       0x84FF
> ++#endif
> ++
> ++/* GL_EXT_texture_format_BGRA8888 */
> ++#ifndef GL_EXT_texture_format_BGRA8888
> ++#define GL_BGRA_EXT                                             0x80E1
> ++#endif
> ++
> ++/* GL_EXT_texture_lod_bias */
> ++#ifndef GL_EXT_texture_lod_bias
> ++#define GL_MAX_TEXTURE_LOD_BIAS_EXT                             0x84FD
> ++#define GL_TEXTURE_FILTER_CONTROL_EXT                           0x8500
> ++#define GL_TEXTURE_LOD_BIAS_EXT                                 0x8501
> ++#endif
> ++
> ++/* GL_EXT_texture_storage */
> ++#ifndef GL_EXT_texture_storage
> ++#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT                         0x912F
> ++#define GL_ALPHA8_EXT                                           0x803C
> ++#define GL_LUMINANCE8_EXT                                       0x8040
> ++#define GL_LUMINANCE8_ALPHA8_EXT                                0x8045
> ++#define GL_RGBA32F_EXT                                          0x8814
> ++#define GL_RGB32F_EXT                                           0x8815
> ++#define GL_ALPHA32F_EXT                                         0x8816
> ++#define GL_LUMINANCE32F_EXT                                     0x8818
> ++#define GL_LUMINANCE_ALPHA32F_EXT                               0x8819
> ++/* reuse GL_RGBA16F_EXT */
> ++#define GL_RGB16F_EXT                                           0x881B
> ++#define GL_ALPHA16F_EXT                                         0x881C
> ++#define GL_LUMINANCE16F_EXT                                     0x881E
> ++#define GL_LUMINANCE_ALPHA16F_EXT                               0x881F
> ++#define GL_RGB10_A2_EXT                                         0x8059
> ++#define GL_RGB10_EXT                                            0x8052
> ++#define GL_BGRA8_EXT                                            0x93A1
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * IMG extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_IMG_read_format */
> ++#ifndef GL_IMG_read_format
> ++#define GL_BGRA_IMG                                             0x80E1
> ++#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG                       0x8365
> ++#endif
> ++
> ++/* GL_IMG_texture_compression_pvrtc */
> ++#ifndef GL_IMG_texture_compression_pvrtc
> ++#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
> ++#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
> ++#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
> ++#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
> ++#endif
> ++
> ++/* GL_IMG_texture_env_enhanced_fixed_function */
> ++#ifndef GL_IMG_texture_env_enhanced_fixed_function
> ++#define GL_MODULATE_COLOR_IMG                                   0x8C04
> ++#define GL_RECIP_ADD_SIGNED_ALPHA_IMG                           0x8C05
> ++#define GL_TEXTURE_ALPHA_MODULATE_IMG                           0x8C06
> ++#define GL_FACTOR_ALPHA_MODULATE_IMG                            0x8C07
> ++#define GL_FRAGMENT_ALPHA_MODULATE_IMG                          0x8C08
> ++#define GL_ADD_BLEND_IMG                                        0x8C09
> ++#define GL_DOT3_RGBA_IMG                                        0x86AF
> ++#endif
> ++
> ++/* GL_IMG_user_clip_plane */
> ++#ifndef GL_IMG_user_clip_plane
> ++#define GL_CLIP_PLANE0_IMG                                      0x3000
> ++#define GL_CLIP_PLANE1_IMG                                      0x3001
> ++#define GL_CLIP_PLANE2_IMG                                      0x3002
> ++#define GL_CLIP_PLANE3_IMG                                      0x3003
> ++#define GL_CLIP_PLANE4_IMG                                      0x3004
> ++#define GL_CLIP_PLANE5_IMG                                      0x3005
> ++#define GL_MAX_CLIP_PLANES_IMG                                  0x0D32
> ++#endif
> ++
> ++/* GL_IMG_multisampled_render_to_texture */
> ++#ifndef GL_IMG_multisampled_render_to_texture
> ++#define GL_RENDERBUFFER_SAMPLES_IMG                             0x9133
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG               0x9134
> ++#define GL_MAX_SAMPLES_IMG                                      0x9135
> ++#define GL_TEXTURE_SAMPLES_IMG                                  0x9136
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * NV extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_NV_fence */
> ++#ifndef GL_NV_fence
> ++#define GL_ALL_COMPLETED_NV                                     0x84F2
> ++#define GL_FENCE_STATUS_NV                                      0x84F3
> ++#define GL_FENCE_CONDITION_NV                                   0x84F4
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * QCOM extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_QCOM_driver_control */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/* GL_QCOM_extended_get */
> ++#ifndef GL_QCOM_extended_get
> ++#define GL_TEXTURE_WIDTH_QCOM                                   0x8BD2
> ++#define GL_TEXTURE_HEIGHT_QCOM                                  0x8BD3
> ++#define GL_TEXTURE_DEPTH_QCOM                                   0x8BD4
> ++#define GL_TEXTURE_INTERNAL_FORMAT_QCOM                         0x8BD5
> ++#define GL_TEXTURE_FORMAT_QCOM                                  0x8BD6
> ++#define GL_TEXTURE_TYPE_QCOM                                    0x8BD7
> ++#define GL_TEXTURE_IMAGE_VALID_QCOM                             0x8BD8
> ++#define GL_TEXTURE_NUM_LEVELS_QCOM                              0x8BD9
> ++#define GL_TEXTURE_TARGET_QCOM                                  0x8BDA
> ++#define GL_TEXTURE_OBJECT_VALID_QCOM                            0x8BDB
> ++#define GL_STATE_RESTORE                                        0x8BDC
> ++#endif
> ++
> ++/* GL_QCOM_extended_get2 */
> ++/* No new tokens introduced by this extension. */
> ++
> ++/* GL_QCOM_perfmon_global_mode */
> ++#ifndef GL_QCOM_perfmon_global_mode
> ++#define GL_PERFMON_GLOBAL_MODE_QCOM                             0x8FA0
> ++#endif
> ++
> ++/* GL_QCOM_writeonly_rendering */
> ++#ifndef GL_QCOM_writeonly_rendering
> ++#define GL_WRITEONLY_RENDERING_QCOM                             0x8823
> ++#endif
> ++
> ++/* GL_QCOM_tiled_rendering */
> ++#ifndef GL_QCOM_tiled_rendering
> ++#define GL_COLOR_BUFFER_BIT0_QCOM                               0x00000001
> ++#define GL_COLOR_BUFFER_BIT1_QCOM                               0x00000002
> ++#define GL_COLOR_BUFFER_BIT2_QCOM                               0x00000004
> ++#define GL_COLOR_BUFFER_BIT3_QCOM                               0x00000008
> ++#define GL_COLOR_BUFFER_BIT4_QCOM                               0x00000010
> ++#define GL_COLOR_BUFFER_BIT5_QCOM                               0x00000020
> ++#define GL_COLOR_BUFFER_BIT6_QCOM                               0x00000040
> ++#define GL_COLOR_BUFFER_BIT7_QCOM                               0x00000080
> ++#define GL_DEPTH_BUFFER_BIT0_QCOM                               0x00000100
> ++#define GL_DEPTH_BUFFER_BIT1_QCOM                               0x00000200
> ++#define GL_DEPTH_BUFFER_BIT2_QCOM                               0x00000400
> ++#define GL_DEPTH_BUFFER_BIT3_QCOM                               0x00000800
> ++#define GL_DEPTH_BUFFER_BIT4_QCOM                               0x00001000
> ++#define GL_DEPTH_BUFFER_BIT5_QCOM                               0x00002000
> ++#define GL_DEPTH_BUFFER_BIT6_QCOM                               0x00004000
> ++#define GL_DEPTH_BUFFER_BIT7_QCOM                               0x00008000
> ++#define GL_STENCIL_BUFFER_BIT0_QCOM                             0x00010000
> ++#define GL_STENCIL_BUFFER_BIT1_QCOM                             0x00020000
> ++#define GL_STENCIL_BUFFER_BIT2_QCOM                             0x00040000
> ++#define GL_STENCIL_BUFFER_BIT3_QCOM                             0x00080000
> ++#define GL_STENCIL_BUFFER_BIT4_QCOM                             0x00100000
> ++#define GL_STENCIL_BUFFER_BIT5_QCOM                             0x00200000
> ++#define GL_STENCIL_BUFFER_BIT6_QCOM                             0x00400000
> ++#define GL_STENCIL_BUFFER_BIT7_QCOM                             0x00800000
> ++#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM                         0x01000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM                         0x02000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM                         0x04000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM                         0x08000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM                         0x10000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM                         0x20000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM                         0x40000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM                         0x80000000
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * End of extension tokens, start of corresponding extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/*------------------------------------------------------------------------*
> ++ * OES extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_OES_blend_equation_separate */
> ++#ifndef GL_OES_blend_equation_separate
> ++#define GL_OES_blend_equation_separate 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glBlendEquationSeparateOES (GLenum modeRGB, GLenum modeAlpha);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEOESPROC) (GLenum modeRGB, GLenum modeAlpha);
> ++#endif
> ++
> ++/* GL_OES_blend_func_separate */
> ++#ifndef GL_OES_blend_func_separate
> ++#define GL_OES_blend_func_separate 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glBlendFuncSeparateOES (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEOESPROC) (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
> ++#endif
> ++
> ++/* GL_OES_blend_subtract */
> ++#ifndef GL_OES_blend_subtract
> ++#define GL_OES_blend_subtract 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glBlendEquationOES (GLenum mode);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONOESPROC) (GLenum mode);
> ++#endif
> ++
> ++/* GL_OES_byte_coordinates */
> ++#ifndef GL_OES_byte_coordinates
> ++#define GL_OES_byte_coordinates 1
> ++#endif
> ++
> ++/* GL_OES_compressed_ETC1_RGB8_texture */
> ++#ifndef GL_OES_compressed_ETC1_RGB8_texture
> ++#define GL_OES_compressed_ETC1_RGB8_texture 1
> ++#endif
> ++
> ++/* GL_OES_depth24 */
> ++#ifndef GL_OES_depth24
> ++#define GL_OES_depth24 1
> ++#endif
> ++
> ++/* GL_OES_depth32 */
> ++#ifndef GL_OES_depth32
> ++#define GL_OES_depth32 1
> ++#endif
> ++
> ++/* GL_OES_draw_texture */
> ++#ifndef GL_OES_draw_texture
> ++#define GL_OES_draw_texture 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glDrawTexsOES (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
> ++GL_API void GL_APIENTRY glDrawTexiOES (GLint x, GLint y, GLint z, GLint width, GLint height);
> ++GL_API void GL_APIENTRY glDrawTexxOES (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
> ++GL_API void GL_APIENTRY glDrawTexsvOES (const GLshort *coords);
> ++GL_API void GL_APIENTRY glDrawTexivOES (const GLint *coords);
> ++GL_API void GL_APIENTRY glDrawTexxvOES (const GLfixed *coords);
> ++GL_API void GL_APIENTRY glDrawTexfOES (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
> ++GL_API void GL_APIENTRY glDrawTexfvOES (const GLfloat *coords);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXSOESPROC) (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXIOESPROC) (GLint x, GLint y, GLint z, GLint width, GLint height);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXXOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXSVOESPROC) (const GLshort *coords);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXIVOESPROC) (const GLint *coords);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXXVOESPROC) (const GLfixed *coords);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXFOESPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
> ++typedef void (GL_APIENTRYP PFNGLDRAWTEXFVOESPROC) (const GLfloat *coords);
> ++#endif
> ++
> ++/* GL_OES_EGL_image */
> ++#ifndef GL_OES_EGL_image
> ++#define GL_OES_EGL_image 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
> ++GL_API void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
> ++typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
> ++#endif
> ++
> ++/* GL_OES_EGL_image_external */
> ++#ifndef GL_OES_EGL_image_external
> ++#define GL_OES_EGL_image_external 1
> ++/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */
> ++#endif
> ++
> ++/* GL_OES_element_index_uint */
> ++#ifndef GL_OES_element_index_uint
> ++#define GL_OES_element_index_uint 1
> ++#endif
> ++
> ++/* GL_OES_extended_matrix_palette */
> ++#ifndef GL_OES_extended_matrix_palette
> ++#define GL_OES_extended_matrix_palette 1
> ++#endif
> ++
> ++/* GL_OES_fbo_render_mipmap */
> ++#ifndef GL_OES_fbo_render_mipmap
> ++#define GL_OES_fbo_render_mipmap 1
> ++#endif
> ++
> ++/* GL_OES_fixed_point */
> ++#ifndef GL_OES_fixed_point
> ++#define GL_OES_fixed_point 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glAlphaFuncxOES (GLenum func, GLclampx ref);
> ++GL_API void GL_APIENTRY glClearColorxOES (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
> ++GL_API void GL_APIENTRY glClearDepthxOES (GLclampx depth);
> ++GL_API void GL_APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);
> ++GL_API void GL_APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
> ++GL_API void GL_APIENTRY glDepthRangexOES (GLclampx zNear, GLclampx zFar);
> ++GL_API void GL_APIENTRY glFogxOES (GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glFogxvOES (GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glFrustumxOES (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
> ++GL_API void GL_APIENTRY glGetClipPlanexOES (GLenum pname, GLfixed eqn[4]);
> ++GL_API void GL_APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetLightxvOES (GLenum light, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetMaterialxvOES (GLenum face, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetTexEnvxvOES (GLenum env, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glLightModelxOES (GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glLineWidthxOES (GLfixed width);
> ++GL_API void GL_APIENTRY glLoadMatrixxOES (const GLfixed *m);
> ++GL_API void GL_APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glMultMatrixxOES (const GLfixed *m);
> ++GL_API void GL_APIENTRY glMultiTexCoord4xOES (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
> ++GL_API void GL_APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);
> ++GL_API void GL_APIENTRY glOrthoxOES (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
> ++GL_API void GL_APIENTRY glPointParameterxOES (GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glPointSizexOES (GLfixed size);
> ++GL_API void GL_APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);
> ++GL_API void GL_APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
> ++GL_API void GL_APIENTRY glSampleCoveragexOES (GLclampx value, GLboolean invert);
> ++GL_API void GL_APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);
> ++GL_API void GL_APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLclampx ref);
> ++typedef void (GL_APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
> ++typedef void (GL_APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLclampx depth);
> ++typedef void (GL_APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);
> ++typedef void (GL_APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
> ++typedef void (GL_APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLclampx zNear, GLclampx zFar);
> ++typedef void (GL_APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
> ++typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum pname, GLfixed eqn[4]);
> ++typedef void (GL_APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLGETLIGHTXVOESPROC) (GLenum light, GLenum pname, GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLGETMATERIALXVOESPROC) (GLenum face, GLenum pname, GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum env, GLenum pname, GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);
> ++typedef void (GL_APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);
> ++typedef void (GL_APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);
> ++typedef void (GL_APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
> ++typedef void (GL_APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);
> ++typedef void (GL_APIENTRYP PFNGLORTHOXOESPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
> ++typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXOESPROC) (GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);
> ++typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);
> ++typedef void (GL_APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
> ++typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEXOESPROC) (GLclampx value, GLboolean invert);
> ++typedef void (GL_APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
> ++typedef void (GL_APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
> ++#endif
> ++
> ++/* GL_OES_framebuffer_object */
> ++#ifndef GL_OES_framebuffer_object
> ++#define GL_OES_framebuffer_object 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API GLboolean GL_APIENTRY glIsRenderbufferOES (GLuint renderbuffer);
> ++GL_API void GL_APIENTRY glBindRenderbufferOES (GLenum target, GLuint renderbuffer);
> ++GL_API void GL_APIENTRY glDeleteRenderbuffersOES (GLsizei n, const GLuint* renderbuffers);
> ++GL_API void GL_APIENTRY glGenRenderbuffersOES (GLsizei n, GLuint* renderbuffers);
> ++GL_API void GL_APIENTRY glRenderbufferStorageOES (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_API void GL_APIENTRY glGetRenderbufferParameterivOES (GLenum target, GLenum pname, GLint* params);
> ++GL_API GLboolean GL_APIENTRY glIsFramebufferOES (GLuint framebuffer);
> ++GL_API void GL_APIENTRY glBindFramebufferOES (GLenum target, GLuint framebuffer);
> ++GL_API void GL_APIENTRY glDeleteFramebuffersOES (GLsizei n, const GLuint* framebuffers);
> ++GL_API void GL_APIENTRY glGenFramebuffersOES (GLsizei n, GLuint* framebuffers);
> ++GL_API GLenum GL_APIENTRY glCheckFramebufferStatusOES (GLenum target);
> ++GL_API void GL_APIENTRY glFramebufferRenderbufferOES (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
> ++GL_API void GL_APIENTRY glFramebufferTexture2DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
> ++GL_API void GL_APIENTRY glGetFramebufferAttachmentParameterivOES (GLenum target, GLenum attachment, GLenum pname, GLint* params);
> ++GL_API void GL_APIENTRY glGenerateMipmapOES (GLenum target);
> ++#endif
> ++typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFEROESPROC) (GLuint renderbuffer);
> ++typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFEROESPROC) (GLenum target, GLuint renderbuffer);
> ++typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSOESPROC) (GLsizei n, const GLuint* renderbuffers);
> ++typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSOESPROC) (GLsizei n, GLuint* renderbuffers);
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVOESPROC) (GLenum target, GLenum pname, GLint* params);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFEROESPROC) (GLuint framebuffer);
> ++typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFEROESPROC) (GLenum target, GLuint framebuffer);
> ++typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSOESPROC) (GLsizei n, const GLuint* framebuffers);
> ++typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSOESPROC) (GLsizei n, GLuint* framebuffers);
> ++typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSOESPROC) (GLenum target);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEROESPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
> ++typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params);
> ++typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPOESPROC) (GLenum target);
> ++#endif
> ++
> ++/* GL_OES_mapbuffer */
> ++#ifndef GL_OES_mapbuffer
> ++#define GL_OES_mapbuffer 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
> ++GL_API GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
> ++GL_API void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid ** params);
> ++#endif
> ++typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
> ++typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
> ++typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid ** params);
> ++#endif
> ++
> ++/* GL_OES_matrix_get */
> ++#ifndef GL_OES_matrix_get
> ++#define GL_OES_matrix_get 1
> ++#endif
> ++
> ++/* GL_OES_matrix_palette */
> ++#ifndef GL_OES_matrix_palette
> ++#define GL_OES_matrix_palette 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glCurrentPaletteMatrixOES (GLuint matrixpaletteindex);
> ++GL_API void GL_APIENTRY glLoadPaletteFromModelViewMatrixOES (void);
> ++GL_API void GL_APIENTRY glMatrixIndexPointerOES (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++GL_API void GL_APIENTRY glWeightPointerOES (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLCURRENTPALETTEMATRIXOESPROC) (GLuint matrixpaletteindex);
> ++typedef void (GL_APIENTRYP PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC) (void);
> ++typedef void (GL_APIENTRYP PFNGLMATRIXINDEXPOINTEROESPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++typedef void (GL_APIENTRYP PFNGLWEIGHTPOINTEROESPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++#endif
> ++
> ++/* GL_OES_packed_depth_stencil */
> ++#ifndef GL_OES_packed_depth_stencil
> ++#define GL_OES_packed_depth_stencil 1
> ++#endif
> ++
> ++/* GL_OES_required_internalformat */
> ++#ifndef GL_OES_required_internalformat
> ++#define GL_OES_required_internalformat 1
> ++#endif
> ++
> ++/* GL_OES_query_matrix */
> ++#ifndef GL_OES_query_matrix
> ++#define GL_OES_query_matrix 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API GLbitfield GL_APIENTRY glQueryMatrixxOES (GLfixed mantissa[16], GLint exponent[16]);
> ++#endif
> ++typedef GLbitfield (GL_APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed mantissa[16], GLint exponent[16]);
> ++#endif
> ++
> ++/* GL_OES_rgb8_rgba8 */
> ++#ifndef GL_OES_rgb8_rgba8
> ++#define GL_OES_rgb8_rgba8 1
> ++#endif
> ++
> ++/* GL_OES_single_precision */
> ++#ifndef GL_OES_single_precision
> ++#define GL_OES_single_precision 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glDepthRangefOES (GLclampf zNear, GLclampf zFar);
> ++GL_API void GL_APIENTRY glFrustumfOES (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
> ++GL_API void GL_APIENTRY glOrthofOES (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
> ++GL_API void GL_APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);
> ++GL_API void GL_APIENTRY glGetClipPlanefOES (GLenum pname, GLfloat eqn[4]);
> ++GL_API void GL_APIENTRY glClearDepthfOES (GLclampf depth);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf zNear, GLclampf zFar);
> ++typedef void (GL_APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
> ++typedef void (GL_APIENTRYP PFNGLORTHOFOESPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
> ++typedef void (GL_APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);
> ++typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum pname, GLfloat eqn[4]);
> ++typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);
> ++#endif
> ++
> ++/* GL_OES_stencil1 */
> ++#ifndef GL_OES_stencil1
> ++#define GL_OES_stencil1 1
> ++#endif
> ++
> ++/* GL_OES_stencil4 */
> ++#ifndef GL_OES_stencil4
> ++#define GL_OES_stencil4 1
> ++#endif
> ++
> ++/* GL_OES_stencil8 */
> ++#ifndef GL_OES_stencil8
> ++#define GL_OES_stencil8 1
> ++#endif
> ++
> ++/* GL_OES_stencil_wrap */
> ++#ifndef GL_OES_stencil_wrap
> ++#define GL_OES_stencil_wrap 1
> ++#endif
> ++
> ++/* GL_OES_texture_cube_map */
> ++#ifndef GL_OES_texture_cube_map
> ++#define GL_OES_texture_cube_map 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glTexGenfOES (GLenum coord, GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glTexGenfvOES (GLenum coord, GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glTexGeniOES (GLenum coord, GLenum pname, GLint param);
> ++GL_API void GL_APIENTRY glTexGenivOES (GLenum coord, GLenum pname, const GLint *params);
> ++GL_API void GL_APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glGetTexGenfvOES (GLenum coord, GLenum pname, GLfloat *params);
> ++GL_API void GL_APIENTRY glGetTexGenivOES (GLenum coord, GLenum pname, GLint *params);
> ++GL_API void GL_APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLTEXGENFOESPROC) (GLenum coord, GLenum pname, GLfloat param);
> ++typedef void (GL_APIENTRYP PFNGLTEXGENFVOESPROC) (GLenum coord, GLenum pname, const GLfloat *params);
> ++typedef void (GL_APIENTRYP PFNGLTEXGENIOESPROC) (GLenum coord, GLenum pname, GLint param);
> ++typedef void (GL_APIENTRYP PFNGLTEXGENIVOESPROC) (GLenum coord, GLenum pname, const GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);
> ++typedef void (GL_APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);
> ++typedef void (GL_APIENTRYP PFNGLGETTEXGENFVOESPROC) (GLenum coord, GLenum pname, GLfloat *params);
> ++typedef void (GL_APIENTRYP PFNGLGETTEXGENIVOESPROC) (GLenum coord, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);
> ++#endif
> ++
> ++/* GL_OES_texture_env_crossbar */
> ++#ifndef GL_OES_texture_env_crossbar
> ++#define GL_OES_texture_env_crossbar 1
> ++#endif
> ++
> ++/* GL_OES_texture_mirrored_repeat */
> ++#ifndef GL_OES_texture_mirrored_repeat
> ++#define GL_OES_texture_mirrored_repeat 1
> ++#endif
> ++
> ++/* GL_OES_vertex_array_object */
> ++#ifndef GL_OES_vertex_array_object
> ++#define GL_OES_vertex_array_object 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glBindVertexArrayOES (GLuint array);
> ++GL_API void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays);
> ++GL_API void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays);
> ++GL_API GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array);
> ++typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays);
> ++typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array);
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * AMD extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_AMD_compressed_3DC_texture */
> ++#ifndef GL_AMD_compressed_3DC_texture
> ++#define GL_AMD_compressed_3DC_texture 1
> ++#endif
> ++
> ++/* GL_AMD_compressed_ATC_texture */
> ++#ifndef GL_AMD_compressed_ATC_texture
> ++#define GL_AMD_compressed_ATC_texture 1
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * APPLE extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_APPLE_copy_texture_levels */
> ++#ifndef GL_APPLE_copy_texture_levels
> ++#define GL_APPLE_copy_texture_levels 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
> ++#endif
> ++
> ++/* GL_APPLE_framebuffer_multisample */
> ++#ifndef GL_APPLE_framebuffer_multisample
> ++#define GL_APPLE_framebuffer_multisample 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
> ++GL_API void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void);
> ++#endif /* GL_GLEXT_PROTOTYPES */
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void);
> ++#endif
> ++
> ++/* GL_APPLE_sync */
> ++#ifndef GL_APPLE_sync
> ++#define GL_APPLE_sync 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags);
> ++GL_API GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync);
> ++GL_API void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync);
> ++GL_API GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++GL_API void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++GL_API void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params);
> ++GL_API void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
> ++#endif
> ++typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync);
> ++typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync);
> ++typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params);
> ++typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
> ++#endif
> ++
> ++/* GL_APPLE_texture_2D_limited_npot */
> ++#ifndef GL_APPLE_texture_2D_limited_npot
> ++#define GL_APPLE_texture_2D_limited_npot 1
> ++#endif
> ++
> ++/* GL_APPLE_texture_format_BGRA8888 */
> ++#ifndef GL_APPLE_texture_format_BGRA8888
> ++#define GL_APPLE_texture_format_BGRA8888 1
> ++#endif
> ++
> ++/* GL_APPLE_texture_max_level */
> ++#ifndef GL_APPLE_texture_max_level
> ++#define GL_APPLE_texture_max_level 1
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * ARM extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_ARM_rgba8 */
> ++#ifndef GL_ARM_rgba8
> ++#define GL_ARM_rgba8 1
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * EXT extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_EXT_blend_minmax */
> ++#ifndef GL_EXT_blend_minmax
> ++#define GL_EXT_blend_minmax 1
> ++#endif
> ++
> ++/* GL_EXT_discard_framebuffer */
> ++#ifndef GL_EXT_discard_framebuffer
> ++#define GL_EXT_discard_framebuffer 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
> ++#endif
> ++
> ++/* GL_EXT_map_buffer_range */
> ++#ifndef GL_EXT_map_buffer_range
> ++#define GL_EXT_map_buffer_range 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY *glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
> ++GL_API void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length);
> ++#endif
> ++typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
> ++typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
> ++#endif
> ++
> ++/* GL_EXT_multisampled_render_to_texture */
> ++#ifndef GL_EXT_multisampled_render_to_texture
> ++#define GL_EXT_multisampled_render_to_texture 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
> ++GL_API void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
> ++#endif
> ++
> ++/* GL_EXT_multi_draw_arrays */
> ++#ifndef GL_EXT_multi_draw_arrays
> ++#define GL_EXT_multi_draw_arrays 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glMultiDrawArraysEXT (GLenum, const GLint *, const GLsizei *, GLsizei);
> ++GL_API void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
> ++#endif /* GL_GLEXT_PROTOTYPES */
> ++typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
> ++typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
> ++#endif
> ++
> ++/* GL_EXT_read_format_bgra */
> ++#ifndef GL_EXT_read_format_bgra
> ++#define GL_EXT_read_format_bgra 1
> ++#endif
> ++
> ++/* GL_EXT_robustness */
> ++#ifndef GL_EXT_robustness
> ++#define GL_EXT_robustness 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void);
> ++GL_API void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
> ++GL_API void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params);
> ++GL_API void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params);
> ++#endif
> ++typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void);
> ++typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
> ++typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params);
> ++typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
> ++#endif
> ++
> ++/* GL_EXT_sRGB */
> ++#ifndef GL_EXT_sRGB
> ++#define GL_EXT_sRGB 1
> ++#endif
> ++
> ++/* GL_EXT_texture_compression_dxt1 */
> ++#ifndef GL_EXT_texture_compression_dxt1
> ++#define GL_EXT_texture_compression_dxt1 1
> ++#endif
> ++
> ++/* GL_EXT_texture_filter_anisotropic */
> ++#ifndef GL_EXT_texture_filter_anisotropic
> ++#define GL_EXT_texture_filter_anisotropic 1
> ++#endif
> ++
> ++/* GL_EXT_texture_format_BGRA8888 */
> ++#ifndef GL_EXT_texture_format_BGRA8888
> ++#define GL_EXT_texture_format_BGRA8888 1
> ++#endif
> ++
> ++/* GL_EXT_texture_lod_bias */
> ++#ifndef GL_EXT_texture_lod_bias
> ++#define GL_EXT_texture_lod_bias 1
> ++#endif
> ++
> ++/* GL_EXT_texture_storage */
> ++#ifndef GL_EXT_texture_storage
> ++#define GL_EXT_texture_storage 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++GL_API void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_API void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++GL_API void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++GL_API void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_API void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * IMG extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_IMG_read_format */
> ++#ifndef GL_IMG_read_format
> ++#define GL_IMG_read_format 1
> ++#endif
> ++
> ++/* GL_IMG_texture_compression_pvrtc */
> ++#ifndef GL_IMG_texture_compression_pvrtc
> ++#define GL_IMG_texture_compression_pvrtc 1
> ++#endif
> ++
> ++/* GL_IMG_texture_env_enhanced_fixed_function */
> ++#ifndef GL_IMG_texture_env_enhanced_fixed_function
> ++#define GL_IMG_texture_env_enhanced_fixed_function 1
> ++#endif
> ++
> ++/* GL_IMG_user_clip_plane */
> ++#ifndef GL_IMG_user_clip_plane
> ++#define GL_IMG_user_clip_plane 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glClipPlanefIMG (GLenum, const GLfloat *);
> ++GL_API void GL_APIENTRY glClipPlanexIMG (GLenum, const GLfixed *);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLCLIPPLANEFIMGPROC) (GLenum p, const GLfloat *eqn);
> ++typedef void (GL_APIENTRYP PFNGLCLIPPLANEXIMGPROC) (GLenum p, const GLfixed *eqn);
> ++#endif
> ++
> ++/* GL_IMG_multisampled_render_to_texture */
> ++#ifndef GL_IMG_multisampled_render_to_texture
> ++#define GL_IMG_multisampled_render_to_texture 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
> ++GL_API void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * NV extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* NV_fence */
> ++#ifndef GL_NV_fence
> ++#define GL_NV_fence 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
> ++GL_API void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *);
> ++GL_API GLboolean GL_APIENTRY glIsFenceNV (GLuint);
> ++GL_API GLboolean GL_APIENTRY glTestFenceNV (GLuint);
> ++GL_API void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
> ++GL_API void GL_APIENTRY glFinishFenceNV (GLuint);
> ++GL_API void GL_APIENTRY glSetFenceNV (GLuint, GLenum);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
> ++typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
> ++typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
> ++typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
> ++typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
> ++#endif
> ++
> ++/*------------------------------------------------------------------------*
> ++ * QCOM extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_QCOM_driver_control */
> ++#ifndef GL_QCOM_driver_control
> ++#define GL_QCOM_driver_control 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls);
> ++GL_API void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
> ++GL_API void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl);
> ++GL_API void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls);
> ++typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
> ++typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
> ++typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
> ++#endif
> ++
> ++/* GL_QCOM_extended_get */
> ++#ifndef GL_QCOM_extended_get
> ++#define GL_QCOM_extended_get 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures);
> ++GL_API void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
> ++GL_API void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
> ++GL_API void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
> ++GL_API void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
> ++GL_API void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param);
> ++GL_API void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels);
> ++GL_API void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params);
> ++#endif
> ++
> ++/* GL_QCOM_extended_get2 */
> ++#ifndef GL_QCOM_extended_get2
> ++#define GL_QCOM_extended_get2 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders);
> ++GL_API void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
> ++GL_API GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program);
> ++GL_API void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
> ++typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
> ++#endif
> ++
> ++/* GL_QCOM_perfmon_global_mode */
> ++#ifndef GL_QCOM_perfmon_global_mode
> ++#define GL_QCOM_perfmon_global_mode 1
> ++#endif
> ++
> ++/* GL_QCOM_writeonly_rendering */
> ++#ifndef GL_QCOM_writeonly_rendering
> ++#define GL_QCOM_writeonly_rendering 1
> ++#endif
> ++
> ++/* GL_QCOM_tiled_rendering */
> ++#ifndef GL_QCOM_tiled_rendering
> ++#define GL_QCOM_tiled_rendering 1
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_API void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
> ++GL_API void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask);
> ++#endif
> ++typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
> ++typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask);
> ++#endif
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __glext_h_ */
> ++
> +diff -rupN a/usr/include/GLES/gl.h b/usr/include/GLES/gl.h
> +--- a/usr/include/GLES/gl.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES/gl.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,770 @@
> ++#ifndef __gl_h_
> ++#define __gl_h_
> ++
> ++/* $Revision: 10601 $ on $Date:: 2010-03-04 22:15:27 -0800 #$ */
> ++
> ++#include <GLES/glplatform.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/*
> ++ * This document is licensed under the SGI Free Software B License Version
> ++ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
> ++ */
> ++
> ++typedef void             GLvoid;
> ++typedef char             GLchar;
> ++typedef unsigned int     GLenum;
> ++typedef unsigned char    GLboolean;
> ++typedef unsigned int     GLbitfield;
> ++typedef khronos_int8_t   GLbyte;
> ++typedef short            GLshort;
> ++typedef int              GLint;
> ++typedef int              GLsizei;
> ++typedef khronos_uint8_t  GLubyte;
> ++typedef unsigned short   GLushort;
> ++typedef unsigned int     GLuint;
> ++typedef khronos_float_t  GLfloat;
> ++typedef khronos_float_t  GLclampf;
> ++typedef khronos_int32_t  GLfixed;
> ++typedef khronos_int32_t  GLclampx;
> ++
> ++typedef khronos_intptr_t GLintptr;
> ++typedef khronos_ssize_t  GLsizeiptr;
> ++
> ++
> ++/*************************************************************/
> ++
> ++/* OpenGL ES core versions */
> ++#define GL_VERSION_ES_CM_1_0          1
> ++#define GL_VERSION_ES_CL_1_0          1
> ++#define GL_VERSION_ES_CM_1_1          1
> ++#define GL_VERSION_ES_CL_1_1          1
> ++
> ++/* ClearBufferMask */
> ++#define GL_DEPTH_BUFFER_BIT               0x00000100
> ++#define GL_STENCIL_BUFFER_BIT             0x00000400
> ++#define GL_COLOR_BUFFER_BIT               0x00004000
> ++
> ++/* Boolean */
> ++#define GL_FALSE                          0
> ++#define GL_TRUE                           1
> ++
> ++/* BeginMode */
> ++#define GL_POINTS                         0x0000
> ++#define GL_LINES                          0x0001
> ++#define GL_LINE_LOOP                      0x0002
> ++#define GL_LINE_STRIP                     0x0003
> ++#define GL_TRIANGLES                      0x0004
> ++#define GL_TRIANGLE_STRIP                 0x0005
> ++#define GL_TRIANGLE_FAN                   0x0006
> ++
> ++/* AlphaFunction */
> ++#define GL_NEVER                          0x0200
> ++#define GL_LESS                           0x0201
> ++#define GL_EQUAL                          0x0202
> ++#define GL_LEQUAL                         0x0203
> ++#define GL_GREATER                        0x0204
> ++#define GL_NOTEQUAL                       0x0205
> ++#define GL_GEQUAL                         0x0206
> ++#define GL_ALWAYS                         0x0207
> ++
> ++/* BlendingFactorDest */
> ++#define GL_ZERO                           0
> ++#define GL_ONE                            1
> ++#define GL_SRC_COLOR                      0x0300
> ++#define GL_ONE_MINUS_SRC_COLOR            0x0301
> ++#define GL_SRC_ALPHA                      0x0302
> ++#define GL_ONE_MINUS_SRC_ALPHA            0x0303
> ++#define GL_DST_ALPHA                      0x0304
> ++#define GL_ONE_MINUS_DST_ALPHA            0x0305
> ++
> ++/* BlendingFactorSrc */
> ++/*      GL_ZERO */
> ++/*      GL_ONE */
> ++#define GL_DST_COLOR                      0x0306
> ++#define GL_ONE_MINUS_DST_COLOR            0x0307
> ++#define GL_SRC_ALPHA_SATURATE             0x0308
> ++/*      GL_SRC_ALPHA */
> ++/*      GL_ONE_MINUS_SRC_ALPHA */
> ++/*      GL_DST_ALPHA */
> ++/*      GL_ONE_MINUS_DST_ALPHA */
> ++
> ++/* ClipPlaneName */
> ++#define GL_CLIP_PLANE0                    0x3000
> ++#define GL_CLIP_PLANE1                    0x3001
> ++#define GL_CLIP_PLANE2                    0x3002
> ++#define GL_CLIP_PLANE3                    0x3003
> ++#define GL_CLIP_PLANE4                    0x3004
> ++#define GL_CLIP_PLANE5                    0x3005
> ++
> ++/* ColorMaterialFace */
> ++/*      GL_FRONT_AND_BACK */
> ++
> ++/* ColorMaterialParameter */
> ++/*      GL_AMBIENT_AND_DIFFUSE */
> ++
> ++/* ColorPointerType */
> ++/*      GL_UNSIGNED_BYTE */
> ++/*      GL_FLOAT */
> ++/*      GL_FIXED */
> ++
> ++/* CullFaceMode */
> ++#define GL_FRONT                          0x0404
> ++#define GL_BACK                           0x0405
> ++#define GL_FRONT_AND_BACK                 0x0408
> ++
> ++/* DepthFunction */
> ++/*      GL_NEVER */
> ++/*      GL_LESS */
> ++/*      GL_EQUAL */
> ++/*      GL_LEQUAL */
> ++/*      GL_GREATER */
> ++/*      GL_NOTEQUAL */
> ++/*      GL_GEQUAL */
> ++/*      GL_ALWAYS */
> ++
> ++/* EnableCap */
> ++#define GL_FOG                            0x0B60
> ++#define GL_LIGHTING                       0x0B50
> ++#define GL_TEXTURE_2D                     0x0DE1
> ++#define GL_CULL_FACE                      0x0B44
> ++#define GL_ALPHA_TEST                     0x0BC0
> ++#define GL_BLEND                          0x0BE2
> ++#define GL_COLOR_LOGIC_OP                 0x0BF2
> ++#define GL_DITHER                         0x0BD0
> ++#define GL_STENCIL_TEST                   0x0B90
> ++#define GL_DEPTH_TEST                     0x0B71
> ++/*      GL_LIGHT0 */
> ++/*      GL_LIGHT1 */
> ++/*      GL_LIGHT2 */
> ++/*      GL_LIGHT3 */
> ++/*      GL_LIGHT4 */
> ++/*      GL_LIGHT5 */
> ++/*      GL_LIGHT6 */
> ++/*      GL_LIGHT7 */
> ++#define GL_POINT_SMOOTH                   0x0B10
> ++#define GL_LINE_SMOOTH                    0x0B20
> ++#define GL_SCISSOR_TEST                   0x0C11
> ++#define GL_COLOR_MATERIAL                 0x0B57
> ++#define GL_NORMALIZE                      0x0BA1
> ++#define GL_RESCALE_NORMAL                 0x803A
> ++#define GL_POLYGON_OFFSET_FILL            0x8037
> ++#define GL_VERTEX_ARRAY                   0x8074
> ++#define GL_NORMAL_ARRAY                   0x8075
> ++#define GL_COLOR_ARRAY                    0x8076
> ++#define GL_TEXTURE_COORD_ARRAY            0x8078
> ++#define GL_MULTISAMPLE                    0x809D
> ++#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
> ++#define GL_SAMPLE_ALPHA_TO_ONE            0x809F
> ++#define GL_SAMPLE_COVERAGE                0x80A0
> ++
> ++/* ErrorCode */
> ++#define GL_NO_ERROR                       0
> ++#define GL_INVALID_ENUM                   0x0500
> ++#define GL_INVALID_VALUE                  0x0501
> ++#define GL_INVALID_OPERATION              0x0502
> ++#define GL_STACK_OVERFLOW                 0x0503
> ++#define GL_STACK_UNDERFLOW                0x0504
> ++#define GL_OUT_OF_MEMORY                  0x0505
> ++
> ++/* FogMode */
> ++/*      GL_LINEAR */
> ++#define GL_EXP                            0x0800
> ++#define GL_EXP2                           0x0801
> ++
> ++/* FogParameter */
> ++#define GL_FOG_DENSITY                    0x0B62
> ++#define GL_FOG_START                      0x0B63
> ++#define GL_FOG_END                        0x0B64
> ++#define GL_FOG_MODE                       0x0B65
> ++#define GL_FOG_COLOR                      0x0B66
> ++
> ++/* FrontFaceDirection */
> ++#define GL_CW                             0x0900
> ++#define GL_CCW                            0x0901
> ++
> ++/* GetPName */
> ++#define GL_CURRENT_COLOR                  0x0B00
> ++#define GL_CURRENT_NORMAL                 0x0B02
> ++#define GL_CURRENT_TEXTURE_COORDS         0x0B03
> ++#define GL_POINT_SIZE                     0x0B11
> ++#define GL_POINT_SIZE_MIN                 0x8126
> ++#define GL_POINT_SIZE_MAX                 0x8127
> ++#define GL_POINT_FADE_THRESHOLD_SIZE      0x8128
> ++#define GL_POINT_DISTANCE_ATTENUATION     0x8129
> ++#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12
> ++#define GL_LINE_WIDTH                     0x0B21
> ++#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22
> ++#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
> ++#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
> ++#define GL_CULL_FACE_MODE                 0x0B45
> ++#define GL_FRONT_FACE                     0x0B46
> ++#define GL_SHADE_MODEL                    0x0B54
> ++#define GL_DEPTH_RANGE                    0x0B70
> ++#define GL_DEPTH_WRITEMASK                0x0B72
> ++#define GL_DEPTH_CLEAR_VALUE              0x0B73
> ++#define GL_DEPTH_FUNC                     0x0B74
> ++#define GL_STENCIL_CLEAR_VALUE            0x0B91
> ++#define GL_STENCIL_FUNC                   0x0B92
> ++#define GL_STENCIL_VALUE_MASK             0x0B93
> ++#define GL_STENCIL_FAIL                   0x0B94
> ++#define GL_STENCIL_PASS_DEPTH_FAIL        0x0B95
> ++#define GL_STENCIL_PASS_DEPTH_PASS        0x0B96
> ++#define GL_STENCIL_REF                    0x0B97
> ++#define GL_STENCIL_WRITEMASK              0x0B98
> ++#define GL_MATRIX_MODE                    0x0BA0
> ++#define GL_VIEWPORT                       0x0BA2
> ++#define GL_MODELVIEW_STACK_DEPTH          0x0BA3
> ++#define GL_PROJECTION_STACK_DEPTH         0x0BA4
> ++#define GL_TEXTURE_STACK_DEPTH            0x0BA5
> ++#define GL_MODELVIEW_MATRIX               0x0BA6
> ++#define GL_PROJECTION_MATRIX              0x0BA7
> ++#define GL_TEXTURE_MATRIX                 0x0BA8
> ++#define GL_ALPHA_TEST_FUNC                0x0BC1
> ++#define GL_ALPHA_TEST_REF                 0x0BC2
> ++#define GL_BLEND_DST                      0x0BE0
> ++#define GL_BLEND_SRC                      0x0BE1
> ++#define GL_LOGIC_OP_MODE                  0x0BF0
> ++#define GL_SCISSOR_BOX                    0x0C10
> ++#define GL_SCISSOR_TEST                   0x0C11
> ++#define GL_COLOR_CLEAR_VALUE              0x0C22
> ++#define GL_COLOR_WRITEMASK                0x0C23
> ++#define GL_UNPACK_ALIGNMENT               0x0CF5
> ++#define GL_PACK_ALIGNMENT                 0x0D05
> ++#define GL_MAX_LIGHTS                     0x0D31
> ++#define GL_MAX_CLIP_PLANES                0x0D32
> ++#define GL_MAX_TEXTURE_SIZE               0x0D33
> ++#define GL_MAX_MODELVIEW_STACK_DEPTH      0x0D36
> ++#define GL_MAX_PROJECTION_STACK_DEPTH     0x0D38
> ++#define GL_MAX_TEXTURE_STACK_DEPTH        0x0D39
> ++#define GL_MAX_VIEWPORT_DIMS              0x0D3A
> ++#define GL_MAX_TEXTURE_UNITS              0x84E2
> ++#define GL_SUBPIXEL_BITS                  0x0D50
> ++#define GL_RED_BITS                       0x0D52
> ++#define GL_GREEN_BITS                     0x0D53
> ++#define GL_BLUE_BITS                      0x0D54
> ++#define GL_ALPHA_BITS                     0x0D55
> ++#define GL_DEPTH_BITS                     0x0D56
> ++#define GL_STENCIL_BITS                   0x0D57
> ++#define GL_POLYGON_OFFSET_UNITS           0x2A00
> ++#define GL_POLYGON_OFFSET_FILL            0x8037
> ++#define GL_POLYGON_OFFSET_FACTOR          0x8038
> ++#define GL_TEXTURE_BINDING_2D             0x8069
> ++#define GL_VERTEX_ARRAY_SIZE              0x807A
> ++#define GL_VERTEX_ARRAY_TYPE              0x807B
> ++#define GL_VERTEX_ARRAY_STRIDE            0x807C
> ++#define GL_NORMAL_ARRAY_TYPE              0x807E
> ++#define GL_NORMAL_ARRAY_STRIDE            0x807F
> ++#define GL_COLOR_ARRAY_SIZE               0x8081
> ++#define GL_COLOR_ARRAY_TYPE               0x8082
> ++#define GL_COLOR_ARRAY_STRIDE             0x8083
> ++#define GL_TEXTURE_COORD_ARRAY_SIZE       0x8088
> ++#define GL_TEXTURE_COORD_ARRAY_TYPE       0x8089
> ++#define GL_TEXTURE_COORD_ARRAY_STRIDE     0x808A
> ++#define GL_VERTEX_ARRAY_POINTER           0x808E
> ++#define GL_NORMAL_ARRAY_POINTER           0x808F
> ++#define GL_COLOR_ARRAY_POINTER            0x8090
> ++#define GL_TEXTURE_COORD_ARRAY_POINTER    0x8092
> ++#define GL_SAMPLE_BUFFERS                 0x80A8
> ++#define GL_SAMPLES                        0x80A9
> ++#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
> ++#define GL_SAMPLE_COVERAGE_INVERT         0x80AB
> ++
> ++/* GetTextureParameter */
> ++/*      GL_TEXTURE_MAG_FILTER */
> ++/*      GL_TEXTURE_MIN_FILTER */
> ++/*      GL_TEXTURE_WRAP_S */
> ++/*      GL_TEXTURE_WRAP_T */
> ++
> ++#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
> ++#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3
> ++
> ++/* HintMode */
> ++#define GL_DONT_CARE                      0x1100
> ++#define GL_FASTEST                        0x1101
> ++#define GL_NICEST                         0x1102
> ++
> ++/* HintTarget */
> ++#define GL_PERSPECTIVE_CORRECTION_HINT    0x0C50
> ++#define GL_POINT_SMOOTH_HINT              0x0C51
> ++#define GL_LINE_SMOOTH_HINT               0x0C52
> ++#define GL_FOG_HINT                       0x0C54
> ++#define GL_GENERATE_MIPMAP_HINT           0x8192
> ++
> ++/* LightModelParameter */
> ++#define GL_LIGHT_MODEL_AMBIENT            0x0B53
> ++#define GL_LIGHT_MODEL_TWO_SIDE           0x0B52
> ++
> ++/* LightParameter */
> ++#define GL_AMBIENT                        0x1200
> ++#define GL_DIFFUSE                        0x1201
> ++#define GL_SPECULAR                       0x1202
> ++#define GL_POSITION                       0x1203
> ++#define GL_SPOT_DIRECTION                 0x1204
> ++#define GL_SPOT_EXPONENT                  0x1205
> ++#define GL_SPOT_CUTOFF                    0x1206
> ++#define GL_CONSTANT_ATTENUATION           0x1207
> ++#define GL_LINEAR_ATTENUATION             0x1208
> ++#define GL_QUADRATIC_ATTENUATION          0x1209
> ++
> ++/* DataType */
> ++#define GL_BYTE                           0x1400
> ++#define GL_UNSIGNED_BYTE                  0x1401
> ++#define GL_SHORT                          0x1402
> ++#define GL_UNSIGNED_SHORT                 0x1403
> ++#define GL_FLOAT                          0x1406
> ++#define GL_FIXED                          0x140C
> ++
> ++/* LogicOp */
> ++#define GL_CLEAR                          0x1500
> ++#define GL_AND                            0x1501
> ++#define GL_AND_REVERSE                    0x1502
> ++#define GL_COPY                           0x1503
> ++#define GL_AND_INVERTED                   0x1504
> ++#define GL_NOOP                           0x1505
> ++#define GL_XOR                            0x1506
> ++#define GL_OR                             0x1507
> ++#define GL_NOR                            0x1508
> ++#define GL_EQUIV                          0x1509
> ++#define GL_INVERT                         0x150A
> ++#define GL_OR_REVERSE                     0x150B
> ++#define GL_COPY_INVERTED                  0x150C
> ++#define GL_OR_INVERTED                    0x150D
> ++#define GL_NAND                           0x150E
> ++#define GL_SET                            0x150F
> ++
> ++/* MaterialFace */
> ++/*      GL_FRONT_AND_BACK */
> ++
> ++/* MaterialParameter */
> ++#define GL_EMISSION                       0x1600
> ++#define GL_SHININESS                      0x1601
> ++#define GL_AMBIENT_AND_DIFFUSE            0x1602
> ++/*      GL_AMBIENT */
> ++/*      GL_DIFFUSE */
> ++/*      GL_SPECULAR */
> ++
> ++/* MatrixMode */
> ++#define GL_MODELVIEW                      0x1700
> ++#define GL_PROJECTION                     0x1701
> ++#define GL_TEXTURE                        0x1702
> ++
> ++/* NormalPointerType */
> ++/*      GL_BYTE */
> ++/*      GL_SHORT */
> ++/*      GL_FLOAT */
> ++/*      GL_FIXED */
> ++
> ++/* PixelFormat */
> ++#define GL_ALPHA                          0x1906
> ++#define GL_RGB                            0x1907
> ++#define GL_RGBA                           0x1908
> ++#define GL_LUMINANCE                      0x1909
> ++#define GL_LUMINANCE_ALPHA                0x190A
> ++
> ++/* PixelStoreParameter */
> ++#define GL_UNPACK_ALIGNMENT               0x0CF5
> ++#define GL_PACK_ALIGNMENT                 0x0D05
> ++
> ++/* PixelType */
> ++/*      GL_UNSIGNED_BYTE */
> ++#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
> ++#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
> ++#define GL_UNSIGNED_SHORT_5_6_5           0x8363
> ++
> ++/* ShadingModel */
> ++#define GL_FLAT                           0x1D00
> ++#define GL_SMOOTH                         0x1D01
> ++
> ++/* StencilFunction */
> ++/*      GL_NEVER */
> ++/*      GL_LESS */
> ++/*      GL_EQUAL */
> ++/*      GL_LEQUAL */
> ++/*      GL_GREATER */
> ++/*      GL_NOTEQUAL */
> ++/*      GL_GEQUAL */
> ++/*      GL_ALWAYS */
> ++
> ++/* StencilOp */
> ++/*      GL_ZERO */
> ++#define GL_KEEP                           0x1E00
> ++#define GL_REPLACE                        0x1E01
> ++#define GL_INCR                           0x1E02
> ++#define GL_DECR                           0x1E03
> ++/*      GL_INVERT */
> ++
> ++/* StringName */
> ++#define GL_VENDOR                         0x1F00
> ++#define GL_RENDERER                       0x1F01
> ++#define GL_VERSION                        0x1F02
> ++#define GL_EXTENSIONS                     0x1F03
> ++
> ++/* TexCoordPointerType */
> ++/*      GL_SHORT */
> ++/*      GL_FLOAT */
> ++/*      GL_FIXED */
> ++/*      GL_BYTE */
> ++
> ++/* TextureEnvMode */
> ++#define GL_MODULATE                       0x2100
> ++#define GL_DECAL                          0x2101
> ++/*      GL_BLEND */
> ++#define GL_ADD                            0x0104
> ++/*      GL_REPLACE */
> ++
> ++/* TextureEnvParameter */
> ++#define GL_TEXTURE_ENV_MODE               0x2200
> ++#define GL_TEXTURE_ENV_COLOR              0x2201
> ++
> ++/* TextureEnvTarget */
> ++#define GL_TEXTURE_ENV                    0x2300
> ++
> ++/* TextureMagFilter */
> ++#define GL_NEAREST                        0x2600
> ++#define GL_LINEAR                         0x2601
> ++
> ++/* TextureMinFilter */
> ++/*      GL_NEAREST */
> ++/*      GL_LINEAR */
> ++#define GL_NEAREST_MIPMAP_NEAREST         0x2700
> ++#define GL_LINEAR_MIPMAP_NEAREST          0x2701
> ++#define GL_NEAREST_MIPMAP_LINEAR          0x2702
> ++#define GL_LINEAR_MIPMAP_LINEAR           0x2703
> ++
> ++/* TextureParameterName */
> ++#define GL_TEXTURE_MAG_FILTER             0x2800
> ++#define GL_TEXTURE_MIN_FILTER             0x2801
> ++#define GL_TEXTURE_WRAP_S                 0x2802
> ++#define GL_TEXTURE_WRAP_T                 0x2803
> ++#define GL_GENERATE_MIPMAP                0x8191
> ++
> ++/* TextureTarget */
> ++/*      GL_TEXTURE_2D */
> ++
> ++/* TextureUnit */
> ++#define GL_TEXTURE0                       0x84C0
> ++#define GL_TEXTURE1                       0x84C1
> ++#define GL_TEXTURE2                       0x84C2
> ++#define GL_TEXTURE3                       0x84C3
> ++#define GL_TEXTURE4                       0x84C4
> ++#define GL_TEXTURE5                       0x84C5
> ++#define GL_TEXTURE6                       0x84C6
> ++#define GL_TEXTURE7                       0x84C7
> ++#define GL_TEXTURE8                       0x84C8
> ++#define GL_TEXTURE9                       0x84C9
> ++#define GL_TEXTURE10                      0x84CA
> ++#define GL_TEXTURE11                      0x84CB
> ++#define GL_TEXTURE12                      0x84CC
> ++#define GL_TEXTURE13                      0x84CD
> ++#define GL_TEXTURE14                      0x84CE
> ++#define GL_TEXTURE15                      0x84CF
> ++#define GL_TEXTURE16                      0x84D0
> ++#define GL_TEXTURE17                      0x84D1
> ++#define GL_TEXTURE18                      0x84D2
> ++#define GL_TEXTURE19                      0x84D3
> ++#define GL_TEXTURE20                      0x84D4
> ++#define GL_TEXTURE21                      0x84D5
> ++#define GL_TEXTURE22                      0x84D6
> ++#define GL_TEXTURE23                      0x84D7
> ++#define GL_TEXTURE24                      0x84D8
> ++#define GL_TEXTURE25                      0x84D9
> ++#define GL_TEXTURE26                      0x84DA
> ++#define GL_TEXTURE27                      0x84DB
> ++#define GL_TEXTURE28                      0x84DC
> ++#define GL_TEXTURE29                      0x84DD
> ++#define GL_TEXTURE30                      0x84DE
> ++#define GL_TEXTURE31                      0x84DF
> ++#define GL_ACTIVE_TEXTURE                 0x84E0
> ++#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1
> ++
> ++/* TextureWrapMode */
> ++#define GL_REPEAT                         0x2901
> ++#define GL_CLAMP_TO_EDGE                  0x812F
> ++
> ++/* VertexPointerType */
> ++/*      GL_SHORT */
> ++/*      GL_FLOAT */
> ++/*      GL_FIXED */
> ++/*      GL_BYTE */
> ++
> ++/* LightName */
> ++#define GL_LIGHT0                         0x4000
> ++#define GL_LIGHT1                         0x4001
> ++#define GL_LIGHT2                         0x4002
> ++#define GL_LIGHT3                         0x4003
> ++#define GL_LIGHT4                         0x4004
> ++#define GL_LIGHT5                         0x4005
> ++#define GL_LIGHT6                         0x4006
> ++#define GL_LIGHT7                         0x4007
> ++
> ++/* Buffer Objects */
> ++#define GL_ARRAY_BUFFER                   0x8892
> ++#define GL_ELEMENT_ARRAY_BUFFER           0x8893
> ++
> ++#define GL_ARRAY_BUFFER_BINDING               0x8894
> ++#define GL_ELEMENT_ARRAY_BUFFER_BINDING       0x8895
> ++#define GL_VERTEX_ARRAY_BUFFER_BINDING        0x8896
> ++#define GL_NORMAL_ARRAY_BUFFER_BINDING        0x8897
> ++#define GL_COLOR_ARRAY_BUFFER_BINDING         0x8898
> ++#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
> ++
> ++#define GL_STATIC_DRAW                    0x88E4
> ++#define GL_DYNAMIC_DRAW                   0x88E8
> ++
> ++#define GL_BUFFER_SIZE                    0x8764
> ++#define GL_BUFFER_USAGE                   0x8765
> ++
> ++/* Texture combine + dot3 */
> ++#define GL_SUBTRACT                       0x84E7
> ++#define GL_COMBINE                        0x8570
> ++#define GL_COMBINE_RGB                    0x8571
> ++#define GL_COMBINE_ALPHA                  0x8572
> ++#define GL_RGB_SCALE                      0x8573
> ++#define GL_ADD_SIGNED                     0x8574
> ++#define GL_INTERPOLATE                    0x8575
> ++#define GL_CONSTANT                       0x8576
> ++#define GL_PRIMARY_COLOR                  0x8577
> ++#define GL_PREVIOUS                       0x8578
> ++#define GL_OPERAND0_RGB                   0x8590
> ++#define GL_OPERAND1_RGB                   0x8591
> ++#define GL_OPERAND2_RGB                   0x8592
> ++#define GL_OPERAND0_ALPHA                 0x8598
> ++#define GL_OPERAND1_ALPHA                 0x8599
> ++#define GL_OPERAND2_ALPHA                 0x859A
> ++
> ++#define GL_ALPHA_SCALE                    0x0D1C
> ++
> ++#define GL_SRC0_RGB                       0x8580
> ++#define GL_SRC1_RGB                       0x8581
> ++#define GL_SRC2_RGB                       0x8582
> ++#define GL_SRC0_ALPHA                     0x8588
> ++#define GL_SRC1_ALPHA                     0x8589
> ++#define GL_SRC2_ALPHA                     0x858A
> ++
> ++#define GL_DOT3_RGB                       0x86AE
> ++#define GL_DOT3_RGBA                      0x86AF
> ++
> ++/*------------------------------------------------------------------------*
> ++ * required OES extension tokens
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* OES_read_format */
> ++#ifndef GL_OES_read_format
> ++#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES                   0x8B9A
> ++#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES                 0x8B9B
> ++#endif
> ++
> ++/* GL_OES_compressed_paletted_texture */
> ++#ifndef GL_OES_compressed_paletted_texture
> ++#define GL_PALETTE4_RGB8_OES                                    0x8B90
> ++#define GL_PALETTE4_RGBA8_OES                                   0x8B91
> ++#define GL_PALETTE4_R5_G6_B5_OES                                0x8B92
> ++#define GL_PALETTE4_RGBA4_OES                                   0x8B93
> ++#define GL_PALETTE4_RGB5_A1_OES                                 0x8B94
> ++#define GL_PALETTE8_RGB8_OES                                    0x8B95
> ++#define GL_PALETTE8_RGBA8_OES                                   0x8B96
> ++#define GL_PALETTE8_R5_G6_B5_OES                                0x8B97
> ++#define GL_PALETTE8_RGBA4_OES                                   0x8B98
> ++#define GL_PALETTE8_RGB5_A1_OES                                 0x8B99
> ++#endif
> ++
> ++/* OES_point_size_array */
> ++#ifndef GL_OES_point_size_array
> ++#define GL_POINT_SIZE_ARRAY_OES                                 0x8B9C
> ++#define GL_POINT_SIZE_ARRAY_TYPE_OES                            0x898A
> ++#define GL_POINT_SIZE_ARRAY_STRIDE_OES                          0x898B
> ++#define GL_POINT_SIZE_ARRAY_POINTER_OES                         0x898C
> ++#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES                  0x8B9F
> ++#endif
> ++
> ++/* GL_OES_point_sprite */
> ++#ifndef GL_OES_point_sprite
> ++#define GL_POINT_SPRITE_OES                                     0x8861
> ++#define GL_COORD_REPLACE_OES                                    0x8862
> ++#endif
> ++
> ++/*************************************************************/
> ++
> ++/* Available only in Common profile */
> ++GL_API void GL_APIENTRY glAlphaFunc (GLenum func, GLclampf ref);
> ++GL_API void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
> ++GL_API void GL_APIENTRY glClearDepthf (GLclampf depth);
> ++GL_API void GL_APIENTRY glClipPlanef (GLenum plane, const GLfloat *equation);
> ++GL_API void GL_APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
> ++GL_API void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar);
> ++GL_API void GL_APIENTRY glFogf (GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glFogfv (GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
> ++GL_API void GL_APIENTRY glGetClipPlanef (GLenum pname, GLfloat eqn[4]);
> ++GL_API void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *params);
> ++GL_API void GL_APIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
> ++GL_API void GL_APIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
> ++GL_API void GL_APIENTRY glGetTexEnvfv (GLenum env, GLenum pname, GLfloat *params);
> ++GL_API void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
> ++GL_API void GL_APIENTRY glLightModelf (GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glLightModelfv (GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glLineWidth (GLfloat width);
> ++GL_API void GL_APIENTRY glLoadMatrixf (const GLfloat *m);
> ++GL_API void GL_APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glMultMatrixf (const GLfloat *m);
> ++GL_API void GL_APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
> ++GL_API void GL_APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
> ++GL_API void GL_APIENTRY glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
> ++GL_API void GL_APIENTRY glPointParameterf (GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glPointSize (GLfloat size);
> ++GL_API void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
> ++GL_API void GL_APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
> ++GL_API void GL_APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z);
> ++GL_API void GL_APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
> ++GL_API void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
> ++GL_API void GL_APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z);
> ++
> ++/* Available in both Common and Common-Lite profiles */
> ++GL_API void GL_APIENTRY glActiveTexture (GLenum texture);
> ++GL_API void GL_APIENTRY glAlphaFuncx (GLenum func, GLclampx ref);
> ++GL_API void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
> ++GL_API void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
> ++GL_API void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
> ++GL_API void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
> ++GL_API void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
> ++GL_API void GL_APIENTRY glClear (GLbitfield mask);
> ++GL_API void GL_APIENTRY glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
> ++GL_API void GL_APIENTRY glClearDepthx (GLclampx depth);
> ++GL_API void GL_APIENTRY glClearStencil (GLint s);
> ++GL_API void GL_APIENTRY glClientActiveTexture (GLenum texture);
> ++GL_API void GL_APIENTRY glClipPlanex (GLenum plane, const GLfixed *equation);
> ++GL_API void GL_APIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
> ++GL_API void GL_APIENTRY glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
> ++GL_API void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
> ++GL_API void GL_APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++GL_API void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
> ++GL_API void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
> ++GL_API void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
> ++GL_API void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
> ++GL_API void GL_APIENTRY glCullFace (GLenum mode);
> ++GL_API void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
> ++GL_API void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
> ++GL_API void GL_APIENTRY glDepthFunc (GLenum func);
> ++GL_API void GL_APIENTRY glDepthMask (GLboolean flag);
> ++GL_API void GL_APIENTRY glDepthRangex (GLclampx zNear, GLclampx zFar);
> ++GL_API void GL_APIENTRY glDisable (GLenum cap);
> ++GL_API void GL_APIENTRY glDisableClientState (GLenum array);
> ++GL_API void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
> ++GL_API void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
> ++GL_API void GL_APIENTRY glEnable (GLenum cap);
> ++GL_API void GL_APIENTRY glEnableClientState (GLenum array);
> ++GL_API void GL_APIENTRY glFinish (void);
> ++GL_API void GL_APIENTRY glFlush (void);
> ++GL_API void GL_APIENTRY glFogx (GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glFogxv (GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glFrontFace (GLenum mode);
> ++GL_API void GL_APIENTRY glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
> ++GL_API void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
> ++GL_API void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
> ++GL_API void GL_APIENTRY glGetClipPlanex (GLenum pname, GLfixed eqn[4]);
> ++GL_API void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
> ++GL_API void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
> ++GL_API GLenum GL_APIENTRY glGetError (void);
> ++GL_API void GL_APIENTRY glGetFixedv (GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *params);
> ++GL_API void GL_APIENTRY glGetLightxv (GLenum light, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetMaterialxv (GLenum face, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetPointerv (GLenum pname, GLvoid **params);
> ++GL_API const GLubyte * GL_APIENTRY glGetString (GLenum name);
> ++GL_API void GL_APIENTRY glGetTexEnviv (GLenum env, GLenum pname, GLint *params);
> ++GL_API void GL_APIENTRY glGetTexEnvxv (GLenum env, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
> ++GL_API void GL_APIENTRY glGetTexParameterxv (GLenum target, GLenum pname, GLfixed *params);
> ++GL_API void GL_APIENTRY glHint (GLenum target, GLenum mode);
> ++GL_API GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
> ++GL_API GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
> ++GL_API GLboolean GL_APIENTRY glIsTexture (GLuint texture);
> ++GL_API void GL_APIENTRY glLightModelx (GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glLightModelxv (GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glLightx (GLenum light, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glLightxv (GLenum light, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glLineWidthx (GLfixed width);
> ++GL_API void GL_APIENTRY glLoadIdentity (void);
> ++GL_API void GL_APIENTRY glLoadMatrixx (const GLfixed *m);
> ++GL_API void GL_APIENTRY glLogicOp (GLenum opcode);
> ++GL_API void GL_APIENTRY glMaterialx (GLenum face, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glMaterialxv (GLenum face, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glMatrixMode (GLenum mode);
> ++GL_API void GL_APIENTRY glMultMatrixx (const GLfixed *m);
> ++GL_API void GL_APIENTRY glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
> ++GL_API void GL_APIENTRY glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz);
> ++GL_API void GL_APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
> ++GL_API void GL_APIENTRY glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
> ++GL_API void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
> ++GL_API void GL_APIENTRY glPointParameterx (GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glPointParameterxv (GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glPointSizex (GLfixed size);
> ++GL_API void GL_APIENTRY glPolygonOffsetx (GLfixed factor, GLfixed units);
> ++GL_API void GL_APIENTRY glPopMatrix (void);
> ++GL_API void GL_APIENTRY glPushMatrix (void);
> ++GL_API void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
> ++GL_API void GL_APIENTRY glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
> ++GL_API void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert);
> ++GL_API void GL_APIENTRY glSampleCoveragex (GLclampx value, GLboolean invert);
> ++GL_API void GL_APIENTRY glScalex (GLfixed x, GLfixed y, GLfixed z);
> ++GL_API void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
> ++GL_API void GL_APIENTRY glShadeModel (GLenum mode);
> ++GL_API void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
> ++GL_API void GL_APIENTRY glStencilMask (GLuint mask);
> ++GL_API void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
> ++GL_API void GL_APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++GL_API void GL_APIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param);
> ++GL_API void GL_APIENTRY glTexEnvx (GLenum target, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params);
> ++GL_API void GL_APIENTRY glTexEnvxv (GLenum target, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
> ++GL_API void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
> ++GL_API void GL_APIENTRY glTexParameterx (GLenum target, GLenum pname, GLfixed param);
> ++GL_API void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
> ++GL_API void GL_APIENTRY glTexParameterxv (GLenum target, GLenum pname, const GLfixed *params);
> ++GL_API void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
> ++GL_API void GL_APIENTRY glTranslatex (GLfixed x, GLfixed y, GLfixed z);
> ++GL_API void GL_APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
> ++GL_API void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
> ++
> ++/*------------------------------------------------------------------------*
> ++ * Required OES extension functions
> ++ *------------------------------------------------------------------------*/
> ++
> ++/* GL_OES_read_format */
> ++#ifndef GL_OES_read_format
> ++#define GL_OES_read_format 1
> ++#endif
> ++
> ++/* GL_OES_compressed_paletted_texture */
> ++#ifndef GL_OES_compressed_paletted_texture
> ++#define GL_OES_compressed_paletted_texture 1
> ++#endif
> ++
> ++/* GL_OES_point_size_array */
> ++#ifndef GL_OES_point_size_array
> ++#define GL_OES_point_size_array 1
> ++GL_API void GL_APIENTRY glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid *pointer);
> ++#endif
> ++
> ++/* GL_OES_point_sprite */
> ++#ifndef GL_OES_point_sprite
> ++#define GL_OES_point_sprite 1
> ++#endif
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __gl_h_ */
> ++
> +diff -rupN a/usr/include/GLES/glplatform.h b/usr/include/GLES/glplatform.h
> +--- a/usr/include/GLES/glplatform.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES/glplatform.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,30 @@
> ++#ifndef __glplatform_h_
> ++#define __glplatform_h_
> ++
> ++/* $Revision: 10601 $ on $Date:: 2010-03-04 22:15:27 -0800 #$ */
> ++
> ++/*
> ++ * This document is licensed under the SGI Free Software B License Version
> ++ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
> ++ */
> ++
> ++/* Platform-specific types and definitions for OpenGL ES 1.X  gl.h
> ++ *
> ++ * Adopters may modify khrplatform.h and this file to suit their platform.
> ++ * You are encouraged to submit all modifications to the Khronos group so that
> ++ * they can be included in future versions of this file.  Please submit changes
> ++ * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
> ++ * by filing a bug against product "OpenGL-ES" component "Registry".
> ++ */
> ++
> ++#include <KHR/khrplatform.h>
> ++
> ++#ifndef GL_API
> ++#define GL_API      KHRONOS_APICALL
> ++#endif
> ++
> ++#ifndef GL_APIENTRY
> ++#define GL_APIENTRY KHRONOS_APIENTRY
> ++#endif
> ++
> ++#endif /* __glplatform_h_ */
> +diff -rupN a/usr/include/GLES2/gl2ext.h b/usr/include/GLES2/gl2ext.h
> +--- a/usr/include/GLES2/gl2ext.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES2/gl2ext.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,1494 @@
> ++#ifndef __gl2ext_h_
> ++#define __gl2ext_h_ 1
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/*
> ++** Copyright (c) 2013 The Khronos Group Inc.
> ++**
> ++** Permission is hereby granted, free of charge, to any person obtaining a
> ++** copy of this software and/or associated documentation files (the
> ++** "Materials"), to deal in the Materials without restriction, including
> ++** without limitation the rights to use, copy, modify, merge, publish,
> ++** distribute, sublicense, and/or sell copies of the Materials, and to
> ++** permit persons to whom the Materials are furnished to do so, subject to
> ++** the following conditions:
> ++**
> ++** The above copyright notice and this permission notice shall be included
> ++** in all copies or substantial portions of the Materials.
> ++**
> ++** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ++** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
> ++*/
> ++/*
> ++** This header is generated from the Khronos OpenGL / OpenGL ES XML
> ++** API Registry. The current version of the Registry, generator scripts
> ++** used to make the header, and the header can be found at
> ++**   http://www.opengl.org/registry/
> ++**
> ++** Khronos $Revision: 23422 $ on $Date: 2013-10-08 15:40:45 -0700 (Tue, 08 Oct 2013) $
> ++*/
> ++
> ++#ifndef GL_APIENTRYP
> ++#define GL_APIENTRYP GL_APIENTRY*
> ++#endif
> ++
> ++/* Generated C header for:
> ++ * API: gles2
> ++ * Profile: common
> ++ * Versions considered: 2\.[0-9]
> ++ * Versions emitted: _nomatch_^
> ++ * Default extensions included: gles2
> ++ * Additional extensions included: _nomatch_^
> ++ * Extensions removed: _nomatch_^
> ++ */
> ++
> ++#ifndef GL_KHR_debug
> ++#define GL_KHR_debug 1
> ++typedef void (GL_APIENTRY  *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
> ++#define GL_SAMPLER                        0x82E6
> ++#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR   0x8242
> ++#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243
> ++#define GL_DEBUG_CALLBACK_FUNCTION_KHR    0x8244
> ++#define GL_DEBUG_CALLBACK_USER_PARAM_KHR  0x8245
> ++#define GL_DEBUG_SOURCE_API_KHR           0x8246
> ++#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247
> ++#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248
> ++#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR   0x8249
> ++#define GL_DEBUG_SOURCE_APPLICATION_KHR   0x824A
> ++#define GL_DEBUG_SOURCE_OTHER_KHR         0x824B
> ++#define GL_DEBUG_TYPE_ERROR_KHR           0x824C
> ++#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D
> ++#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E
> ++#define GL_DEBUG_TYPE_PORTABILITY_KHR     0x824F
> ++#define GL_DEBUG_TYPE_PERFORMANCE_KHR     0x8250
> ++#define GL_DEBUG_TYPE_OTHER_KHR           0x8251
> ++#define GL_DEBUG_TYPE_MARKER_KHR          0x8268
> ++#define GL_DEBUG_TYPE_PUSH_GROUP_KHR      0x8269
> ++#define GL_DEBUG_TYPE_POP_GROUP_KHR       0x826A
> ++#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B
> ++#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C
> ++#define GL_DEBUG_GROUP_STACK_DEPTH_KHR    0x826D
> ++#define GL_BUFFER_KHR                     0x82E0
> ++#define GL_SHADER_KHR                     0x82E1
> ++#define GL_PROGRAM_KHR                    0x82E2
> ++#define GL_VERTEX_ARRAY_KHR               0x8074
> ++#define GL_QUERY_KHR                      0x82E3
> ++#define GL_SAMPLER_KHR                    0x82E6
> ++#define GL_MAX_LABEL_LENGTH_KHR           0x82E8
> ++#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR   0x9143
> ++#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR  0x9144
> ++#define GL_DEBUG_LOGGED_MESSAGES_KHR      0x9145
> ++#define GL_DEBUG_SEVERITY_HIGH_KHR        0x9146
> ++#define GL_DEBUG_SEVERITY_MEDIUM_KHR      0x9147
> ++#define GL_DEBUG_SEVERITY_LOW_KHR         0x9148
> ++#define GL_DEBUG_OUTPUT_KHR               0x92E0
> ++#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR     0x00000002
> ++#define GL_STACK_OVERFLOW_KHR             0x0503
> ++#define GL_STACK_UNDERFLOW_KHR            0x0504
> ++typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
> ++typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
> ++typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam);
> ++typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
> ++typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
> ++typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void);
> ++typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
> ++typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
> ++typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label);
> ++typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
> ++typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, void **params);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
> ++GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
> ++GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam);
> ++GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
> ++GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message);
> ++GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void);
> ++GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
> ++GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
> ++GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label);
> ++GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
> ++GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params);
> ++#endif
> ++#endif /* GL_KHR_debug */
> ++
> ++#ifndef GL_KHR_texture_compression_astc_hdr
> ++#define GL_KHR_texture_compression_astc_hdr 1
> ++#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR   0x93B0
> ++#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR   0x93B1
> ++#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR   0x93B2
> ++#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR   0x93B3
> ++#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR   0x93B4
> ++#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR   0x93B5
> ++#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR   0x93B6
> ++#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR   0x93B7
> ++#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR  0x93B8
> ++#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR  0x93B9
> ++#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR  0x93BA
> ++#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
> ++#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
> ++#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
> ++#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
> ++#endif /* GL_KHR_texture_compression_astc_hdr */
> ++
> ++#ifndef GL_KHR_texture_compression_astc_ldr
> ++#define GL_KHR_texture_compression_astc_ldr 1
> ++#endif /* GL_KHR_texture_compression_astc_ldr */
> ++
> ++#ifndef GL_OES_EGL_image
> ++#define GL_OES_EGL_image 1
> ++typedef void *GLeglImageOES;
> ++typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
> ++typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
> ++GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
> ++#endif
> ++#endif /* GL_OES_EGL_image */
> ++
> ++#ifndef GL_OES_EGL_image_external
> ++#define GL_OES_EGL_image_external 1
> ++#define GL_TEXTURE_EXTERNAL_OES           0x8D65
> ++#define GL_TEXTURE_BINDING_EXTERNAL_OES   0x8D67
> ++#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68
> ++#define GL_SAMPLER_EXTERNAL_OES           0x8D66
> ++#endif /* GL_OES_EGL_image_external */
> ++
> ++#ifndef GL_OES_compressed_ETC1_RGB8_texture
> ++#define GL_OES_compressed_ETC1_RGB8_texture 1
> ++#define GL_ETC1_RGB8_OES                  0x8D64
> ++#endif /* GL_OES_compressed_ETC1_RGB8_texture */
> ++
> ++#ifndef GL_OES_compressed_paletted_texture
> ++#define GL_OES_compressed_paletted_texture 1
> ++#define GL_PALETTE4_RGB8_OES              0x8B90
> ++#define GL_PALETTE4_RGBA8_OES             0x8B91
> ++#define GL_PALETTE4_R5_G6_B5_OES          0x8B92
> ++#define GL_PALETTE4_RGBA4_OES             0x8B93
> ++#define GL_PALETTE4_RGB5_A1_OES           0x8B94
> ++#define GL_PALETTE8_RGB8_OES              0x8B95
> ++#define GL_PALETTE8_RGBA8_OES             0x8B96
> ++#define GL_PALETTE8_R5_G6_B5_OES          0x8B97
> ++#define GL_PALETTE8_RGBA4_OES             0x8B98
> ++#define GL_PALETTE8_RGB5_A1_OES           0x8B99
> ++#endif /* GL_OES_compressed_paletted_texture */
> ++
> ++#ifndef GL_OES_depth24
> ++#define GL_OES_depth24 1
> ++#define GL_DEPTH_COMPONENT24_OES          0x81A6
> ++#endif /* GL_OES_depth24 */
> ++
> ++#ifndef GL_OES_depth32
> ++#define GL_OES_depth32 1
> ++#define GL_DEPTH_COMPONENT32_OES          0x81A7
> ++#endif /* GL_OES_depth32 */
> ++
> ++#ifndef GL_OES_depth_texture
> ++#define GL_OES_depth_texture 1
> ++#endif /* GL_OES_depth_texture */
> ++
> ++#ifndef GL_OES_element_index_uint
> ++#define GL_OES_element_index_uint 1
> ++#endif /* GL_OES_element_index_uint */
> ++
> ++#ifndef GL_OES_fbo_render_mipmap
> ++#define GL_OES_fbo_render_mipmap 1
> ++#endif /* GL_OES_fbo_render_mipmap */
> ++
> ++#ifndef GL_OES_fragment_precision_high
> ++#define GL_OES_fragment_precision_high 1
> ++#endif /* GL_OES_fragment_precision_high */
> ++
> ++#ifndef GL_OES_get_program_binary
> ++#define GL_OES_get_program_binary 1
> ++#define GL_PROGRAM_BINARY_LENGTH_OES      0x8741
> ++#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE
> ++#define GL_PROGRAM_BINARY_FORMATS_OES     0x87FF
> ++typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLint length);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
> ++GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const void *binary, GLint length);
> ++#endif
> ++#endif /* GL_OES_get_program_binary */
> ++
> ++#ifndef GL_OES_mapbuffer
> ++#define GL_OES_mapbuffer 1
> ++#define GL_WRITE_ONLY_OES                 0x88B9
> ++#define GL_BUFFER_ACCESS_OES              0x88BB
> ++#define GL_BUFFER_MAPPED_OES              0x88BC
> ++#define GL_BUFFER_MAP_POINTER_OES         0x88BD
> ++typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
> ++typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
> ++typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, void **params);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void *GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
> ++GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
> ++GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void **params);
> ++#endif
> ++#endif /* GL_OES_mapbuffer */
> ++
> ++#ifndef GL_OES_packed_depth_stencil
> ++#define GL_OES_packed_depth_stencil 1
> ++#define GL_DEPTH_STENCIL_OES              0x84F9
> ++#define GL_UNSIGNED_INT_24_8_OES          0x84FA
> ++#define GL_DEPTH24_STENCIL8_OES           0x88F0
> ++#endif /* GL_OES_packed_depth_stencil */
> ++
> ++#ifndef GL_OES_required_internalformat
> ++#define GL_OES_required_internalformat 1
> ++#define GL_ALPHA8_OES                     0x803C
> ++#define GL_DEPTH_COMPONENT16_OES          0x81A5
> ++#define GL_LUMINANCE4_ALPHA4_OES          0x8043
> ++#define GL_LUMINANCE8_ALPHA8_OES          0x8045
> ++#define GL_LUMINANCE8_OES                 0x8040
> ++#define GL_RGBA4_OES                      0x8056
> ++#define GL_RGB5_A1_OES                    0x8057
> ++#define GL_RGB565_OES                     0x8D62
> ++#define GL_RGB8_OES                       0x8051
> ++#define GL_RGBA8_OES                      0x8058
> ++#define GL_RGB10_EXT                      0x8052
> ++#define GL_RGB10_A2_EXT                   0x8059
> ++#endif /* GL_OES_required_internalformat */
> ++
> ++#ifndef GL_OES_rgb8_rgba8
> ++#define GL_OES_rgb8_rgba8 1
> ++#endif /* GL_OES_rgb8_rgba8 */
> ++
> ++#ifndef GL_OES_standard_derivatives
> ++#define GL_OES_standard_derivatives 1
> ++#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B
> ++#endif /* GL_OES_standard_derivatives */
> ++
> ++#ifndef GL_OES_stencil1
> ++#define GL_OES_stencil1 1
> ++#define GL_STENCIL_INDEX1_OES             0x8D46
> ++#endif /* GL_OES_stencil1 */
> ++
> ++#ifndef GL_OES_stencil4
> ++#define GL_OES_stencil4 1
> ++#define GL_STENCIL_INDEX4_OES             0x8D47
> ++#endif /* GL_OES_stencil4 */
> ++
> ++#ifndef GL_OES_surfaceless_context
> ++#define GL_OES_surfaceless_context 1
> ++#define GL_FRAMEBUFFER_UNDEFINED_OES      0x8219
> ++#endif /* GL_OES_surfaceless_context */
> ++
> ++#ifndef GL_OES_texture_3D
> ++#define GL_OES_texture_3D 1
> ++#define GL_TEXTURE_WRAP_R_OES             0x8072
> ++#define GL_TEXTURE_3D_OES                 0x806F
> ++#define GL_TEXTURE_BINDING_3D_OES         0x806A
> ++#define GL_MAX_3D_TEXTURE_SIZE_OES        0x8073
> ++#define GL_SAMPLER_3D_OES                 0x8B5F
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4
> ++typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
> ++typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
> ++typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
> ++typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
> ++GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
> ++GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
> ++GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
> ++GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
> ++#endif
> ++#endif /* GL_OES_texture_3D */
> ++
> ++#ifndef GL_OES_texture_compression_astc
> ++#define GL_OES_texture_compression_astc 1
> ++#endif /* GL_OES_texture_compression_astc */
> ++
> ++#ifndef GL_OES_texture_float
> ++#define GL_OES_texture_float 1
> ++#endif /* GL_OES_texture_float */
> ++
> ++#ifndef GL_OES_texture_float_linear
> ++#define GL_OES_texture_float_linear 1
> ++#endif /* GL_OES_texture_float_linear */
> ++
> ++#ifndef GL_OES_texture_half_float
> ++#define GL_OES_texture_half_float 1
> ++#define GL_HALF_FLOAT_OES                 0x8D61
> ++#endif /* GL_OES_texture_half_float */
> ++
> ++#ifndef GL_OES_texture_half_float_linear
> ++#define GL_OES_texture_half_float_linear 1
> ++#endif /* GL_OES_texture_half_float_linear */
> ++
> ++#ifndef GL_OES_texture_npot
> ++#define GL_OES_texture_npot 1
> ++#endif /* GL_OES_texture_npot */
> ++
> ++#ifndef GL_OES_vertex_array_object
> ++#define GL_OES_vertex_array_object 1
> ++#define GL_VERTEX_ARRAY_BINDING_OES       0x85B5
> ++typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array);
> ++typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays);
> ++typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array);
> ++GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays);
> ++GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays);
> ++GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
> ++#endif
> ++#endif /* GL_OES_vertex_array_object */
> ++
> ++#ifndef GL_OES_vertex_half_float
> ++#define GL_OES_vertex_half_float 1
> ++#endif /* GL_OES_vertex_half_float */
> ++
> ++#ifndef GL_OES_vertex_type_10_10_10_2
> ++#define GL_OES_vertex_type_10_10_10_2 1
> ++#define GL_UNSIGNED_INT_10_10_10_2_OES    0x8DF6
> ++#define GL_INT_10_10_10_2_OES             0x8DF7
> ++#endif /* GL_OES_vertex_type_10_10_10_2 */
> ++
> ++#ifndef GL_AMD_compressed_3DC_texture
> ++#define GL_AMD_compressed_3DC_texture 1
> ++#define GL_3DC_X_AMD                      0x87F9
> ++#define GL_3DC_XY_AMD                     0x87FA
> ++#endif /* GL_AMD_compressed_3DC_texture */
> ++
> ++#ifndef GL_AMD_compressed_ATC_texture
> ++#define GL_AMD_compressed_ATC_texture 1
> ++#define GL_ATC_RGB_AMD                    0x8C92
> ++#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD    0x8C93
> ++#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
> ++#endif /* GL_AMD_compressed_ATC_texture */
> ++
> ++#ifndef GL_AMD_performance_monitor
> ++#define GL_AMD_performance_monitor 1
> ++#define GL_COUNTER_TYPE_AMD               0x8BC0
> ++#define GL_COUNTER_RANGE_AMD              0x8BC1
> ++#define GL_UNSIGNED_INT64_AMD             0x8BC2
> ++#define GL_PERCENTAGE_AMD                 0x8BC3
> ++#define GL_PERFMON_RESULT_AVAILABLE_AMD   0x8BC4
> ++#define GL_PERFMON_RESULT_SIZE_AMD        0x8BC5
> ++#define GL_PERFMON_RESULT_AMD             0x8BC6
> ++typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
> ++typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
> ++typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
> ++typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
> ++typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data);
> ++typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
> ++typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
> ++typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
> ++typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
> ++typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
> ++typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
> ++GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
> ++GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
> ++GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
> ++GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data);
> ++GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
> ++GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
> ++GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
> ++GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
> ++GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor);
> ++GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
> ++#endif
> ++#endif /* GL_AMD_performance_monitor */
> ++
> ++#ifndef GL_AMD_program_binary_Z400
> ++#define GL_AMD_program_binary_Z400 1
> ++#define GL_Z400_BINARY_AMD                0x8740
> ++#endif /* GL_AMD_program_binary_Z400 */
> ++
> ++#ifndef GL_ANGLE_depth_texture
> ++#define GL_ANGLE_depth_texture 1
> ++#endif /* GL_ANGLE_depth_texture */
> ++
> ++#ifndef GL_ANGLE_framebuffer_blit
> ++#define GL_ANGLE_framebuffer_blit 1
> ++#define GL_READ_FRAMEBUFFER_ANGLE         0x8CA8
> ++#define GL_DRAW_FRAMEBUFFER_ANGLE         0x8CA9
> ++#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6
> ++#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA
> ++typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
> ++#endif
> ++#endif /* GL_ANGLE_framebuffer_blit */
> ++
> ++#ifndef GL_ANGLE_framebuffer_multisample
> ++#define GL_ANGLE_framebuffer_multisample 1
> ++#define GL_RENDERBUFFER_SAMPLES_ANGLE     0x8CAB
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56
> ++#define GL_MAX_SAMPLES_ANGLE              0x8D57
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++#endif
> ++#endif /* GL_ANGLE_framebuffer_multisample */
> ++
> ++#ifndef GL_ANGLE_instanced_arrays
> ++#define GL_ANGLE_instanced_arrays 1
> ++#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE
> ++typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
> ++typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
> ++typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
> ++GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
> ++GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor);
> ++#endif
> ++#endif /* GL_ANGLE_instanced_arrays */
> ++
> ++#ifndef GL_ANGLE_pack_reverse_row_order
> ++#define GL_ANGLE_pack_reverse_row_order 1
> ++#define GL_PACK_REVERSE_ROW_ORDER_ANGLE   0x93A4
> ++#endif /* GL_ANGLE_pack_reverse_row_order */
> ++
> ++#ifndef GL_ANGLE_program_binary
> ++#define GL_ANGLE_program_binary 1
> ++#define GL_PROGRAM_BINARY_ANGLE           0x93A6
> ++#endif /* GL_ANGLE_program_binary */
> ++
> ++#ifndef GL_ANGLE_texture_compression_dxt3
> ++#define GL_ANGLE_texture_compression_dxt3 1
> ++#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2
> ++#endif /* GL_ANGLE_texture_compression_dxt3 */
> ++
> ++#ifndef GL_ANGLE_texture_compression_dxt5
> ++#define GL_ANGLE_texture_compression_dxt5 1
> ++#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3
> ++#endif /* GL_ANGLE_texture_compression_dxt5 */
> ++
> ++#ifndef GL_ANGLE_texture_usage
> ++#define GL_ANGLE_texture_usage 1
> ++#define GL_TEXTURE_USAGE_ANGLE            0x93A2
> ++#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE   0x93A3
> ++#endif /* GL_ANGLE_texture_usage */
> ++
> ++#ifndef GL_ANGLE_translated_shader_source
> ++#define GL_ANGLE_translated_shader_source 1
> ++#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0
> ++typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
> ++#endif
> ++#endif /* GL_ANGLE_translated_shader_source */
> ++
> ++#ifndef GL_APPLE_copy_texture_levels
> ++#define GL_APPLE_copy_texture_levels 1
> ++typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
> ++#endif
> ++#endif /* GL_APPLE_copy_texture_levels */
> ++
> ++#ifndef GL_APPLE_framebuffer_multisample
> ++#define GL_APPLE_framebuffer_multisample 1
> ++#define GL_RENDERBUFFER_SAMPLES_APPLE     0x8CAB
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56
> ++#define GL_MAX_SAMPLES_APPLE              0x8D57
> ++#define GL_READ_FRAMEBUFFER_APPLE         0x8CA8
> ++#define GL_DRAW_FRAMEBUFFER_APPLE         0x8CA9
> ++#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6
> ++#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void);
> ++#endif
> ++#endif /* GL_APPLE_framebuffer_multisample */
> ++
> ++#ifndef GL_APPLE_rgb_422
> ++#define GL_APPLE_rgb_422 1
> ++#define GL_RGB_422_APPLE                  0x8A1F
> ++#define GL_UNSIGNED_SHORT_8_8_APPLE       0x85BA
> ++#define GL_UNSIGNED_SHORT_8_8_REV_APPLE   0x85BB
> ++#define GL_RGB_RAW_422_APPLE              0x8A51
> ++#endif /* GL_APPLE_rgb_422 */
> ++
> ++#ifndef GL_APPLE_sync
> ++#define GL_APPLE_sync 1
> ++#define GL_SYNC_OBJECT_APPLE              0x8A53
> ++#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE  0x9111
> ++#define GL_OBJECT_TYPE_APPLE              0x9112
> ++#define GL_SYNC_CONDITION_APPLE           0x9113
> ++#define GL_SYNC_STATUS_APPLE              0x9114
> ++#define GL_SYNC_FLAGS_APPLE               0x9115
> ++#define GL_SYNC_FENCE_APPLE               0x9116
> ++#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117
> ++#define GL_UNSIGNALED_APPLE               0x9118
> ++#define GL_SIGNALED_APPLE                 0x9119
> ++#define GL_ALREADY_SIGNALED_APPLE         0x911A
> ++#define GL_TIMEOUT_EXPIRED_APPLE          0x911B
> ++#define GL_CONDITION_SATISFIED_APPLE      0x911C
> ++#define GL_WAIT_FAILED_APPLE              0x911D
> ++#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE  0x00000001
> ++#define GL_TIMEOUT_IGNORED_APPLE          0xFFFFFFFFFFFFFFFFull
> ++typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync);
> ++typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync);
> ++typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params);
> ++typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags);
> ++GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync);
> ++GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync);
> ++GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
> ++GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params);
> ++GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
> ++#endif
> ++#endif /* GL_APPLE_sync */
> ++
> ++#ifndef GL_APPLE_texture_format_BGRA8888
> ++#define GL_APPLE_texture_format_BGRA8888 1
> ++#define GL_BGRA_EXT                       0x80E1
> ++#define GL_BGRA8_EXT                      0x93A1
> ++#endif /* GL_APPLE_texture_format_BGRA8888 */
> ++
> ++#ifndef GL_APPLE_texture_max_level
> ++#define GL_APPLE_texture_max_level 1
> ++#define GL_TEXTURE_MAX_LEVEL_APPLE        0x813D
> ++#endif /* GL_APPLE_texture_max_level */
> ++
> ++#ifndef GL_ARM_mali_program_binary
> ++#define GL_ARM_mali_program_binary 1
> ++#define GL_MALI_PROGRAM_BINARY_ARM        0x8F61
> ++#endif /* GL_ARM_mali_program_binary */
> ++
> ++#ifndef GL_ARM_mali_shader_binary
> ++#define GL_ARM_mali_shader_binary 1
> ++#define GL_MALI_SHADER_BINARY_ARM         0x8F60
> ++#endif /* GL_ARM_mali_shader_binary */
> ++
> ++#ifndef GL_ARM_rgba8
> ++#define GL_ARM_rgba8 1
> ++#endif /* GL_ARM_rgba8 */
> ++
> ++#ifndef GL_DMP_shader_binary
> ++#define GL_DMP_shader_binary 1
> ++#define GL_SHADER_BINARY_DMP              0x9250
> ++#endif /* GL_DMP_shader_binary */
> ++
> ++#ifndef GL_EXT_blend_minmax
> ++#define GL_EXT_blend_minmax 1
> ++#define GL_MIN_EXT                        0x8007
> ++#define GL_MAX_EXT                        0x8008
> ++#endif /* GL_EXT_blend_minmax */
> ++
> ++#ifndef GL_EXT_color_buffer_half_float
> ++#define GL_EXT_color_buffer_half_float 1
> ++#define GL_RGBA16F_EXT                    0x881A
> ++#define GL_RGB16F_EXT                     0x881B
> ++#define GL_RG16F_EXT                      0x822F
> ++#define GL_R16F_EXT                       0x822D
> ++#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211
> ++#define GL_UNSIGNED_NORMALIZED_EXT        0x8C17
> ++#endif /* GL_EXT_color_buffer_half_float */
> ++
> ++#ifndef GL_EXT_debug_label
> ++#define GL_EXT_debug_label 1
> ++#define GL_PROGRAM_PIPELINE_OBJECT_EXT    0x8A4F
> ++#define GL_PROGRAM_OBJECT_EXT             0x8B40
> ++#define GL_SHADER_OBJECT_EXT              0x8B48
> ++#define GL_BUFFER_OBJECT_EXT              0x9151
> ++#define GL_QUERY_OBJECT_EXT               0x9153
> ++#define GL_VERTEX_ARRAY_OBJECT_EXT        0x9154
> ++#define GL_TRANSFORM_FEEDBACK             0x8E22
> ++typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
> ++typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
> ++GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
> ++#endif
> ++#endif /* GL_EXT_debug_label */
> ++
> ++#ifndef GL_EXT_debug_marker
> ++#define GL_EXT_debug_marker 1
> ++typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
> ++typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
> ++typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
> ++GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
> ++GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void);
> ++#endif
> ++#endif /* GL_EXT_debug_marker */
> ++
> ++#ifndef GL_EXT_discard_framebuffer
> ++#define GL_EXT_discard_framebuffer 1
> ++#define GL_COLOR_EXT                      0x1800
> ++#define GL_DEPTH_EXT                      0x1801
> ++#define GL_STENCIL_EXT                    0x1802
> ++typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments);
> ++#endif
> ++#endif /* GL_EXT_discard_framebuffer */
> ++
> ++#ifndef GL_EXT_disjoint_timer_query
> ++#define GL_EXT_disjoint_timer_query 1
> ++#define GL_QUERY_COUNTER_BITS_EXT         0x8864
> ++#define GL_CURRENT_QUERY_EXT              0x8865
> ++#define GL_QUERY_RESULT_EXT               0x8866
> ++#define GL_QUERY_RESULT_AVAILABLE_EXT     0x8867
> ++#define GL_TIME_ELAPSED_EXT               0x88BF
> ++#define GL_TIMESTAMP_EXT                  0x8E28
> ++#define GL_GPU_DISJOINT_EXT               0x8FBB
> ++typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids);
> ++typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id);
> ++typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id);
> ++typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target);
> ++typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target);
> ++typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params);
> ++typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params);
> ++typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids);
> ++GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids);
> ++GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id);
> ++GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id);
> ++GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target);
> ++GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target);
> ++GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params);
> ++GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params);
> ++GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params);
> ++#endif
> ++#endif /* GL_EXT_disjoint_timer_query */
> ++
> ++#ifndef GL_EXT_draw_buffers
> ++#define GL_EXT_draw_buffers 1
> ++#define GL_MAX_COLOR_ATTACHMENTS_EXT      0x8CDF
> ++#define GL_MAX_DRAW_BUFFERS_EXT           0x8824
> ++#define GL_DRAW_BUFFER0_EXT               0x8825
> ++#define GL_DRAW_BUFFER1_EXT               0x8826
> ++#define GL_DRAW_BUFFER2_EXT               0x8827
> ++#define GL_DRAW_BUFFER3_EXT               0x8828
> ++#define GL_DRAW_BUFFER4_EXT               0x8829
> ++#define GL_DRAW_BUFFER5_EXT               0x882A
> ++#define GL_DRAW_BUFFER6_EXT               0x882B
> ++#define GL_DRAW_BUFFER7_EXT               0x882C
> ++#define GL_DRAW_BUFFER8_EXT               0x882D
> ++#define GL_DRAW_BUFFER9_EXT               0x882E
> ++#define GL_DRAW_BUFFER10_EXT              0x882F
> ++#define GL_DRAW_BUFFER11_EXT              0x8830
> ++#define GL_DRAW_BUFFER12_EXT              0x8831
> ++#define GL_DRAW_BUFFER13_EXT              0x8832
> ++#define GL_DRAW_BUFFER14_EXT              0x8833
> ++#define GL_DRAW_BUFFER15_EXT              0x8834
> ++#define GL_COLOR_ATTACHMENT0_EXT          0x8CE0
> ++#define GL_COLOR_ATTACHMENT1_EXT          0x8CE1
> ++#define GL_COLOR_ATTACHMENT2_EXT          0x8CE2
> ++#define GL_COLOR_ATTACHMENT3_EXT          0x8CE3
> ++#define GL_COLOR_ATTACHMENT4_EXT          0x8CE4
> ++#define GL_COLOR_ATTACHMENT5_EXT          0x8CE5
> ++#define GL_COLOR_ATTACHMENT6_EXT          0x8CE6
> ++#define GL_COLOR_ATTACHMENT7_EXT          0x8CE7
> ++#define GL_COLOR_ATTACHMENT8_EXT          0x8CE8
> ++#define GL_COLOR_ATTACHMENT9_EXT          0x8CE9
> ++#define GL_COLOR_ATTACHMENT10_EXT         0x8CEA
> ++#define GL_COLOR_ATTACHMENT11_EXT         0x8CEB
> ++#define GL_COLOR_ATTACHMENT12_EXT         0x8CEC
> ++#define GL_COLOR_ATTACHMENT13_EXT         0x8CED
> ++#define GL_COLOR_ATTACHMENT14_EXT         0x8CEE
> ++#define GL_COLOR_ATTACHMENT15_EXT         0x8CEF
> ++typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs);
> ++#endif
> ++#endif /* GL_EXT_draw_buffers */
> ++
> ++#ifndef GL_EXT_draw_instanced
> ++#define GL_EXT_draw_instanced 1
> ++typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
> ++typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
> ++GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
> ++#endif
> ++#endif /* GL_EXT_draw_instanced */
> ++
> ++#ifndef GL_EXT_instanced_arrays
> ++#define GL_EXT_instanced_arrays 1
> ++#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE
> ++typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT (GLuint index, GLuint divisor);
> ++#endif
> ++#endif /* GL_EXT_instanced_arrays */
> ++
> ++#ifndef GL_EXT_map_buffer_range
> ++#define GL_EXT_map_buffer_range 1
> ++#define GL_MAP_READ_BIT_EXT               0x0001
> ++#define GL_MAP_WRITE_BIT_EXT              0x0002
> ++#define GL_MAP_INVALIDATE_RANGE_BIT_EXT   0x0004
> ++#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT  0x0008
> ++#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT     0x0010
> ++#define GL_MAP_UNSYNCHRONIZED_BIT_EXT     0x0020
> ++typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
> ++typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void *GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
> ++GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length);
> ++#endif
> ++#endif /* GL_EXT_map_buffer_range */
> ++
> ++#ifndef GL_EXT_multi_draw_arrays
> ++#define GL_EXT_multi_draw_arrays 1
> ++typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
> ++typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
> ++GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
> ++#endif
> ++#endif /* GL_EXT_multi_draw_arrays */
> ++
> ++#ifndef GL_EXT_multisampled_render_to_texture
> ++#define GL_EXT_multisampled_render_to_texture 1
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C
> ++#define GL_RENDERBUFFER_SAMPLES_EXT       0x8CAB
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
> ++#define GL_MAX_SAMPLES_EXT                0x8D57
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
> ++#endif
> ++#endif /* GL_EXT_multisampled_render_to_texture */
> ++
> ++#ifndef GL_EXT_multiview_draw_buffers
> ++#define GL_EXT_multiview_draw_buffers 1
> ++#define GL_COLOR_ATTACHMENT_EXT           0x90F0
> ++#define GL_MULTIVIEW_EXT                  0x90F1
> ++#define GL_DRAW_BUFFER_EXT                0x0C01
> ++#define GL_READ_BUFFER_EXT                0x0C02
> ++#define GL_MAX_MULTIVIEW_BUFFERS_EXT      0x90F2
> ++typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index);
> ++typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices);
> ++typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index);
> ++GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices);
> ++GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data);
> ++#endif
> ++#endif /* GL_EXT_multiview_draw_buffers */
> ++
> ++#ifndef GL_EXT_occlusion_query_boolean
> ++#define GL_EXT_occlusion_query_boolean 1
> ++#define GL_ANY_SAMPLES_PASSED_EXT         0x8C2F
> ++#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A
> ++#endif /* GL_EXT_occlusion_query_boolean */
> ++
> ++#ifndef GL_EXT_pvrtc_sRGB
> ++#define GL_EXT_pvrtc_sRGB 1
> ++#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54
> ++#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55
> ++#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56
> ++#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57
> ++#endif /* GL_EXT_pvrtc_sRGB */
> ++
> ++#ifndef GL_EXT_read_format_bgra
> ++#define GL_EXT_read_format_bgra 1
> ++#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365
> ++#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366
> ++#endif /* GL_EXT_read_format_bgra */
> ++
> ++#ifndef GL_EXT_robustness
> ++#define GL_EXT_robustness 1
> ++#define GL_GUILTY_CONTEXT_RESET_EXT       0x8253
> ++#define GL_INNOCENT_CONTEXT_RESET_EXT     0x8254
> ++#define GL_UNKNOWN_CONTEXT_RESET_EXT      0x8255
> ++#define GL_CONTEXT_ROBUST_ACCESS_EXT      0x90F3
> ++#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256
> ++#define GL_LOSE_CONTEXT_ON_RESET_EXT      0x8252
> ++#define GL_NO_RESET_NOTIFICATION_EXT      0x8261
> ++typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void);
> ++typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
> ++typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
> ++typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void);
> ++GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
> ++GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
> ++GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params);
> ++#endif
> ++#endif /* GL_EXT_robustness */
> ++
> ++#ifndef GL_EXT_sRGB
> ++#define GL_EXT_sRGB 1
> ++#define GL_SRGB_EXT                       0x8C40
> ++#define GL_SRGB_ALPHA_EXT                 0x8C42
> ++#define GL_SRGB8_ALPHA8_EXT               0x8C43
> ++#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210
> ++#endif /* GL_EXT_sRGB */
> ++
> ++#ifndef GL_EXT_sRGB_write_control
> ++#define GL_EXT_sRGB_write_control 1
> ++#define GL_FRAMEBUFFER_SRGB_EXT           0x8DB9
> ++#endif /* GL_EXT_sRGB_write_control */
> ++
> ++#ifndef GL_EXT_separate_shader_objects
> ++#define GL_EXT_separate_shader_objects 1
> ++#define GL_ACTIVE_PROGRAM_EXT             0x8259
> ++#define GL_VERTEX_SHADER_BIT_EXT          0x00000001
> ++#define GL_FRAGMENT_SHADER_BIT_EXT        0x00000002
> ++#define GL_ALL_SHADER_BITS_EXT            0xFFFFFFFF
> ++#define GL_PROGRAM_SEPARABLE_EXT          0x8258
> ++#define GL_PROGRAM_PIPELINE_BINDING_EXT   0x825A
> ++typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program);
> ++typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
> ++typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings);
> ++typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines);
> ++typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines);
> ++typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
> ++typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
> ++typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program);
> ++GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline);
> ++GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings);
> ++GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines);
> ++GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines);
> ++GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
> ++GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params);
> ++GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline);
> ++GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);
> ++GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);
> ++GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);
> ++GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);
> ++GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
> ++GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
> ++GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
> ++GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
> ++GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program);
> ++GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline);
> ++GL_APICALL void GL_APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);
> ++GL_APICALL void GL_APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);
> ++GL_APICALL void GL_APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
> ++GL_APICALL void GL_APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
> ++GL_APICALL void GL_APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++#endif
> ++#endif /* GL_EXT_separate_shader_objects */
> ++
> ++#ifndef GL_EXT_shader_framebuffer_fetch
> ++#define GL_EXT_shader_framebuffer_fetch 1
> ++#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
> ++#endif /* GL_EXT_shader_framebuffer_fetch */
> ++
> ++#ifndef GL_EXT_shader_integer_mix
> ++#define GL_EXT_shader_integer_mix 1
> ++#endif /* GL_EXT_shader_integer_mix */
> ++
> ++#ifndef GL_EXT_shader_texture_lod
> ++#define GL_EXT_shader_texture_lod 1
> ++#endif /* GL_EXT_shader_texture_lod */
> ++
> ++#ifndef GL_EXT_shadow_samplers
> ++#define GL_EXT_shadow_samplers 1
> ++#define GL_TEXTURE_COMPARE_MODE_EXT       0x884C
> ++#define GL_TEXTURE_COMPARE_FUNC_EXT       0x884D
> ++#define GL_COMPARE_REF_TO_TEXTURE_EXT     0x884E
> ++#define GL_SAMPLER_2D_SHADOW_EXT          0x8B62
> ++#endif /* GL_EXT_shadow_samplers */
> ++
> ++#ifndef GL_EXT_texture_compression_dxt1
> ++#define GL_EXT_texture_compression_dxt1 1
> ++#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0
> ++#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1
> ++#endif /* GL_EXT_texture_compression_dxt1 */
> ++
> ++#ifndef GL_EXT_texture_compression_s3tc
> ++#define GL_EXT_texture_compression_s3tc 1
> ++#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2
> ++#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3
> ++#endif /* GL_EXT_texture_compression_s3tc */
> ++
> ++#ifndef GL_EXT_texture_filter_anisotropic
> ++#define GL_EXT_texture_filter_anisotropic 1
> ++#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
> ++#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
> ++#endif /* GL_EXT_texture_filter_anisotropic */
> ++
> ++#ifndef GL_EXT_texture_format_BGRA8888
> ++#define GL_EXT_texture_format_BGRA8888 1
> ++#endif /* GL_EXT_texture_format_BGRA8888 */
> ++
> ++#ifndef GL_EXT_texture_rg
> ++#define GL_EXT_texture_rg 1
> ++#define GL_RED_EXT                        0x1903
> ++#define GL_RG_EXT                         0x8227
> ++#define GL_R8_EXT                         0x8229
> ++#define GL_RG8_EXT                        0x822B
> ++#endif /* GL_EXT_texture_rg */
> ++
> ++#ifndef GL_EXT_texture_sRGB_decode
> ++#define GL_EXT_texture_sRGB_decode 1
> ++#define GL_TEXTURE_SRGB_DECODE_EXT        0x8A48
> ++#define GL_DECODE_EXT                     0x8A49
> ++#define GL_SKIP_DECODE_EXT                0x8A4A
> ++#endif /* GL_EXT_texture_sRGB_decode */
> ++
> ++#ifndef GL_EXT_texture_storage
> ++#define GL_EXT_texture_storage 1
> ++#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT   0x912F
> ++#define GL_ALPHA8_EXT                     0x803C
> ++#define GL_LUMINANCE8_EXT                 0x8040
> ++#define GL_LUMINANCE8_ALPHA8_EXT          0x8045
> ++#define GL_RGBA32F_EXT                    0x8814
> ++#define GL_RGB32F_EXT                     0x8815
> ++#define GL_ALPHA32F_EXT                   0x8816
> ++#define GL_LUMINANCE32F_EXT               0x8818
> ++#define GL_LUMINANCE_ALPHA32F_EXT         0x8819
> ++#define GL_ALPHA16F_EXT                   0x881C
> ++#define GL_LUMINANCE16F_EXT               0x881E
> ++#define GL_LUMINANCE_ALPHA16F_EXT         0x881F
> ++#define GL_R32F_EXT                       0x822E
> ++#define GL_RG32F_EXT                      0x8230
> ++typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
> ++GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
> ++#endif
> ++#endif /* GL_EXT_texture_storage */
> ++
> ++#ifndef GL_EXT_texture_type_2_10_10_10_REV
> ++#define GL_EXT_texture_type_2_10_10_10_REV 1
> ++#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
> ++#endif /* GL_EXT_texture_type_2_10_10_10_REV */
> ++
> ++#ifndef GL_EXT_unpack_subimage
> ++#define GL_EXT_unpack_subimage 1
> ++#define GL_UNPACK_ROW_LENGTH_EXT          0x0CF2
> ++#define GL_UNPACK_SKIP_ROWS_EXT           0x0CF3
> ++#define GL_UNPACK_SKIP_PIXELS_EXT         0x0CF4
> ++#endif /* GL_EXT_unpack_subimage */
> ++
> ++#ifndef GL_FJ_shader_binary_GCCSO
> ++#define GL_FJ_shader_binary_GCCSO 1
> ++#define GL_GCCSO_SHADER_BINARY_FJ         0x9260
> ++#endif /* GL_FJ_shader_binary_GCCSO */
> ++
> ++#ifndef GL_IMG_multisampled_render_to_texture
> ++#define GL_IMG_multisampled_render_to_texture 1
> ++#define GL_RENDERBUFFER_SAMPLES_IMG       0x9133
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134
> ++#define GL_MAX_SAMPLES_IMG                0x9135
> ++#define GL_TEXTURE_SAMPLES_IMG            0x9136
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
> ++#endif
> ++#endif /* GL_IMG_multisampled_render_to_texture */
> ++
> ++#ifndef GL_IMG_program_binary
> ++#define GL_IMG_program_binary 1
> ++#define GL_SGX_PROGRAM_BINARY_IMG         0x9130
> ++#endif /* GL_IMG_program_binary */
> ++
> ++#ifndef GL_IMG_read_format
> ++#define GL_IMG_read_format 1
> ++#define GL_BGRA_IMG                       0x80E1
> ++#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365
> ++#endif /* GL_IMG_read_format */
> ++
> ++#ifndef GL_IMG_shader_binary
> ++#define GL_IMG_shader_binary 1
> ++#define GL_SGX_BINARY_IMG                 0x8C0A
> ++#endif /* GL_IMG_shader_binary */
> ++
> ++#ifndef GL_IMG_texture_compression_pvrtc
> ++#define GL_IMG_texture_compression_pvrtc 1
> ++#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
> ++#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
> ++#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
> ++#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
> ++#endif /* GL_IMG_texture_compression_pvrtc */
> ++
> ++#ifndef GL_IMG_texture_compression_pvrtc2
> ++#define GL_IMG_texture_compression_pvrtc2 1
> ++#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137
> ++#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138
> ++#endif /* GL_IMG_texture_compression_pvrtc2 */
> ++
> ++#ifndef GL_NV_copy_buffer
> ++#define GL_NV_copy_buffer 1
> ++#define GL_COPY_READ_BUFFER_NV            0x8F36
> ++#define GL_COPY_WRITE_BUFFER_NV           0x8F37
> ++typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glCopyBufferSubDataNV (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
> ++#endif
> ++#endif /* GL_NV_copy_buffer */
> ++
> ++#ifndef GL_NV_coverage_sample
> ++#define GL_NV_coverage_sample 1
> ++#define GL_COVERAGE_COMPONENT_NV          0x8ED0
> ++#define GL_COVERAGE_COMPONENT4_NV         0x8ED1
> ++#define GL_COVERAGE_ATTACHMENT_NV         0x8ED2
> ++#define GL_COVERAGE_BUFFERS_NV            0x8ED3
> ++#define GL_COVERAGE_SAMPLES_NV            0x8ED4
> ++#define GL_COVERAGE_ALL_FRAGMENTS_NV      0x8ED5
> ++#define GL_COVERAGE_EDGE_FRAGMENTS_NV     0x8ED6
> ++#define GL_COVERAGE_AUTOMATIC_NV          0x8ED7
> ++#define GL_COVERAGE_BUFFER_BIT_NV         0x00008000
> ++typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask);
> ++typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask);
> ++GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation);
> ++#endif
> ++#endif /* GL_NV_coverage_sample */
> ++
> ++#ifndef GL_NV_depth_nonlinear
> ++#define GL_NV_depth_nonlinear 1
> ++#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C
> ++#endif /* GL_NV_depth_nonlinear */
> ++
> ++#ifndef GL_NV_draw_buffers
> ++#define GL_NV_draw_buffers 1
> ++#define GL_MAX_DRAW_BUFFERS_NV            0x8824
> ++#define GL_DRAW_BUFFER0_NV                0x8825
> ++#define GL_DRAW_BUFFER1_NV                0x8826
> ++#define GL_DRAW_BUFFER2_NV                0x8827
> ++#define GL_DRAW_BUFFER3_NV                0x8828
> ++#define GL_DRAW_BUFFER4_NV                0x8829
> ++#define GL_DRAW_BUFFER5_NV                0x882A
> ++#define GL_DRAW_BUFFER6_NV                0x882B
> ++#define GL_DRAW_BUFFER7_NV                0x882C
> ++#define GL_DRAW_BUFFER8_NV                0x882D
> ++#define GL_DRAW_BUFFER9_NV                0x882E
> ++#define GL_DRAW_BUFFER10_NV               0x882F
> ++#define GL_DRAW_BUFFER11_NV               0x8830
> ++#define GL_DRAW_BUFFER12_NV               0x8831
> ++#define GL_DRAW_BUFFER13_NV               0x8832
> ++#define GL_DRAW_BUFFER14_NV               0x8833
> ++#define GL_DRAW_BUFFER15_NV               0x8834
> ++#define GL_COLOR_ATTACHMENT0_NV           0x8CE0
> ++#define GL_COLOR_ATTACHMENT1_NV           0x8CE1
> ++#define GL_COLOR_ATTACHMENT2_NV           0x8CE2
> ++#define GL_COLOR_ATTACHMENT3_NV           0x8CE3
> ++#define GL_COLOR_ATTACHMENT4_NV           0x8CE4
> ++#define GL_COLOR_ATTACHMENT5_NV           0x8CE5
> ++#define GL_COLOR_ATTACHMENT6_NV           0x8CE6
> ++#define GL_COLOR_ATTACHMENT7_NV           0x8CE7
> ++#define GL_COLOR_ATTACHMENT8_NV           0x8CE8
> ++#define GL_COLOR_ATTACHMENT9_NV           0x8CE9
> ++#define GL_COLOR_ATTACHMENT10_NV          0x8CEA
> ++#define GL_COLOR_ATTACHMENT11_NV          0x8CEB
> ++#define GL_COLOR_ATTACHMENT12_NV          0x8CEC
> ++#define GL_COLOR_ATTACHMENT13_NV          0x8CED
> ++#define GL_COLOR_ATTACHMENT14_NV          0x8CEE
> ++#define GL_COLOR_ATTACHMENT15_NV          0x8CEF
> ++typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs);
> ++#endif
> ++#endif /* GL_NV_draw_buffers */
> ++
> ++#ifndef GL_NV_draw_instanced
> ++#define GL_NV_draw_instanced 1
> ++typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
> ++typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
> ++GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
> ++#endif
> ++#endif /* GL_NV_draw_instanced */
> ++
> ++#ifndef GL_NV_explicit_attrib_location
> ++#define GL_NV_explicit_attrib_location 1
> ++#endif /* GL_NV_explicit_attrib_location */
> ++
> ++#ifndef GL_NV_fbo_color_attachments
> ++#define GL_NV_fbo_color_attachments 1
> ++#define GL_MAX_COLOR_ATTACHMENTS_NV       0x8CDF
> ++#endif /* GL_NV_fbo_color_attachments */
> ++
> ++#ifndef GL_NV_fence
> ++#define GL_NV_fence 1
> ++#define GL_ALL_COMPLETED_NV               0x84F2
> ++#define GL_FENCE_STATUS_NV                0x84F3
> ++#define GL_FENCE_CONDITION_NV             0x84F4
> ++typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
> ++typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
> ++typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
> ++typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
> ++typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
> ++typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);
> ++GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);
> ++GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence);
> ++GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence);
> ++GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence);
> ++GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
> ++#endif
> ++#endif /* GL_NV_fence */
> ++
> ++#ifndef GL_NV_framebuffer_blit
> ++#define GL_NV_framebuffer_blit 1
> ++#define GL_READ_FRAMEBUFFER_NV            0x8CA8
> ++#define GL_DRAW_FRAMEBUFFER_NV            0x8CA9
> ++#define GL_DRAW_FRAMEBUFFER_BINDING_NV    0x8CA6
> ++#define GL_READ_FRAMEBUFFER_BINDING_NV    0x8CAA
> ++typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
> ++#endif
> ++#endif /* GL_NV_framebuffer_blit */
> ++
> ++#ifndef GL_NV_framebuffer_multisample
> ++#define GL_NV_framebuffer_multisample 1
> ++#define GL_RENDERBUFFER_SAMPLES_NV        0x8CAB
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56
> ++#define GL_MAX_SAMPLES_NV                 0x8D57
> ++typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
> ++#endif
> ++#endif /* GL_NV_framebuffer_multisample */
> ++
> ++#ifndef GL_NV_generate_mipmap_sRGB
> ++#define GL_NV_generate_mipmap_sRGB 1
> ++#endif /* GL_NV_generate_mipmap_sRGB */
> ++
> ++#ifndef GL_NV_instanced_arrays
> ++#define GL_NV_instanced_arrays 1
> ++#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE
> ++typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor);
> ++#endif
> ++#endif /* GL_NV_instanced_arrays */
> ++
> ++#ifndef GL_NV_non_square_matrices
> ++#define GL_NV_non_square_matrices 1
> ++#define GL_FLOAT_MAT2x3_NV                0x8B65
> ++#define GL_FLOAT_MAT2x4_NV                0x8B66
> ++#define GL_FLOAT_MAT3x2_NV                0x8B67
> ++#define GL_FLOAT_MAT3x4_NV                0x8B68
> ++#define GL_FLOAT_MAT4x2_NV                0x8B69
> ++#define GL_FLOAT_MAT4x3_NV                0x8B6A
> ++typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++#endif
> ++#endif /* GL_NV_non_square_matrices */
> ++
> ++#ifndef GL_NV_read_buffer
> ++#define GL_NV_read_buffer 1
> ++#define GL_READ_BUFFER_NV                 0x0C02
> ++typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode);
> ++#endif
> ++#endif /* GL_NV_read_buffer */
> ++
> ++#ifndef GL_NV_read_buffer_front
> ++#define GL_NV_read_buffer_front 1
> ++#endif /* GL_NV_read_buffer_front */
> ++
> ++#ifndef GL_NV_read_depth
> ++#define GL_NV_read_depth 1
> ++#endif /* GL_NV_read_depth */
> ++
> ++#ifndef GL_NV_read_depth_stencil
> ++#define GL_NV_read_depth_stencil 1
> ++#endif /* GL_NV_read_depth_stencil */
> ++
> ++#ifndef GL_NV_read_stencil
> ++#define GL_NV_read_stencil 1
> ++#endif /* GL_NV_read_stencil */
> ++
> ++#ifndef GL_NV_sRGB_formats
> ++#define GL_NV_sRGB_formats 1
> ++#define GL_SLUMINANCE_NV                  0x8C46
> ++#define GL_SLUMINANCE_ALPHA_NV            0x8C44
> ++#define GL_SRGB8_NV                       0x8C41
> ++#define GL_SLUMINANCE8_NV                 0x8C47
> ++#define GL_SLUMINANCE8_ALPHA8_NV          0x8C45
> ++#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV   0x8C4C
> ++#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D
> ++#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E
> ++#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F
> ++#define GL_ETC1_SRGB8_NV                  0x88EE
> ++#endif /* GL_NV_sRGB_formats */
> ++
> ++#ifndef GL_NV_shadow_samplers_array
> ++#define GL_NV_shadow_samplers_array 1
> ++#define GL_SAMPLER_2D_ARRAY_SHADOW_NV     0x8DC4
> ++#endif /* GL_NV_shadow_samplers_array */
> ++
> ++#ifndef GL_NV_shadow_samplers_cube
> ++#define GL_NV_shadow_samplers_cube 1
> ++#define GL_SAMPLER_CUBE_SHADOW_NV         0x8DC5
> ++#endif /* GL_NV_shadow_samplers_cube */
> ++
> ++#ifndef GL_NV_texture_border_clamp
> ++#define GL_NV_texture_border_clamp 1
> ++#define GL_TEXTURE_BORDER_COLOR_NV        0x1004
> ++#define GL_CLAMP_TO_BORDER_NV             0x812D
> ++#endif /* GL_NV_texture_border_clamp */
> ++
> ++#ifndef GL_NV_texture_compression_s3tc_update
> ++#define GL_NV_texture_compression_s3tc_update 1
> ++#endif /* GL_NV_texture_compression_s3tc_update */
> ++
> ++#ifndef GL_NV_texture_npot_2D_mipmap
> ++#define GL_NV_texture_npot_2D_mipmap 1
> ++#endif /* GL_NV_texture_npot_2D_mipmap */
> ++
> ++#ifndef GL_QCOM_alpha_test
> ++#define GL_QCOM_alpha_test 1
> ++#define GL_ALPHA_TEST_QCOM                0x0BC0
> ++#define GL_ALPHA_TEST_FUNC_QCOM           0x0BC1
> ++#define GL_ALPHA_TEST_REF_QCOM            0x0BC2
> ++typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref);
> ++#endif
> ++#endif /* GL_QCOM_alpha_test */
> ++
> ++#ifndef GL_QCOM_binning_control
> ++#define GL_QCOM_binning_control 1
> ++#define GL_BINNING_CONTROL_HINT_QCOM      0x8FB0
> ++#define GL_CPU_OPTIMIZED_QCOM             0x8FB1
> ++#define GL_GPU_OPTIMIZED_QCOM             0x8FB2
> ++#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3
> ++#endif /* GL_QCOM_binning_control */
> ++
> ++#ifndef GL_QCOM_driver_control
> ++#define GL_QCOM_driver_control 1
> ++typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls);
> ++typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
> ++typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
> ++typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls);
> ++GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
> ++GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl);
> ++GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl);
> ++#endif
> ++#endif /* GL_QCOM_driver_control */
> ++
> ++#ifndef GL_QCOM_extended_get
> ++#define GL_QCOM_extended_get 1
> ++#define GL_TEXTURE_WIDTH_QCOM             0x8BD2
> ++#define GL_TEXTURE_HEIGHT_QCOM            0x8BD3
> ++#define GL_TEXTURE_DEPTH_QCOM             0x8BD4
> ++#define GL_TEXTURE_INTERNAL_FORMAT_QCOM   0x8BD5
> ++#define GL_TEXTURE_FORMAT_QCOM            0x8BD6
> ++#define GL_TEXTURE_TYPE_QCOM              0x8BD7
> ++#define GL_TEXTURE_IMAGE_VALID_QCOM       0x8BD8
> ++#define GL_TEXTURE_NUM_LEVELS_QCOM        0x8BD9
> ++#define GL_TEXTURE_TARGET_QCOM            0x8BDA
> ++#define GL_TEXTURE_OBJECT_VALID_QCOM      0x8BDB
> ++#define GL_STATE_RESTORE                  0x8BDC
> ++typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
> ++typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void **params);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures);
> ++GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
> ++GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
> ++GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
> ++GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param);
> ++GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels);
> ++GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, void **params);
> ++#endif
> ++#endif /* GL_QCOM_extended_get */
> ++
> ++#ifndef GL_QCOM_extended_get2
> ++#define GL_QCOM_extended_get2 1
> ++typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
> ++typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program);
> ++typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders);
> ++GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
> ++GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program);
> ++GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
> ++#endif
> ++#endif /* GL_QCOM_extended_get2 */
> ++
> ++#ifndef GL_QCOM_perfmon_global_mode
> ++#define GL_QCOM_perfmon_global_mode 1
> ++#define GL_PERFMON_GLOBAL_MODE_QCOM       0x8FA0
> ++#endif /* GL_QCOM_perfmon_global_mode */
> ++
> ++#ifndef GL_QCOM_tiled_rendering
> ++#define GL_QCOM_tiled_rendering 1
> ++#define GL_COLOR_BUFFER_BIT0_QCOM         0x00000001
> ++#define GL_COLOR_BUFFER_BIT1_QCOM         0x00000002
> ++#define GL_COLOR_BUFFER_BIT2_QCOM         0x00000004
> ++#define GL_COLOR_BUFFER_BIT3_QCOM         0x00000008
> ++#define GL_COLOR_BUFFER_BIT4_QCOM         0x00000010
> ++#define GL_COLOR_BUFFER_BIT5_QCOM         0x00000020
> ++#define GL_COLOR_BUFFER_BIT6_QCOM         0x00000040
> ++#define GL_COLOR_BUFFER_BIT7_QCOM         0x00000080
> ++#define GL_DEPTH_BUFFER_BIT0_QCOM         0x00000100
> ++#define GL_DEPTH_BUFFER_BIT1_QCOM         0x00000200
> ++#define GL_DEPTH_BUFFER_BIT2_QCOM         0x00000400
> ++#define GL_DEPTH_BUFFER_BIT3_QCOM         0x00000800
> ++#define GL_DEPTH_BUFFER_BIT4_QCOM         0x00001000
> ++#define GL_DEPTH_BUFFER_BIT5_QCOM         0x00002000
> ++#define GL_DEPTH_BUFFER_BIT6_QCOM         0x00004000
> ++#define GL_DEPTH_BUFFER_BIT7_QCOM         0x00008000
> ++#define GL_STENCIL_BUFFER_BIT0_QCOM       0x00010000
> ++#define GL_STENCIL_BUFFER_BIT1_QCOM       0x00020000
> ++#define GL_STENCIL_BUFFER_BIT2_QCOM       0x00040000
> ++#define GL_STENCIL_BUFFER_BIT3_QCOM       0x00080000
> ++#define GL_STENCIL_BUFFER_BIT4_QCOM       0x00100000
> ++#define GL_STENCIL_BUFFER_BIT5_QCOM       0x00200000
> ++#define GL_STENCIL_BUFFER_BIT6_QCOM       0x00400000
> ++#define GL_STENCIL_BUFFER_BIT7_QCOM       0x00800000
> ++#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM   0x01000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM   0x02000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM   0x04000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM   0x08000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM   0x10000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM   0x20000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM   0x40000000
> ++#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM   0x80000000
> ++typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
> ++typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask);
> ++#ifdef GL_GLEXT_PROTOTYPES
> ++GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
> ++GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask);
> ++#endif
> ++#endif /* GL_QCOM_tiled_rendering */
> ++
> ++#ifndef GL_QCOM_writeonly_rendering
> ++#define GL_QCOM_writeonly_rendering 1
> ++#define GL_WRITEONLY_RENDERING_QCOM       0x8823
> ++#endif /* GL_QCOM_writeonly_rendering */
> ++
> ++#ifndef GL_VIV_shader_binary
> ++#define GL_VIV_shader_binary 1
> ++#define GL_SHADER_BINARY_VIV              0x8FC4
> ++#endif /* GL_VIV_shader_binary */
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif
> +diff -rupN a/usr/include/GLES2/gl2.h b/usr/include/GLES2/gl2.h
> +--- a/usr/include/GLES2/gl2.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES2/gl2.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,523 @@
> ++#ifndef __gl2_h_
> ++#define __gl2_h_ 1
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/*
> ++** Copyright (c) 2013 The Khronos Group Inc.
> ++**
> ++** Permission is hereby granted, free of charge, to any person obtaining a
> ++** copy of this software and/or associated documentation files (the
> ++** "Materials"), to deal in the Materials without restriction, including
> ++** without limitation the rights to use, copy, modify, merge, publish,
> ++** distribute, sublicense, and/or sell copies of the Materials, and to
> ++** permit persons to whom the Materials are furnished to do so, subject to
> ++** the following conditions:
> ++**
> ++** The above copyright notice and this permission notice shall be included
> ++** in all copies or substantial portions of the Materials.
> ++**
> ++** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ++** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
> ++*/
> ++/*
> ++** This header is generated from the Khronos OpenGL / OpenGL ES XML
> ++** API Registry. The current version of the Registry, generator scripts
> ++** used to make the header, and the header can be found at
> ++**   http://www.opengl.org/registry/
> ++**
> ++** Khronos $Revision: 23422 $ on $Date: 2013-10-08 15:40:45 -0700 (Tue, 08 Oct 2013) $
> ++*/
> ++
> ++#include <GLES2/gl2platform.h>
> ++
> ++/* Generated C header for:
> ++ * API: gles2
> ++ * Profile: common
> ++ * Versions considered: 2\.[0-9]
> ++ * Versions emitted: .*
> ++ * Default extensions included: None
> ++ * Additional extensions included: _nomatch_^
> ++ * Extensions removed: _nomatch_^
> ++ */
> ++
> ++#ifndef GL_ES_VERSION_2_0
> ++#define GL_ES_VERSION_2_0 1
> ++#include <KHR/khrplatform.h>
> ++typedef khronos_int8_t GLbyte;
> ++typedef khronos_float_t GLclampf;
> ++typedef khronos_int32_t GLfixed;
> ++typedef short GLshort;
> ++typedef unsigned short GLushort;
> ++typedef void GLvoid;
> ++typedef struct __GLsync *GLsync;
> ++typedef khronos_int64_t GLint64;
> ++typedef khronos_uint64_t GLuint64;
> ++typedef unsigned int GLenum;
> ++typedef unsigned int GLuint;
> ++typedef char GLchar;
> ++typedef khronos_float_t GLfloat;
> ++typedef khronos_ssize_t GLsizeiptr;
> ++typedef khronos_intptr_t GLintptr;
> ++typedef unsigned int GLbitfield;
> ++typedef int GLint;
> ++typedef unsigned char GLboolean;
> ++typedef int GLsizei;
> ++typedef khronos_uint8_t GLubyte;
> ++#define GL_DEPTH_BUFFER_BIT               0x00000100
> ++#define GL_STENCIL_BUFFER_BIT             0x00000400
> ++#define GL_COLOR_BUFFER_BIT               0x00004000
> ++#define GL_FALSE                          0
> ++#define GL_TRUE                           1
> ++#define GL_POINTS                         0x0000
> ++#define GL_LINES                          0x0001
> ++#define GL_LINE_LOOP                      0x0002
> ++#define GL_LINE_STRIP                     0x0003
> ++#define GL_TRIANGLES                      0x0004
> ++#define GL_TRIANGLE_STRIP                 0x0005
> ++#define GL_TRIANGLE_FAN                   0x0006
> ++#define GL_ZERO                           0
> ++#define GL_ONE                            1
> ++#define GL_SRC_COLOR                      0x0300
> ++#define GL_ONE_MINUS_SRC_COLOR            0x0301
> ++#define GL_SRC_ALPHA                      0x0302
> ++#define GL_ONE_MINUS_SRC_ALPHA            0x0303
> ++#define GL_DST_ALPHA                      0x0304
> ++#define GL_ONE_MINUS_DST_ALPHA            0x0305
> ++#define GL_DST_COLOR                      0x0306
> ++#define GL_ONE_MINUS_DST_COLOR            0x0307
> ++#define GL_SRC_ALPHA_SATURATE             0x0308
> ++#define GL_FUNC_ADD                       0x8006
> ++#define GL_BLEND_EQUATION                 0x8009
> ++#define GL_BLEND_EQUATION_RGB             0x8009
> ++#define GL_BLEND_EQUATION_ALPHA           0x883D
> ++#define GL_FUNC_SUBTRACT                  0x800A
> ++#define GL_FUNC_REVERSE_SUBTRACT          0x800B
> ++#define GL_BLEND_DST_RGB                  0x80C8
> ++#define GL_BLEND_SRC_RGB                  0x80C9
> ++#define GL_BLEND_DST_ALPHA                0x80CA
> ++#define GL_BLEND_SRC_ALPHA                0x80CB
> ++#define GL_CONSTANT_COLOR                 0x8001
> ++#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002
> ++#define GL_CONSTANT_ALPHA                 0x8003
> ++#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004
> ++#define GL_BLEND_COLOR                    0x8005
> ++#define GL_ARRAY_BUFFER                   0x8892
> ++#define GL_ELEMENT_ARRAY_BUFFER           0x8893
> ++#define GL_ARRAY_BUFFER_BINDING           0x8894
> ++#define GL_ELEMENT_ARRAY_BUFFER_BINDING   0x8895
> ++#define GL_STREAM_DRAW                    0x88E0
> ++#define GL_STATIC_DRAW                    0x88E4
> ++#define GL_DYNAMIC_DRAW                   0x88E8
> ++#define GL_BUFFER_SIZE                    0x8764
> ++#define GL_BUFFER_USAGE                   0x8765
> ++#define GL_CURRENT_VERTEX_ATTRIB          0x8626
> ++#define GL_FRONT                          0x0404
> ++#define GL_BACK                           0x0405
> ++#define GL_FRONT_AND_BACK                 0x0408
> ++#define GL_TEXTURE_2D                     0x0DE1
> ++#define GL_CULL_FACE                      0x0B44
> ++#define GL_BLEND                          0x0BE2
> ++#define GL_DITHER                         0x0BD0
> ++#define GL_STENCIL_TEST                   0x0B90
> ++#define GL_DEPTH_TEST                     0x0B71
> ++#define GL_SCISSOR_TEST                   0x0C11
> ++#define GL_POLYGON_OFFSET_FILL            0x8037
> ++#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
> ++#define GL_SAMPLE_COVERAGE                0x80A0
> ++#define GL_NO_ERROR                       0
> ++#define GL_INVALID_ENUM                   0x0500
> ++#define GL_INVALID_VALUE                  0x0501
> ++#define GL_INVALID_OPERATION              0x0502
> ++#define GL_OUT_OF_MEMORY                  0x0505
> ++#define GL_CW                             0x0900
> ++#define GL_CCW                            0x0901
> ++#define GL_LINE_WIDTH                     0x0B21
> ++#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
> ++#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
> ++#define GL_CULL_FACE_MODE                 0x0B45
> ++#define GL_FRONT_FACE                     0x0B46
> ++#define GL_DEPTH_RANGE                    0x0B70
> ++#define GL_DEPTH_WRITEMASK                0x0B72
> ++#define GL_DEPTH_CLEAR_VALUE              0x0B73
> ++#define GL_DEPTH_FUNC                     0x0B74
> ++#define GL_STENCIL_CLEAR_VALUE            0x0B91
> ++#define GL_STENCIL_FUNC                   0x0B92
> ++#define GL_STENCIL_FAIL                   0x0B94
> ++#define GL_STENCIL_PASS_DEPTH_FAIL        0x0B95
> ++#define GL_STENCIL_PASS_DEPTH_PASS        0x0B96
> ++#define GL_STENCIL_REF                    0x0B97
> ++#define GL_STENCIL_VALUE_MASK             0x0B93
> ++#define GL_STENCIL_WRITEMASK              0x0B98
> ++#define GL_STENCIL_BACK_FUNC              0x8800
> ++#define GL_STENCIL_BACK_FAIL              0x8801
> ++#define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802
> ++#define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803
> ++#define GL_STENCIL_BACK_REF               0x8CA3
> ++#define GL_STENCIL_BACK_VALUE_MASK        0x8CA4
> ++#define GL_STENCIL_BACK_WRITEMASK         0x8CA5
> ++#define GL_VIEWPORT                       0x0BA2
> ++#define GL_SCISSOR_BOX                    0x0C10
> ++#define GL_COLOR_CLEAR_VALUE              0x0C22
> ++#define GL_COLOR_WRITEMASK                0x0C23
> ++#define GL_UNPACK_ALIGNMENT               0x0CF5
> ++#define GL_PACK_ALIGNMENT                 0x0D05
> ++#define GL_MAX_TEXTURE_SIZE               0x0D33
> ++#define GL_MAX_VIEWPORT_DIMS              0x0D3A
> ++#define GL_SUBPIXEL_BITS                  0x0D50
> ++#define GL_RED_BITS                       0x0D52
> ++#define GL_GREEN_BITS                     0x0D53
> ++#define GL_BLUE_BITS                      0x0D54
> ++#define GL_ALPHA_BITS                     0x0D55
> ++#define GL_DEPTH_BITS                     0x0D56
> ++#define GL_STENCIL_BITS                   0x0D57
> ++#define GL_POLYGON_OFFSET_UNITS           0x2A00
> ++#define GL_POLYGON_OFFSET_FACTOR          0x8038
> ++#define GL_TEXTURE_BINDING_2D             0x8069
> ++#define GL_SAMPLE_BUFFERS                 0x80A8
> ++#define GL_SAMPLES                        0x80A9
> ++#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
> ++#define GL_SAMPLE_COVERAGE_INVERT         0x80AB
> ++#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
> ++#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3
> ++#define GL_DONT_CARE                      0x1100
> ++#define GL_FASTEST                        0x1101
> ++#define GL_NICEST                         0x1102
> ++#define GL_GENERATE_MIPMAP_HINT           0x8192
> ++#define GL_BYTE                           0x1400
> ++#define GL_UNSIGNED_BYTE                  0x1401
> ++#define GL_SHORT                          0x1402
> ++#define GL_UNSIGNED_SHORT                 0x1403
> ++#define GL_INT                            0x1404
> ++#define GL_UNSIGNED_INT                   0x1405
> ++#define GL_FLOAT                          0x1406
> ++#define GL_FIXED                          0x140C
> ++#define GL_DEPTH_COMPONENT                0x1902
> ++#define GL_ALPHA                          0x1906
> ++#define GL_RGB                            0x1907
> ++#define GL_RGBA                           0x1908
> ++#define GL_LUMINANCE                      0x1909
> ++#define GL_LUMINANCE_ALPHA                0x190A
> ++#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
> ++#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
> ++#define GL_UNSIGNED_SHORT_5_6_5           0x8363
> ++#define GL_FRAGMENT_SHADER                0x8B30
> ++#define GL_VERTEX_SHADER                  0x8B31
> ++#define GL_MAX_VERTEX_ATTRIBS             0x8869
> ++#define GL_MAX_VERTEX_UNIFORM_VECTORS     0x8DFB
> ++#define GL_MAX_VARYING_VECTORS            0x8DFC
> ++#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
> ++#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
> ++#define GL_MAX_TEXTURE_IMAGE_UNITS        0x8872
> ++#define GL_MAX_FRAGMENT_UNIFORM_VECTORS   0x8DFD
> ++#define GL_SHADER_TYPE                    0x8B4F
> ++#define GL_DELETE_STATUS                  0x8B80
> ++#define GL_LINK_STATUS                    0x8B82
> ++#define GL_VALIDATE_STATUS                0x8B83
> ++#define GL_ATTACHED_SHADERS               0x8B85
> ++#define GL_ACTIVE_UNIFORMS                0x8B86
> ++#define GL_ACTIVE_UNIFORM_MAX_LENGTH      0x8B87
> ++#define GL_ACTIVE_ATTRIBUTES              0x8B89
> ++#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH    0x8B8A
> ++#define GL_SHADING_LANGUAGE_VERSION       0x8B8C
> ++#define GL_CURRENT_PROGRAM                0x8B8D
> ++#define GL_NEVER                          0x0200
> ++#define GL_LESS                           0x0201
> ++#define GL_EQUAL                          0x0202
> ++#define GL_LEQUAL                         0x0203
> ++#define GL_GREATER                        0x0204
> ++#define GL_NOTEQUAL                       0x0205
> ++#define GL_GEQUAL                         0x0206
> ++#define GL_ALWAYS                         0x0207
> ++#define GL_KEEP                           0x1E00
> ++#define GL_REPLACE                        0x1E01
> ++#define GL_INCR                           0x1E02
> ++#define GL_DECR                           0x1E03
> ++#define GL_INVERT                         0x150A
> ++#define GL_INCR_WRAP                      0x8507
> ++#define GL_DECR_WRAP                      0x8508
> ++#define GL_VENDOR                         0x1F00
> ++#define GL_RENDERER                       0x1F01
> ++#define GL_VERSION                        0x1F02
> ++#define GL_EXTENSIONS                     0x1F03
> ++#define GL_NEAREST                        0x2600
> ++#define GL_LINEAR                         0x2601
> ++#define GL_NEAREST_MIPMAP_NEAREST         0x2700
> ++#define GL_LINEAR_MIPMAP_NEAREST          0x2701
> ++#define GL_NEAREST_MIPMAP_LINEAR          0x2702
> ++#define GL_LINEAR_MIPMAP_LINEAR           0x2703
> ++#define GL_TEXTURE_MAG_FILTER             0x2800
> ++#define GL_TEXTURE_MIN_FILTER             0x2801
> ++#define GL_TEXTURE_WRAP_S                 0x2802
> ++#define GL_TEXTURE_WRAP_T                 0x2803
> ++#define GL_TEXTURE                        0x1702
> ++#define GL_TEXTURE_CUBE_MAP               0x8513
> ++#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514
> ++#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515
> ++#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516
> ++#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517
> ++#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518
> ++#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519
> ++#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A
> ++#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C
> ++#define GL_TEXTURE0                       0x84C0
> ++#define GL_TEXTURE1                       0x84C1
> ++#define GL_TEXTURE2                       0x84C2
> ++#define GL_TEXTURE3                       0x84C3
> ++#define GL_TEXTURE4                       0x84C4
> ++#define GL_TEXTURE5                       0x84C5
> ++#define GL_TEXTURE6                       0x84C6
> ++#define GL_TEXTURE7                       0x84C7
> ++#define GL_TEXTURE8                       0x84C8
> ++#define GL_TEXTURE9                       0x84C9
> ++#define GL_TEXTURE10                      0x84CA
> ++#define GL_TEXTURE11                      0x84CB
> ++#define GL_TEXTURE12                      0x84CC
> ++#define GL_TEXTURE13                      0x84CD
> ++#define GL_TEXTURE14                      0x84CE
> ++#define GL_TEXTURE15                      0x84CF
> ++#define GL_TEXTURE16                      0x84D0
> ++#define GL_TEXTURE17                      0x84D1
> ++#define GL_TEXTURE18                      0x84D2
> ++#define GL_TEXTURE19                      0x84D3
> ++#define GL_TEXTURE20                      0x84D4
> ++#define GL_TEXTURE21                      0x84D5
> ++#define GL_TEXTURE22                      0x84D6
> ++#define GL_TEXTURE23                      0x84D7
> ++#define GL_TEXTURE24                      0x84D8
> ++#define GL_TEXTURE25                      0x84D9
> ++#define GL_TEXTURE26                      0x84DA
> ++#define GL_TEXTURE27                      0x84DB
> ++#define GL_TEXTURE28                      0x84DC
> ++#define GL_TEXTURE29                      0x84DD
> ++#define GL_TEXTURE30                      0x84DE
> ++#define GL_TEXTURE31                      0x84DF
> ++#define GL_ACTIVE_TEXTURE                 0x84E0
> ++#define GL_REPEAT                         0x2901
> ++#define GL_CLAMP_TO_EDGE                  0x812F
> ++#define GL_MIRRORED_REPEAT                0x8370
> ++#define GL_FLOAT_VEC2                     0x8B50
> ++#define GL_FLOAT_VEC3                     0x8B51
> ++#define GL_FLOAT_VEC4                     0x8B52
> ++#define GL_INT_VEC2                       0x8B53
> ++#define GL_INT_VEC3                       0x8B54
> ++#define GL_INT_VEC4                       0x8B55
> ++#define GL_BOOL                           0x8B56
> ++#define GL_BOOL_VEC2                      0x8B57
> ++#define GL_BOOL_VEC3                      0x8B58
> ++#define GL_BOOL_VEC4                      0x8B59
> ++#define GL_FLOAT_MAT2                     0x8B5A
> ++#define GL_FLOAT_MAT3                     0x8B5B
> ++#define GL_FLOAT_MAT4                     0x8B5C
> ++#define GL_SAMPLER_2D                     0x8B5E
> ++#define GL_SAMPLER_CUBE                   0x8B60
> ++#define GL_VERTEX_ATTRIB_ARRAY_ENABLED    0x8622
> ++#define GL_VERTEX_ATTRIB_ARRAY_SIZE       0x8623
> ++#define GL_VERTEX_ATTRIB_ARRAY_STRIDE     0x8624
> ++#define GL_VERTEX_ATTRIB_ARRAY_TYPE       0x8625
> ++#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
> ++#define GL_VERTEX_ATTRIB_ARRAY_POINTER    0x8645
> ++#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
> ++#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
> ++#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
> ++#define GL_COMPILE_STATUS                 0x8B81
> ++#define GL_INFO_LOG_LENGTH                0x8B84
> ++#define GL_SHADER_SOURCE_LENGTH           0x8B88
> ++#define GL_SHADER_COMPILER                0x8DFA
> ++#define GL_SHADER_BINARY_FORMATS          0x8DF8
> ++#define GL_NUM_SHADER_BINARY_FORMATS      0x8DF9
> ++#define GL_LOW_FLOAT                      0x8DF0
> ++#define GL_MEDIUM_FLOAT                   0x8DF1
> ++#define GL_HIGH_FLOAT                     0x8DF2
> ++#define GL_LOW_INT                        0x8DF3
> ++#define GL_MEDIUM_INT                     0x8DF4
> ++#define GL_HIGH_INT                       0x8DF5
> ++#define GL_FRAMEBUFFER                    0x8D40
> ++#define GL_RENDERBUFFER                   0x8D41
> ++#define GL_RGBA4                          0x8056
> ++#define GL_RGB5_A1                        0x8057
> ++#define GL_RGB565                         0x8D62
> ++#define GL_DEPTH_COMPONENT16              0x81A5
> ++#define GL_STENCIL_INDEX8                 0x8D48
> ++#define GL_RENDERBUFFER_WIDTH             0x8D42
> ++#define GL_RENDERBUFFER_HEIGHT            0x8D43
> ++#define GL_RENDERBUFFER_INTERNAL_FORMAT   0x8D44
> ++#define GL_RENDERBUFFER_RED_SIZE          0x8D50
> ++#define GL_RENDERBUFFER_GREEN_SIZE        0x8D51
> ++#define GL_RENDERBUFFER_BLUE_SIZE         0x8D52
> ++#define GL_RENDERBUFFER_ALPHA_SIZE        0x8D53
> ++#define GL_RENDERBUFFER_DEPTH_SIZE        0x8D54
> ++#define GL_RENDERBUFFER_STENCIL_SIZE      0x8D55
> ++#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
> ++#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
> ++#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
> ++#define GL_COLOR_ATTACHMENT0              0x8CE0
> ++#define GL_DEPTH_ATTACHMENT               0x8D00
> ++#define GL_STENCIL_ATTACHMENT             0x8D20
> ++#define GL_NONE                           0
> ++#define GL_FRAMEBUFFER_COMPLETE           0x8CD5
> ++#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
> ++#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
> ++#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
> ++#define GL_FRAMEBUFFER_UNSUPPORTED        0x8CDD
> ++#define GL_FRAMEBUFFER_BINDING            0x8CA6
> ++#define GL_RENDERBUFFER_BINDING           0x8CA7
> ++#define GL_MAX_RENDERBUFFER_SIZE          0x84E8
> ++#define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506
> ++GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
> ++GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
> ++GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
> ++GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
> ++GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
> ++GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
> ++GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
> ++GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
> ++GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode);
> ++GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
> ++GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
> ++GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
> ++GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
> ++GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
> ++GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
> ++GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
> ++GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
> ++GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d);
> ++GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
> ++GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
> ++GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
> ++GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
> ++GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
> ++GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
> ++GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
> ++GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
> ++GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
> ++GL_APICALL void GL_APIENTRY glCullFace (GLenum mode);
> ++GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
> ++GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
> ++GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
> ++GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
> ++GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
> ++GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
> ++GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func);
> ++GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag);
> ++GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
> ++GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
> ++GL_APICALL void GL_APIENTRY glDisable (GLenum cap);
> ++GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
> ++GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
> ++GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
> ++GL_APICALL void GL_APIENTRY glEnable (GLenum cap);
> ++GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
> ++GL_APICALL void GL_APIENTRY glFinish (void);
> ++GL_APICALL void GL_APIENTRY glFlush (void);
> ++GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
> ++GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
> ++GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
> ++GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
> ++GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
> ++GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
> ++GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
> ++GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
> ++GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
> ++GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
> ++GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
> ++GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
> ++GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
> ++GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
> ++GL_APICALL GLenum GL_APIENTRY glGetError (void);
> ++GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *params);
> ++GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
> ++GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
> ++GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
> ++GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
> ++GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name);
> ++GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
> ++GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
> ++GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
> ++GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
> ++GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
> ++GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
> ++GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
> ++GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
> ++GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
> ++GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
> ++GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
> ++GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
> ++GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
> ++GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
> ++GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture);
> ++GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width);
> ++GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
> ++GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
> ++GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
> ++GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
> ++GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
> ++GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
> ++GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
> ++GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
> ++GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
> ++GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
> ++GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
> ++GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask);
> ++GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
> ++GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
> ++GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
> ++GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
> ++GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
> ++GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
> ++GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
> ++GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
> ++GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
> ++GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0);
> ++GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0);
> ++GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
> ++GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
> ++GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
> ++GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
> ++GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
> ++GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
> ++GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
> ++GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
> ++GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
> ++GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
> ++GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
> ++GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
> ++#endif /* GL_ES_VERSION_2_0 */
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif
> +diff -rupN a/usr/include/GLES2/gl2platform.h b/usr/include/GLES2/gl2platform.h
> +--- a/usr/include/GLES2/gl2platform.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/GLES2/gl2platform.h	2013-10-12 03:05:04.000000000 +0200
> +@@ -0,0 +1,30 @@
> ++#ifndef __gl2platform_h_
> ++#define __gl2platform_h_
> ++
> ++/* $Revision: 23328 $ on $Date:: 2013-10-02 02:28:28 -0700 #$ */
> ++
> ++/*
> ++ * This document is licensed under the SGI Free Software B License Version
> ++ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
> ++ */
> ++
> ++/* Platform-specific types and definitions for OpenGL ES 2.X  gl2.h
> ++ *
> ++ * Adopters may modify khrplatform.h and this file to suit their platform.
> ++ * You are encouraged to submit all modifications to the Khronos group so that
> ++ * they can be included in future versions of this file.  Please submit changes
> ++ * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
> ++ * by filing a bug against product "OpenGL-ES" component "Registry".
> ++ */
> ++
> ++#include <KHR/khrplatform.h>
> ++
> ++#ifndef GL_APICALL
> ++#define GL_APICALL  KHRONOS_APICALL
> ++#endif
> ++
> ++#ifndef GL_APIENTRY
> ++#define GL_APIENTRY KHRONOS_APIENTRY
> ++#endif
> ++
> ++#endif /* __gl2platform_h_ */
> +diff -rupN a/usr/include/KD/kd.h b/usr/include/KD/kd.h
> +--- a/usr/include/KD/kd.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KD/kd.h	2013-10-02 03:16:58.000000000 +0200
> +@@ -0,0 +1,991 @@
> ++/* Reference KD/kd.h for OpenKODE Core 1.0.3  */
> ++#ifndef __kd_h_
> ++#define __kd_h_
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++#include "kdplatform.h"
> ++
> ++
> ++
> ++/*******************************************************
> ++ * Introduction
> ++ *******************************************************/
> ++
> ++/*******************************************************
> ++ * OpenKODE conformance
> ++ *******************************************************/
> ++
> ++/*******************************************************
> ++ * Overview
> ++ *******************************************************/
> ++
> ++/*******************************************************
> ++ * Programming environment
> ++ *******************************************************/
> ++#define KD_VERSION_1_0 1
> ++typedef char KDchar;
> ++typedef signed char KDint8;
> ++typedef unsigned char KDuint8;
> ++typedef int KDint;
> ++typedef unsigned int KDuint;
> ++typedef float KDfloat32;
> ++typedef KDint KDboolean;
> ++typedef KDint64 KDtime;
> ++typedef KDint64 KDust;
> ++typedef KDint64 KDoff;
> ++typedef KDuint32 KDmode;
> ++#define KDINT32_MIN (-0x7fffffff-1)
> ++#define KDINT32_MAX 0x7fffffff
> ++#define KDUINT32_MAX 0xffffffffU
> ++#define KD_TRUE 1
> ++#define KD_FALSE 0
> ++#ifdef __cplusplus
> ++  const int KD_NULL = 0; /* Yes, int. See Stroustrup 3rd edition. */
> ++#else
> ++  #define KD_NULL ((void *)0)
> ++#endif
> ++
> ++/*******************************************************
> ++ * Errors
> ++ *******************************************************/
> ++#define KD_EACCES 1
> ++#define KD_EADDRINUSE 2
> ++#define KD_EADDRNOTAVAIL 3
> ++#define KD_EAFNOSUPPORT 4
> ++#define KD_EAGAIN (5)
> ++#define KD_EALREADY 6
> ++#define KD_EBADF 7
> ++#define KD_EBUSY 8
> ++#define KD_ECONNREFUSED 9
> ++#define KD_ECONNRESET 10
> ++#define KD_EDEADLK 11
> ++#define KD_EDESTADDRREQ 12
> ++#define KD_EEXIST 13
> ++#define KD_EFBIG 14
> ++#define KD_EHOSTUNREACH 15
> ++#define KD_EHOST_NOT_FOUND 16
> ++#define KD_EINVAL 17
> ++#define KD_EIO 18
> ++#define KD_EILSEQ 19
> ++#define KD_EISCONN 20
> ++#define KD_EISDIR 21
> ++#define KD_EMFILE 22
> ++#define KD_ENAMETOOLONG 23
> ++#define KD_ENOENT 24
> ++#define KD_ENOMEM 25
> ++#define KD_ENOSPC 26
> ++#define KD_ENOSYS 27
> ++#define KD_ENOTCONN 28
> ++#define KD_ENO_DATA 29
> ++#define KD_ENO_RECOVERY 30
> ++#define KD_EOPNOTSUPP 31
> ++#define KD_EOVERFLOW 32
> ++#define KD_EPERM 33
> ++#define KD_ERANGE 35
> ++#define KD_ETIMEDOUT (36)
> ++#define KD_ETRY_AGAIN 37
> ++
> ++/* kdGetError: Get last error indication. */
> ++KD_API KDint KD_APIENTRY kdGetError(void);
> ++
> ++/* kdSetError: Set last error indication. */
> ++KD_API void KD_APIENTRY kdSetError(KDint error);
> ++
> ++/*******************************************************
> ++ * Versioning and attribute queries
> ++ *******************************************************/
> ++
> ++/* kdQueryAttribi: Obtain the value of a numeric OpenKODE Core attribute. */
> ++KD_API KDint KD_APIENTRY kdQueryAttribi(KDint attribute, KDint *value);
> ++
> ++/* kdQueryAttribcv: Obtain the value of a string OpenKODE Core attribute. */
> ++KD_API const KDchar *KD_APIENTRY kdQueryAttribcv(KDint attribute);
> ++#define KD_ATTRIB_VENDOR 39
> ++#define KD_ATTRIB_VERSION 40
> ++#define KD_ATTRIB_PLATFORM 41
> ++
> ++/* kdQueryIndexedAttribcv: Obtain the value of an indexed string OpenKODE Core attribute. */
> ++KD_API const KDchar *KD_APIENTRY kdQueryIndexedAttribcv(KDint attribute, KDint index);
> ++
> ++/*******************************************************
> ++ * Threads and synchronization
> ++ *******************************************************/
> ++
> ++/* kdThreadAttrCreate: Create a thread attribute object. */
> ++typedef struct KDThreadAttr KDThreadAttr;
> ++KD_API KDThreadAttr *KD_APIENTRY kdThreadAttrCreate(void);
> ++
> ++/* kdThreadAttrFree: Free a thread attribute object. */
> ++KD_API KDint KD_APIENTRY kdThreadAttrFree(KDThreadAttr *attr);
> ++
> ++/* kdThreadAttrSetDetachState: Set detachstate attribute. */
> ++#define KD_THREAD_CREATE_JOINABLE 0
> ++#define KD_THREAD_CREATE_DETACHED 1
> ++KD_API KDint KD_APIENTRY kdThreadAttrSetDetachState(KDThreadAttr *attr, KDint detachstate);
> ++
> ++/* kdThreadAttrSetStackSize: Set stacksize attribute. */
> ++KD_API KDint KD_APIENTRY kdThreadAttrSetStackSize(KDThreadAttr *attr, KDsize stacksize);
> ++
> ++/* kdThreadCreate: Create a new thread. */
> ++typedef struct KDThread KDThread;
> ++KD_API KDThread *KD_APIENTRY kdThreadCreate(const KDThreadAttr *attr, void *(*start_routine)(void *), void *arg);
> ++
> ++/* kdThreadExit: Terminate this thread. */
> ++KD_API KD_NORETURN void KD_APIENTRY kdThreadExit(void *retval);
> ++
> ++/* kdThreadJoin: Wait for termination of another thread. */
> ++KD_API KDint KD_APIENTRY kdThreadJoin(KDThread *thread, void **retval);
> ++
> ++/* kdThreadDetach: Allow resources to be freed as soon as a thread terminates. */
> ++KD_API KDint KD_APIENTRY kdThreadDetach(KDThread *thread);
> ++
> ++/* kdThreadSelf: Return calling thread’s ID. */
> ++KD_API KDThread *KD_APIENTRY kdThreadSelf(void);
> ++
> ++/* kdThreadOnce: Wrap initialization code so it is executed only once. */
> ++#ifndef KD_NO_STATIC_DATA
> ++typedef struct KDThreadOnce {
> ++    void *impl;
> ++} KDThreadOnce;
> ++#define KD_THREAD_ONCE_INIT { 0 }
> ++KD_API KDint KD_APIENTRY kdThreadOnce(KDThreadOnce *once_control, void (*init_routine)(void));
> ++#endif /* ndef KD_NO_STATIC_DATA */
> ++
> ++/* kdThreadMutexCreate: Create a mutex. */
> ++typedef struct KDThreadMutex KDThreadMutex;
> ++KD_API KDThreadMutex *KD_APIENTRY kdThreadMutexCreate(const void *mutexattr);
> ++
> ++/* kdThreadMutexFree: Free a mutex. */
> ++KD_API KDint KD_APIENTRY kdThreadMutexFree(KDThreadMutex *mutex);
> ++
> ++/* kdThreadMutexLock: Lock a mutex. */
> ++KD_API KDint KD_APIENTRY kdThreadMutexLock(KDThreadMutex *mutex);
> ++
> ++/* kdThreadMutexUnlock: Unlock a mutex. */
> ++KD_API KDint KD_APIENTRY kdThreadMutexUnlock(KDThreadMutex *mutex);
> ++
> ++/* kdThreadCondCreate: Create a condition variable. */
> ++typedef struct KDThreadCond KDThreadCond;
> ++KD_API KDThreadCond *KD_APIENTRY kdThreadCondCreate(const void *attr);
> ++
> ++/* kdThreadCondFree: Free a condition variable. */
> ++KD_API KDint KD_APIENTRY kdThreadCondFree(KDThreadCond *cond);
> ++
> ++/* kdThreadCondSignal, kdThreadCondBroadcast: Signal a condition variable. */
> ++KD_API KDint KD_APIENTRY kdThreadCondSignal(KDThreadCond *cond);
> ++KD_API KDint KD_APIENTRY kdThreadCondBroadcast(KDThreadCond *cond);
> ++
> ++/* kdThreadCondWait: Wait for a condition variable to be signalled. */
> ++KD_API KDint KD_APIENTRY kdThreadCondWait(KDThreadCond *cond, KDThreadMutex *mutex);
> ++
> ++/* kdThreadSemCreate: Create a semaphore. */
> ++typedef struct KDThreadSem KDThreadSem;
> ++KD_API KDThreadSem *KD_APIENTRY kdThreadSemCreate(KDuint value);
> ++
> ++/* kdThreadSemFree: Free a semaphore. */
> ++KD_API KDint KD_APIENTRY kdThreadSemFree(KDThreadSem *sem);
> ++
> ++/* kdThreadSemWait: Lock a semaphore. */
> ++KD_API KDint KD_APIENTRY kdThreadSemWait(KDThreadSem *sem);
> ++
> ++/* kdThreadSemPost: Unlock a semaphore. */
> ++KD_API KDint KD_APIENTRY kdThreadSemPost(KDThreadSem *sem);
> ++
> ++/*******************************************************
> ++ * Events
> ++ *******************************************************/
> ++
> ++/* KDEvent: Struct type containing an event. */
> ++typedef struct KDEvent KDEvent;
> ++#define KD_EVENT_USER 0x40000000
> ++
> ++/* kdWaitEvent: Get next event from thread’s event queue. */
> ++KD_API const KDEvent *KD_APIENTRY kdWaitEvent(KDust timeout);
> ++
> ++/* kdSetEventUserptr: Set the userptr for global events. */
> ++KD_API void KD_APIENTRY kdSetEventUserptr(void *userptr);
> ++
> ++/* kdDefaultEvent: Perform default processing on an unrecognized event. */
> ++KD_API void KD_APIENTRY kdDefaultEvent(const KDEvent *event);
> ++
> ++/* kdPumpEvents: Pump the thread’s event queue, performing callbacks. */
> ++KD_API KDint KD_APIENTRY kdPumpEvents(void);
> ++
> ++/* kdInstallCallback: Install or remove a callback function for event processing. */
> ++typedef void (KD_APIENTRY KDCallbackFunc)(const KDEvent *event);
> ++KD_API KDint KD_APIENTRY kdInstallCallback(KDCallbackFunc *func, KDint eventtype, void *eventuserptr);
> ++
> ++/* kdCreateEvent: Create an event for posting. */
> ++KD_API KDEvent *KD_APIENTRY kdCreateEvent(void);
> ++
> ++/* kdPostEvent, kdPostThreadEvent: Post an event into a queue. */
> ++KD_API KDint KD_APIENTRY kdPostEvent(KDEvent *event);
> ++KD_API KDint KD_APIENTRY kdPostThreadEvent(KDEvent *event, KDThread *thread);
> ++typedef struct KDEventUser {
> ++    union {
> ++        KDint64 i64;
> ++        void *p;
> ++        struct {
> ++            KDint32 a;
> ++            KDint32 b;
> ++        } i32pair;
> ++    } value1;
> ++    union {
> ++        KDint64 i64;
> ++        struct {
> ++            union {
> ++                KDint32 i32;
> ++                void *p;
> ++            } value2;
> ++            union {
> ++                KDint32 i32;
> ++                void *p;
> ++            } value3;
> ++        } i32orp;
> ++    } value23;
> ++} KDEventUser;
> ++
> ++/* kdFreeEvent: Abandon an event instead of posting it. */
> ++KD_API void KD_APIENTRY kdFreeEvent(KDEvent *event);
> ++
> ++/*******************************************************
> ++ * System events
> ++ *******************************************************/
> ++
> ++/* KD_EVENT_QUIT: Event to request to quit application. */
> ++#define KD_EVENT_QUIT 43
> ++
> ++/* KD_EVENT_PAUSE: Application pause event. */
> ++#define KD_EVENT_PAUSE 45
> ++
> ++/* KD_EVENT_RESUME: Application resume event. */
> ++#define KD_EVENT_RESUME 46
> ++
> ++/* KD_EVENT_ORIENTATION: Orientation change event. */
> ++#define KD_EVENT_ORIENTATION 48
> ++
> ++/* KD_IOGROUP_EVENT: I/O group for OpenKODE Core system events implemented as state values. */
> ++#define KD_IOGROUP_EVENT 0x100
> ++#define KD_STATE_EVENT_USING_BATTERY       (KD_IOGROUP_EVENT + 0)
> ++#define KD_STATE_EVENT_LOW_BATTERY         (KD_IOGROUP_EVENT + 1)
> ++
> ++
> ++/* KD_IOGROUP_ORIENTATION: I/O group for OpenKODE Core orientation state. */
> ++#define KD_IOGROUP_ORIENTATION 0x200
> ++#define KD_STATE_ORIENTATION_OVERALL       (KD_IOGROUP_ORIENTATION + 0)
> ++#define KD_STATE_ORIENTATION_SCREEN        (KD_IOGROUP_ORIENTATION + 1)
> ++#define KD_STATE_ORIENTATION_RENDERING     (KD_IOGROUP_ORIENTATION + 2)
> ++#define KD_STATE_ORIENTATION_LOCKSURFACE   (KD_IOGROUP_ORIENTATION + 3)
> ++
> ++
> ++/*******************************************************
> ++ * Application startup and exit.
> ++ *******************************************************/
> ++
> ++/* kdMain: The application-defined main function. */
> ++KDint KD_APIENTRY kdMain(KDint argc, const KDchar *const *argv);
> ++
> ++/* kdExit: Exit the application. */
> ++KD_API KD_NORETURN void KD_APIENTRY kdExit(KDint status);
> ++
> ++/*******************************************************
> ++ * Utility library functions
> ++ *******************************************************/
> ++
> ++/* kdAbs: Compute the absolute value of an integer. */
> ++KD_API KDint KD_APIENTRY kdAbs(KDint i);
> ++
> ++/* kdStrtof: Convert a string to a floating point number. */
> ++KD_API KDfloat32 KD_APIENTRY kdStrtof(const KDchar *s, KDchar **endptr);
> ++
> ++/* kdStrtol, kdStrtoul: Convert a string to an integer. */
> ++KD_API KDint KD_APIENTRY kdStrtol(const KDchar *s, KDchar **endptr, KDint base);
> ++KD_API KDuint KD_APIENTRY kdStrtoul(const KDchar *s, KDchar **endptr, KDint base);
> ++
> ++/* kdLtostr, kdUltostr: Convert an integer to a string. */
> ++#define KD_LTOSTR_MAXLEN ((sizeof(KDint)*8*3+6)/10+2)
> ++#define KD_ULTOSTR_MAXLEN ((sizeof(KDint)*8+2)/3+1)
> ++KD_API KDssize KD_APIENTRY kdLtostr(KDchar *buffer, KDsize buflen, KDint number);
> ++KD_API KDssize KD_APIENTRY kdUltostr(KDchar *buffer, KDsize buflen, KDuint number, KDint base);
> ++
> ++/* kdFtostr: Convert a float to a string. */
> ++#define KD_FTOSTR_MAXLEN 16
> ++KD_API KDssize KD_APIENTRY kdFtostr(KDchar *buffer, KDsize buflen, KDfloat32 number);
> ++
> ++/* kdCryptoRandom: Return random data. */
> ++KD_API KDint KD_APIENTRY kdCryptoRandom(KDuint8 *buf, KDsize buflen);
> ++
> ++/*******************************************************
> ++ * Locale specific functions
> ++ *******************************************************/
> ++
> ++/* kdGetLocale: Determine the current language and locale. */
> ++KD_API const KDchar *KD_APIENTRY kdGetLocale(void);
> ++
> ++/*******************************************************
> ++ * Memory allocation
> ++ *******************************************************/
> ++
> ++/* kdMalloc: Allocate memory. */
> ++KD_API void *KD_APIENTRY kdMalloc(KDsize size);
> ++
> ++/* kdFree: Free allocated memory block. */
> ++KD_API void KD_APIENTRY kdFree(void *ptr);
> ++
> ++/* kdRealloc: Resize memory block. */
> ++KD_API void *KD_APIENTRY kdRealloc(void *ptr, KDsize size);
> ++
> ++/*******************************************************
> ++ * Thread-local storage.
> ++ *******************************************************/
> ++
> ++/* kdGetTLS: Get the thread-local storage pointer. */
> ++KD_API void *KD_APIENTRY kdGetTLS(void);
> ++
> ++/* kdSetTLS: Set the thread-local storage pointer. */
> ++KD_API void KD_APIENTRY kdSetTLS(void *ptr);
> ++
> ++/*******************************************************
> ++ * Mathematical functions
> ++ *******************************************************/
> ++#define KD_E_F 2.71828175F
> ++#define KD_PI_F 3.14159274F
> ++#define KD_PI_2_F 1.57079637F
> ++#define KD_2PI_F 6.28318548F
> ++#define KD_LOG2E_F 1.44269502F
> ++#define KD_LOG10E_F 0.434294492F
> ++#define KD_LN2_F 0.693147182F
> ++#define KD_LN10_F 2.30258512F
> ++#define KD_PI_4_F 0.785398185F
> ++#define KD_1_PI_F 0.318309873F
> ++#define KD_2_PI_F 0.636619747F
> ++#define KD_2_SQRTPI_F 1.12837923F
> ++#define KD_SQRT2_F 1.41421354F
> ++#define KD_SQRT1_2_F 0.707106769F
> ++#define KD_FLT_EPSILON 1.19209290E-07F
> ++#define KD_FLT_MAX 3.40282346638528860e+38F
> ++#define KD_FLT_MIN 1.17549435e-38F
> ++/* KD_INFINITY is defined in kdplatform.h since no portable definition
> ++ * is possible. */
> ++#define kdIsNan(x) (((x) != (x)) ? 1 : 0)
> ++#define KD_HUGE_VALF KD_INFINITY
> ++#define KD_DEG_TO_RAD_F 0.0174532924F
> ++#define KD_RAD_TO_DEG_F 57.2957802F
> ++
> ++/* kdAcosf: Arc cosine function. */
> ++KD_API KDfloat32 KD_APIENTRY kdAcosf(KDfloat32 x);
> ++
> ++/* kdAsinf: Arc sine function. */
> ++KD_API KDfloat32 KD_APIENTRY kdAsinf(KDfloat32 x);
> ++
> ++/* kdAtanf: Arc tangent function. */
> ++KD_API KDfloat32 KD_APIENTRY kdAtanf(KDfloat32 x);
> ++
> ++/* kdAtan2f: Arc tangent function. */
> ++KD_API KDfloat32 KD_APIENTRY kdAtan2f(KDfloat32 y, KDfloat32 x);
> ++
> ++/* kdCosf: Cosine function. */
> ++KD_API KDfloat32 KD_APIENTRY kdCosf(KDfloat32 x);
> ++
> ++/* kdSinf: Sine function. */
> ++KD_API KDfloat32 KD_APIENTRY kdSinf(KDfloat32 x);
> ++
> ++/* kdTanf: Tangent function. */
> ++KD_API KDfloat32 KD_APIENTRY kdTanf(KDfloat32 x);
> ++
> ++/* kdExpf: Exponential function. */
> ++KD_API KDfloat32 KD_APIENTRY kdExpf(KDfloat32 x);
> ++
> ++/* kdLogf: Natural logarithm function. */
> ++KD_API KDfloat32 KD_APIENTRY kdLogf(KDfloat32 x);
> ++
> ++/* kdFabsf: Absolute value. */
> ++KD_API KDfloat32 KD_APIENTRY kdFabsf(KDfloat32 x);
> ++
> ++/* kdPowf: Power function. */
> ++KD_API KDfloat32 KD_APIENTRY kdPowf(KDfloat32 x, KDfloat32 y);
> ++
> ++/* kdSqrtf: Square root function. */
> ++KD_API KDfloat32 KD_APIENTRY kdSqrtf(KDfloat32 x);
> ++
> ++/* kdCeilf: Return ceiling value. */
> ++KD_API KDfloat32 KD_APIENTRY kdCeilf(KDfloat32 x);
> ++
> ++/* kdFloorf: Return floor value. */
> ++KD_API KDfloat32 KD_APIENTRY kdFloorf(KDfloat32 x);
> ++
> ++/* kdRoundf: Round value to nearest integer. */
> ++KD_API KDfloat32 KD_APIENTRY kdRoundf(KDfloat32 x);
> ++
> ++/* kdInvsqrtf: Inverse square root function. */
> ++KD_API KDfloat32 KD_APIENTRY kdInvsqrtf(KDfloat32 x);
> ++
> ++/* kdFmodf: Calculate floating point remainder. */
> ++KD_API KDfloat32 KD_APIENTRY kdFmodf(KDfloat32 x, KDfloat32 y);
> ++
> ++/*******************************************************
> ++ * String and memory functions
> ++ *******************************************************/
> ++
> ++/* kdMemchr: Scan memory for a byte value. */
> ++KD_API void *KD_APIENTRY kdMemchr(const void *src, KDint byte, KDsize len);
> ++
> ++/* kdMemcmp: Compare two memory regions. */
> ++KD_API KDint KD_APIENTRY kdMemcmp(const void *src1, const void *src2, KDsize len);
> ++
> ++/* kdMemcpy: Copy a memory region, no overlapping. */
> ++KD_API void *KD_APIENTRY kdMemcpy(void *buf, const void *src, KDsize len);
> ++
> ++/* kdMemmove: Copy a memory region, overlapping allowed. */
> ++KD_API void *KD_APIENTRY kdMemmove(void *buf, const void *src, KDsize len);
> ++
> ++/* kdMemset: Set bytes in memory to a value. */
> ++KD_API void *KD_APIENTRY kdMemset(void *buf, KDint byte, KDsize len);
> ++
> ++/* kdStrchr: Scan string for a byte value. */
> ++KD_API KDchar *KD_APIENTRY kdStrchr(const KDchar *str, KDint ch);
> ++
> ++/* kdStrcmp: Compares two strings. */
> ++KD_API KDint KD_APIENTRY kdStrcmp(const KDchar *str1, const KDchar *str2);
> ++
> ++/* kdStrlen: Determine the length of a string. */
> ++KD_API KDsize KD_APIENTRY kdStrlen(const KDchar *str);
> ++
> ++/* kdStrnlen: Determine the length of a string. */
> ++KD_API KDsize KD_APIENTRY kdStrnlen(const KDchar *str, KDsize maxlen);
> ++
> ++/* kdStrncat_s: Concatenate two strings. */
> ++KD_API KDint KD_APIENTRY kdStrncat_s(KDchar *buf, KDsize buflen, const KDchar *src, KDsize srcmaxlen);
> ++
> ++/* kdStrncmp: Compares two strings with length limit. */
> ++KD_API KDint KD_APIENTRY kdStrncmp(const KDchar *str1, const KDchar *str2, KDsize maxlen);
> ++
> ++/* kdStrcpy_s: Copy a string with an overrun check. */
> ++KD_API KDint KD_APIENTRY kdStrcpy_s(KDchar *buf, KDsize buflen, const KDchar *src);
> ++
> ++/* kdStrncpy_s: Copy a string with an overrun check. */
> ++KD_API KDint KD_APIENTRY kdStrncpy_s(KDchar *buf, KDsize buflen, const KDchar *src, KDsize srclen);
> ++
> ++/*******************************************************
> ++ * Time functions
> ++ *******************************************************/
> ++
> ++/* kdGetTimeUST: Get the current unadjusted system time. */
> ++KD_API KDust KD_APIENTRY kdGetTimeUST(void);
> ++
> ++/* kdTime: Get the current wall clock time. */
> ++KD_API KDtime KD_APIENTRY kdTime(KDtime *timep);
> ++
> ++/* kdGmtime_r, kdLocaltime_r: Convert a seconds-since-epoch time into broken-down time. */
> ++typedef struct KDTm {
> ++    KDint32 tm_sec;
> ++    KDint32 tm_min;
> ++    KDint32 tm_hour;
> ++    KDint32 tm_mday;
> ++    KDint32 tm_mon;
> ++    KDint32 tm_year;
> ++    KDint32 tm_wday;
> ++    KDint32 tm_yday;
> ++} KDTm;
> ++KD_API KDTm *KD_APIENTRY kdGmtime_r(const KDtime *timep, KDTm *result);
> ++KD_API KDTm *KD_APIENTRY kdLocaltime_r(const KDtime *timep, KDTm *result);
> ++
> ++/* kdUSTAtEpoch: Get the UST corresponding to KDtime 0. */
> ++KD_API KDust KD_APIENTRY kdUSTAtEpoch(void);
> ++
> ++/*******************************************************
> ++ * Timer functions
> ++ *******************************************************/
> ++
> ++/* kdSetTimer: Set timer. */
> ++#define KD_TIMER_ONESHOT 61
> ++#define KD_TIMER_PERIODIC_AVERAGE 62
> ++#define KD_TIMER_PERIODIC_MINIMUM 63
> ++typedef struct KDTimer KDTimer;
> ++KD_API KDTimer *KD_APIENTRY kdSetTimer(KDint64 interval, KDint periodic, void *eventuserptr);
> ++
> ++/* kdCancelTimer: Cancel and free a timer. */
> ++KD_API KDint KD_APIENTRY kdCancelTimer(KDTimer *timer);
> ++
> ++/* KD_EVENT_TIMER: Timer fire event. */
> ++#define KD_EVENT_TIMER 42
> ++
> ++/*******************************************************
> ++ * File system
> ++ *******************************************************/
> ++#define KD_EOF (-1)
> ++
> ++/* kdFopen: Open a file from the file system. */
> ++typedef struct KDFile KDFile;
> ++KD_API KDFile *KD_APIENTRY kdFopen(const KDchar *pathname, const KDchar *mode);
> ++
> ++/* kdFclose: Close an open file. */
> ++KD_API KDint KD_APIENTRY kdFclose(KDFile *file);
> ++
> ++/* kdFflush: Flush an open file. */
> ++KD_API KDint KD_APIENTRY kdFflush(KDFile *file);
> ++
> ++/* kdFread: Read from a file. */
> ++KD_API KDsize KD_APIENTRY kdFread(void *buffer, KDsize size, KDsize count, KDFile *file);
> ++
> ++/* kdFwrite: Write to a file. */
> ++KD_API KDsize KD_APIENTRY kdFwrite(const void *buffer, KDsize size, KDsize count, KDFile *file);
> ++
> ++/* kdGetc: Read next byte from an open file. */
> ++KD_API KDint KD_APIENTRY kdGetc(KDFile *file);
> ++
> ++/* kdPutc: Write a byte to an open file. */
> ++KD_API KDint KD_APIENTRY kdPutc(KDint c, KDFile *file);
> ++
> ++/* kdFgets: Read a line of text from an open file. */
> ++KD_API KDchar *KD_APIENTRY kdFgets(KDchar *buffer, KDsize buflen, KDFile *file);
> ++
> ++/* kdFEOF: Check for end of file. */
> ++KD_API KDint KD_APIENTRY kdFEOF(KDFile *file);
> ++
> ++/* kdFerror: Check for an error condition on an open file. */
> ++KD_API KDint KD_APIENTRY kdFerror(KDFile *file);
> ++
> ++/* kdClearerr: Clear a file’s error and end-of-file indicators. */
> ++KD_API void KD_APIENTRY kdClearerr(KDFile *file);
> ++
> ++/* kdFseek: Reposition the file position indicator in a file. */
> ++typedef enum {
> ++    KD_SEEK_SET =  0,
> ++    KD_SEEK_CUR =  1,
> ++    KD_SEEK_END =  2
> ++} KDfileSeekOrigin;
> ++KD_API KDint KD_APIENTRY kdFseek(KDFile *file, KDoff offset, KDfileSeekOrigin origin);
> ++
> ++/* kdFtell: Get the file position of an open file. */
> ++KD_API KDoff KD_APIENTRY kdFtell(KDFile *file);
> ++
> ++/* kdMkdir: Create new directory. */
> ++KD_API KDint KD_APIENTRY kdMkdir(const KDchar *pathname);
> ++
> ++/* kdRmdir: Delete a directory. */
> ++KD_API KDint KD_APIENTRY kdRmdir(const KDchar *pathname);
> ++
> ++/* kdRename: Rename a file. */
> ++KD_API KDint KD_APIENTRY kdRename(const KDchar *src, const KDchar *dest);
> ++
> ++/* kdRemove: Delete a file. */
> ++KD_API KDint KD_APIENTRY kdRemove(const KDchar *pathname);
> ++
> ++/* kdTruncate: Truncate or extend a file. */
> ++KD_API KDint KD_APIENTRY kdTruncate(const KDchar *pathname, KDoff length);
> ++
> ++/* kdStat, kdFstat: Return information about a file. */
> ++typedef struct KDStat {
> ++    KDmode st_mode;
> ++    KDoff st_size;
> ++    KDtime st_mtime;
> ++} KDStat;
> ++KD_API KDint KD_APIENTRY kdStat(const KDchar *pathname, struct KDStat *buf);
> ++KD_API KDint KD_APIENTRY kdFstat(KDFile *file, struct KDStat *buf);
> ++#define KD_ISREG(m) ((m) & 0x8000)
> ++#define KD_ISDIR(m) ((m) & 0x4000)
> ++
> ++/* kdAccess: Determine whether the application can access a file or directory. */
> ++KD_API KDint KD_APIENTRY kdAccess(const KDchar *pathname, KDint amode);
> ++#define KD_R_OK 4
> ++#define KD_W_OK 2
> ++#define KD_X_OK 1
> ++
> ++/* kdOpenDir: Open a directory ready for listing. */
> ++typedef struct KDDir KDDir;
> ++KD_API KDDir *KD_APIENTRY kdOpenDir(const KDchar *pathname);
> ++
> ++/* kdReadDir: Return the next file in a directory. */
> ++typedef struct KDDirent {
> ++    const KDchar *d_name;
> ++} KDDirent;
> ++KD_API KDDirent *KD_APIENTRY kdReadDir(KDDir *dir);
> ++
> ++/* kdCloseDir: Close a directory. */
> ++KD_API KDint KD_APIENTRY kdCloseDir(KDDir *dir);
> ++
> ++/* kdGetFree: Get free space on a drive. */
> ++KD_API KDoff KD_APIENTRY kdGetFree(const KDchar *pathname);
> ++
> ++/*******************************************************
> ++ * Network sockets
> ++ *******************************************************/
> ++
> ++/* KDSockaddr: Struct type for socket address. */
> ++typedef struct KDSockaddr {
> ++    KDuint16 family;
> ++    union {
> ++#define KD_AF_INET 70
> ++        struct {
> ++            KDuint16 port;
> ++            KDuint32 address;
> ++        } sin;
> ++    } data;
> ++} KDSockaddr;
> ++
> ++/* kdNameLookup: Look up a hostname. */
> ++KD_API KDint KD_APIENTRY kdNameLookup(KDint af, const KDchar *hostname, void *eventuserptr);
> ++
> ++/* kdNameLookupCancel: Selectively cancels ongoing kdNameLookup operations. */
> ++KD_API void KD_APIENTRY kdNameLookupCancel(void *eventuserptr);
> ++
> ++/* kdSocketCreate: Creates a socket. */
> ++typedef struct KDSocket KDSocket;
> ++KD_API KDSocket *KD_APIENTRY kdSocketCreate(KDint type, void *eventuserptr);
> ++#define KD_SOCK_TCP 64
> ++#define KD_SOCK_UDP 65
> ++
> ++/* kdSocketClose: Closes a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketClose(KDSocket *socket);
> ++
> ++/* kdSocketBind: Bind a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketBind(KDSocket *socket, const struct KDSockaddr *addr, KDboolean reuse);
> ++#define KD_INADDR_ANY 0
> ++
> ++/* kdSocketGetName: Get the local address of a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketGetName(KDSocket *socket, struct KDSockaddr *addr);
> ++
> ++/* kdSocketConnect: Connects a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketConnect(KDSocket *socket, const KDSockaddr *addr);
> ++
> ++/* kdSocketListen: Listen on a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketListen(KDSocket *socket, KDint backlog);
> ++
> ++/* kdSocketAccept: Accept an incoming connection. */
> ++KD_API KDSocket *KD_APIENTRY kdSocketAccept(KDSocket *socket, KDSockaddr *addr, void *eventuserptr);
> ++
> ++/* kdSocketSend, kdSocketSendTo: Send data to a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketSend(KDSocket *socket, const void *buf, KDint len);
> ++KD_API KDint KD_APIENTRY kdSocketSendTo(KDSocket *socket, const void *buf, KDint len, const KDSockaddr *addr);
> ++
> ++/* kdSocketRecv, kdSocketRecvFrom: Receive data from a socket. */
> ++KD_API KDint KD_APIENTRY kdSocketRecv(KDSocket *socket, void *buf, KDint len);
> ++KD_API KDint KD_APIENTRY kdSocketRecvFrom(KDSocket *socket, void *buf, KDint len, KDSockaddr *addr);
> ++
> ++/* kdHtonl: Convert a 32-bit integer from host to network byte order. */
> ++KD_API KDuint32 KD_APIENTRY kdHtonl(KDuint32 hostlong);
> ++
> ++/* kdHtons: Convert a 16-bit integer from host to network byte order. */
> ++KD_API KDuint16 KD_APIENTRY kdHtons(KDuint16 hostshort);
> ++
> ++/* kdNtohl: Convert a 32-bit integer from network to host byte order. */
> ++KD_API KDuint32 KD_APIENTRY kdNtohl(KDuint32 netlong);
> ++
> ++/* kdNtohs: Convert a 16-bit integer from network to host byte order. */
> ++KD_API KDuint16 KD_APIENTRY kdNtohs(KDuint16 netshort);
> ++
> ++/* kdInetAton: Convert a “dotted quad” format address to an integer. */
> ++KD_API KDint KD_APIENTRY kdInetAton(const KDchar *cp, KDuint32 *inp);
> ++
> ++/* kdInetNtop: Convert a network address to textual form. */
> ++#define KD_INET_ADDRSTRLEN 16
> ++typedef struct KDInAddr {
> ++    KDuint32 s_addr;
> ++} KDInAddr;
> ++KD_API const KDchar *KD_APIENTRY kdInetNtop(KDuint af, const void *src, KDchar *dst, KDsize cnt);
> ++
> ++/* KD_EVENT_SOCKET_READABLE: Event to indicate that a socket is readable. */
> ++#define KD_EVENT_SOCKET_READABLE 49
> ++typedef struct KDEventSocketReadable {
> ++    KDSocket *socket;
> ++} KDEventSocketReadable;
> ++
> ++/* KD_EVENT_SOCKET_WRITABLE: Event to indicate that a socket is writable. */
> ++#define KD_EVENT_SOCKET_WRITABLE 50
> ++typedef struct KDEventSocketWritable {
> ++    KDSocket *socket;
> ++} KDEventSocketWritable;
> ++
> ++/* KD_EVENT_SOCKET_CONNECT_COMPLETE: Event generated when a socket connect is complete */
> ++#define KD_EVENT_SOCKET_CONNECT_COMPLETE 51
> ++typedef struct KDEventSocketConnect {
> ++    KDSocket *socket;
> ++    KDint32 error;
> ++} KDEventSocketConnect;
> ++
> ++/* KD_EVENT_SOCKET_INCOMING: Event generated when a listening socket detects an incoming connection or an error. */
> ++#define KD_EVENT_SOCKET_INCOMING 52
> ++typedef struct KDEventSocketIncoming {
> ++    KDSocket *socket;
> ++} KDEventSocketIncoming;
> ++
> ++/* KD_EVENT_NAME_LOOKUP_COMPLETE: kdNameLookup complete event. */
> ++#define KD_EVENT_NAME_LOOKUP_COMPLETE 53
> ++typedef struct KDEventNameLookup {
> ++    KDint32 error;
> ++    KDint32 resultlen;
> ++    const KDSockaddr *result;
> ++    KDboolean more;
> ++} KDEventNameLookup;
> ++
> ++/*******************************************************
> ++ * Input/output
> ++ *******************************************************/
> ++
> ++/* KD_EVENT_STATE: State changed event. */
> ++#define KD_EVENT_STATE 55
> ++
> ++typedef struct KDEventState {
> ++    KDint32 index;
> ++    union {
> ++        KDint32 i;
> ++        KDint64 l;
> ++        KDfloat32 f;
> ++    } value;
> ++} KDEventState;
> ++
> ++/* KD_EVENT_INPUT: Input changed event. */
> ++#define KD_EVENT_INPUT 56
> ++
> ++typedef struct KDEventInput {
> ++    KDint32 index;
> ++    union {
> ++        KDint32 i;
> ++        KDint64 l;
> ++        KDfloat32 f;
> ++    } value;
> ++} KDEventInput;
> ++
> ++/* KD_EVENT_INPUT_JOG: Jogdial jog event. */
> ++#define KD_EVENT_INPUT_JOG 71
> ++typedef struct KDEventInputJog {
> ++    KDint32 index;
> ++    KDint32 count;
> ++} KDEventInputJog;
> ++
> ++/* KD_EVENT_INPUT_POINTER: Pointer input changed event. */
> ++#define KD_EVENT_INPUT_POINTER 57
> ++typedef struct KDEventInputPointer {
> ++    KDint32 index;
> ++    KDint32 select;
> ++    KDint32 x;
> ++    KDint32 y;
> ++} KDEventInputPointer;
> ++
> ++/* KD_EVENT_INPUT_STICK: Joystick stick changed event. */
> ++#define KD_EVENT_INPUT_STICK 58
> ++typedef struct KDEventInputStick {
> ++    KDint32 index;
> ++    KDint32 x;
> ++    KDint32 y;
> ++    KDint32 z;
> ++} KDEventInputStick;
> ++
> ++/* kdStateGeti, kdStateGetl, kdStateGetf: get state value(s) */
> ++KD_API KDint KD_APIENTRY kdStateGeti(KDint startidx, KDuint numidxs, KDint32 *buffer);
> ++KD_API KDint KD_APIENTRY kdStateGetl(KDint startidx, KDuint numidxs, KDint64 *buffer);
> ++KD_API KDint KD_APIENTRY kdStateGetf(KDint startidx, KDuint numidxs, KDfloat32 *buffer);
> ++
> ++/* kdOutputSeti, kdOutputSetf: set outputs */
> ++KD_API KDint KD_APIENTRY kdOutputSeti(KDint startidx, KDuint numidxs, const KDint32 *buffer);
> ++KD_API KDint KD_APIENTRY kdOutputSetf(KDint startidx, KDuint numidxs, const KDfloat32 *buffer);
> ++#define KD_IO_CONTROLLER_STRIDE 64
> ++
> ++/* KD_IOGROUP_GAMEKEYS: I/O group for game keys. */
> ++#define KD_IOGROUP_GAMEKEYS 0x1000
> ++#define KD_STATE_GAMEKEYS_AVAILABILITY    (KD_IOGROUP_GAMEKEYS + 0)
> ++#define KD_INPUT_GAMEKEYS_UP              (KD_IOGROUP_GAMEKEYS + 1)
> ++#define KD_INPUT_GAMEKEYS_LEFT            (KD_IOGROUP_GAMEKEYS + 2)
> ++#define KD_INPUT_GAMEKEYS_RIGHT           (KD_IOGROUP_GAMEKEYS + 3)
> ++#define KD_INPUT_GAMEKEYS_DOWN            (KD_IOGROUP_GAMEKEYS + 4)
> ++#define KD_INPUT_GAMEKEYS_FIRE            (KD_IOGROUP_GAMEKEYS + 5)
> ++#define KD_INPUT_GAMEKEYS_A               (KD_IOGROUP_GAMEKEYS + 6)
> ++#define KD_INPUT_GAMEKEYS_B               (KD_IOGROUP_GAMEKEYS + 7)
> ++#define KD_INPUT_GAMEKEYS_C               (KD_IOGROUP_GAMEKEYS + 8)
> ++#define KD_INPUT_GAMEKEYS_D               (KD_IOGROUP_GAMEKEYS + 9)
> ++
> ++/* KD_IOGROUP_GAMEKEYSNC: I/O group for game keys, no chording. */
> ++#define KD_IOGROUP_GAMEKEYSNC 0x1100
> ++#define KD_STATE_GAMEKEYSNC_AVAILABILITY  (KD_IOGROUP_GAMEKEYSNC + 0)
> ++#define KD_INPUT_GAMEKEYSNC_UP            (KD_IOGROUP_GAMEKEYSNC + 1)
> ++#define KD_INPUT_GAMEKEYSNC_LEFT          (KD_IOGROUP_GAMEKEYSNC + 2)
> ++#define KD_INPUT_GAMEKEYSNC_RIGHT         (KD_IOGROUP_GAMEKEYSNC + 3)
> ++#define KD_INPUT_GAMEKEYSNC_DOWN          (KD_IOGROUP_GAMEKEYSNC + 4)
> ++#define KD_INPUT_GAMEKEYSNC_FIRE          (KD_IOGROUP_GAMEKEYSNC + 5)
> ++#define KD_INPUT_GAMEKEYSNC_A             (KD_IOGROUP_GAMEKEYSNC + 6)
> ++#define KD_INPUT_GAMEKEYSNC_B             (KD_IOGROUP_GAMEKEYSNC + 7)
> ++#define KD_INPUT_GAMEKEYSNC_C             (KD_IOGROUP_GAMEKEYSNC + 8)
> ++#define KD_INPUT_GAMEKEYSNC_D             (KD_IOGROUP_GAMEKEYSNC + 9)
> ++
> ++/* KD_IOGROUP_PHONEKEYPAD: I/O group for phone keypad. */
> ++#define KD_IOGROUP_PHONEKEYPAD 0x2000
> ++#define KD_STATE_PHONEKEYPAD_AVAILABILITY  (KD_IOGROUP_PHONEKEYPAD + 0)
> ++#define KD_INPUT_PHONEKEYPAD_0             (KD_IOGROUP_PHONEKEYPAD + 1)
> ++#define KD_INPUT_PHONEKEYPAD_1             (KD_IOGROUP_PHONEKEYPAD + 2)
> ++#define KD_INPUT_PHONEKEYPAD_2             (KD_IOGROUP_PHONEKEYPAD + 3)
> ++#define KD_INPUT_PHONEKEYPAD_3             (KD_IOGROUP_PHONEKEYPAD + 4)
> ++#define KD_INPUT_PHONEKEYPAD_4             (KD_IOGROUP_PHONEKEYPAD + 5)
> ++#define KD_INPUT_PHONEKEYPAD_5             (KD_IOGROUP_PHONEKEYPAD + 6)
> ++#define KD_INPUT_PHONEKEYPAD_6             (KD_IOGROUP_PHONEKEYPAD + 7)
> ++#define KD_INPUT_PHONEKEYPAD_7             (KD_IOGROUP_PHONEKEYPAD + 8)
> ++#define KD_INPUT_PHONEKEYPAD_8             (KD_IOGROUP_PHONEKEYPAD + 9)
> ++#define KD_INPUT_PHONEKEYPAD_9             (KD_IOGROUP_PHONEKEYPAD + 10)
> ++#define KD_INPUT_PHONEKEYPAD_STAR          (KD_IOGROUP_PHONEKEYPAD + 11)
> ++#define KD_INPUT_PHONEKEYPAD_HASH          (KD_IOGROUP_PHONEKEYPAD + 12)
> ++#define KD_INPUT_PHONEKEYPAD_LEFTSOFT      (KD_IOGROUP_PHONEKEYPAD + 13)
> ++#define KD_INPUT_PHONEKEYPAD_RIGHTSOFT     (KD_IOGROUP_PHONEKEYPAD + 14)
> ++#define KD_STATE_PHONEKEYPAD_ORIENTATION   (KD_IOGROUP_PHONEKEYPAD + 15)
> ++
> ++/* KD_IOGROUP_VIBRATE: I/O group for vibrate. */
> ++#define KD_IOGROUP_VIBRATE 0x3000
> ++#define KD_STATE_VIBRATE_AVAILABILITY  (KD_IOGROUP_VIBRATE + 0)
> ++#define KD_STATE_VIBRATE_MINFREQUENCY  (KD_IOGROUP_VIBRATE + 1)
> ++#define KD_STATE_VIBRATE_MAXFREQUENCY  (KD_IOGROUP_VIBRATE + 2)
> ++#define KD_OUTPUT_VIBRATE_VOLUME        (KD_IOGROUP_VIBRATE + 3)
> ++#define KD_OUTPUT_VIBRATE_FREQUENCY     (KD_IOGROUP_VIBRATE + 4)
> ++
> ++/* KD_IOGROUP_POINTER: I/O group for pointer. */
> ++#define KD_IOGROUP_POINTER 0x4000
> ++#define KD_STATE_POINTER_AVAILABILITY  (KD_IOGROUP_POINTER + 0)
> ++#define KD_INPUT_POINTER_X             (KD_IOGROUP_POINTER + 1)
> ++#define KD_INPUT_POINTER_Y             (KD_IOGROUP_POINTER + 2)
> ++#define KD_INPUT_POINTER_SELECT        (KD_IOGROUP_POINTER + 3)
> ++
> ++/* KD_IOGROUP_BACKLIGHT: I/O group for backlight. */
> ++#define KD_IOGROUP_BACKLIGHT 0x5000
> ++#define KD_STATE_BACKLIGHT_AVAILABILITY (KD_IOGROUP_BACKLIGHT + 0)
> ++#define KD_OUTPUT_BACKLIGHT_FORCE (KD_IOGROUP_BACKLIGHT + 1)
> ++
> ++/* KD_IOGROUP_JOGDIAL: I/O group for a jog dial. */
> ++#define KD_IOGROUP_JOGDIAL 0x6000
> ++#define KD_STATE_JOGDIAL_AVAILABILITY  (KD_IOGROUP_JOGDIAL + 0)
> ++#define KD_INPUT_JOGDIAL_UP            (KD_IOGROUP_JOGDIAL + 1)
> ++#define KD_INPUT_JOGDIAL_LEFT          (KD_IOGROUP_JOGDIAL + 2)
> ++#define KD_INPUT_JOGDIAL_RIGHT         (KD_IOGROUP_JOGDIAL + 3)
> ++#define KD_INPUT_JOGDIAL_DOWN          (KD_IOGROUP_JOGDIAL + 4)
> ++#define KD_INPUT_JOGDIAL_SELECT        (KD_IOGROUP_JOGDIAL + 5)
> ++
> ++/* KD_IOGROUP_STICK: I/O group for joystick. */
> ++#define KD_IOGROUP_STICK 0x7000
> ++#define KD_STATE_STICK_AVAILABILITY    (KD_IOGROUP_STICK + 0)
> ++#define KD_INPUT_STICK_X               (KD_IOGROUP_STICK + 1)
> ++#define KD_INPUT_STICK_Y               (KD_IOGROUP_STICK + 2)
> ++#define KD_INPUT_STICK_Z               (KD_IOGROUP_STICK + 3)
> ++#define KD_INPUT_STICK_BUTTON          (KD_IOGROUP_STICK + 4)
> ++#define KD_IO_STICK_STRIDE 8
> ++
> ++/* KD_IOGROUP_DPAD: I/O group for D-pad. */
> ++#define KD_IOGROUP_DPAD 0x8000
> ++#define KD_STATE_DPAD_AVAILABILITY     (KD_IOGROUP_DPAD + 0)
> ++#define KD_STATE_DPAD_COPY             (KD_IOGROUP_DPAD + 1)
> ++#define KD_INPUT_DPAD_UP               (KD_IOGROUP_DPAD + 2)
> ++#define KD_INPUT_DPAD_LEFT             (KD_IOGROUP_DPAD + 3)
> ++#define KD_INPUT_DPAD_RIGHT            (KD_IOGROUP_DPAD + 4)
> ++#define KD_INPUT_DPAD_DOWN             (KD_IOGROUP_DPAD + 5)
> ++#define KD_INPUT_DPAD_SELECT           (KD_IOGROUP_DPAD + 6)
> ++#define KD_IO_DPAD_STRIDE 8
> ++
> ++/* KD_IOGROUP_BUTTONS: I/O group for buttons associated with joystick or D-pad. */
> ++#define KD_IOGROUP_BUTTONS 0x9000
> ++#define KD_STATE_BUTTONS_AVAILABILITY  (KD_IOGROUP_BUTTONS + 0)
> ++#define KD_INPUT_BUTTONS_0             (KD_IOGROUP_BUTTONS + 1)
> ++
> ++/* KD_IO_UNDEFINED: I/O items reserved for implementation-dependent use. */
> ++#define KD_IO_UNDEFINED 0x40000000
> ++
> ++/*******************************************************
> ++ * Windowing
> ++ *******************************************************/
> ++#ifdef KD_WINDOW_SUPPORTED
> ++#include <EGL/egl.h>
> ++typedef struct KDWindow KDWindow;
> ++
> ++/* kdCreateWindow: Create a window. */
> ++KD_API KDWindow *KD_APIENTRY kdCreateWindow(EGLDisplay display, EGLConfig config, void *eventuserptr);
> ++
> ++/* kdDestroyWindow: Destroy a window. */
> ++KD_API KDint KD_APIENTRY kdDestroyWindow(KDWindow *window);
> ++
> ++/* kdSetWindowPropertybv, kdSetWindowPropertyiv, kdSetWindowPropertycv: Set a window property to request a change in the on-screen representation of the window. */
> ++KD_API KDint KD_APIENTRY kdSetWindowPropertybv(KDWindow *window, KDint pname, const KDboolean *param);
> ++KD_API KDint KD_APIENTRY kdSetWindowPropertyiv(KDWindow *window, KDint pname, const KDint32 *param);
> ++KD_API KDint KD_APIENTRY kdSetWindowPropertycv(KDWindow *window, KDint pname, const KDchar *param);
> ++
> ++/* kdGetWindowPropertybv, kdGetWindowPropertyiv, kdGetWindowPropertycv: Get the current value of a window property. */
> ++KD_API KDint KD_APIENTRY kdGetWindowPropertybv(KDWindow *window, KDint pname, KDboolean *param);
> ++KD_API KDint KD_APIENTRY kdGetWindowPropertyiv(KDWindow *window, KDint pname, KDint32 *param);
> ++KD_API KDint KD_APIENTRY kdGetWindowPropertycv(KDWindow *window, KDint pname, KDchar *param, KDsize *size);
> ++
> ++/* kdRealizeWindow: Realize the window as a displayable entity and get the native window handle for passing to EGL. */
> ++KD_API KDint KD_APIENTRY kdRealizeWindow(KDWindow *window, EGLNativeWindowType *nativewindow);
> ++
> ++/* KD_WINDOWPROPERTY_SIZE: Window client area width and height. */
> ++#define KD_WINDOWPROPERTY_SIZE 66
> ++
> ++/* KD_WINDOWPROPERTY_VISIBILITY: Window visibility status. */
> ++#define KD_WINDOWPROPERTY_VISIBILITY 67
> ++
> ++/* KD_WINDOWPROPERTY_FOCUS: Window input focus status. */
> ++#define KD_WINDOWPROPERTY_FOCUS 68
> ++
> ++/* KD_WINDOWPROPERTY_CAPTION: Window caption. */
> ++#define KD_WINDOWPROPERTY_CAPTION 69
> ++
> ++/* KD_EVENT_WINDOW_CLOSE: Event to request to close window. */
> ++#define KD_EVENT_WINDOW_CLOSE 44
> ++
> ++/* KD_EVENT_WINDOWPROPERTY_CHANGE: Notification about realized window property change. */
> ++#define KD_EVENT_WINDOWPROPERTY_CHANGE 47
> ++typedef struct KDEventWindowProperty {
> ++    KDint32 pname;
> ++} KDEventWindowProperty;
> ++
> ++/* KD_EVENT_WINDOW_FOCUS: Event for change of window’s focus state. */
> ++#define KD_EVENT_WINDOW_FOCUS 60
> ++typedef struct KDEventWindowFocus {
> ++    KDint32 focusstate;
> ++} KDEventWindowFocus;
> ++
> ++/* KD_EVENT_WINDOW_REDRAW: Event to notify need to redraw the window. */
> ++#define KD_EVENT_WINDOW_REDRAW 59
> ++#endif /* KD_WINDOW_SUPPORTED */
> ++
> ++/*******************************************************
> ++ * Assertions and logging
> ++ *******************************************************/
> ++
> ++/* kdHandleAssertion: Handle assertion failure. */
> ++KD_API void KD_APIENTRY kdHandleAssertion(const KDchar *condition, const KDchar *filename, KDint linenumber);
> ++
> ++/* kdLogMessage: Output a log message. */
> ++#ifdef KD_NDEBUG
> ++#define kdLogMessage(s)
> ++#else
> ++KD_API void KD_APIENTRY kdLogMessage(const KDchar *string);
> ++#endif
> ++
> ++/* struct KDEvent delayed to the end as it uses event data structs from
> ++ * other parts of the .h file. */
> ++struct KDEvent {
> ++    KDust timestamp;
> ++    KDint32 type;
> ++    void *userptr;
> ++    union KDEventData {
> ++        KDEventState state;
> ++        KDEventInput input;
> ++        KDEventInputJog inputjog;
> ++        KDEventInputPointer inputpointer;
> ++        KDEventInputStick inputstick;
> ++        KDEventSocketReadable socketreadable;
> ++        KDEventSocketWritable socketwritable;
> ++        KDEventSocketConnect socketconnect;
> ++        KDEventSocketIncoming socketincoming;
> ++        KDEventNameLookup namelookup;
> ++#ifdef KD_WINDOW_SUPPORTED
> ++        KDEventWindowProperty windowproperty;
> ++        KDEventWindowFocus windowfocus;
> ++#endif /* KD_WINDOW_SUPPORTED */
> ++        KDEventUser user;
> ++    } data;
> ++};
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __kd_h_ */
> ++
> +diff -rupN a/usr/include/KD/kdplatform.h b/usr/include/KD/kdplatform.h
> +--- a/usr/include/KD/kdplatform.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KD/kdplatform.h	2013-10-02 03:16:58.000000000 +0200
> +@@ -0,0 +1,37 @@
> ++/* Sample KD/kdplatform.h for OpenKODE Core 1.0.3  */
> ++#ifndef __kdplatform_h_
> ++#define __kdplatform_h_
> ++
> ++#define KD_API
> ++#define KD_APIENTRY
> ++
> ++typedef int KDint32;
> ++typedef unsigned int KDuint32;
> ++typedef long long KDint64;
> ++typedef unsigned long long KDuint64;
> ++typedef short KDint16;
> ++typedef unsigned short KDuint16;
> ++typedef unsigned long KDuintptr;
> ++typedef unsigned long KDsize;
> ++typedef long KDssize;
> ++#define KDINT_MIN (-0x7fffffff-1)
> ++#define KDINT_MAX 0x7fffffff
> ++#define KDUINT_MAX 0xffffffffU
> ++#define KDINT64_MIN (-0x7fffffffffffffffLL-1)
> ++#define KDINT64_MAX 0x7fffffffffffffffLL
> ++#define KDUINT64_MAX 0xffffffffffffffffULL
> ++#define KDSSIZE_MIN (-0x7fffffff-1)
> ++#define KDSSIZE_MAX 0x7fffffff
> ++#define KDSIZE_MAX 0xffffffffU
> ++#define KDUINTPTR_MAX 0xffffffffU
> ++#define KD_NORETURN
> ++#define KD_INFINITY (1.0F/0.0F)
> ++#define KD_WINDOW_SUPPORTED
> ++#ifdef KD_NDEBUG
> ++#define kdAssert(c)
> ++#else
> ++#define kdAssert(c) ((void)( (c) ? 0 : (kdHandleAssertion(#c, __FILE__, __LINE__), 0)))
> ++#endif
> ++
> ++#endif /* __kdplatform_h_ */
> ++
> +diff -rupN a/usr/include/KD/KHR_float64.h b/usr/include/KD/KHR_float64.h
> +--- a/usr/include/KD/KHR_float64.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KD/KHR_float64.h	2013-10-02 03:16:58.000000000 +0200
> +@@ -0,0 +1,66 @@
> ++
> ++/*******************************************************
> ++ * OpenKODE Core extension: KD_KHR_float64
> ++ *******************************************************/
> ++/* Sample KD/KHR_float64.h for OpenKODE Core */
> ++#ifndef __kd_KHR_float64_h_
> ++#define __kd_KHR_float64_h_
> ++#include <KD/kd.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++typedef double KDfloat64KHR;
> ++#define KD_E_KHR 2.718281828459045235
> ++#define KD_PI_KHR 3.141592653589793239
> ++#define KD_PI_2_KHR 1.570796326794896619
> ++#define KD_2PI_KHR 6.283185307179586477
> ++#define KD_LOG2E_KHR 1.442695040888963407
> ++#define KD_LOG10E_KHR 0.4342944819032518276
> ++#define KD_LN2_KHR 0.6931471805599453094
> ++#define KD_LN10_KHR 2.302585092994045684
> ++#define KD_PI_4_KHR 0.7853981633974483096
> ++#define KD_1_PI_KHR 0.3183098861837906715
> ++#define KD_2_PI_KHR 0.6366197723675813431
> ++#define KD_2_SQRTPI_KHR 1.128379167095512574
> ++#define KD_SQRT2_KHR 1.414213562373095049
> ++#define KD_SQRT1_2_KHR 0.7071067811865475244
> ++#define KD_DBL_EPSILON_KHR 2.2204460492503131e-16
> ++#define KD_DBL_MAX_KHR 1.7976931348623157e+308
> ++#define KD_DBL_MIN_KHR 2.2250738585072014e-308
> ++#define KD_HUGE_VAL_KHR (1.0/0.0)
> ++#define KD_DEG_TO_RAD_KHR 0.01745329251994329577
> ++#define KD_RAD_TO_DEG_KHR 57.29577951308232088
> ++KD_API KDfloat64KHR KD_APIENTRY kdAcosKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdAsinKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdAtanKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdAtan2KHR(KDfloat64KHR y, KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdCosKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdSinKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdTanKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdExpKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdLogKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdFabsKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdPowKHR(KDfloat64KHR x, KDfloat64KHR y);
> ++KD_API KDfloat64KHR KD_APIENTRY kdSqrtKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdCeilKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdFloorKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdRoundKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdInvsqrtKHR(KDfloat64KHR x);
> ++KD_API KDfloat64KHR KD_APIENTRY kdFmodKHR(KDfloat64KHR x, KDfloat64KHR y);
> ++
> ++/* kdStrtodKHR: Convert a string to a 64-bit floating point number. */
> ++KD_API KDfloat64KHR KD_APIENTRY kdStrtodKHR(const KDchar *s, KDchar **endptr);
> ++
> ++/* kdDtostrKHR: Convert a 64-bit float to a string. */
> ++#define KD_DTOSTR_MAXLEN_KHR 25
> ++KD_API KDssize KD_APIENTRY kdDtostrKHR(KDchar *buffer, KDsize buflen, KDfloat64KHR number);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __kd_KHR_float64_h_ */
> ++
> +diff -rupN a/usr/include/KD/KHR_formatted.h b/usr/include/KD/KHR_formatted.h
> +--- a/usr/include/KD/KHR_formatted.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KD/KHR_formatted.h	2013-10-02 03:16:58.000000000 +0200
> +@@ -0,0 +1,43 @@
> ++
> ++/*******************************************************
> ++ * OpenKODE Core extension: KD_KHR_formatted
> ++ *******************************************************/
> ++/* Sample KD/KHR_formatted.h for OpenKODE Core */
> ++#ifndef __kd_KHR_formatted_h_
> ++#define __kd_KHR_formatted_h_
> ++#include <KD/kd.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++typedef void *KDVaListKHR; /* example implementation only */
> ++
> ++/* kdSnprintfKHR, kdVsnprintfKHR, kdSprintfKHR, kdVsprintfKHR: Formatted output to a buffer. */
> ++KD_API KDint KD_APIENTRY kdSnprintfKHR(KDchar *buf, KDsize bufsize, const KDchar *format, ...);
> ++KD_API KDint KD_APIENTRY kdVsnprintfKHR(KDchar *buf, KDsize bufsize, const KDchar *format, KDVaListKHR ap);
> ++KD_API KDint KD_APIENTRY kdSprintfKHR(KDchar *buf, const KDchar *format, ...);
> ++KD_API KDint KD_APIENTRY kdVsprintfKHR(KDchar *buf, const KDchar *format, KDVaListKHR ap);
> ++
> ++/* kdFprintfKHR, kdVfprintfKHR: Formatted output to an open file. */
> ++KD_API KDint KD_APIENTRY kdFprintfKHR(KDFile *file, const KDchar *format, ...);
> ++KD_API KDint KD_APIENTRY kdVfprintfKHR(KDFile *file, const KDchar *format, KDVaListKHR ap);
> ++
> ++/* kdLogMessagefKHR: Formatted output to the platform’s debug logging facility. */
> ++KD_API KDint KD_APIENTRY kdLogMessagefKHR(const KDchar *format, ...);
> ++
> ++/* kdSscanfKHR, kdVsscanfKHR: Read formatted input from a buffer. */
> ++KD_API KDint KD_APIENTRY kdSscanfKHR(const KDchar *str, const KDchar *format, ...);
> ++KD_API KDint KD_APIENTRY kdVsscanfKHR(const KDchar *str, const KDchar *format, KDVaListKHR ap);
> ++
> ++/* kdFscanfKHR, kdVfscanfKHR: Read formatted input from a file. */
> ++KD_API KDint KD_APIENTRY kdFscanfKHR(KDFile *file, const KDchar *format, ...);
> ++KD_API KDint KD_APIENTRY kdVfscanfKHR(KDFile *file, const KDchar *format, KDVaListKHR ap);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __kd_KHR_formatted_h_ */
> ++
> +diff -rupN a/usr/include/KD/KHR_perfcounter.h b/usr/include/KD/KHR_perfcounter.h
> +--- a/usr/include/KD/KHR_perfcounter.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KD/KHR_perfcounter.h	2013-10-02 03:16:58.000000000 +0200
> +@@ -0,0 +1,54 @@
> ++
> ++/*******************************************************
> ++ * OpenKODE Core extension: KD_KHR_perfcounter
> ++ *******************************************************/
> ++/* Sample KD/KHR_perfcounter.h for OpenKODE Core */
> ++#ifndef __kd_KHR_perfcounter_h_
> ++#define __kd_KHR_perfcounter_h_
> ++#include <KD/kd.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++#define KD_INFINITE_COUNTER_VAL_KHR (KDINT64_MAX)
> ++#define KD_UNKNOWN_COUNTER_VAL_KHR (-1)
> ++
> ++/* KDCounterInfoKHR: Information on a single performance counter. */
> ++typedef struct KDCounterInfoKHR {
> ++    const KDchar *vendorName;
> ++    const KDchar *name;
> ++    const KDchar *description;
> ++    KDint64 minValue;
> ++    KDint64 maxValue;
> ++    KDfloat32 defaultScale;
> ++} KDCounterInfoKHR;
> ++
> ++/* kdGetNumberOfCountersKHR: Return the number of performance counters. */
> ++KD_API KDint KD_APIENTRY kdGetNumberOfCountersKHR(void);
> ++
> ++/* kdGetCounterInformationKHR: Retrieve information on a performance counter. */
> ++KD_API const KDCounterInfoKHR *KD_APIENTRY kdGetCounterInformationKHR(KDint index);
> ++
> ++/* kdActivateCountersKHR: Make counters active. */
> ++KD_API KDint KD_APIENTRY kdActivateCountersKHR(const KDint *indexes, KDint numindexes);
> ++
> ++/* kdDeactivateCountersKHR: Makes counters inactive. */
> ++KD_API KDint KD_APIENTRY kdDeactivateCountersKHR(const KDint *indexes, KDint numindexes);
> ++
> ++/* kdStartSamplingKHR: Start the performance counters sampling. */
> ++KD_API KDint KD_APIENTRY kdStartSamplingKHR(void);
> ++
> ++/* kdStopSamplingKHR: Stop the performance counters sampling. */
> ++KD_API KDint KD_APIENTRY kdStopSamplingKHR(void);
> ++
> ++/* kdGetCounterValuesKHR: Retrieves list of counter values. */
> ++KD_API KDint KD_APIENTRY kdGetCounterValuesKHR(const KDint *indexes, KDint numindexes, KDint64 *values);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __kd_KHR_perfcounter_h_ */
> ++
> +diff -rupN a/usr/include/KD/KHR_thread_storage.h b/usr/include/KD/KHR_thread_storage.h
> +--- a/usr/include/KD/KHR_thread_storage.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KD/KHR_thread_storage.h	2013-10-02 03:16:58.000000000 +0200
> +@@ -0,0 +1,33 @@
> ++
> ++/*******************************************************
> ++ * OpenKODE Core extension: KD_KHR_thread_storage
> ++ *******************************************************/
> ++/* Sample KD/KHR_thread_storage.h for OpenKODE Core */
> ++#ifndef __kd_KHR_thread_storage_h_
> ++#define __kd_KHR_thread_storage_h_
> ++#include <KD/kd.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++
> ++/* KDThreadStorageKeyKHR: The representation of a thread storage key. */
> ++typedef KDuint32 KDThreadStorageKeyKHR;
> ++
> ++/* kdMapThreadStorageKHR: Maps an arbitrary pointer to a global thread storage key. */
> ++KD_API KDThreadStorageKeyKHR KD_APIENTRY KD_APIENTRY kdMapThreadStorageKHR(const void * id);
> ++
> ++/* kdSetThreadStorageKHR: Stores thread-local data. */
> ++KD_API KDint KD_APIENTRY KD_APIENTRY kdSetThreadStorageKHR(KDThreadStorageKeyKHR key, void * data);
> ++
> ++/* kdGetThreadStorageKHR: Retrieves previously stored thread-local data. */
> ++KD_API void * KD_APIENTRY KD_APIENTRY kdGetThreadStorageKHR(KDThreadStorageKeyKHR key);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* __kd_KHR_thread_storage_h_ */
> ++
> +diff -rupN a/usr/include/KHR/khrplatform.h b/usr/include/KHR/khrplatform.h
> +--- a/usr/include/KHR/khrplatform.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/KHR/khrplatform.h	2013-10-09 09:57:33.000000000 +0200
> +@@ -0,0 +1,282 @@
> ++#ifndef __khrplatform_h_
> ++#define __khrplatform_h_
> ++
> ++/*
> ++** Copyright (c) 2008-2009 The Khronos Group Inc.
> ++**
> ++** Permission is hereby granted, free of charge, to any person obtaining a
> ++** copy of this software and/or associated documentation files (the
> ++** "Materials"), to deal in the Materials without restriction, including
> ++** without limitation the rights to use, copy, modify, merge, publish,
> ++** distribute, sublicense, and/or sell copies of the Materials, and to
> ++** permit persons to whom the Materials are furnished to do so, subject to
> ++** the following conditions:
> ++**
> ++** The above copyright notice and this permission notice shall be included
> ++** in all copies or substantial portions of the Materials.
> ++**
> ++** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ++** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
> ++*/
> ++
> ++/* Khronos platform-specific types and definitions.
> ++ *
> ++ * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $
> ++ *
> ++ * Adopters may modify this file to suit their platform. Adopters are
> ++ * encouraged to submit platform specific modifications to the Khronos
> ++ * group so that they can be included in future versions of this file.
> ++ * Please submit changes by sending them to the public Khronos Bugzilla
> ++ * (http://khronos.org/bugzilla) by filing a bug against product
> ++ * "Khronos (general)" component "Registry".
> ++ *
> ++ * A predefined template which fills in some of the bug fields can be
> ++ * reached using http://tinyurl.com/khrplatform-h-bugreport, but you
> ++ * must create a Bugzilla login first.
> ++ *
> ++ *
> ++ * See the Implementer's Guidelines for information about where this file
> ++ * should be located on your system and for more details of its use:
> ++ *    http://www.khronos.org/registry/implementers_guide.pdf
> ++ *
> ++ * This file should be included as
> ++ *        #include <KHR/khrplatform.h>
> ++ * by Khronos client API header files that use its types and defines.
> ++ *
> ++ * The types in khrplatform.h should only be used to define API-specific types.
> ++ *
> ++ * Types defined in khrplatform.h:
> ++ *    khronos_int8_t              signed   8  bit
> ++ *    khronos_uint8_t             unsigned 8  bit
> ++ *    khronos_int16_t             signed   16 bit
> ++ *    khronos_uint16_t            unsigned 16 bit
> ++ *    khronos_int32_t             signed   32 bit
> ++ *    khronos_uint32_t            unsigned 32 bit
> ++ *    khronos_int64_t             signed   64 bit
> ++ *    khronos_uint64_t            unsigned 64 bit
> ++ *    khronos_intptr_t            signed   same number of bits as a pointer
> ++ *    khronos_uintptr_t           unsigned same number of bits as a pointer
> ++ *    khronos_ssize_t             signed   size
> ++ *    khronos_usize_t             unsigned size
> ++ *    khronos_float_t             signed   32 bit floating point
> ++ *    khronos_time_ns_t           unsigned 64 bit time in nanoseconds
> ++ *    khronos_utime_nanoseconds_t unsigned time interval or absolute time in
> ++ *                                         nanoseconds
> ++ *    khronos_stime_nanoseconds_t signed time interval in nanoseconds
> ++ *    khronos_boolean_enum_t      enumerated boolean type. This should
> ++ *      only be used as a base type when a client API's boolean type is
> ++ *      an enum. Client APIs which use an integer or other type for
> ++ *      booleans cannot use this as the base type for their boolean.
> ++ *
> ++ * Tokens defined in khrplatform.h:
> ++ *
> ++ *    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
> ++ *
> ++ *    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
> ++ *    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
> ++ *
> ++ * Calling convention macros defined in this file:
> ++ *    KHRONOS_APICALL
> ++ *    KHRONOS_APIENTRY
> ++ *    KHRONOS_APIATTRIBUTES
> ++ *
> ++ * These may be used in function prototypes as:
> ++ *
> ++ *      KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
> ++ *                                  int arg1,
> ++ *                                  int arg2) KHRONOS_APIATTRIBUTES;
> ++ */
> ++
> ++/*-------------------------------------------------------------------------
> ++ * Definition of KHRONOS_APICALL
> ++ *-------------------------------------------------------------------------
> ++ * This precedes the return type of the function in the function prototype.
> ++ */
> ++#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
> ++#   define KHRONOS_APICALL __declspec(dllimport)
> ++#elif defined (__SYMBIAN32__)
> ++#   define KHRONOS_APICALL IMPORT_C
> ++#else
> ++#   define KHRONOS_APICALL
> ++#endif
> ++
> ++/*-------------------------------------------------------------------------
> ++ * Definition of KHRONOS_APIENTRY
> ++ *-------------------------------------------------------------------------
> ++ * This follows the return type of the function  and precedes the function
> ++ * name in the function prototype.
> ++ */
> ++#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
> ++    /* Win32 but not WinCE */
> ++#   define KHRONOS_APIENTRY __stdcall
> ++#else
> ++#   define KHRONOS_APIENTRY
> ++#endif
> ++
> ++/*-------------------------------------------------------------------------
> ++ * Definition of KHRONOS_APIATTRIBUTES
> ++ *-------------------------------------------------------------------------
> ++ * This follows the closing parenthesis of the function prototype arguments.
> ++ */
> ++#if defined (__ARMCC_2__)
> ++#define KHRONOS_APIATTRIBUTES __softfp
> ++#else
> ++#define KHRONOS_APIATTRIBUTES
> ++#endif
> ++
> ++/*-------------------------------------------------------------------------
> ++ * basic type definitions
> ++ *-----------------------------------------------------------------------*/
> ++#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
> ++
> ++
> ++/*
> ++ * Using <stdint.h>
> ++ */
> ++#include <stdint.h>
> ++typedef int32_t                 khronos_int32_t;
> ++typedef uint32_t                khronos_uint32_t;
> ++typedef int64_t                 khronos_int64_t;
> ++typedef uint64_t                khronos_uint64_t;
> ++#define KHRONOS_SUPPORT_INT64   1
> ++#define KHRONOS_SUPPORT_FLOAT   1
> ++
> ++#elif defined(__VMS ) || defined(__sgi)
> ++
> ++/*
> ++ * Using <inttypes.h>
> ++ */
> ++#include <inttypes.h>
> ++typedef int32_t                 khronos_int32_t;
> ++typedef uint32_t                khronos_uint32_t;
> ++typedef int64_t                 khronos_int64_t;
> ++typedef uint64_t                khronos_uint64_t;
> ++#define KHRONOS_SUPPORT_INT64   1
> ++#define KHRONOS_SUPPORT_FLOAT   1
> ++
> ++#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
> ++
> ++/*
> ++ * Win32
> ++ */
> ++typedef __int32                 khronos_int32_t;
> ++typedef unsigned __int32        khronos_uint32_t;
> ++typedef __int64                 khronos_int64_t;
> ++typedef unsigned __int64        khronos_uint64_t;
> ++#define KHRONOS_SUPPORT_INT64   1
> ++#define KHRONOS_SUPPORT_FLOAT   1
> ++
> ++#elif defined(__sun__) || defined(__digital__)
> ++
> ++/*
> ++ * Sun or Digital
> ++ */
> ++typedef int                     khronos_int32_t;
> ++typedef unsigned int            khronos_uint32_t;
> ++#if defined(__arch64__) || defined(_LP64)
> ++typedef long int                khronos_int64_t;
> ++typedef unsigned long int       khronos_uint64_t;
> ++#else
> ++typedef long long int           khronos_int64_t;
> ++typedef unsigned long long int  khronos_uint64_t;
> ++#endif /* __arch64__ */
> ++#define KHRONOS_SUPPORT_INT64   1
> ++#define KHRONOS_SUPPORT_FLOAT   1
> ++
> ++#elif 0
> ++
> ++/*
> ++ * Hypothetical platform with no float or int64 support
> ++ */
> ++typedef int                     khronos_int32_t;
> ++typedef unsigned int            khronos_uint32_t;
> ++#define KHRONOS_SUPPORT_INT64   0
> ++#define KHRONOS_SUPPORT_FLOAT   0
> ++
> ++#else
> ++
> ++/*
> ++ * Generic fallback
> ++ */
> ++#include <stdint.h>
> ++typedef int32_t                 khronos_int32_t;
> ++typedef uint32_t                khronos_uint32_t;
> ++typedef int64_t                 khronos_int64_t;
> ++typedef uint64_t                khronos_uint64_t;
> ++#define KHRONOS_SUPPORT_INT64   1
> ++#define KHRONOS_SUPPORT_FLOAT   1
> ++
> ++#endif
> ++
> ++
> ++/*
> ++ * Types that are (so far) the same on all platforms
> ++ */
> ++typedef signed   char          khronos_int8_t;
> ++typedef unsigned char          khronos_uint8_t;
> ++typedef signed   short int     khronos_int16_t;
> ++typedef unsigned short int     khronos_uint16_t;
> ++
> ++/*
> ++ * Types that differ between LLP64 and LP64 architectures - in LLP64,
> ++ * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
> ++ * to be the only LLP64 architecture in current use.
> ++ */
> ++#ifdef _WIN64
> ++typedef signed   long long int khronos_intptr_t;
> ++typedef unsigned long long int khronos_uintptr_t;
> ++typedef signed   long long int khronos_ssize_t;
> ++typedef unsigned long long int khronos_usize_t;
> ++#else
> ++typedef signed   long  int     khronos_intptr_t;
> ++typedef unsigned long  int     khronos_uintptr_t;
> ++typedef signed   long  int     khronos_ssize_t;
> ++typedef unsigned long  int     khronos_usize_t;
> ++#endif
> ++
> ++#if KHRONOS_SUPPORT_FLOAT
> ++/*
> ++ * Float type
> ++ */
> ++typedef          float         khronos_float_t;
> ++#endif
> ++
> ++#if KHRONOS_SUPPORT_INT64
> ++/* Time types
> ++ *
> ++ * These types can be used to represent a time interval in nanoseconds or
> ++ * an absolute Unadjusted System Time.  Unadjusted System Time is the number
> ++ * of nanoseconds since some arbitrary system event (e.g. since the last
> ++ * time the system booted).  The Unadjusted System Time is an unsigned
> ++ * 64 bit value that wraps back to 0 every 584 years.  Time intervals
> ++ * may be either signed or unsigned.
> ++ */
> ++typedef khronos_uint64_t       khronos_utime_nanoseconds_t;
> ++typedef khronos_int64_t        khronos_stime_nanoseconds_t;
> ++#endif
> ++
> ++/*
> ++ * Dummy value used to pad enum types to 32 bits.
> ++ */
> ++#ifndef KHRONOS_MAX_ENUM
> ++#define KHRONOS_MAX_ENUM 0x7FFFFFFF
> ++#endif
> ++
> ++/*
> ++ * Enumerated boolean type
> ++ *
> ++ * Values other than zero should be considered to be true.  Therefore
> ++ * comparisons should not be made against KHRONOS_TRUE.
> ++ */
> ++typedef enum {
> ++    KHRONOS_FALSE = 0,
> ++    KHRONOS_TRUE  = 1,
> ++    KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
> ++} khronos_boolean_enum_t;
> ++
> ++#endif /* __khrplatform_h_ */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Audio.h b/usr/include/OpenMAX/il/OMX_Audio.h
> +--- a/usr/include/OpenMAX/il/OMX_Audio.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Audio.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,1311 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** @file OMX_Audio.h - OpenMax IL version 1.1.2
> ++ *  The structures needed by Audio components to exchange
> ++ *  parameters and configuration data with the componenmilts.
> ++ */
> ++
> ++#ifndef OMX_Audio_h
> ++#define OMX_Audio_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++/* Each OMX header must include all required header files to allow the
> ++ *  header to compile without errors.  The includes below are required
> ++ *  for this header file to compile successfully
> ++ */
> ++
> ++#include <OMX_Core.h>
> ++
> ++/** @defgroup midi MIDI
> ++ * @ingroup audio
> ++ */
> ++
> ++/** @defgroup effects Audio effects
> ++ * @ingroup audio
> ++ */
> ++
> ++/** @defgroup audio OpenMAX IL Audio Domain
> ++ * Structures for OpenMAX IL Audio domain
> ++ * @{
> ++ */
> ++
> ++/** Enumeration used to define the possible audio codings.
> ++ *  If "OMX_AUDIO_CodingUnused" is selected, the coding selection must
> ++ *  be done in a vendor specific way.  Since this is for an audio
> ++ *  processing element this enum is relevant.  However, for another
> ++ *  type of component other enums would be in this area.
> ++ */
> ++typedef enum OMX_AUDIO_CODINGTYPE {
> ++    OMX_AUDIO_CodingUnused = 0,  /**< Placeholder value when coding is N/A  */
> ++    OMX_AUDIO_CodingAutoDetect,  /**< auto detection of audio format */
> ++    OMX_AUDIO_CodingPCM,         /**< Any variant of PCM coding */
> ++    OMX_AUDIO_CodingADPCM,       /**< Any variant of ADPCM encoded data */
> ++    OMX_AUDIO_CodingAMR,         /**< Any variant of AMR encoded data */
> ++    OMX_AUDIO_CodingGSMFR,       /**< Any variant of GSM fullrate (i.e. GSM610) */
> ++    OMX_AUDIO_CodingGSMEFR,      /**< Any variant of GSM Enhanced Fullrate encoded data*/
> ++    OMX_AUDIO_CodingGSMHR,       /**< Any variant of GSM Halfrate encoded data */
> ++    OMX_AUDIO_CodingPDCFR,       /**< Any variant of PDC Fullrate encoded data */
> ++    OMX_AUDIO_CodingPDCEFR,      /**< Any variant of PDC Enhanced Fullrate encoded data */
> ++    OMX_AUDIO_CodingPDCHR,       /**< Any variant of PDC Halfrate encoded data */
> ++    OMX_AUDIO_CodingTDMAFR,      /**< Any variant of TDMA Fullrate encoded data (TIA/EIA-136-420) */
> ++    OMX_AUDIO_CodingTDMAEFR,     /**< Any variant of TDMA Enhanced Fullrate encoded data (TIA/EIA-136-410) */
> ++    OMX_AUDIO_CodingQCELP8,      /**< Any variant of QCELP 8kbps encoded data */
> ++    OMX_AUDIO_CodingQCELP13,     /**< Any variant of QCELP 13kbps encoded data */
> ++    OMX_AUDIO_CodingEVRC,        /**< Any variant of EVRC encoded data */
> ++    OMX_AUDIO_CodingSMV,         /**< Any variant of SMV encoded data */
> ++    OMX_AUDIO_CodingG711,        /**< Any variant of G.711 encoded data */
> ++    OMX_AUDIO_CodingG723,        /**< Any variant of G.723 dot 1 encoded data */
> ++    OMX_AUDIO_CodingG726,        /**< Any variant of G.726 encoded data */
> ++    OMX_AUDIO_CodingG729,        /**< Any variant of G.729 encoded data */
> ++    OMX_AUDIO_CodingAAC,         /**< Any variant of AAC encoded data */
> ++    OMX_AUDIO_CodingMP3,         /**< Any variant of MP3 encoded data */
> ++    OMX_AUDIO_CodingSBC,         /**< Any variant of SBC encoded data */
> ++    OMX_AUDIO_CodingVORBIS,      /**< Any variant of VORBIS encoded data */
> ++    OMX_AUDIO_CodingWMA,         /**< Any variant of WMA encoded data */
> ++    OMX_AUDIO_CodingRA,          /**< Any variant of RA encoded data */
> ++    OMX_AUDIO_CodingMIDI,        /**< Any variant of MIDI encoded data */
> ++    OMX_AUDIO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_CodingMax = 0x7FFFFFFF
> ++} OMX_AUDIO_CODINGTYPE;
> ++
> ++
> ++/** The PortDefinition structure is used to define all of the parameters
> ++ *  necessary for the compliant component to setup an input or an output audio
> ++ *  path.  If additional information is needed to define the parameters of the
> ++ *  port (such as frequency), additional structures must be sent such as the
> ++ *  OMX_AUDIO_PARAM_PCMMODETYPE structure to supply the extra parameters for the port.
> ++ */
> ++typedef struct OMX_AUDIO_PORTDEFINITIONTYPE {
> ++    OMX_STRING cMIMEType;            /**< MIME type of data for the port */
> ++    OMX_NATIVE_DEVICETYPE pNativeRender; /** < platform specific reference
> ++                                               for an output device,
> ++                                               otherwise this field is 0 */
> ++    OMX_BOOL bFlagErrorConcealment;  /**< Turns on error concealment if it is
> ++                                          supported by the OMX component */
> ++    OMX_AUDIO_CODINGTYPE eEncoding;  /**< Type of data expected for this
> ++                                          port (e.g. PCM, AMR, MP3, etc) */
> ++} OMX_AUDIO_PORTDEFINITIONTYPE;
> ++
> ++
> ++/**  Port format parameter.  This structure is used to enumerate
> ++  *  the various data input/output format supported by the port.
> ++  */
> ++typedef struct OMX_AUDIO_PARAM_PORTFORMATTYPE {
> ++    OMX_U32 nSize;                  /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;       /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;             /**< Indicates which port to set */
> ++    OMX_U32 nIndex;                 /**< Indicates the enumeration index for the format from 0x0 to N-1 */
> ++    OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this port (e.g. PCM, AMR, MP3, etc) */
> ++} OMX_AUDIO_PARAM_PORTFORMATTYPE;
> ++
> ++
> ++/** PCM mode type  */
> ++typedef enum OMX_AUDIO_PCMMODETYPE {
> ++    OMX_AUDIO_PCMModeLinear = 0,  /**< Linear PCM encoded data */
> ++    OMX_AUDIO_PCMModeALaw,        /**< A law PCM encoded data (G.711) */
> ++    OMX_AUDIO_PCMModeMULaw,       /**< Mu law PCM encoded data (G.711)  */
> ++    OMX_AUDIO_PCMModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_PCMModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_PCMModeMax = 0x7FFFFFFF
> ++} OMX_AUDIO_PCMMODETYPE;
> ++
> ++
> ++typedef enum OMX_AUDIO_CHANNELTYPE {
> ++    OMX_AUDIO_ChannelNone = 0x0,    /**< Unused or empty */
> ++    OMX_AUDIO_ChannelLF   = 0x1,    /**< Left front */
> ++    OMX_AUDIO_ChannelRF   = 0x2,    /**< Right front */
> ++    OMX_AUDIO_ChannelCF   = 0x3,    /**< Center front */
> ++    OMX_AUDIO_ChannelLS   = 0x4,    /**< Left surround */
> ++    OMX_AUDIO_ChannelRS   = 0x5,    /**< Right surround */
> ++    OMX_AUDIO_ChannelLFE  = 0x6,    /**< Low frequency effects */
> ++    OMX_AUDIO_ChannelCS   = 0x7,    /**< Back surround */
> ++    OMX_AUDIO_ChannelLR   = 0x8,    /**< Left rear. */
> ++    OMX_AUDIO_ChannelRR   = 0x9,    /**< Right rear. */
> ++    OMX_AUDIO_ChannelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_ChannelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_ChannelMax  = 0x7FFFFFFF
> ++} OMX_AUDIO_CHANNELTYPE;
> ++
> ++#define OMX_AUDIO_MAXCHANNELS 16  /**< maximum number distinct audio channels that a buffer may contain */
> ++#define OMX_MIN_PCMPAYLOAD_MSEC 5 /**< Minimum audio buffer payload size for uncompressed (PCM) audio */
> ++
> ++/** PCM format description */
> ++typedef struct OMX_AUDIO_PARAM_PCMMODETYPE {
> ++    OMX_U32 nSize;                    /**< Size of this structure, in Bytes */
> ++    OMX_VERSIONTYPE nVersion;         /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;               /**< port that this structure applies to */
> ++    OMX_U32 nChannels;                /**< Number of channels (e.g. 2 for stereo) */
> ++    OMX_NUMERICALDATATYPE eNumData;   /**< indicates PCM data as signed or unsigned */
> ++    OMX_ENDIANTYPE eEndian;           /**< indicates PCM data as little or big endian */
> ++    OMX_BOOL bInterleaved;            /**< True for normal interleaved data; false for
> ++                                           non-interleaved data (e.g. block data) */
> ++    OMX_U32 nBitPerSample;            /**< Bit per sample */
> ++    OMX_U32 nSamplingRate;            /**< Sampling rate of the source data.  Use 0 for
> ++                                           variable or unknown sampling rate. */
> ++    OMX_AUDIO_PCMMODETYPE ePCMMode;   /**< PCM mode enumeration */
> ++    OMX_AUDIO_CHANNELTYPE eChannelMapping[OMX_AUDIO_MAXCHANNELS]; /**< Slot i contains channel defined by eChannelMap[i] */
> ++
> ++} OMX_AUDIO_PARAM_PCMMODETYPE;
> ++
> ++
> ++/** Audio channel mode.  This is used by both AAC and MP3, although the names are more appropriate
> ++ * for the MP3.  For example, JointStereo for MP3 is CouplingChannels for AAC.
> ++ */
> ++typedef enum OMX_AUDIO_CHANNELMODETYPE {
> ++    OMX_AUDIO_ChannelModeStereo = 0,  /**< 2 channels, the bitrate allocation between those
> ++                                          two channels changes accordingly to each channel information */
> ++    OMX_AUDIO_ChannelModeJointStereo, /**< mode that takes advantage of what is common between
> ++                                           2 channels for higher compression gain */
> ++    OMX_AUDIO_ChannelModeDual,        /**< 2 mono-channels, each channel is encoded with half
> ++                                           the bitrate of the overall bitrate */
> ++    OMX_AUDIO_ChannelModeMono,        /**< Mono channel mode */
> ++    OMX_AUDIO_ChannelModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_ChannelModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_ChannelModeMax = 0x7FFFFFFF
> ++} OMX_AUDIO_CHANNELMODETYPE;
> ++
> ++
> ++typedef enum OMX_AUDIO_MP3STREAMFORMATTYPE {
> ++    OMX_AUDIO_MP3StreamFormatMP1Layer3 = 0, /**< MP3 Audio MPEG 1 Layer 3 Stream format */
> ++    OMX_AUDIO_MP3StreamFormatMP2Layer3,     /**< MP3 Audio MPEG 2 Layer 3 Stream format */
> ++    OMX_AUDIO_MP3StreamFormatMP2_5Layer3,   /**< MP3 Audio MPEG2.5 Layer 3 Stream format */
> ++    OMX_AUDIO_MP3StreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_MP3StreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_MP3StreamFormatMax = 0x7FFFFFFF
> ++} OMX_AUDIO_MP3STREAMFORMATTYPE;
> ++
> ++/** MP3 params */
> ++typedef struct OMX_AUDIO_PARAM_MP3TYPE {
> ++    OMX_U32 nSize;                 /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;      /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;            /**< port that this structure applies to */
> ++    OMX_U32 nChannels;             /**< Number of channels */
> ++    OMX_U32 nBitRate;              /**< Bit rate of the input data.  Use 0 for variable
> ++                                        rate or unknown bit rates */
> ++    OMX_U32 nSampleRate;           /**< Sampling rate of the source data.  Use 0 for
> ++                                        variable or unknown sampling rate. */
> ++    OMX_U32 nAudioBandWidth;       /**< Audio band width (in Hz) to which an encoder should
> ++                                        limit the audio signal. Use 0 to let encoder decide */
> ++    OMX_AUDIO_CHANNELMODETYPE eChannelMode;   /**< Channel mode enumeration */
> ++    OMX_AUDIO_MP3STREAMFORMATTYPE eFormat;  /**< MP3 stream format */
> ++} OMX_AUDIO_PARAM_MP3TYPE;
> ++
> ++
> ++typedef enum OMX_AUDIO_AACSTREAMFORMATTYPE {
> ++    OMX_AUDIO_AACStreamFormatMP2ADTS = 0, /**< AAC Audio Data Transport Stream 2 format */
> ++    OMX_AUDIO_AACStreamFormatMP4ADTS,     /**< AAC Audio Data Transport Stream 4 format */
> ++    OMX_AUDIO_AACStreamFormatMP4LOAS,     /**< AAC Low Overhead Audio Stream format */
> ++    OMX_AUDIO_AACStreamFormatMP4LATM,     /**< AAC Low overhead Audio Transport Multiplex */
> ++    OMX_AUDIO_AACStreamFormatADIF,        /**< AAC Audio Data Interchange Format */
> ++    OMX_AUDIO_AACStreamFormatMP4FF,       /**< AAC inside MPEG-4/ISO File Format */
> ++    OMX_AUDIO_AACStreamFormatRAW,         /**< AAC Raw Format */
> ++    OMX_AUDIO_AACStreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_AACStreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_AACStreamFormatMax = 0x7FFFFFFF
> ++} OMX_AUDIO_AACSTREAMFORMATTYPE;
> ++
> ++
> ++/** AAC mode type.  Note that the term profile is used with the MPEG-2
> ++ * standard and the term object type and profile is used with MPEG-4 */
> ++typedef enum OMX_AUDIO_AACPROFILETYPE{
> ++  OMX_AUDIO_AACObjectNull = 0,      /**< Null, not used */
> ++  OMX_AUDIO_AACObjectMain = 1,      /**< AAC Main object */
> ++  OMX_AUDIO_AACObjectLC,            /**< AAC Low Complexity object (AAC profile) */
> ++  OMX_AUDIO_AACObjectSSR,           /**< AAC Scalable Sample Rate object */
> ++  OMX_AUDIO_AACObjectLTP,           /**< AAC Long Term Prediction object */
> ++  OMX_AUDIO_AACObjectHE,            /**< AAC High Efficiency (object type SBR, HE-AAC profile) */
> ++  OMX_AUDIO_AACObjectScalable,      /**< AAC Scalable object */
> ++  OMX_AUDIO_AACObjectERLC = 17,     /**< ER AAC Low Complexity object (Error Resilient AAC-LC) */
> ++  OMX_AUDIO_AACObjectLD = 23,       /**< AAC Low Delay object (Error Resilient) */
> ++  OMX_AUDIO_AACObjectHE_PS = 29,    /**< AAC High Efficiency with Parametric Stereo coding (HE-AAC v2, object type PS) */
> ++  OMX_AUDIO_AACObjectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++  OMX_AUDIO_AACObjectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++  OMX_AUDIO_AACObjectMax = 0x7FFFFFFF
> ++} OMX_AUDIO_AACPROFILETYPE;
> ++
> ++
> ++/** AAC tool usage (for nAACtools in OMX_AUDIO_PARAM_AACPROFILETYPE).
> ++ * Required for encoder configuration and optional as decoder info output.
> ++ * For MP3, OMX_AUDIO_CHANNELMODETYPE is sufficient. */
> ++#define OMX_AUDIO_AACToolNone 0x00000000 /**< no AAC tools allowed (encoder config) or active (decoder info output) */
> ++#define OMX_AUDIO_AACToolMS   0x00000001 /**< MS: Mid/side joint coding tool allowed or active */
> ++#define OMX_AUDIO_AACToolIS   0x00000002 /**< IS: Intensity stereo tool allowed or active */
> ++#define OMX_AUDIO_AACToolTNS  0x00000004 /**< TNS: Temporal Noise Shaping tool allowed or active */
> ++#define OMX_AUDIO_AACToolPNS  0x00000008 /**< PNS: MPEG-4 Perceptual Noise substitution tool allowed or active */
> ++#define OMX_AUDIO_AACToolLTP  0x00000010 /**< LTP: MPEG-4 Long Term Prediction tool allowed or active */
> ++#define OMX_AUDIO_AACToolAll  0x7FFFFFFF /**< all AAC tools allowed or active (*/
> ++
> ++/** MPEG-4 AAC error resilience (ER) tool usage (for nAACERtools in OMX_AUDIO_PARAM_AACPROFILETYPE).
> ++ * Required for ER encoder configuration and optional as decoder info output */
> ++#define OMX_AUDIO_AACERNone  0x00000000  /**< no AAC ER tools allowed/used */
> ++#define OMX_AUDIO_AACERVCB11 0x00000001  /**< VCB11: Virtual Code Books for AAC section data */
> ++#define OMX_AUDIO_AACERRVLC  0x00000002  /**< RVLC: Reversible Variable Length Coding */
> ++#define OMX_AUDIO_AACERHCR   0x00000004  /**< HCR: Huffman Codeword Reordering */
> ++#define OMX_AUDIO_AACERAll   0x7FFFFFFF  /**< all AAC ER tools allowed/used */
> ++
> ++
> ++/** AAC params */
> ++typedef struct OMX_AUDIO_PARAM_AACPROFILETYPE {
> ++    OMX_U32 nSize;                 /**< Size of this structure, in Bytes */
> ++    OMX_VERSIONTYPE nVersion;      /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;            /**< Port that this structure applies to */
> ++    OMX_U32 nChannels;             /**< Number of channels */
> ++    OMX_U32 nSampleRate;           /**< Sampling rate of the source data.  Use 0 for
> ++                                        variable or unknown sampling rate. */
> ++    OMX_U32 nBitRate;              /**< Bit rate of the input data.  Use 0 for variable
> ++                                        rate or unknown bit rates */
> ++    OMX_U32 nAudioBandWidth;       /**< Audio band width (in Hz) to which an encoder should
> ++                                        limit the audio signal. Use 0 to let encoder decide */
> ++    OMX_U32 nFrameLength;          /**< Frame length (in audio samples per channel) of the codec.
> ++                                        Can be 1024 or 960 (AAC-LC), 2048 (HE-AAC), 480 or 512 (AAC-LD).
> ++                                        Use 0 to let encoder decide */
> ++    OMX_U32 nAACtools;             /**< AAC tool usage */
> ++    OMX_U32 nAACERtools;           /**< MPEG-4 AAC error resilience tool usage */
> ++    OMX_AUDIO_AACPROFILETYPE eAACProfile;   /**< AAC profile enumeration */
> ++    OMX_AUDIO_AACSTREAMFORMATTYPE eAACStreamFormat; /**< AAC stream format enumeration */
> ++    OMX_AUDIO_CHANNELMODETYPE eChannelMode;   /**< Channel mode enumeration */
> ++} OMX_AUDIO_PARAM_AACPROFILETYPE;
> ++
> ++
> ++/** VORBIS params */
> ++typedef struct OMX_AUDIO_PARAM_VORBISTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_U32 nChannels;        /**< Number of channels */
> ++    OMX_U32 nBitRate;         /**< Bit rate of the encoded data data.  Use 0 for variable
> ++                                   rate or unknown bit rates. Encoding is set to the
> ++                                   bitrate closest to specified  value (in bps) */
> ++    OMX_U32 nMinBitRate;      /**< Sets minimum bitrate (in bps). */
> ++    OMX_U32 nMaxBitRate;      /**< Sets maximum bitrate (in bps). */
> ++
> ++    OMX_U32 nSampleRate;      /**< Sampling rate of the source data.  Use 0 for
> ++                                   variable or unknown sampling rate. */
> ++    OMX_U32 nAudioBandWidth;  /**< Audio band width (in Hz) to which an encoder should
> ++                                   limit the audio signal. Use 0 to let encoder decide */
> ++    OMX_S32 nQuality;		  /**< Sets encoding quality to n, between -1 (low) and 10 (high).
> ++                                   In the default mode of operation, teh quality level is 3.
> ++                                   Normal quality range is 0 - 10. */
> ++    OMX_BOOL bManaged;		  /**< Set  bitrate  management  mode. This turns off the
> ++                                   normal VBR encoding, but allows hard or soft bitrate
> ++                                   constraints to be enforced by the encoder. This mode can
> ++                                   be slower, and may also be lower quality. It is
> ++                                   primarily useful for streaming. */
> ++    OMX_BOOL bDownmix;		  /**< Downmix input from stereo to mono (has no effect on
> ++                                   non-stereo streams). Useful for lower-bitrate encoding. */
> ++} OMX_AUDIO_PARAM_VORBISTYPE;
> ++
> ++
> ++/** WMA Version */
> ++typedef enum OMX_AUDIO_WMAFORMATTYPE {
> ++  OMX_AUDIO_WMAFormatUnused = 0, /**< format unused or unknown */
> ++  OMX_AUDIO_WMAFormat7,          /**< Windows Media Audio format 7 */
> ++  OMX_AUDIO_WMAFormat8,          /**< Windows Media Audio format 8 */
> ++  OMX_AUDIO_WMAFormat9,          /**< Windows Media Audio format 9 */
> ++  OMX_AUDIO_WMAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++  OMX_AUDIO_WMAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++  OMX_AUDIO_WMAFormatMax = 0x7FFFFFFF
> ++} OMX_AUDIO_WMAFORMATTYPE;
> ++
> ++
> ++/** WMA Profile */
> ++typedef enum OMX_AUDIO_WMAPROFILETYPE {
> ++  OMX_AUDIO_WMAProfileUnused = 0,  /**< profile unused or unknown */
> ++  OMX_AUDIO_WMAProfileL1,          /**< Windows Media audio version 9 profile L1 */
> ++  OMX_AUDIO_WMAProfileL2,          /**< Windows Media audio version 9 profile L2 */
> ++  OMX_AUDIO_WMAProfileL3,          /**< Windows Media audio version 9 profile L3 */
> ++  OMX_AUDIO_WMAProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++  OMX_AUDIO_WMAProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++  OMX_AUDIO_WMAProfileMax = 0x7FFFFFFF
> ++} OMX_AUDIO_WMAPROFILETYPE;
> ++
> ++
> ++/** WMA params */
> ++typedef struct OMX_AUDIO_PARAM_WMATYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_U16 nChannels;        /**< Number of channels */
> ++    OMX_U32 nBitRate;         /**< Bit rate of the input data.  Use 0 for variable
> ++                                   rate or unknown bit rates */
> ++    OMX_AUDIO_WMAFORMATTYPE eFormat; /**< Version of WMA stream / data */
> ++	OMX_AUDIO_WMAPROFILETYPE eProfile;  /**< Profile of WMA stream / data */
> ++    OMX_U32 nSamplingRate;    /**< Sampling rate of the source data */
> ++    OMX_U16 nBlockAlign;      /**< is the block alignment, or block size, in bytes of the audio codec */
> ++    OMX_U16 nEncodeOptions;   /**< WMA Type-specific data */
> ++    OMX_U32 nSuperBlockAlign; /**< WMA Type-specific data */
> ++} OMX_AUDIO_PARAM_WMATYPE;
> ++
> ++/**
> ++ * RealAudio format
> ++ */
> ++typedef enum OMX_AUDIO_RAFORMATTYPE {
> ++    OMX_AUDIO_RAFormatUnused = 0, /**< Format unused or unknown */
> ++    OMX_AUDIO_RA8,                /**< RealAudio 8 codec */
> ++    OMX_AUDIO_RA9,                /**< RealAudio 9 codec */
> ++    OMX_AUDIO_RA10_AAC,           /**< MPEG-4 AAC codec for bitrates of more than 128kbps */
> ++    OMX_AUDIO_RA10_CODEC,         /**< RealAudio codec for bitrates less than 128 kbps */
> ++    OMX_AUDIO_RA10_LOSSLESS,      /**< RealAudio Lossless */
> ++    OMX_AUDIO_RA10_MULTICHANNEL,  /**< RealAudio Multichannel */
> ++    OMX_AUDIO_RA10_VOICE,         /**< RealAudio Voice for bitrates below 15 kbps */
> ++    OMX_AUDIO_RAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_RAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_RAFormatMax = 0x7FFFFFFF
> ++} OMX_AUDIO_RAFORMATTYPE;
> ++
> ++/** RA (Real Audio) params */
> ++typedef struct OMX_AUDIO_PARAM_RATYPE {
> ++    OMX_U32 nSize;              /**< Size of this structure, in Bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< Port that this structure applies to */
> ++    OMX_U32 nChannels;          /**< Number of channels */
> ++    OMX_U32 nSamplingRate;      /**< is the sampling rate of the source data */
> ++    OMX_U32 nBitsPerFrame;      /**< is the value for bits per frame  */
> ++    OMX_U32 nSamplePerFrame;    /**< is the value for samples per frame */
> ++    OMX_U32 nCouplingQuantBits; /**< is the number of coupling quantization bits in the stream */
> ++    OMX_U32 nCouplingStartRegion;   /**< is the coupling start region in the stream  */
> ++    OMX_U32 nNumRegions;        /**< is the number of regions value */
> ++    OMX_AUDIO_RAFORMATTYPE eFormat; /**< is the RealAudio audio format */
> ++} OMX_AUDIO_PARAM_RATYPE;
> ++
> ++
> ++/** SBC Allocation Method Type */
> ++typedef enum OMX_AUDIO_SBCALLOCMETHODTYPE {
> ++  OMX_AUDIO_SBCAllocMethodLoudness, /**< Loudness allocation method */
> ++  OMX_AUDIO_SBCAllocMethodSNR,      /**< SNR allocation method */
> ++  OMX_AUDIO_SBCAllocMethodKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++  OMX_AUDIO_SBCAllocMethodVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++  OMX_AUDIO_SBCAllocMethodMax = 0x7FFFFFFF
> ++} OMX_AUDIO_SBCALLOCMETHODTYPE;
> ++
> ++
> ++/** SBC params */
> ++typedef struct OMX_AUDIO_PARAM_SBCTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_U32 nChannels;         /**< Number of channels */
> ++    OMX_U32 nBitRate;          /**< Bit rate of the input data.  Use 0 for variable
> ++                                    rate or unknown bit rates */
> ++    OMX_U32 nSampleRate;       /**< Sampling rate of the source data.  Use 0 for
> ++                                    variable or unknown sampling rate. */
> ++    OMX_U32 nBlocks;           /**< Number of blocks */
> ++    OMX_U32 nSubbands;         /**< Number of subbands */
> ++    OMX_U32 nBitPool;          /**< Bitpool value */
> ++    OMX_BOOL bEnableBitrate;   /**< Use bitrate value instead of bitpool */
> ++    OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */
> ++    OMX_AUDIO_SBCALLOCMETHODTYPE eSBCAllocType;   /**< SBC Allocation method type */
> ++} OMX_AUDIO_PARAM_SBCTYPE;
> ++
> ++
> ++/** ADPCM stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_ADPCMTYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< port that this structure applies to */
> ++    OMX_U32 nChannels;          /**< Number of channels in the data stream (not
> ++                                     necessarily the same as the number of channels
> ++                                     to be rendered. */
> ++    OMX_U32 nBitsPerSample;     /**< Number of bits in each sample */
> ++    OMX_U32 nSampleRate;        /**< Sampling rate of the source data.  Use 0 for
> ++                                    variable or unknown sampling rate. */
> ++} OMX_AUDIO_PARAM_ADPCMTYPE;
> ++
> ++
> ++/** G723 rate */
> ++typedef enum OMX_AUDIO_G723RATE {
> ++    OMX_AUDIO_G723ModeUnused = 0,  /**< AMRNB Mode unused / unknown */
> ++    OMX_AUDIO_G723ModeLow,         /**< 5300 bps */
> ++    OMX_AUDIO_G723ModeHigh,        /**< 6300 bps */
> ++    OMX_AUDIO_G723ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_G723ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_G723ModeMax = 0x7FFFFFFF
> ++} OMX_AUDIO_G723RATE;
> ++
> ++
> ++/** G723 - Sample rate must be 8 KHz */
> ++typedef struct OMX_AUDIO_PARAM_G723TYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_BOOL bDTX;                /**< Enable Discontinuous Transmisssion */
> ++    OMX_AUDIO_G723RATE eBitRate;  /**< todo: Should this be moved to a config? */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable High Pass Filter */
> ++    OMX_BOOL bPostFilter;         /**< Enable Post Filter */
> ++} OMX_AUDIO_PARAM_G723TYPE;
> ++
> ++
> ++/** ITU G726 (ADPCM) rate */
> ++typedef enum OMX_AUDIO_G726MODE {
> ++    OMX_AUDIO_G726ModeUnused = 0,  /**< G726 Mode unused / unknown */
> ++    OMX_AUDIO_G726Mode16,          /**< 16 kbps */
> ++    OMX_AUDIO_G726Mode24,          /**< 24 kbps */
> ++    OMX_AUDIO_G726Mode32,          /**< 32 kbps, most common rate, also G721 */
> ++    OMX_AUDIO_G726Mode40,          /**< 40 kbps */
> ++    OMX_AUDIO_G726ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_G726ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_G726ModeMax = 0x7FFFFFFF
> ++} OMX_AUDIO_G726MODE;
> ++
> ++
> ++/** G.726 stream format parameters - must be at 8KHz */
> ++typedef struct OMX_AUDIO_PARAM_G726TYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< port that this structure applies to */
> ++    OMX_U32 nChannels;          /**< Number of channels in the data stream (not
> ++                                     necessarily the same as the number of channels
> ++                                     to be rendered. */
> ++     OMX_AUDIO_G726MODE eG726Mode;
> ++} OMX_AUDIO_PARAM_G726TYPE;
> ++
> ++
> ++/** G729 coder type */
> ++typedef enum OMX_AUDIO_G729TYPE {
> ++    OMX_AUDIO_G729 = 0,           /**< ITU G.729  encoded data */
> ++    OMX_AUDIO_G729A,              /**< ITU G.729 annex A  encoded data */
> ++    OMX_AUDIO_G729B,              /**< ITU G.729 with annex B encoded data */
> ++    OMX_AUDIO_G729AB,             /**< ITU G.729 annexes A and B encoded data */
> ++    OMX_AUDIO_G729KhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_G729VendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_G729Max = 0x7FFFFFFF
> ++} OMX_AUDIO_G729TYPE;
> ++
> ++
> ++/** G729 stream format parameters - fixed 6KHz sample rate */
> ++typedef struct OMX_AUDIO_PARAM_G729TYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_U32 nChannels;        /**< Number of channels in the data stream (not
> ++                                   necessarily the same as the number of channels
> ++                                   to be rendered. */
> ++    OMX_BOOL bDTX;            /**< Enable Discontinuous Transmisssion */
> ++    OMX_AUDIO_G729TYPE eBitType;
> ++} OMX_AUDIO_PARAM_G729TYPE;
> ++
> ++
> ++/** AMR Frame format */
> ++typedef enum OMX_AUDIO_AMRFRAMEFORMATTYPE {
> ++    OMX_AUDIO_AMRFrameFormatConformance = 0,  /**< Frame Format is AMR Conformance
> ++                                                   (Standard) Format */
> ++    OMX_AUDIO_AMRFrameFormatIF1,              /**< Frame Format is AMR Interface
> ++                                                   Format 1 */
> ++    OMX_AUDIO_AMRFrameFormatIF2,              /**< Frame Format is AMR Interface
> ++                                                   Format 2*/
> ++    OMX_AUDIO_AMRFrameFormatFSF,              /**< Frame Format is AMR File Storage
> ++                                                   Format */
> ++    OMX_AUDIO_AMRFrameFormatRTPPayload,       /**< Frame Format is AMR Real-Time
> ++                                                   Transport Protocol Payload Format */
> ++    OMX_AUDIO_AMRFrameFormatITU,              /**< Frame Format is ITU Format (added at Motorola request) */
> ++    OMX_AUDIO_AMRFrameFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_AMRFrameFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_AMRFrameFormatMax = 0x7FFFFFFF
> ++} OMX_AUDIO_AMRFRAMEFORMATTYPE;
> ++
> ++
> ++/** AMR band mode */
> ++typedef enum OMX_AUDIO_AMRBANDMODETYPE {
> ++    OMX_AUDIO_AMRBandModeUnused = 0,          /**< AMRNB Mode unused / unknown */
> ++    OMX_AUDIO_AMRBandModeNB0,                 /**< AMRNB Mode 0 =  4750 bps */
> ++    OMX_AUDIO_AMRBandModeNB1,                 /**< AMRNB Mode 1 =  5150 bps */
> ++    OMX_AUDIO_AMRBandModeNB2,                 /**< AMRNB Mode 2 =  5900 bps */
> ++    OMX_AUDIO_AMRBandModeNB3,                 /**< AMRNB Mode 3 =  6700 bps */
> ++    OMX_AUDIO_AMRBandModeNB4,                 /**< AMRNB Mode 4 =  7400 bps */
> ++    OMX_AUDIO_AMRBandModeNB5,                 /**< AMRNB Mode 5 =  7950 bps */
> ++    OMX_AUDIO_AMRBandModeNB6,                 /**< AMRNB Mode 6 = 10200 bps */
> ++    OMX_AUDIO_AMRBandModeNB7,                 /**< AMRNB Mode 7 = 12200 bps */
> ++    OMX_AUDIO_AMRBandModeWB0,                 /**< AMRWB Mode 0 =  6600 bps */
> ++    OMX_AUDIO_AMRBandModeWB1,                 /**< AMRWB Mode 1 =  8850 bps */
> ++    OMX_AUDIO_AMRBandModeWB2,                 /**< AMRWB Mode 2 = 12650 bps */
> ++    OMX_AUDIO_AMRBandModeWB3,                 /**< AMRWB Mode 3 = 14250 bps */
> ++    OMX_AUDIO_AMRBandModeWB4,                 /**< AMRWB Mode 4 = 15850 bps */
> ++    OMX_AUDIO_AMRBandModeWB5,                 /**< AMRWB Mode 5 = 18250 bps */
> ++    OMX_AUDIO_AMRBandModeWB6,                 /**< AMRWB Mode 6 = 19850 bps */
> ++    OMX_AUDIO_AMRBandModeWB7,                 /**< AMRWB Mode 7 = 23050 bps */
> ++    OMX_AUDIO_AMRBandModeWB8,                 /**< AMRWB Mode 8 = 23850 bps */
> ++    OMX_AUDIO_AMRBandModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_AMRBandModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_AMRBandModeMax = 0x7FFFFFFF
> ++} OMX_AUDIO_AMRBANDMODETYPE;
> ++
> ++
> ++/** AMR Discontinuous Transmission mode */
> ++typedef enum OMX_AUDIO_AMRDTXMODETYPE {
> ++    OMX_AUDIO_AMRDTXModeOff = 0,        /**< AMR Discontinuous Transmission Mode is disabled */
> ++    OMX_AUDIO_AMRDTXModeOnVAD1,         /**< AMR Discontinuous Transmission Mode using
> ++                                             Voice Activity Detector 1 (VAD1) is enabled */
> ++    OMX_AUDIO_AMRDTXModeOnVAD2,         /**< AMR Discontinuous Transmission Mode using
> ++                                             Voice Activity Detector 2 (VAD2) is enabled */
> ++    OMX_AUDIO_AMRDTXModeOnAuto,         /**< The codec will automatically select between
> ++                                             Off, VAD1 or VAD2 modes */
> ++
> ++    OMX_AUDIO_AMRDTXasEFR,             /**< DTX as EFR instead of AMR standard (3GPP 26.101, frame type =8,9,10) */
> ++
> ++    OMX_AUDIO_AMRDTXModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_AMRDTXModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_AMRDTXModeMax = 0x7FFFFFFF
> ++} OMX_AUDIO_AMRDTXMODETYPE;
> ++
> ++
> ++/** AMR params */
> ++typedef struct OMX_AUDIO_PARAM_AMRTYPE {
> ++    OMX_U32 nSize;                          /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;               /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;                     /**< port that this structure applies to */
> ++    OMX_U32 nChannels;                      /**< Number of channels */
> ++    OMX_U32 nBitRate;                       /**< Bit rate read only field */
> ++    OMX_AUDIO_AMRBANDMODETYPE eAMRBandMode; /**< AMR Band Mode enumeration */
> ++    OMX_AUDIO_AMRDTXMODETYPE  eAMRDTXMode;  /**< AMR DTX Mode enumeration */
> ++    OMX_AUDIO_AMRFRAMEFORMATTYPE eAMRFrameFormat; /**< AMR frame format enumeration */
> ++} OMX_AUDIO_PARAM_AMRTYPE;
> ++
> ++
> ++/** GSM_FR (ETSI 06.10, 3GPP 46.010) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_GSMFRTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_BOOL bDTX;            /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;   /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_GSMFRTYPE;
> ++
> ++
> ++/** GSM-HR (ETSI 06.20, 3GPP 46.020) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_GSMHRTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_BOOL bDTX;            /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;   /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_GSMHRTYPE;
> ++
> ++
> ++/** GSM-EFR (ETSI 06.60, 3GPP 46.060) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_GSMEFRTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_BOOL bDTX;            /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;   /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_GSMEFRTYPE;
> ++
> ++
> ++/** TDMA FR (TIA/EIA-136-420, VSELP 7.95kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_TDMAFRTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_BOOL bDTX;                /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_TDMAFRTYPE;
> ++
> ++
> ++/** TDMA EFR (TIA/EIA-136-410, ACELP 7.4kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_TDMAEFRTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_BOOL bDTX;                /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_TDMAEFRTYPE;
> ++
> ++
> ++/** PDC FR ( RCR-27, VSELP 6.7kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_PDCFRTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_BOOL bDTX;                /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_PDCFRTYPE;
> ++
> ++
> ++/** PDC EFR ( RCR-27, ACELP 6.7kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_PDCEFRTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_BOOL bDTX;                /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_PDCEFRTYPE;
> ++
> ++/** PDC HR ( RCR-27, PSI-CELP 3.45kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_PDCHRTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_BOOL bDTX;                /**< Enable Discontinuous Transmisssion */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable High Pass Filter */
> ++} OMX_AUDIO_PARAM_PDCHRTYPE;
> ++
> ++
> ++/** CDMA Rate types */
> ++typedef enum OMX_AUDIO_CDMARATETYPE {
> ++    OMX_AUDIO_CDMARateBlank = 0,          /**< CDMA encoded frame is blank */
> ++    OMX_AUDIO_CDMARateFull,               /**< CDMA encoded frame in full rate */
> ++    OMX_AUDIO_CDMARateHalf,               /**< CDMA encoded frame in half rate */
> ++    OMX_AUDIO_CDMARateQuarter,            /**< CDMA encoded frame in quarter rate */
> ++    OMX_AUDIO_CDMARateEighth,             /**< CDMA encoded frame in eighth rate (DTX)*/
> ++    OMX_AUDIO_CDMARateErasure,            /**< CDMA erasure frame */
> ++    OMX_AUDIO_CDMARateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_CDMARateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_CDMARateMax = 0x7FFFFFFF
> ++} OMX_AUDIO_CDMARATETYPE;
> ++
> ++
> ++/** QCELP8 (TIA/EIA-96, up to 8kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_QCELP8TYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_U32 nBitRate;             /**< Bit rate of the input data.  Use 0 for variable
> ++                                       rate or unknown bit rates */
> ++    OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */
> ++    OMX_U32 nMinBitRate;          /**< minmal rate for the encoder = 1,2,3,4, default = 1 */
> ++    OMX_U32 nMaxBitRate;          /**< maximal rate for the encoder = 1,2,3,4, default = 4 */
> ++} OMX_AUDIO_PARAM_QCELP8TYPE;
> ++
> ++
> ++/** QCELP13 ( CDMA, EIA/TIA-733, 13.3kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_QCELP13TYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */
> ++    OMX_U32 nMinBitRate;          /**< minmal rate for the encoder = 1,2,3,4, default = 1 */
> ++    OMX_U32 nMaxBitRate;          /**< maximal rate for the encoder = 1,2,3,4, default = 4 */
> ++} OMX_AUDIO_PARAM_QCELP13TYPE;
> ++
> ++
> ++/** EVRC ( CDMA, EIA/TIA-127, RCELP up to 8.55kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_EVRCTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_AUDIO_CDMARATETYPE eCDMARate; /**< actual Frame rate */
> ++    OMX_BOOL bRATE_REDUCon;       /**< RATE_REDUCtion is requested for this frame */
> ++    OMX_U32 nMinBitRate;          /**< minmal rate for the encoder = 1,2,3,4, default = 1 */
> ++    OMX_U32 nMaxBitRate;          /**< maximal rate for the encoder = 1,2,3,4, default = 4 */
> ++    OMX_BOOL bHiPassFilter;       /**< Enable encoder's High Pass Filter */
> ++    OMX_BOOL bNoiseSuppressor;    /**< Enable encoder's noise suppressor pre-processing */
> ++    OMX_BOOL bPostFilter;         /**< Enable decoder's post Filter */
> ++} OMX_AUDIO_PARAM_EVRCTYPE;
> ++
> ++
> ++/** SMV ( up to 8.55kbps coder) stream format parameters */
> ++typedef struct OMX_AUDIO_PARAM_SMVTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_U32 nChannels;            /**< Number of channels in the data stream (not
> ++                                       necessarily the same as the number of channels
> ++                                       to be rendered. */
> ++    OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */
> ++    OMX_BOOL bRATE_REDUCon;           /**< RATE_REDUCtion is requested for this frame */
> ++    OMX_U32 nMinBitRate;          /**< minmal rate for the encoder = 1,2,3,4, default = 1 ??*/
> ++    OMX_U32 nMaxBitRate;          /**< maximal rate for the encoder = 1,2,3,4, default = 4 ??*/
> ++    OMX_BOOL bHiPassFilter;       /**< Enable encoder's High Pass Filter ??*/
> ++    OMX_BOOL bNoiseSuppressor;    /**< Enable encoder's noise suppressor pre-processing */
> ++    OMX_BOOL bPostFilter;         /**< Enable decoder's post Filter ??*/
> ++} OMX_AUDIO_PARAM_SMVTYPE;
> ++
> ++
> ++/** MIDI Format
> ++ * @ingroup midi
> ++ */
> ++typedef enum OMX_AUDIO_MIDIFORMATTYPE
> ++{
> ++    OMX_AUDIO_MIDIFormatUnknown = 0, /**< MIDI Format unknown or don't care */
> ++    OMX_AUDIO_MIDIFormatSMF0,        /**< Standard MIDI File Type 0 */
> ++    OMX_AUDIO_MIDIFormatSMF1,        /**< Standard MIDI File Type 1 */
> ++    OMX_AUDIO_MIDIFormatSMF2,        /**< Standard MIDI File Type 2 */
> ++    OMX_AUDIO_MIDIFormatSPMIDI,      /**< SP-MIDI */
> ++    OMX_AUDIO_MIDIFormatXMF0,        /**< eXtensible Music Format type 0 */
> ++    OMX_AUDIO_MIDIFormatXMF1,        /**< eXtensible Music Format type 1 */
> ++    OMX_AUDIO_MIDIFormatMobileXMF,   /**< Mobile XMF (eXtensible Music Format type 2) */
> ++    OMX_AUDIO_MIDIFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_MIDIFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_MIDIFormatMax = 0x7FFFFFFF
> ++} OMX_AUDIO_MIDIFORMATTYPE;
> ++
> ++
> ++/** MIDI params
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_PARAM_MIDITYPE {
> ++    OMX_U32 nSize;                 /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;      /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;            /**< port that this structure applies to */
> ++    OMX_U32 nFileSize;             /**< size of the MIDI file in bytes, where the entire
> ++                                        MIDI file passed in, otherwise if 0x0, the MIDI data
> ++                                        is merged and streamed (instead of passed as an
> ++                                        entire MIDI file) */
> ++    OMX_BU32 sMaxPolyphony;        /**< Specifies the maximum simultaneous polyphonic
> ++                                        voices. A value of zero indicates that the default
> ++                                        polyphony of the device is used  */
> ++    OMX_BOOL bLoadDefaultSound;    /**< Whether to load default sound
> ++                                        bank at initialization */
> ++    OMX_AUDIO_MIDIFORMATTYPE eMidiFormat; /**< Version of the MIDI file */
> ++} OMX_AUDIO_PARAM_MIDITYPE;
> ++
> ++
> ++/** Type of the MIDI sound bank
> ++ * @ingroup midi
> ++ */
> ++typedef enum OMX_AUDIO_MIDISOUNDBANKTYPE {
> ++    OMX_AUDIO_MIDISoundBankUnused = 0,           /**< unused/unknown soundbank type */
> ++    OMX_AUDIO_MIDISoundBankDLS1,                 /**< DLS version 1 */
> ++    OMX_AUDIO_MIDISoundBankDLS2,                 /**< DLS version 2 */
> ++    OMX_AUDIO_MIDISoundBankMobileDLSBase,        /**< Mobile DLS, using the base functionality */
> ++    OMX_AUDIO_MIDISoundBankMobileDLSPlusOptions, /**< Mobile DLS, using the specification-defined optional feature set */
> ++    OMX_AUDIO_MIDISoundBankKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_MIDISoundBankVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_MIDISoundBankMax = 0x7FFFFFFF
> ++} OMX_AUDIO_MIDISOUNDBANKTYPE;
> ++
> ++
> ++/** Bank Layout describes how bank MSB & LSB are used in the DLS instrument definitions sound bank
> ++ * @ingroup midi
> ++ */
> ++typedef enum OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE {
> ++   OMX_AUDIO_MIDISoundBankLayoutUnused = 0,   /**< unused/unknown soundbank type */
> ++   OMX_AUDIO_MIDISoundBankLayoutGM,           /**< GS layout (based on bank MSB 0x00) */
> ++   OMX_AUDIO_MIDISoundBankLayoutGM2,          /**< General MIDI 2 layout (using MSB 0x78/0x79, LSB 0x00) */
> ++   OMX_AUDIO_MIDISoundBankLayoutUser,         /**< Does not conform to any bank numbering standards */
> ++   OMX_AUDIO_MIDISoundBankLayoutKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++   OMX_AUDIO_MIDISoundBankLayoutVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++   OMX_AUDIO_MIDISoundBankLayoutMax = 0x7FFFFFFF
> ++} OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE;
> ++
> ++
> ++/** MIDI params to load/unload user soundbank
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_U32 nDLSIndex;        /**< DLS file index to be loaded */
> ++    OMX_U32 nDLSSize;         /**< Size in bytes */
> ++    OMX_PTR pDLSData;         /**< Pointer to DLS file data */
> ++    OMX_AUDIO_MIDISOUNDBANKTYPE eMidiSoundBank;   /**< Midi sound bank type enumeration */
> ++    OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE eMidiSoundBankLayout; /**< Midi sound bank layout enumeration */
> ++} OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE;
> ++
> ++
> ++/** Structure for Live MIDI events and MIP messages.
> ++ * (MIP = Maximum Instantaneous Polyphony; part of the SP-MIDI standard.)
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< Port that this structure applies to */
> ++    OMX_U32 nMidiEventSize;   /**< Size of immediate MIDI events or MIP message in bytes  */
> ++    OMX_U8 nMidiEvents[1];    /**< MIDI event array to be rendered immediately, or an
> ++                                   array for the MIP message buffer, where the size is
> ++                                   indicated by nMidiEventSize */
> ++} OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE;
> ++
> ++
> ++/** MIDI sound bank/ program pair in a given channel
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< Port that this structure applies to */
> ++    OMX_U32 nChannel;           /**< Valid channel values range from 1 to 16 */
> ++    OMX_U16 nIDProgram;         /**< Valid program ID range is 1 to 128 */
> ++    OMX_U16 nIDSoundBank;       /**< Sound bank ID */
> ++    OMX_U32 nUserSoundBankIndex;/**< User soundbank index, easier to access soundbanks
> ++                                     by index if multiple banks are present */
> ++} OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE;
> ++
> ++
> ++/** MIDI control
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_MIDICONTROLTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_BS32 sPitchTransposition; /**< Pitch transposition in semitones, stored as Q22.10
> ++                                       format based on JAVA MMAPI (JSR-135) requirement */
> ++    OMX_BU32 sPlayBackRate;       /**< Relative playback rate, stored as Q14.17 fixed-point
> ++                                       number based on JSR-135 requirement */
> ++    OMX_BU32 sTempo ;             /**< Tempo in beats per minute (BPM), stored as Q22.10
> ++                                       fixed-point number based on JSR-135 requirement */
> ++    OMX_U32 nMaxPolyphony;        /**< Specifies the maximum simultaneous polyphonic
> ++                                       voices. A value of zero indicates that the default
> ++                                       polyphony of the device is used  */
> ++    OMX_U32 nNumRepeat;           /**< Number of times to repeat playback */
> ++    OMX_U32 nStopTime;            /**< Time in milliseconds to indicate when playback
> ++                                       will stop automatically.  Set to zero if not used */
> ++    OMX_U16 nChannelMuteMask;     /**< 16 bit mask for channel mute status */
> ++    OMX_U16 nChannelSoloMask;     /**< 16 bit mask for channel solo status */
> ++    OMX_U32 nTrack0031MuteMask;   /**< 32 bit mask for track mute status. Note: This is for tracks 0-31 */
> ++    OMX_U32 nTrack3263MuteMask;   /**< 32 bit mask for track mute status. Note: This is for tracks 32-63 */
> ++    OMX_U32 nTrack0031SoloMask;   /**< 32 bit mask for track solo status. Note: This is for tracks 0-31 */
> ++    OMX_U32 nTrack3263SoloMask;   /**< 32 bit mask for track solo status. Note: This is for tracks 32-63 */
> ++
> ++} OMX_AUDIO_CONFIG_MIDICONTROLTYPE;
> ++
> ++
> ++/** MIDI Playback States
> ++ * @ingroup midi
> ++ */
> ++typedef enum OMX_AUDIO_MIDIPLAYBACKSTATETYPE {
> ++  OMX_AUDIO_MIDIPlayBackStateUnknown = 0,      /**< Unknown state or state does not map to
> ++													other defined states */
> ++  OMX_AUDIO_MIDIPlayBackStateClosedEngaged,    /**< No MIDI resource is currently open.
> ++                                                    The MIDI engine is currently processing
> ++                                                    MIDI events. */
> ++  OMX_AUDIO_MIDIPlayBackStateParsing,          /**< A MIDI resource is open and is being
> ++                                                    primed. The MIDI engine is currently
> ++                                                    processing MIDI events. */
> ++  OMX_AUDIO_MIDIPlayBackStateOpenEngaged,      /**< A MIDI resource is open and primed but
> ++                                                    not playing. The MIDI engine is currently
> ++                                                    processing MIDI events. The transition to
> ++                                                    this state is only possible from the
> ++                                                    OMX_AUDIO_MIDIPlayBackStatePlaying state,
> ++                                                    when the 'playback head' reaches the end
> ++                                                    of media data or the playback stops due
> ++                                                    to stop time set.*/
> ++  OMX_AUDIO_MIDIPlayBackStatePlaying,          /**< A MIDI resource is open and currently
> ++                                                    playing. The MIDI engine is currently
> ++                                                    processing MIDI events.*/
> ++  OMX_AUDIO_MIDIPlayBackStatePlayingPartially, /**< Best-effort playback due to SP-MIDI/DLS
> ++                                                    resource constraints */
> ++  OMX_AUDIO_MIDIPlayBackStatePlayingSilently,  /**< Due to system resource constraints and
> ++                                                    SP-MIDI content constraints, there is
> ++                                                    no audible MIDI content during playback
> ++                                                    currently. The situation may change if
> ++                                                    resources are freed later.*/
> ++  OMX_AUDIO_MIDIPlayBackStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++  OMX_AUDIO_MIDIPlayBackStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++  OMX_AUDIO_MIDIPlayBackStateMax = 0x7FFFFFFF
> ++} OMX_AUDIO_MIDIPLAYBACKSTATETYPE;
> ++
> ++
> ++/** MIDI status
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_MIDISTATUSTYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< port that this structure applies to */
> ++    OMX_U16 nNumTracks;         /**< Number of MIDI tracks in the file, read only field.
> ++                                     NOTE: May not return a meaningful value until the entire
> ++                                     file is parsed and buffered.  */
> ++    OMX_U32 nDuration;          /**< The length of the currently open MIDI resource
> ++                                     in milliseconds. NOTE: May not return a meaningful value
> ++                                     until the entire file is parsed and buffered.  */
> ++    OMX_U32 nPosition;          /**< Current Position of the MIDI resource being played
> ++                                     in milliseconds */
> ++    OMX_BOOL bVibra;            /**< Does Vibra track exist? NOTE: May not return a meaningful
> ++                                     value until the entire file is parsed and buffered. */
> ++    OMX_U32 nNumMetaEvents;     /**< Total number of MIDI Meta Events in the currently
> ++                                     open MIDI resource. NOTE: May not return a meaningful value
> ++                                     until the entire file is parsed and buffered.  */
> ++    OMX_U32 nNumActiveVoices;   /**< Number of active voices in the currently playing
> ++                                     MIDI resource. NOTE: May not return a meaningful value until
> ++                                     the entire file is parsed and buffered. */
> ++    OMX_AUDIO_MIDIPLAYBACKSTATETYPE eMIDIPlayBackState;  /**< MIDI playback state enumeration, read only field */
> ++} OMX_AUDIO_CONFIG_MIDISTATUSTYPE;
> ++
> ++
> ++/** MIDI Meta Event structure one per Meta Event.
> ++ *  MIDI Meta Events are like audio metadata, except that they are interspersed
> ++ *  with the MIDI content throughout the file and are not localized in the header.
> ++ *  As such, it is necessary to retrieve information about these Meta Events from
> ++ *  the engine, as it encounters these Meta Events within the MIDI content.
> ++ *  For example, SMF files can have up to 14 types of MIDI Meta Events (copyright,
> ++ *  author, default tempo, etc.) scattered throughout the file.
> ++ *  @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE{
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_U32 nIndex;           /**< Index of Meta Event */
> ++    OMX_U8 nMetaEventType;    /**< Meta Event Type, 7bits (i.e. 0 - 127) */
> ++    OMX_U32 nMetaEventSize;   /**< size of the Meta Event in bytes */
> ++    OMX_U32 nTrack;           /**< track number for the meta event */
> ++    OMX_U32 nPosition;        /**< Position of the meta-event in milliseconds */
> ++} OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE;
> ++
> ++
> ++/** MIDI Meta Event Data structure - one per Meta Event.
> ++ * @ingroup midi
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE{
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< port that this structure applies to */
> ++    OMX_U32 nIndex;           /**< Index of Meta Event */
> ++    OMX_U32 nMetaEventSize;   /**< size of the Meta Event in bytes */
> ++    OMX_U8 nData[1];          /**< array of one or more bytes of meta data
> ++                                   as indicated by the nMetaEventSize field */
> ++} OMX_AUDIO_CONFIG__MIDIMETAEVENTDATATYPE;
> ++
> ++
> ++/** Audio Volume adjustment for a port */
> ++typedef struct OMX_AUDIO_CONFIG_VOLUMETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< Port index indicating which port to
> ++                                     set.  Select the input port to set
> ++                                     just that port's volume.  Select the
> ++                                     output port to adjust the master
> ++                                     volume. */
> ++    OMX_BOOL bLinear;           /**< Is the volume to be set in linear (0.100)
> ++                                     or logarithmic scale (mB) */
> ++    OMX_BS32 sVolume;           /**< Volume linear setting in the 0..100 range, OR
> ++                                     Volume logarithmic setting for this port.  The values
> ++                                     for volume are in mB (millibels = 1/100 dB) relative
> ++                                     to a gain of 1 (e.g. the output is the same as the
> ++                                     input level).  Values are in mB from nMax
> ++                                     (maximum volume) to nMin mB (typically negative).
> ++                                     Since the volume is "voltage"
> ++                                     and not a "power", it takes a setting of
> ++                                     -600 mB to decrease the volume by 1/2.  If
> ++                                     a component cannot accurately set the
> ++                                     volume to the requested value, it must
> ++                                     set the volume to the closest value BELOW
> ++                                     the requested value.  When getting the
> ++                                     volume setting, the current actual volume
> ++                                     must be returned. */
> ++} OMX_AUDIO_CONFIG_VOLUMETYPE;
> ++
> ++
> ++/** Audio Volume adjustment for a channel */
> ++typedef struct OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< Port index indicating which port to
> ++                                     set.  Select the input port to set
> ++                                     just that port's volume.  Select the
> ++                                     output port to adjust the master
> ++                                     volume. */
> ++    OMX_U32 nChannel;           /**< channel to select from 0 to N-1,
> ++                                     using OMX_ALL to apply volume settings
> ++                                     to all channels */
> ++    OMX_BOOL bLinear;           /**< Is the volume to be set in linear (0.100) or
> ++                                     logarithmic scale (mB) */
> ++    OMX_BS32 sVolume;           /**< Volume linear setting in the 0..100 range, OR
> ++                                     Volume logarithmic setting for this port.
> ++                                     The values for volume are in mB
> ++                                     (millibels = 1/100 dB) relative to a gain
> ++                                     of 1 (e.g. the output is the same as the
> ++                                     input level).  Values are in mB from nMax
> ++                                     (maximum volume) to nMin mB (typically negative).
> ++                                     Since the volume is "voltage"
> ++                                     and not a "power", it takes a setting of
> ++                                     -600 mB to decrease the volume by 1/2.  If
> ++                                     a component cannot accurately set the
> ++                                     volume to the requested value, it must
> ++                                     set the volume to the closest value BELOW
> ++                                     the requested value.  When getting the
> ++                                     volume setting, the current actual volume
> ++                                     must be returned. */
> ++    OMX_BOOL bIsMIDI;           /**< TRUE if nChannel refers to a MIDI channel,
> ++                                     FALSE otherwise */
> ++} OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE;
> ++
> ++
> ++/** Audio balance setting */
> ++typedef struct OMX_AUDIO_CONFIG_BALANCETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< Port index indicating which port to
> ++                                     set.  Select the input port to set
> ++                                     just that port's balance.  Select the
> ++                                     output port to adjust the master
> ++                                     balance. */
> ++    OMX_S32 nBalance;           /**< balance setting for this port
> ++                                     (-100 to 100, where -100 indicates
> ++                                     all left, and no right */
> ++} OMX_AUDIO_CONFIG_BALANCETYPE;
> ++
> ++
> ++/** Audio Port mute */
> ++typedef struct OMX_AUDIO_CONFIG_MUTETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< Port index indicating which port to
> ++                                     set.  Select the input port to set
> ++                                     just that port's mute.  Select the
> ++                                     output port to adjust the master
> ++                                     mute. */
> ++    OMX_BOOL bMute;             /**< Mute setting for this port */
> ++} OMX_AUDIO_CONFIG_MUTETYPE;
> ++
> ++
> ++/** Audio Channel mute */
> ++typedef struct OMX_AUDIO_CONFIG_CHANNELMUTETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< port that this structure applies to */
> ++    OMX_U32 nChannel;           /**< channel to select from 0 to N-1,
> ++                                     using OMX_ALL to apply mute settings
> ++                                     to all channels */
> ++    OMX_BOOL bMute;             /**< Mute setting for this channel */
> ++    OMX_BOOL bIsMIDI;           /**< TRUE if nChannel refers to a MIDI channel,
> ++                                     FALSE otherwise */
> ++} OMX_AUDIO_CONFIG_CHANNELMUTETYPE;
> ++
> ++
> ++
> ++/** Enable / Disable for loudness control, which boosts bass and to a
> ++ *  smaller extent high end frequencies to compensate for hearing
> ++ *  ability at the extreme ends of the audio spectrum
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_LOUDNESSTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bLoudness;        /**< Enable/disable for loudness */
> ++} OMX_AUDIO_CONFIG_LOUDNESSTYPE;
> ++
> ++
> ++/** Enable / Disable for bass, which controls low frequencies
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_BASSTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bEnable;          /**< Enable/disable for bass control */
> ++    OMX_S32 nBass;             /**< bass setting for the port, as a
> ++                                    continuous value from -100 to 100
> ++                                    (0 means no change in bass level)*/
> ++} OMX_AUDIO_CONFIG_BASSTYPE;
> ++
> ++
> ++/** Enable / Disable for treble, which controls high frequencies tones
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_TREBLETYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bEnable;          /**< Enable/disable for treble control */
> ++    OMX_S32  nTreble;          /**< treble setting for the port, as a
> ++                                    continuous value from -100 to 100
> ++                                    (0 means no change in treble level) */
> ++} OMX_AUDIO_CONFIG_TREBLETYPE;
> ++
> ++
> ++/** An equalizer is typically used for two reasons: to compensate for an
> ++ *  sub-optimal frequency response of a system to make it sound more natural
> ++ *  or to create intentionally some unnatural coloring to the sound to create
> ++ *  an effect.
> ++ *  @ingroup effects
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_EQUALIZERTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bEnable;          /**< Enable/disable for equalizer */
> ++    OMX_BU32 sBandIndex;       /**< Band number to be set.  Upper Limit is
> ++                                    N-1, where N is the number of bands, lower limit is 0 */
> ++    OMX_BU32 sCenterFreq;      /**< Center frequecies in Hz.  This is a
> ++                                    read only element and is used to determine
> ++                                    the lower, center and upper frequency of
> ++                                    this band.  */
> ++    OMX_BS32 sBandLevel;       /**< band level in millibels */
> ++} OMX_AUDIO_CONFIG_EQUALIZERTYPE;
> ++
> ++
> ++/** Stereo widening mode type
> ++ * @ingroup effects
> ++ */
> ++typedef enum OMX_AUDIO_STEREOWIDENINGTYPE {
> ++    OMX_AUDIO_StereoWideningHeadphones,    /**< Stereo widening for loudspeakers */
> ++    OMX_AUDIO_StereoWideningLoudspeakers,  /**< Stereo widening for closely spaced loudspeakers */
> ++    OMX_AUDIO_StereoWideningKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_AUDIO_StereoWideningVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_AUDIO_StereoWideningMax = 0x7FFFFFFF
> ++} OMX_AUDIO_STEREOWIDENINGTYPE;
> ++
> ++
> ++/** Control for stereo widening, which is a special 2-channel
> ++ *  case of the audio virtualizer effect. For example, for 5.1-channel
> ++ *  output, it translates to virtual surround sound.
> ++ * @ingroup effects
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bEnable;          /**< Enable/disable for stereo widening control */
> ++    OMX_AUDIO_STEREOWIDENINGTYPE eWideningType; /**< Stereo widening algorithm type */
> ++    OMX_U32  nStereoWidening;  /**< stereo widening setting for the port,
> ++                                    as a continuous value from 0 to 100  */
> ++} OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE;
> ++
> ++
> ++/** The chorus effect (or ``choralizer'') is any signal processor which makes
> ++ *  one sound source (such as a voice) sound like many such sources singing
> ++ *  (or playing) in unison. Since performance in unison is never exact, chorus
> ++ *  effects simulate this by making independently modified copies of the input
> ++ *  signal. Modifications may include (1) delay, (2) frequency shift, and
> ++ *  (3) amplitude modulation.
> ++ * @ingroup effects
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_CHORUSTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bEnable;          /**< Enable/disable for chorus */
> ++    OMX_BU32 sDelay;           /**< average delay in milliseconds */
> ++    OMX_BU32 sModulationRate;  /**< rate of modulation in millihertz */
> ++    OMX_U32 nModulationDepth;  /**< depth of modulation as a percentage of
> ++                                    delay (i.e. 0 to 100) */
> ++    OMX_BU32 nFeedback;        /**< Feedback from chorus output to input in percentage */
> ++} OMX_AUDIO_CONFIG_CHORUSTYPE;
> ++
> ++
> ++/** Reverberation is part of the reflected sound that follows the early
> ++ *  reflections. In a typical room, this consists of a dense succession of
> ++ *  echoes whose energy decays exponentially. The reverberation effect structure
> ++ *  as defined here includes both (early) reflections as well as (late) reverberations.
> ++ * @ingroup effects
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_REVERBERATIONTYPE {
> ++    OMX_U32 nSize;                /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;     /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;           /**< port that this structure applies to */
> ++    OMX_BOOL bEnable;             /**< Enable/disable for reverberation control */
> ++    OMX_BS32 sRoomLevel;          /**< Intensity level for the whole room effect
> ++                                       (i.e. both early reflections and late
> ++                                       reverberation) in millibels */
> ++    OMX_BS32 sRoomHighFreqLevel;  /**< Attenuation at high frequencies
> ++                                       relative to the intensity at low
> ++                                       frequencies in millibels */
> ++    OMX_BS32 sReflectionsLevel;   /**< Intensity level of early reflections
> ++                                       (relative to room value), in millibels */
> ++    OMX_BU32 sReflectionsDelay;   /**< Delay time of the first reflection relative
> ++                                       to the direct path, in milliseconds */
> ++    OMX_BS32 sReverbLevel;        /**< Intensity level of late reverberation
> ++                                       relative to room level, in millibels */
> ++    OMX_BU32 sReverbDelay;        /**< Time delay from the first early reflection
> ++                                       to the beginning of the late reverberation
> ++                                       section, in milliseconds */
> ++    OMX_BU32 sDecayTime;          /**< Late reverberation decay time at low
> ++                                       frequencies, in milliseconds */
> ++    OMX_BU32 nDecayHighFreqRatio; /**< Ratio of high frequency decay time relative
> ++                                       to low frequency decay time in percent  */
> ++    OMX_U32 nDensity;             /**< Modal density in the late reverberation decay,
> ++                                       in percent (i.e. 0 - 100) */
> ++    OMX_U32 nDiffusion;           /**< Echo density in the late reverberation decay,
> ++                                       in percent (i.e. 0 - 100) */
> ++    OMX_BU32 sReferenceHighFreq;  /**< Reference high frequency in Hertz. This is
> ++                                       the frequency used as the reference for all
> ++                                       the high-frequency settings above */
> ++
> ++} OMX_AUDIO_CONFIG_REVERBERATIONTYPE;
> ++
> ++
> ++/** Possible settings for the Echo Cancelation structure to use
> ++ * @ingroup effects
> ++ */
> ++typedef enum OMX_AUDIO_ECHOCANTYPE {
> ++   OMX_AUDIO_EchoCanOff = 0,    /**< Echo Cancellation is disabled */
> ++   OMX_AUDIO_EchoCanNormal,     /**< Echo Cancellation normal operation -
> ++                                     echo from plastics and face */
> ++   OMX_AUDIO_EchoCanHFree,      /**< Echo Cancellation optimized for
> ++                                     Hands Free operation */
> ++   OMX_AUDIO_EchoCanCarKit,    /**< Echo Cancellation optimized for
> ++                                     Car Kit (longer echo) */
> ++   OMX_AUDIO_EchoCanKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++   OMX_AUDIO_EchoCanVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++   OMX_AUDIO_EchoCanMax = 0x7FFFFFFF
> ++} OMX_AUDIO_ECHOCANTYPE;
> ++
> ++
> ++/** Enable / Disable for echo cancelation, which removes undesired echo's
> ++ *  from the audio
> ++ * @ingroup effects
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_AUDIO_ECHOCANTYPE eEchoCancelation; /**< Echo cancelation settings */
> ++} OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE;
> ++
> ++
> ++/** Enable / Disable for noise reduction, which undesired noise from
> ++ * the audio
> ++ * @ingroup effects
> ++ */
> ++typedef struct OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;        /**< port that this structure applies to */
> ++    OMX_BOOL bNoiseReduction;  /**< Enable/disable for noise reduction */
> ++} OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE;
> ++
> ++/** @} */
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> ++
> +diff -rupN a/usr/include/OpenMAX/il/OMX_ComponentExt.h b/usr/include/OpenMAX/il/OMX_ComponentExt.h
> +--- a/usr/include/OpenMAX/il/OMX_ComponentExt.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_ComponentExt.h	2011-08-09 09:07:36.000000000 +0200
> +@@ -0,0 +1,61 @@
> ++/*
> ++ * Copyright (c) 2010 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_ComponentExt.h - OpenMax IL version 1.1.2
> ++ * The OMX_ComponentExt header file contains extensions to the definitions used
> ++ * by both the application and the component to access common items.
> ++ */
> ++
> ++#ifndef OMX_ComponentExt_h
> ++#define OMX_ComponentExt_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/* Each OMX header must include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully 
> ++ */
> ++#include <OMX_Types.h>
> ++
> ++
> ++/** Set/query the commit mode */
> ++typedef struct OMX_CONFIG_COMMITMODETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_BOOL bDeferred;
> ++} OMX_CONFIG_COMMITMODETYPE;
> ++
> ++/** Explicit commit */
> ++typedef struct OMX_CONFIG_COMMITTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++} OMX_CONFIG_COMMITTYPE;
> ++
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif /* OMX_ComponentExt_h */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Component.h b/usr/include/OpenMAX/il/OMX_Component.h
> +--- a/usr/include/OpenMAX/il/OMX_Component.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Component.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,579 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_Component.h - OpenMax IL version 1.1.2
> ++ *  The OMX_Component header file contains the definitions used to define
> ++ *  the public interface of a component.  This header file is intended to
> ++ *  be used by both the application and the component.
> ++ */
> ++
> ++#ifndef OMX_Component_h
> ++#define OMX_Component_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++
> ++/* Each OMX header must include all required header files to allow the
> ++ *  header to compile without errors.  The includes below are required
> ++ *  for this header file to compile successfully
> ++ */
> ++
> ++#include <OMX_Audio.h>
> ++#include <OMX_Video.h>
> ++#include <OMX_Image.h>
> ++#include <OMX_Other.h>
> ++
> ++/** @ingroup comp */
> ++typedef enum OMX_PORTDOMAINTYPE {
> ++    OMX_PortDomainAudio,
> ++    OMX_PortDomainVideo,
> ++    OMX_PortDomainImage,
> ++    OMX_PortDomainOther,
> ++    OMX_PortDomainKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_PortDomainVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_PortDomainMax = 0x7ffffff
> ++} OMX_PORTDOMAINTYPE;
> ++
> ++/** @ingroup comp */
> ++typedef struct OMX_PARAM_PORTDEFINITIONTYPE {
> ++    OMX_U32 nSize;                 /**< Size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;      /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;            /**< Port number the structure applies to */
> ++    OMX_DIRTYPE eDir;              /**< Direction (input or output) of this port */
> ++    OMX_U32 nBufferCountActual;    /**< The actual number of buffers allocated on this port */
> ++    OMX_U32 nBufferCountMin;       /**< The minimum number of buffers this port requires */
> ++    OMX_U32 nBufferSize;           /**< Size, in bytes, for buffers to be used for this channel */
> ++    OMX_BOOL bEnabled;             /**< Ports default to enabled and are enabled/disabled by
> ++                                        OMX_CommandPortEnable/OMX_CommandPortDisable.
> ++                                        When disabled a port is unpopulated. A disabled port
> ++                                        is not populated with buffers on a transition to IDLE. */
> ++    OMX_BOOL bPopulated;           /**< Port is populated with all of its buffers as indicated by
> ++                                        nBufferCountActual. A disabled port is always unpopulated.
> ++                                        An enabled port is populated on a transition to OMX_StateIdle
> ++                                        and unpopulated on a transition to loaded. */
> ++    OMX_PORTDOMAINTYPE eDomain;    /**< Domain of the port. Determines the contents of metadata below. */
> ++    union {
> ++        OMX_AUDIO_PORTDEFINITIONTYPE audio;
> ++        OMX_VIDEO_PORTDEFINITIONTYPE video;
> ++        OMX_IMAGE_PORTDEFINITIONTYPE image;
> ++        OMX_OTHER_PORTDEFINITIONTYPE other;
> ++    } format;
> ++    OMX_BOOL bBuffersContiguous;
> ++    OMX_U32 nBufferAlignment;
> ++} OMX_PARAM_PORTDEFINITIONTYPE;
> ++
> ++/** @ingroup comp */
> ++typedef struct OMX_PARAM_U32TYPE {
> ++    OMX_U32 nSize;                    /**< Size of this structure, in Bytes */
> ++    OMX_VERSIONTYPE nVersion;         /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;               /**< port that this structure applies to */
> ++    OMX_U32 nU32;                     /**< U32 value */
> ++} OMX_PARAM_U32TYPE;
> ++
> ++/** @ingroup rpm */
> ++typedef enum OMX_SUSPENSIONPOLICYTYPE {
> ++    OMX_SuspensionDisabled, /**< No suspension; v1.0 behavior */
> ++    OMX_SuspensionEnabled,  /**< Suspension allowed */
> ++    OMX_SuspensionPolicyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_SuspensionPolicyStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_SuspensionPolicyMax = 0x7fffffff
> ++} OMX_SUSPENSIONPOLICYTYPE;
> ++
> ++/** @ingroup rpm */
> ++typedef struct OMX_PARAM_SUSPENSIONPOLICYTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_SUSPENSIONPOLICYTYPE ePolicy;
> ++} OMX_PARAM_SUSPENSIONPOLICYTYPE;
> ++
> ++/** @ingroup rpm */
> ++typedef enum OMX_SUSPENSIONTYPE {
> ++    OMX_NotSuspended, /**< component is not suspended */
> ++    OMX_Suspended,    /**< component is suspended */
> ++    OMX_SuspensionKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_SuspensionVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_SuspendMax = 0x7FFFFFFF
> ++} OMX_SUSPENSIONTYPE;
> ++
> ++/** @ingroup rpm */
> ++typedef struct OMX_PARAM_SUSPENSIONTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_SUSPENSIONTYPE eType;
> ++} OMX_PARAM_SUSPENSIONTYPE ;
> ++
> ++typedef struct OMX_CONFIG_BOOLEANTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_BOOL bEnabled;
> ++} OMX_CONFIG_BOOLEANTYPE;
> ++
> ++/* Parameter specifying the content uri to use. */
> ++/** @ingroup cp */
> ++typedef struct OMX_PARAM_CONTENTURITYPE
> ++{
> ++    OMX_U32 nSize;                      /**< size of the structure in bytes, including
> ++                                             actual URI name */
> ++    OMX_VERSIONTYPE nVersion;           /**< OMX specification version information */
> ++    OMX_U8 contentURI[1];               /**< The URI name */
> ++} OMX_PARAM_CONTENTURITYPE;
> ++
> ++/* Parameter specifying the pipe to use. */
> ++/** @ingroup cp */
> ++typedef struct OMX_PARAM_CONTENTPIPETYPE
> ++{
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_HANDLETYPE hPipe;       /**< The pipe handle*/
> ++} OMX_PARAM_CONTENTPIPETYPE;
> ++
> ++/** @ingroup rpm */
> ++typedef struct OMX_RESOURCECONCEALMENTTYPE {
> ++    OMX_U32 nSize;             /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++    OMX_BOOL bResourceConcealmentForbidden; /**< disallow the use of resource concealment
> ++                                            methods (like degrading algorithm quality to
> ++                                            lower resource consumption or functional bypass)
> ++                                            on a component as a resolution to resource conflicts. */
> ++} OMX_RESOURCECONCEALMENTTYPE;
> ++
> ++
> ++/** @ingroup metadata */
> ++typedef enum OMX_METADATACHARSETTYPE {
> ++    OMX_MetadataCharsetUnknown = 0,
> ++    OMX_MetadataCharsetASCII,
> ++    OMX_MetadataCharsetBinary,
> ++    OMX_MetadataCharsetCodePage1252,
> ++    OMX_MetadataCharsetUTF8,
> ++    OMX_MetadataCharsetJavaConformantUTF8,
> ++    OMX_MetadataCharsetUTF7,
> ++    OMX_MetadataCharsetImapUTF7,
> ++    OMX_MetadataCharsetUTF16LE,
> ++    OMX_MetadataCharsetUTF16BE,
> ++    OMX_MetadataCharsetGB12345,
> ++    OMX_MetadataCharsetHZGB2312,
> ++    OMX_MetadataCharsetGB2312,
> ++    OMX_MetadataCharsetGB18030,
> ++    OMX_MetadataCharsetGBK,
> ++    OMX_MetadataCharsetBig5,
> ++    OMX_MetadataCharsetISO88591,
> ++    OMX_MetadataCharsetISO88592,
> ++    OMX_MetadataCharsetISO88593,
> ++    OMX_MetadataCharsetISO88594,
> ++    OMX_MetadataCharsetISO88595,
> ++    OMX_MetadataCharsetISO88596,
> ++    OMX_MetadataCharsetISO88597,
> ++    OMX_MetadataCharsetISO88598,
> ++    OMX_MetadataCharsetISO88599,
> ++    OMX_MetadataCharsetISO885910,
> ++    OMX_MetadataCharsetISO885913,
> ++    OMX_MetadataCharsetISO885914,
> ++    OMX_MetadataCharsetISO885915,
> ++    OMX_MetadataCharsetShiftJIS,
> ++    OMX_MetadataCharsetISO2022JP,
> ++    OMX_MetadataCharsetISO2022JP1,
> ++    OMX_MetadataCharsetISOEUCJP,
> ++    OMX_MetadataCharsetSMS7Bit,
> ++    OMX_MetadataCharsetKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_MetadataCharsetVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_MetadataCharsetTypeMax= 0x7FFFFFFF
> ++} OMX_METADATACHARSETTYPE;
> ++
> ++/** @ingroup metadata */
> ++typedef enum OMX_METADATASCOPETYPE
> ++{
> ++    OMX_MetadataScopeAllLevels,
> ++    OMX_MetadataScopeTopLevel,
> ++    OMX_MetadataScopePortLevel,
> ++    OMX_MetadataScopeNodeLevel,
> ++    OMX_MetadataScopeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_MetadataScopeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_MetadataScopeTypeMax = 0x7fffffff
> ++} OMX_METADATASCOPETYPE;
> ++
> ++/** @ingroup metadata */
> ++typedef enum OMX_METADATASEARCHMODETYPE
> ++{
> ++    OMX_MetadataSearchValueSizeByIndex,
> ++    OMX_MetadataSearchItemByIndex,
> ++    OMX_MetadataSearchNextItemByKey,
> ++    OMX_MetadataSearchKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_MetadataSearchVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_MetadataSearchTypeMax = 0x7fffffff
> ++} OMX_METADATASEARCHMODETYPE;
> ++/** @ingroup metadata */
> ++typedef struct OMX_CONFIG_METADATAITEMCOUNTTYPE
> ++{
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_METADATASCOPETYPE eScopeMode;
> ++    OMX_U32 nScopeSpecifier;
> ++    OMX_U32 nMetadataItemCount;
> ++} OMX_CONFIG_METADATAITEMCOUNTTYPE;
> ++
> ++/** @ingroup metadata */
> ++typedef struct OMX_CONFIG_METADATAITEMTYPE
> ++{
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_METADATASCOPETYPE eScopeMode;
> ++    OMX_U32 nScopeSpecifier;
> ++    OMX_U32 nMetadataItemIndex;
> ++    OMX_METADATASEARCHMODETYPE eSearchMode;
> ++    OMX_METADATACHARSETTYPE eKeyCharset;
> ++    OMX_U8 nKeySizeUsed;
> ++    OMX_U8 nKey[128];
> ++    OMX_METADATACHARSETTYPE eValueCharset;
> ++    OMX_STRING sLanguageCountry;
> ++    OMX_U32 nValueMaxSize;
> ++    OMX_U32 nValueSizeUsed;
> ++    OMX_U8 nValue[1];
> ++} OMX_CONFIG_METADATAITEMTYPE;
> ++
> ++/* @ingroup metadata */
> ++typedef struct OMX_CONFIG_CONTAINERNODECOUNTTYPE
> ++{
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_BOOL bAllKeys;
> ++    OMX_U32 nParentNodeID;
> ++    OMX_U32 nNumNodes;
> ++} OMX_CONFIG_CONTAINERNODECOUNTTYPE;
> ++
> ++/** @ingroup metadata */
> ++typedef struct OMX_CONFIG_CONTAINERNODEIDTYPE
> ++{
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_BOOL bAllKeys;
> ++    OMX_U32 nParentNodeID;
> ++    OMX_U32 nNodeIndex;
> ++    OMX_U32 nNodeID;
> ++    OMX_STRING cNodeName;
> ++    OMX_BOOL bIsLeafType;
> ++} OMX_CONFIG_CONTAINERNODEIDTYPE;
> ++
> ++/** @ingroup metadata */
> ++typedef struct OMX_PARAM_METADATAFILTERTYPE
> ++{
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_BOOL bAllKeys;	/* if true then this structure refers to all keys and
> ++                         * the three key fields below are ignored */
> ++    OMX_METADATACHARSETTYPE eKeyCharset;
> ++    OMX_U32 nKeySizeUsed;
> ++    OMX_U8   nKey [128];
> ++    OMX_U32 nLanguageCountrySizeUsed;
> ++    OMX_U8 nLanguageCountry[128];
> ++    OMX_BOOL bEnabled;	/* if true then key is part of filter (e.g.
> ++                         * retained for query later). If false then
> ++                         * key is not part of filter */
> ++} OMX_PARAM_METADATAFILTERTYPE;
> ++
> ++/** The OMX_HANDLETYPE structure defines the component handle.  The component
> ++ *  handle is used to access all of the component's public methods and also
> ++ *  contains pointers to the component's private data area.  The component
> ++ *  handle is initialized by the OMX core (with help from the component)
> ++ *  during the process of loading the component.  After the component is
> ++ *  successfully loaded, the application can safely access any of the
> ++ *  component's public functions (although some may return an error because
> ++ *  the state is inappropriate for the access).
> ++ *
> ++ *  @ingroup comp
> ++ */
> ++typedef struct OMX_COMPONENTTYPE
> ++{
> ++    /** The size of this structure, in bytes.  It is the responsibility
> ++        of the allocator of this structure to fill in this value.  Since
> ++        this structure is allocated by the GetHandle function, this
> ++        function will fill in this value. */
> ++    OMX_U32 nSize;
> ++
> ++    /** nVersion is the version of the OMX specification that the structure
> ++        is built against.  It is the responsibility of the creator of this
> ++        structure to initialize this value and every user of this structure
> ++        should verify that it knows how to use the exact version of
> ++        this structure found herein. */
> ++    OMX_VERSIONTYPE nVersion;
> ++
> ++    /** pComponentPrivate is a pointer to the component private data area.
> ++        This member is allocated and initialized by the component when the
> ++        component is first loaded.  The application should not access this
> ++        data area. */
> ++    OMX_PTR pComponentPrivate;
> ++
> ++    /** pApplicationPrivate is a pointer that is a parameter to the
> ++        OMX_GetHandle method, and contains an application private value
> ++        provided by the IL client.  This application private data is
> ++        returned to the IL Client by OMX in all callbacks */
> ++    OMX_PTR pApplicationPrivate;
> ++
> ++    /** refer to OMX_GetComponentVersion in OMX_core.h or the OMX IL
> ++        specification for details on the GetComponentVersion method.
> ++     */
> ++    OMX_ERRORTYPE (*GetComponentVersion)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_OUT OMX_STRING pComponentName,
> ++            OMX_OUT OMX_VERSIONTYPE* pComponentVersion,
> ++            OMX_OUT OMX_VERSIONTYPE* pSpecVersion,
> ++            OMX_OUT OMX_UUIDTYPE* pComponentUUID);
> ++
> ++    /** refer to OMX_SendCommand in OMX_core.h or the OMX IL
> ++        specification for details on the SendCommand method.
> ++     */
> ++    OMX_ERRORTYPE (*SendCommand)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_COMMANDTYPE Cmd,
> ++            OMX_IN  OMX_U32 nParam1,
> ++            OMX_IN  OMX_PTR pCmdData);
> ++
> ++    /** refer to OMX_GetParameter in OMX_core.h or the OMX IL
> ++        specification for details on the GetParameter method.
> ++     */
> ++    OMX_ERRORTYPE (*GetParameter)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_INDEXTYPE nParamIndex,
> ++            OMX_INOUT OMX_PTR pComponentParameterStructure);
> ++
> ++
> ++    /** refer to OMX_SetParameter in OMX_core.h or the OMX IL
> ++        specification for details on the SetParameter method.
> ++     */
> ++    OMX_ERRORTYPE (*SetParameter)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_INDEXTYPE nIndex,
> ++            OMX_IN  OMX_PTR pComponentParameterStructure);
> ++
> ++
> ++    /** refer to OMX_GetConfig in OMX_core.h or the OMX IL
> ++        specification for details on the GetConfig method.
> ++     */
> ++    OMX_ERRORTYPE (*GetConfig)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_INDEXTYPE nIndex,
> ++            OMX_INOUT OMX_PTR pComponentConfigStructure);
> ++
> ++
> ++    /** refer to OMX_SetConfig in OMX_core.h or the OMX IL
> ++        specification for details on the SetConfig method.
> ++     */
> ++    OMX_ERRORTYPE (*SetConfig)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_INDEXTYPE nIndex,
> ++            OMX_IN  OMX_PTR pComponentConfigStructure);
> ++
> ++
> ++    /** refer to OMX_GetExtensionIndex in OMX_core.h or the OMX IL
> ++        specification for details on the GetExtensionIndex method.
> ++     */
> ++    OMX_ERRORTYPE (*GetExtensionIndex)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_STRING cParameterName,
> ++            OMX_OUT OMX_INDEXTYPE* pIndexType);
> ++
> ++
> ++    /** refer to OMX_GetState in OMX_core.h or the OMX IL
> ++        specification for details on the GetState method.
> ++     */
> ++    OMX_ERRORTYPE (*GetState)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_OUT OMX_STATETYPE* pState);
> ++
> ++
> ++    /** The ComponentTunnelRequest method will interact with another OMX
> ++        component to determine if tunneling is possible and to setup the
> ++        tunneling.  The return codes for this method can be used to
> ++        determine if tunneling is not possible, or if tunneling is not
> ++        supported.
> ++
> ++        Base profile components (i.e. non-interop) do not support this
> ++        method and should return OMX_ErrorNotImplemented
> ++
> ++        The interop profile component MUST support tunneling to another
> ++        interop profile component with a compatible port parameters.
> ++        A component may also support proprietary communication.
> ++
> ++        If proprietary communication is supported the negotiation of
> ++        proprietary communication is done outside of OMX in a vendor
> ++        specific way. It is only required that the proper result be
> ++        returned and the details of how the setup is done is left
> ++        to the component implementation.
> ++
> ++        When this method is invoked when nPort in an output port, the
> ++        component will:
> ++        1.  Populate the pTunnelSetup structure with the output port's
> ++            requirements and constraints for the tunnel.
> ++
> ++        When this method is invoked when nPort in an input port, the
> ++        component will:
> ++        1.  Query the necessary parameters from the output port to
> ++            determine if the ports are compatible for tunneling
> ++        2.  If the ports are compatible, the component should store
> ++            the tunnel step provided by the output port
> ++        3.  Determine which port (either input or output) is the buffer
> ++            supplier, and call OMX_SetParameter on the output port to
> ++            indicate this selection.
> ++
> ++        The component will return from this call within 5 msec.
> ++
> ++        @param [in] hComp
> ++            Handle of the component to be accessed.  This is the component
> ++            handle returned by the call to the OMX_GetHandle method.
> ++        @param [in] nPort
> ++            nPort is used to select the port on the component to be used
> ++            for tunneling.
> ++        @param [in] hTunneledComp
> ++            Handle of the component to tunnel with.  This is the component
> ++            handle returned by the call to the OMX_GetHandle method.  When
> ++            this parameter is 0x0 the component should setup the port for
> ++            communication with the application / IL Client.
> ++        @param [in] nPortOutput
> ++            nPortOutput is used indicate the port the component should
> ++            tunnel with.
> ++        @param [in] pTunnelSetup
> ++            Pointer to the tunnel setup structure.  When nPort is an output port
> ++            the component should populate the fields of this structure.  When
> ++            When nPort is an input port the component should review the setup
> ++            provided by the component with the output port.
> ++        @return OMX_ERRORTYPE
> ++            If the command successfully executes, the return code will be
> ++            OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++        @ingroup tun
> ++    */
> ++
> ++    OMX_ERRORTYPE (*ComponentTunnelRequest)(
> ++        OMX_IN  OMX_HANDLETYPE hComp,
> ++        OMX_IN  OMX_U32 nPort,
> ++        OMX_IN  OMX_HANDLETYPE hTunneledComp,
> ++        OMX_IN  OMX_U32 nTunneledPort,
> ++        OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
> ++
> ++    /** refer to OMX_UseBuffer in OMX_core.h or the OMX IL
> ++        specification for details on the UseBuffer method.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*UseBuffer)(
> ++            OMX_IN OMX_HANDLETYPE hComponent,
> ++            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
> ++            OMX_IN OMX_U32 nPortIndex,
> ++            OMX_IN OMX_PTR pAppPrivate,
> ++            OMX_IN OMX_U32 nSizeBytes,
> ++            OMX_IN OMX_U8* pBuffer);
> ++
> ++    /** refer to OMX_AllocateBuffer in OMX_core.h or the OMX IL
> ++        specification for details on the AllocateBuffer method.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*AllocateBuffer)(
> ++            OMX_IN OMX_HANDLETYPE hComponent,
> ++            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer,
> ++            OMX_IN OMX_U32 nPortIndex,
> ++            OMX_IN OMX_PTR pAppPrivate,
> ++            OMX_IN OMX_U32 nSizeBytes);
> ++
> ++    /** refer to OMX_FreeBuffer in OMX_core.h or the OMX IL
> ++        specification for details on the FreeBuffer method.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*FreeBuffer)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_U32 nPortIndex,
> ++            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
> ++
> ++    /** refer to OMX_EmptyThisBuffer in OMX_core.h or the OMX IL
> ++        specification for details on the EmptyThisBuffer method.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*EmptyThisBuffer)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
> ++
> ++    /** refer to OMX_FillThisBuffer in OMX_core.h or the OMX IL
> ++        specification for details on the FillThisBuffer method.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*FillThisBuffer)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
> ++
> ++    /** The SetCallbacks method is used by the core to specify the callback
> ++        structure from the application to the component.  This is a blocking
> ++        call.  The component will return from this call within 5 msec.
> ++        @param [in] hComponent
> ++            Handle of the component to be accessed.  This is the component
> ++            handle returned by the call to the GetHandle function.
> ++        @param [in] pCallbacks
> ++            pointer to an OMX_CALLBACKTYPE structure used to provide the
> ++            callback information to the component
> ++        @param [in] pAppData
> ++            pointer to an application defined value.  It is anticipated that
> ++            the application will pass a pointer to a data structure or a "this
> ++            pointer" in this area to allow the callback (in the application)
> ++            to determine the context of the call
> ++        @return OMX_ERRORTYPE
> ++            If the command successfully executes, the return code will be
> ++            OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++     */
> ++    OMX_ERRORTYPE (*SetCallbacks)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent,
> ++            OMX_IN  OMX_CALLBACKTYPE* pCallbacks,
> ++            OMX_IN  OMX_PTR pAppData);
> ++
> ++    /** ComponentDeInit method is used to deinitialize the component
> ++        providing a means to free any resources allocated at component
> ++        initialization.  NOTE:  After this call the component handle is
> ++        not valid for further use.
> ++        @param [in] hComponent
> ++            Handle of the component to be accessed.  This is the component
> ++            handle returned by the call to the GetHandle function.
> ++        @return OMX_ERRORTYPE
> ++            If the command successfully executes, the return code will be
> ++            OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++     */
> ++    OMX_ERRORTYPE (*ComponentDeInit)(
> ++            OMX_IN  OMX_HANDLETYPE hComponent);
> ++
> ++    /** @ingroup buf */
> ++    OMX_ERRORTYPE (*UseEGLImage)(
> ++            OMX_IN OMX_HANDLETYPE hComponent,
> ++            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
> ++            OMX_IN OMX_U32 nPortIndex,
> ++            OMX_IN OMX_PTR pAppPrivate,
> ++            OMX_IN void* eglImage);
> ++
> ++    OMX_ERRORTYPE (*ComponentRoleEnum)(
> ++        OMX_IN OMX_HANDLETYPE hComponent,
> ++		OMX_OUT OMX_U8 *cRole,
> ++		OMX_IN OMX_U32 nIndex);
> ++
> ++} OMX_COMPONENTTYPE;
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_ContentPipe.h b/usr/include/OpenMAX/il/OMX_ContentPipe.h
> +--- a/usr/include/OpenMAX/il/OMX_ContentPipe.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_ContentPipe.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,195 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_ContentPipe.h - OpenMax IL version 1.1.2
> ++ *  The OMX_ContentPipe header file contains the definitions used to define
> ++ *  the public interface for content piples.  This header file is intended to
> ++ *  be used by the component.
> ++ */
> ++
> ++#ifndef OMX_CONTENTPIPE_H
> ++#define OMX_CONTENTPIPE_H
> ++
> ++#ifndef KD_EACCES
> ++/* OpenKODE error codes. CPResult values may be zero (indicating success
> ++   or one of the following values) */
> ++#define KD_EACCES (1)
> ++#define KD_EADDRINUSE (2)
> ++#define KD_EAGAIN (5)
> ++#define KD_EBADF (7)
> ++#define KD_EBUSY (8)
> ++#define KD_ECONNREFUSED (9)
> ++#define KD_ECONNRESET (10)
> ++#define KD_EDEADLK (11)
> ++#define KD_EDESTADDRREQ (12)
> ++#define KD_ERANGE (35)
> ++#define KD_EEXIST (13)
> ++#define KD_EFBIG (14)
> ++#define KD_EHOSTUNREACH (15)
> ++#define KD_EINVAL (17)
> ++#define KD_EIO (18)
> ++#define KD_EISCONN (20)
> ++#define KD_EISDIR (21)
> ++#define KD_EMFILE (22)
> ++#define KD_ENAMETOOLONG (23)
> ++#define KD_ENOENT (24)
> ++#define KD_ENOMEM (25)
> ++#define KD_ENOSPC (26)
> ++#define KD_ENOSYS (27)
> ++#define KD_ENOTCONN (28)
> ++#define KD_EPERM (33)
> ++#define KD_ETIMEDOUT (36)
> ++#define KD_EILSEQ (19)
> ++#endif
> ++
> ++/** Map types from OMX standard types only here so interface is as generic as possible. */
> ++typedef OMX_U32    CPresult;
> ++typedef char *     CPstring;
> ++typedef void *     CPhandle;
> ++typedef OMX_U32    CPuint;
> ++typedef OMX_S32    CPint;
> ++typedef char       CPbyte;
> ++typedef OMX_BOOL   CPbool;
> ++
> ++/** enumeration of origin types used in the CP_PIPETYPE's Seek function
> ++ * @ingroup cp
> ++ */
> ++typedef enum CP_ORIGINTYPE {
> ++    CP_OriginBegin,
> ++    CP_OriginCur,
> ++    CP_OriginEnd,
> ++    CP_OriginKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    CP_OriginVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    CP_OriginMax = 0X7FFFFFFF
> ++} CP_ORIGINTYPE;
> ++
> ++/** enumeration of contact access types used in the CP_PIPETYPE's Open function
> ++ * @ingroup cp
> ++ */
> ++typedef enum CP_ACCESSTYPE {
> ++    CP_AccessRead,
> ++    CP_AccessWrite,
> ++    CP_AccessReadWrite ,
> ++    CP_AccessKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    CP_AccessVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    CP_AccessMax = 0X7FFFFFFF
> ++} CP_ACCESSTYPE;
> ++
> ++/** enumeration of results returned by the CP_PIPETYPE's CheckAvailableBytes function
> ++ * @ingroup cp
> ++ */
> ++typedef enum CP_CHECKBYTESRESULTTYPE
> ++{
> ++    CP_CheckBytesOk,                    /**< There are at least the request number
> ++                                              of bytes available */
> ++    CP_CheckBytesNotReady,              /**< The pipe is still retrieving bytes
> ++                                              and presently lacks sufficient bytes.
> ++                                              Client will be called when they are
> ++                                              sufficient bytes are available. */
> ++    CP_CheckBytesInsufficientBytes  ,     /**< The pipe has retrieved all bytes
> ++                                              but those available are less than those
> ++                                              requested */
> ++    CP_CheckBytesAtEndOfStream,         /**< The pipe has reached the end of stream
> ++                                              and no more bytes are available. */
> ++    CP_CheckBytesOutOfBuffers,          /**< All read/write buffers are currently in use. */
> ++    CP_CheckBytesKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    CP_CheckBytesVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    CP_CheckBytesMax = 0X7FFFFFFF
> ++} CP_CHECKBYTESRESULTTYPE;
> ++
> ++/** enumeration of content pipe events sent to the client callback.
> ++ * @ingroup cp
> ++ */
> ++typedef enum CP_EVENTTYPE{
> ++    CP_BytesAvailable,	    /** bytes requested in a CheckAvailableBytes call are now available*/
> ++    CP_Overflow,		           /** enumeration of content pipe events sent to the client callback*/
> ++    CP_PipeDisconnected  ,		    /** enumeration of content pipe events sent to the client callback*/
> ++    CP_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    CP_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    CP_EventMax = 0X7FFFFFFF
> ++} CP_EVENTTYPE;
> ++
> ++/** content pipe definition
> ++ * @ingroup cp
> ++ */
> ++typedef struct CP_PIPETYPE
> ++{
> ++    /** Open a content stream for reading or writing. */
> ++    CPresult (*Open)( CPhandle* hContent, CPstring szURI, CP_ACCESSTYPE eAccess );
> ++
> ++    /** Close a content stream. */
> ++    CPresult (*Close)( CPhandle hContent );
> ++
> ++    /** Create a content source and open it for writing. */
> ++    CPresult (*Create)( CPhandle *hContent, CPstring szURI );
> ++
> ++    /** Check the that specified number of bytes are available for reading or writing (depending on access type).*/
> ++    CPresult (*CheckAvailableBytes)( CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult );
> ++
> ++    /** Seek to certain position in the content relative to the specified origin. */
> ++    CPresult (*SetPosition)( CPhandle  hContent, CPint nOffset, CP_ORIGINTYPE eOrigin);
> ++
> ++    /** Retrieve the current position relative to the start of the content. */
> ++    CPresult (*GetPosition)( CPhandle hContent, CPuint *pPosition);
> ++
> ++    /** Retrieve data of the specified size from the content stream (advance content pointer by size of data).
> ++       Note: pipe client provides pointer. This function is appropriate for small high frequency reads. */
> ++    CPresult (*Read)( CPhandle hContent, CPbyte *pData, CPuint nSize);
> ++
> ++    /** Retrieve a buffer allocated by the pipe that contains the requested number of bytes.
> ++       Buffer contains the next block of bytes, as specified by nSize, of the content. nSize also
> ++       returns the size of the block actually read. Content pointer advances the by the returned size.
> ++       Note: pipe provides pointer. This function is appropriate for large reads. The client must call
> ++       ReleaseReadBuffer when done with buffer.
> ++
> ++       In some cases the requested block may not reside in contiguous memory within the
> ++       pipe implementation. For instance if the pipe leverages a circular buffer then the requested
> ++       block may straddle the boundary of the circular buffer. By default a pipe implementation
> ++       performs a copy in this case to provide the block to the pipe client in one contiguous buffer.
> ++       If, however, the client sets bForbidCopy, then the pipe returns only those bytes preceding the memory
> ++       boundary. Here the client may retrieve the data in segments over successive calls. */
> ++    CPresult (*ReadBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy);
> ++
> ++    /** Release a buffer obtained by ReadBuffer back to the pipe. */
> ++    CPresult (*ReleaseReadBuffer)(CPhandle hContent, CPbyte *pBuffer);
> ++
> ++    /** Write data of the specified size to the content (advance content pointer by size of data).
> ++       Note: pipe client provides pointer. This function is appropriate for small high frequency writes. */
> ++    CPresult (*Write)( CPhandle hContent, CPbyte *data, CPuint nSize);
> ++
> ++    /** Retrieve a buffer allocated by the pipe used to write data to the content.
> ++       Client will fill buffer with output data. Note: pipe provides pointer. This function is appropriate
> ++       for large writes. The client must call WriteBuffer when done it has filled the buffer with data.*/
> ++    CPresult (*GetWriteBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint nSize);
> ++
> ++    /** Deliver a buffer obtained via GetWriteBuffer to the pipe. Pipe will write the
> ++       the contents of the buffer to content and advance content pointer by the size of the buffer */
> ++    CPresult (*WriteBuffer)( CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize);
> ++
> ++    /** Register a per-handle client callback with the content pipe. */
> ++    CPresult (*RegisterCallback)( CPhandle hContent, CPresult (*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam));
> ++
> ++} CP_PIPETYPE;
> ++
> ++#endif
> ++
> +diff -rupN a/usr/include/OpenMAX/il/OMX_CoreExt.h b/usr/include/OpenMAX/il/OMX_CoreExt.h
> +--- a/usr/include/OpenMAX/il/OMX_CoreExt.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_CoreExt.h	2011-08-09 09:07:36.000000000 +0200
> +@@ -0,0 +1,73 @@
> ++/*
> ++ * Copyright (c) 2010 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_CoreExt.h - OpenMax IL version 1.1.2
> ++ * The OMX_CoreExt header file contains extensions to the definitions used
> ++ * by both the application and the component to access common items.
> ++ */
> ++
> ++#ifndef OMX_CoreExt_h
> ++#define OMX_CoreExt_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/* Each OMX header shall include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully
> ++ */
> ++#include <OMX_Core.h>
> ++
> ++/** Extensions to the standard IL errors. */ 
> ++typedef enum OMX_ERROREXTTYPE 
> ++{
> ++    OMX_ErrorInvalidMode = (OMX_S32) (OMX_ErrorKhronosExtensions + 0x00000001),
> ++    OMX_ErrorExtMax = 0x7FFFFFFF
> ++} OMX_ERROREXTTYPE;
> ++
> ++
> ++/** Event type extensions. */
> ++typedef enum OMX_EVENTEXTTYPE
> ++{
> ++    OMX_EventIndexSettingChanged = OMX_EventKhronosExtensions, /**< component signals the IL client of a change
> ++                                                                    in a param, config, or extension */
> ++    OMX_EventExtMax = 0x7FFFFFFF
> ++} OMX_EVENTEXTTYPE;
> ++
> ++
> ++/** Enable or disable a callback event. */
> ++typedef struct OMX_CONFIG_CALLBACKREQUESTTYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< port that this structure applies to */
> ++    OMX_INDEXTYPE nIndex;       /**< the index the callback is requested for */
> ++    OMX_BOOL bEnable;           /**< enable (OMX_TRUE) or disable (OMX_FALSE) the callback */
> ++} OMX_CONFIG_CALLBACKREQUESTTYPE;
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif /* OMX_CoreExt_h */
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Core.h b/usr/include/OpenMAX/il/OMX_Core.h
> +--- a/usr/include/OpenMAX/il/OMX_Core.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Core.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,1431 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_Core.h - OpenMax IL version 1.1.2
> ++ *  The OMX_Core header file contains the definitions used by both the
> ++ *  application and the component to access common items.
> ++ */
> ++
> ++#ifndef OMX_Core_h
> ++#define OMX_Core_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++/* Each OMX header shall include all required header files to allow the
> ++ *  header to compile without errors.  The includes below are required
> ++ *  for this header file to compile successfully
> ++ */
> ++
> ++#include <OMX_Index.h>
> ++
> ++
> ++/** The OMX_COMMANDTYPE enumeration is used to specify the action in the
> ++ *  OMX_SendCommand macro.
> ++ *  @ingroup core
> ++ */
> ++typedef enum OMX_COMMANDTYPE
> ++{
> ++    OMX_CommandStateSet,    /**< Change the component state */
> ++    OMX_CommandFlush,       /**< Flush the data queue(s) of a component */
> ++    OMX_CommandPortDisable, /**< Disable a port on a component. */
> ++    OMX_CommandPortEnable,  /**< Enable a port on a component. */
> ++    OMX_CommandMarkBuffer,  /**< Mark a component/buffer for observation */
> ++    OMX_CommandKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_CommandVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_CommandMax = 0X7FFFFFFF
> ++} OMX_COMMANDTYPE;
> ++
> ++
> ++
> ++/** The OMX_STATETYPE enumeration is used to indicate or change the component
> ++ *  state.  This enumeration reflects the current state of the component when
> ++ *  used with the OMX_GetState macro or becomes the parameter in a state change
> ++ *  command when used with the OMX_SendCommand macro.
> ++ *
> ++ *  The component will be in the Loaded state after the component is initially
> ++ *  loaded into memory.  In the Loaded state, the component is not allowed to
> ++ *  allocate or hold resources other than to build it's internal parameter
> ++ *  and configuration tables.  The application will send one or more
> ++ *  SetParameters/GetParameters and SetConfig/GetConfig commands to the
> ++ *  component and the component will record each of these parameter and
> ++ *  configuration changes for use later.  When the application sends the
> ++ *  Idle command, the component will acquire the resources needed for the
> ++ *  specified configuration and will transition to the idle state if the
> ++ *  allocation is successful.  If the component cannot successfully
> ++ *  transition to the idle state for any reason, the state of the component
> ++ *  shall be fully rolled back to the Loaded state (e.g. all allocated
> ++ *  resources shall be released).  When the component receives the command
> ++ *  to go to the Executing state, it shall begin processing buffers by
> ++ *  sending all input buffers it holds to the application.  While
> ++ *  the component is in the Idle state, the application may also send the
> ++ *  Pause command.  If the component receives the pause command while in the
> ++ *  Idle state, the component shall send all input buffers it holds to the
> ++ *  application, but shall not begin processing buffers.  This will allow the
> ++ *  application to prefill buffers.
> ++ *
> ++ *  @ingroup comp
> ++ */
> ++
> ++typedef enum OMX_STATETYPE
> ++{
> ++    OMX_StateInvalid,      /**< component has detected that it's internal data
> ++                                structures are corrupted to the point that
> ++                                it cannot determine it's state properly */
> ++    OMX_StateLoaded,      /**< component has been loaded but has not completed
> ++                                initialization.  The OMX_SetParameter macro
> ++                                and the OMX_GetParameter macro are the only
> ++                                valid macros allowed to be sent to the
> ++                                component in this state. */
> ++    OMX_StateIdle,        /**< component initialization has been completed
> ++                                successfully and the component is ready to
> ++                                to start. */
> ++    OMX_StateExecuting,   /**< component has accepted the start command and
> ++                                is processing data (if data is available) */
> ++    OMX_StatePause,       /**< component has received pause command */
> ++    OMX_StateWaitForResources, /**< component is waiting for resources, either after
> ++                                preemption or before it gets the resources requested.
> ++                                See specification for complete details. */
> ++    OMX_StateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_StateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_StateMax = 0X7FFFFFFF
> ++} OMX_STATETYPE;
> ++
> ++/** The OMX_ERRORTYPE enumeration defines the standard OMX Errors.  These
> ++ *  errors should cover most of the common failure cases.  However,
> ++ *  vendors are free to add additional error messages of their own as
> ++ *  long as they follow these rules:
> ++ *  1.  Vendor error messages shall be in the range of 0x90000000 to
> ++ *      0x9000FFFF.
> ++ *  2.  Vendor error messages shall be defined in a header file provided
> ++ *      with the component.  No error messages are allowed that are
> ++ *      not defined.
> ++ */
> ++typedef enum OMX_ERRORTYPE
> ++{
> ++  OMX_ErrorNone = 0,
> ++
> ++  /** There were insufficient resources to perform the requested operation */
> ++  OMX_ErrorInsufficientResources = (OMX_S32) 0x80001000,
> ++
> ++  /** There was an error, but the cause of the error could not be determined */
> ++  OMX_ErrorUndefined = (OMX_S32) 0x80001001,
> ++
> ++  /** The component name string was not valid */
> ++  OMX_ErrorInvalidComponentName = (OMX_S32) 0x80001002,
> ++
> ++  /** No component with the specified name string was found */
> ++  OMX_ErrorComponentNotFound = (OMX_S32) 0x80001003,
> ++
> ++  /** The component specified did not have a "OMX_ComponentInit" or
> ++      "OMX_ComponentDeInit entry point */
> ++  OMX_ErrorInvalidComponent = (OMX_S32) 0x80001004,
> ++
> ++  /** One or more parameters were not valid */
> ++  OMX_ErrorBadParameter = (OMX_S32) 0x80001005,
> ++
> ++  /** The requested function is not implemented */
> ++  OMX_ErrorNotImplemented = (OMX_S32) 0x80001006,
> ++
> ++  /** The buffer was emptied before the next buffer was ready */
> ++  OMX_ErrorUnderflow = (OMX_S32) 0x80001007,
> ++
> ++  /** The buffer was not available when it was needed */
> ++  OMX_ErrorOverflow = (OMX_S32) 0x80001008,
> ++
> ++  /** The hardware failed to respond as expected */
> ++  OMX_ErrorHardware = (OMX_S32) 0x80001009,
> ++
> ++  /** The component is in the state OMX_StateInvalid */
> ++  OMX_ErrorInvalidState = (OMX_S32) 0x8000100A,
> ++
> ++  /** Stream is found to be corrupt */
> ++  OMX_ErrorStreamCorrupt = (OMX_S32) 0x8000100B,
> ++
> ++  /** Ports being connected are not compatible */
> ++  OMX_ErrorPortsNotCompatible = (OMX_S32) 0x8000100C,
> ++
> ++  /** Resources allocated to an idle component have been
> ++      lost resulting in the component returning to the loaded state */
> ++  OMX_ErrorResourcesLost = (OMX_S32) 0x8000100D,
> ++
> ++  /** No more indicies can be enumerated */
> ++  OMX_ErrorNoMore = (OMX_S32) 0x8000100E,
> ++
> ++  /** The component detected a version mismatch */
> ++  OMX_ErrorVersionMismatch = (OMX_S32) 0x8000100F,
> ++
> ++  /** The component is not ready to return data at this time */
> ++  OMX_ErrorNotReady = (OMX_S32) 0x80001010,
> ++
> ++  /** There was a timeout that occurred */
> ++  OMX_ErrorTimeout = (OMX_S32) 0x80001011,
> ++
> ++  /** This error occurs when trying to transition into the state you are already in */
> ++  OMX_ErrorSameState = (OMX_S32) 0x80001012,
> ++
> ++  /** Resources allocated to an executing or paused component have been
> ++      preempted, causing the component to return to the idle state */
> ++  OMX_ErrorResourcesPreempted = (OMX_S32) 0x80001013,
> ++
> ++  /** A non-supplier port sends this error to the IL client (via the EventHandler callback)
> ++      during the allocation of buffers (on a transition from the LOADED to the IDLE state or
> ++      on a port restart) when it deems that it has waited an unusually long time for the supplier
> ++      to send it an allocated buffer via a UseBuffer call. */
> ++  OMX_ErrorPortUnresponsiveDuringAllocation = (OMX_S32) 0x80001014,
> ++
> ++  /** A non-supplier port sends this error to the IL client (via the EventHandler callback)
> ++      during the deallocation of buffers (on a transition from the IDLE to LOADED state or
> ++      on a port stop) when it deems that it has waited an unusually long time for the supplier
> ++      to request the deallocation of a buffer header via a FreeBuffer call. */
> ++  OMX_ErrorPortUnresponsiveDuringDeallocation = (OMX_S32) 0x80001015,
> ++
> ++  /** A supplier port sends this error to the IL client (via the EventHandler callback)
> ++      during the stopping of a port (either on a transition from the IDLE to LOADED
> ++      state or a port stop) when it deems that it has waited an unusually long time for
> ++      the non-supplier to return a buffer via an EmptyThisBuffer or FillThisBuffer call. */
> ++  OMX_ErrorPortUnresponsiveDuringStop = (OMX_S32) 0x80001016,
> ++
> ++  /** Attempting a state transtion that is not allowed */
> ++  OMX_ErrorIncorrectStateTransition = (OMX_S32) 0x80001017,
> ++
> ++  /* Attempting a command that is not allowed during the present state. */
> ++  OMX_ErrorIncorrectStateOperation = (OMX_S32) 0x80001018,
> ++
> ++  /** The values encapsulated in the parameter or config structure are not supported. */
> ++  OMX_ErrorUnsupportedSetting = (OMX_S32) 0x80001019,
> ++
> ++  /** The parameter or config indicated by the given index is not supported. */
> ++  OMX_ErrorUnsupportedIndex = (OMX_S32) 0x8000101A,
> ++
> ++  /** The port index supplied is incorrect. */
> ++  OMX_ErrorBadPortIndex = (OMX_S32) 0x8000101B,
> ++
> ++  /** The port has lost one or more of its buffers and it thus unpopulated. */
> ++  OMX_ErrorPortUnpopulated = (OMX_S32) 0x8000101C,
> ++
> ++  /** Component suspended due to temporary loss of resources */
> ++  OMX_ErrorComponentSuspended = (OMX_S32) 0x8000101D,
> ++
> ++  /** Component suspended due to an inability to acquire dynamic resources */
> ++  OMX_ErrorDynamicResourcesUnavailable = (OMX_S32) 0x8000101E,
> ++
> ++  /** When the macroblock error reporting is enabled the component returns new error
> ++  for every frame that has errors */
> ++  OMX_ErrorMbErrorsInFrame = (OMX_S32) 0x8000101F,
> ++
> ++  /** A component reports this error when it cannot parse or determine the format of an input stream. */
> ++  OMX_ErrorFormatNotDetected = (OMX_S32) 0x80001020,
> ++
> ++  /** The content open operation failed. */
> ++  OMX_ErrorContentPipeOpenFailed = (OMX_S32) 0x80001021,
> ++
> ++  /** The content creation operation failed. */
> ++  OMX_ErrorContentPipeCreationFailed = (OMX_S32) 0x80001022,
> ++
> ++  /** Separate table information is being used */
> ++  OMX_ErrorSeperateTablesUsed = (OMX_S32) 0x80001023,
> ++
> ++  /** Tunneling is unsupported by the component*/
> ++  OMX_ErrorTunnelingUnsupported = (OMX_S32) 0x80001024,
> ++
> ++  OMX_ErrorKhronosExtensions = (OMX_S32)0x8F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++  OMX_ErrorVendorStartUnused = (OMX_S32)0x90000000, /**< Reserved region for introducing Vendor Extensions */
> ++  OMX_ErrorMax = 0x7FFFFFFF
> ++} OMX_ERRORTYPE;
> ++
> ++/** @ingroup core */
> ++typedef OMX_ERRORTYPE (* OMX_COMPONENTINITTYPE)(OMX_IN  OMX_HANDLETYPE hComponent);
> ++
> ++/** @ingroup core */
> ++typedef struct OMX_COMPONENTREGISTERTYPE
> ++{
> ++  const char          * pName;       /* Component name, 128 byte limit (including '\0') applies */
> ++  OMX_COMPONENTINITTYPE pInitialize; /* Component instance initialization function */
> ++} OMX_COMPONENTREGISTERTYPE;
> ++
> ++/** @ingroup core */
> ++extern OMX_COMPONENTREGISTERTYPE OMX_ComponentRegistered[];
> ++
> ++/** @ingroup rpm */
> ++typedef struct OMX_PRIORITYMGMTTYPE {
> ++ OMX_U32 nSize;             /**< size of the structure in bytes */
> ++ OMX_VERSIONTYPE nVersion;  /**< OMX specification version information */
> ++ OMX_U32 nGroupPriority;            /**< Priority of the component group */
> ++ OMX_U32 nGroupID;                  /**< ID of the component group */
> ++} OMX_PRIORITYMGMTTYPE;
> ++
> ++/* Component name and Role names are limited to 128 characters including the terminating '\0'. */
> ++#define OMX_MAX_STRINGNAME_SIZE 128
> ++
> ++/** @ingroup comp */
> ++typedef struct OMX_PARAM_COMPONENTROLETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U8 cRole[OMX_MAX_STRINGNAME_SIZE];  /**< name of standard component which defines component role */
> ++} OMX_PARAM_COMPONENTROLETYPE;
> ++
> ++/** End of Stream Buffer Flag:
> ++  *
> ++  * A component sets EOS when it has no more data to emit on a particular
> ++  * output port. Thus an output port shall set EOS on the last buffer it
> ++  * emits. A component's determination of when an output port should
> ++  * cease sending data is implemenation specific.
> ++  * @ingroup buf
> ++  */
> ++
> ++#define OMX_BUFFERFLAG_EOS 0x00000001
> ++
> ++/** Start Time Buffer Flag:
> ++ *
> ++ * The source of a stream (e.g. a demux component) sets the STARTTIME
> ++ * flag on the buffer that contains the starting timestamp for the
> ++ * stream. The starting timestamp corresponds to the first data that
> ++ * should be displayed at startup or after a seek.
> ++ * The first timestamp of the stream is not necessarily the start time.
> ++ * For instance, in the case of a seek to a particular video frame,
> ++ * the target frame may be an interframe. Thus the first buffer of
> ++ * the stream will be the intra-frame preceding the target frame and
> ++ * the starttime will occur with the target frame (with any other
> ++ * required frames required to reconstruct the target intervening).
> ++ *
> ++ * The STARTTIME flag is directly associated with the buffer's
> ++ * timestamp ' thus its association to buffer data and its
> ++ * propagation is identical to the timestamp's.
> ++ *
> ++ * When a Sync Component client receives a buffer with the
> ++ * STARTTIME flag it shall perform a SetConfig on its sync port
> ++ * using OMX_ConfigTimeClientStartTime and passing the buffer's
> ++ * timestamp.
> ++ *
> ++ * @ingroup buf
> ++ */
> ++
> ++#define OMX_BUFFERFLAG_STARTTIME 0x00000002
> ++
> ++
> ++
> ++/** Decode Only Buffer Flag:
> ++ *
> ++ * The source of a stream (e.g. a demux component) sets the DECODEONLY
> ++ * flag on any buffer that should shall be decoded but should not be
> ++ * displayed. This flag is used, for instance, when a source seeks to
> ++ * a target interframe that requires the decode of frames preceding the
> ++ * target to facilitate the target's reconstruction. In this case the
> ++ * source would emit the frames preceding the target downstream
> ++ * but mark them as decode only.
> ++ *
> ++ * The DECODEONLY is associated with buffer data and propagated in a
> ++ * manner identical to the buffer timestamp.
> ++ *
> ++ * A component that renders data should ignore all buffers with
> ++ * the DECODEONLY flag set.
> ++ *
> ++ * @ingroup buf
> ++ */
> ++
> ++#define OMX_BUFFERFLAG_DECODEONLY 0x00000004
> ++
> ++
> ++/* Data Corrupt Flag: This flag is set when the IL client believes the data in the associated buffer is corrupt
> ++ * @ingroup buf
> ++ */
> ++
> ++#define OMX_BUFFERFLAG_DATACORRUPT 0x00000008
> ++
> ++/* End of Frame: The buffer contains exactly one end of frame and no data
> ++ *  occurs after the end of frame. This flag is an optional hint. The absence
> ++ *  of this flag does not imply the absence of an end of frame within the buffer.
> ++ * @ingroup buf
> ++*/
> ++#define OMX_BUFFERFLAG_ENDOFFRAME 0x00000010
> ++
> ++/* Sync Frame Flag: This flag is set when the buffer content contains a coded sync frame '
> ++ *  a frame that has no dependency on any other frame information
> ++ *  @ingroup buf
> ++ */
> ++#define OMX_BUFFERFLAG_SYNCFRAME 0x00000020
> ++
> ++/* Extra data present flag: there is extra data appended to the data stream
> ++ * residing in the buffer
> ++ * @ingroup buf
> ++ */
> ++#define OMX_BUFFERFLAG_EXTRADATA 0x00000040
> ++
> ++/** Codec Config Buffer Flag:
> ++* OMX_BUFFERFLAG_CODECCONFIG is an optional flag that is set by an
> ++* output port when all bytes in the buffer form part or all of a set of
> ++* codec specific configuration data.  Examples include SPS/PPS nal units
> ++* for OMX_VIDEO_CodingAVC or AudioSpecificConfig data for
> ++* OMX_AUDIO_CodingAAC.  Any component that for a given stream sets
> ++* OMX_BUFFERFLAG_CODECCONFIG shall not mix codec configuration bytes
> ++* with frame data in the same buffer, and shall send all buffers
> ++* containing codec configuration bytes before any buffers containing
> ++* frame data that those configurations bytes describe.
> ++* If the stream format for a particular codec has a frame specific
> ++* header at the start of each frame, for example OMX_AUDIO_CodingMP3 or
> ++* OMX_AUDIO_CodingAAC in ADTS mode, then these shall be presented as
> ++* normal without setting OMX_BUFFERFLAG_CODECCONFIG.
> ++ * @ingroup buf
> ++ */
> ++#define OMX_BUFFERFLAG_CODECCONFIG 0x00000080
> ++
> ++
> ++
> ++/** @ingroup buf */
> ++typedef struct OMX_BUFFERHEADERTYPE
> ++{
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U8* pBuffer;            /**< Pointer to actual block of memory
> ++                                     that is acting as the buffer */
> ++    OMX_U32 nAllocLen;          /**< size of the buffer allocated, in bytes */
> ++    OMX_U32 nFilledLen;         /**< number of bytes currently in the
> ++                                     buffer */
> ++    OMX_U32 nOffset;            /**< start offset of valid data in bytes from
> ++                                     the start of the buffer */
> ++    OMX_PTR pAppPrivate;        /**< pointer to any data the application
> ++                                     wants to associate with this buffer */
> ++    OMX_PTR pPlatformPrivate;   /**< pointer to any data the platform
> ++                                     wants to associate with this buffer */
> ++    OMX_PTR pInputPortPrivate;  /**< pointer to any data the input port
> ++                                     wants to associate with this buffer */
> ++    OMX_PTR pOutputPortPrivate; /**< pointer to any data the output port
> ++                                     wants to associate with this buffer */
> ++    OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will generate a
> ++                                              mark event upon processing this buffer. */
> ++    OMX_PTR pMarkData;          /**< Application specific data associated with
> ++                                     the mark sent on a mark event to disambiguate
> ++                                     this mark from others. */
> ++    OMX_U32 nTickCount;         /**< Optional entry that the component and
> ++                                     application can update with a tick count
> ++                                     when they access the component.  This
> ++                                     value should be in microseconds.  Since
> ++                                     this is a value relative to an arbitrary
> ++                                     starting point, this value cannot be used
> ++                                     to determine absolute time.  This is an
> ++                                     optional entry and not all components
> ++                                     will update it.*/
> ++ OMX_TICKS nTimeStamp;          /**< Timestamp corresponding to the sample
> ++                                     starting at the first logical sample
> ++                                     boundary in the buffer. Timestamps of
> ++                                     successive samples within the buffer may
> ++                                     be inferred by adding the duration of the
> ++                                     of the preceding buffer to the timestamp
> ++                                     of the preceding buffer.*/
> ++  OMX_U32     nFlags;           /**< buffer specific flags */
> ++  OMX_U32 nOutputPortIndex;     /**< The index of the output port (if any) using
> ++                                     this buffer */
> ++  OMX_U32 nInputPortIndex;      /**< The index of the input port (if any) using
> ++                                     this buffer */
> ++} OMX_BUFFERHEADERTYPE;
> ++
> ++/** The OMX_EXTRADATATYPE enumeration is used to define the
> ++ * possible extra data payload types.
> ++ * NB: this enum is binary backwards compatible with the previous
> ++ * OMX_EXTRADATA_QUANT define.  This should be replaced with
> ++ * OMX_ExtraDataQuantization.
> ++ */
> ++typedef enum OMX_EXTRADATATYPE
> ++{
> ++   OMX_ExtraDataNone = 0,                       /**< Indicates that no more extra data sections follow */
> ++   OMX_ExtraDataQuantization,                   /**< The data payload contains quantization data */
> ++   OMX_ExtraDataKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++   OMX_ExtraDataVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++   OMX_ExtraDataMax = 0x7FFFFFFF
> ++} OMX_EXTRADATATYPE;
> ++
> ++
> ++typedef struct OMX_OTHER_EXTRADATATYPE  {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_EXTRADATATYPE eType;       /* Extra Data type */
> ++    OMX_U32 nDataSize;   /* Size of the supporting data to follow */
> ++    OMX_U8  data[1];     /* Supporting data hint  */
> ++} OMX_OTHER_EXTRADATATYPE;
> ++
> ++/** @ingroup comp */
> ++typedef struct OMX_PORT_PARAM_TYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPorts;             /**< The number of ports for this component */
> ++    OMX_U32 nStartPortNumber;   /** first port number for this type of port */
> ++} OMX_PORT_PARAM_TYPE;
> ++
> ++/** @ingroup comp */
> ++typedef enum OMX_EVENTTYPE
> ++{
> ++    OMX_EventCmdComplete,         /**< component has sucessfully completed a command */
> ++    OMX_EventError,               /**< component has detected an error condition */
> ++    OMX_EventMark,                /**< component has detected a buffer mark */
> ++    OMX_EventPortSettingsChanged, /**< component is reported a port settings change */
> ++    OMX_EventBufferFlag,          /**< component has detected an EOS */
> ++    OMX_EventResourcesAcquired,   /**< component has been granted resources and is
> ++                                       automatically starting the state change from
> ++                                       OMX_StateWaitForResources to OMX_StateIdle. */
> ++   OMX_EventComponentResumed,     /**< Component resumed due to reacquisition of resources */
> ++   OMX_EventDynamicResourcesAvailable, /**< Component has acquired previously unavailable dynamic resources */
> ++   OMX_EventPortFormatDetected,      /**< Component has detected a supported format. */
> ++   OMX_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++   OMX_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++   OMX_EventMax = 0x7FFFFFFF
> ++} OMX_EVENTTYPE;
> ++
> ++typedef struct OMX_CALLBACKTYPE
> ++{
> ++    /** The EventHandler method is used to notify the application when an
> ++        event of interest occurs.  Events are defined in the OMX_EVENTTYPE
> ++        enumeration.  Please see that enumeration for details of what will
> ++        be returned for each type of event. Callbacks should not return
> ++        an error to the component, so if an error occurs, the application
> ++        shall handle it internally.  This is a blocking call.
> ++
> ++        The application should return from this call within 5 msec to avoid
> ++        blocking the component for an excessively long period of time.
> ++
> ++        @param hComponent
> ++            handle of the component to access.  This is the component
> ++            handle returned by the call to the GetHandle function.
> ++        @param pAppData
> ++            pointer to an application defined value that was provided in the
> ++            pAppData parameter to the OMX_GetHandle method for the component.
> ++            This application defined value is provided so that the application
> ++            can have a component specific context when receiving the callback.
> ++        @param eEvent
> ++            Event that the component wants to notify the application about.
> ++        @param nData1
> ++            nData will be the OMX_ERRORTYPE for an error event and will be
> ++            an OMX_COMMANDTYPE for a command complete event and OMX_INDEXTYPE for a OMX_PortSettingsChanged event.
> ++         @param nData2
> ++            nData2 will hold further information related to the event. Can be OMX_STATETYPE for
> ++            a OMX_CommandStateSet command or port index for a OMX_PortSettingsChanged event.
> ++            Default value is 0 if not used. )
> ++        @param pEventData
> ++            Pointer to additional event-specific data (see spec for meaning).
> ++      */
> ++
> ++   OMX_ERRORTYPE (*EventHandler)(
> ++        OMX_IN OMX_HANDLETYPE hComponent,
> ++        OMX_IN OMX_PTR pAppData,
> ++        OMX_IN OMX_EVENTTYPE eEvent,
> ++        OMX_IN OMX_U32 nData1,
> ++        OMX_IN OMX_U32 nData2,
> ++        OMX_IN OMX_PTR pEventData);
> ++
> ++    /** The EmptyBufferDone method is used to return emptied buffers from an
> ++        input port back to the application for reuse.  This is a blocking call
> ++        so the application should not attempt to refill the buffers during this
> ++        call, but should queue them and refill them in another thread.  There
> ++        is no error return, so the application shall handle any errors generated
> ++        internally.
> ++
> ++        The application should return from this call within 5 msec.
> ++
> ++        @param hComponent
> ++            handle of the component to access.  This is the component
> ++            handle returned by the call to the GetHandle function.
> ++        @param pAppData
> ++            pointer to an application defined value that was provided in the
> ++            pAppData parameter to the OMX_GetHandle method for the component.
> ++            This application defined value is provided so that the application
> ++            can have a component specific context when receiving the callback.
> ++        @param pBuffer
> ++            pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
> ++            or AllocateBuffer indicating the buffer that was emptied.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*EmptyBufferDone)(
> ++        OMX_IN OMX_HANDLETYPE hComponent,
> ++        OMX_IN OMX_PTR pAppData,
> ++        OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
> ++
> ++    /** The FillBufferDone method is used to return filled buffers from an
> ++        output port back to the application for emptying and then reuse.
> ++        This is a blocking call so the application should not attempt to
> ++        empty the buffers during this call, but should queue the buffers
> ++        and empty them in another thread.  There is no error return, so
> ++        the application shall handle any errors generated internally.  The
> ++        application shall also update the buffer header to indicate the
> ++        number of bytes placed into the buffer.
> ++
> ++        The application should return from this call within 5 msec.
> ++
> ++        @param hComponent
> ++            handle of the component to access.  This is the component
> ++            handle returned by the call to the GetHandle function.
> ++        @param pAppData
> ++            pointer to an application defined value that was provided in the
> ++            pAppData parameter to the OMX_GetHandle method for the component.
> ++            This application defined value is provided so that the application
> ++            can have a component specific context when receiving the callback.
> ++        @param pBuffer
> ++            pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
> ++            or AllocateBuffer indicating the buffer that was filled.
> ++        @ingroup buf
> ++     */
> ++    OMX_ERRORTYPE (*FillBufferDone)(
> ++        OMX_OUT OMX_HANDLETYPE hComponent,
> ++        OMX_OUT OMX_PTR pAppData,
> ++        OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer);
> ++
> ++} OMX_CALLBACKTYPE;
> ++
> ++/** The OMX_BUFFERSUPPLIERTYPE enumeration is used to dictate port supplier
> ++    preference when tunneling between two ports.
> ++    @ingroup tun buf
> ++*/
> ++typedef enum OMX_BUFFERSUPPLIERTYPE
> ++{
> ++    OMX_BufferSupplyUnspecified = 0x0, /**< port supplying the buffers is unspecified,
> ++                                              or don't care */
> ++    OMX_BufferSupplyInput,             /**< input port supplies the buffers */
> ++    OMX_BufferSupplyOutput,            /**< output port supplies the buffers */
> ++    OMX_BufferSupplyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_BufferSupplyVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_BufferSupplyMax = 0x7FFFFFFF
> ++} OMX_BUFFERSUPPLIERTYPE;
> ++
> ++
> ++/** buffer supplier parameter
> ++ * @ingroup tun
> ++ */
> ++typedef struct OMX_PARAM_BUFFERSUPPLIERTYPE {
> ++    OMX_U32 nSize; /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex; /**< port that this structure applies to */
> ++    OMX_BUFFERSUPPLIERTYPE eBufferSupplier; /**< buffer supplier */
> ++} OMX_PARAM_BUFFERSUPPLIERTYPE;
> ++
> ++
> ++/**< indicates that buffers received by an input port of a tunnel
> ++     may not modify the data in the buffers
> ++     @ingroup tun
> ++ */
> ++#define OMX_PORTTUNNELFLAG_READONLY 0x00000001
> ++
> ++
> ++/** The OMX_TUNNELSETUPTYPE structure is used to pass data from an output
> ++    port to an input port as part the two ComponentTunnelRequest calls
> ++    resulting from a OMX_SetupTunnel call from the IL Client.
> ++    @ingroup tun
> ++ */
> ++typedef struct OMX_TUNNELSETUPTYPE
> ++{
> ++    OMX_U32 nTunnelFlags;             /**< bit flags for tunneling */
> ++    OMX_BUFFERSUPPLIERTYPE eSupplier; /**< supplier preference */
> ++} OMX_TUNNELSETUPTYPE;
> ++
> ++/* OMX Component headers is included to enable the core to use
> ++   macros for functions into the component for OMX release 1.0.
> ++   Developers should not access any structures or data from within
> ++   the component header directly */
> ++/* TO BE REMOVED - #include <OMX_Component.h> */
> ++
> ++/** GetComponentVersion will return information about the component.
> ++    This is a blocking call.  This macro will go directly from the
> ++    application to the component (via a core macro).  The
> ++    component will return from this call within 5 msec.
> ++    @param [in] hComponent
> ++        handle of component to execute the command
> ++    @param [out] pComponentName
> ++        pointer to an empty string of length 128 bytes.  The component
> ++        will write its name into this string.  The name will be
> ++        terminated by a single zero byte.  The name of a component will
> ++        be 127 bytes or less to leave room for the trailing zero byte.
> ++        An example of a valid component name is "OMX.ABC.ChannelMixer\0".
> ++    @param [out] pComponentVersion
> ++        pointer to an OMX Version structure that the component will fill
> ++        in.  The component will fill in a value that indicates the
> ++        component version.  NOTE: the component version is NOT the same
> ++        as the OMX Specification version (found in all structures).  The
> ++        component version is defined by the vendor of the component and
> ++        its value is entirely up to the component vendor.
> ++    @param [out] pSpecVersion
> ++        pointer to an OMX Version structure that the component will fill
> ++        in.  The SpecVersion is the version of the specification that the
> ++        component was built against.  Please note that this value may or
> ++        may not match the structure's version.  For example, if the
> ++        component was built against the 2.0 specification, but the
> ++        application (which creates the structure is built against the
> ++        1.0 specification the versions would be different.
> ++    @param [out] pComponentUUID
> ++        pointer to the UUID of the component which will be filled in by
> ++        the component.  The UUID is a unique identifier that is set at
> ++        RUN time for the component and is unique to each instantion of
> ++        the component.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_GetComponentVersion(                            \
> ++        hComponent,                                         \
> ++        pComponentName,                                     \
> ++        pComponentVersion,                                  \
> ++        pSpecVersion,                                       \
> ++        pComponentUUID)                                     \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->GetComponentVersion(  \
> ++        hComponent,                                         \
> ++        pComponentName,                                     \
> ++        pComponentVersion,                                  \
> ++        pSpecVersion,                                       \
> ++        pComponentUUID)                 /* Macro End */
> ++
> ++
> ++/** Send a command to the component.  This call is a non-blocking call.
> ++    The component should check the parameters and then queue the command
> ++    to the component thread to be executed.  The component thread shall
> ++    send the EventHandler() callback at the conclusion of the command.
> ++    This macro will go directly from the application to the component (via
> ++    a core macro).  The component will return from this call within 5 msec.
> ++
> ++    When the command is "OMX_CommandStateSet" the component will queue a
> ++    state transition to the new state idenfied in nParam.
> ++
> ++    When the command is "OMX_CommandFlush", to flush a port's buffer queues,
> ++    the command will force the component to return all buffers NOT CURRENTLY
> ++    BEING PROCESSED to the application, in the order in which the buffers
> ++    were received.
> ++
> ++    When the command is "OMX_CommandPortDisable" or
> ++    "OMX_CommandPortEnable", the component's port (given by the value of
> ++    nParam) will be stopped or restarted.
> ++
> ++    When the command "OMX_CommandMarkBuffer" is used to mark a buffer, the
> ++    pCmdData will point to a OMX_MARKTYPE structure containing the component
> ++    handle of the component to examine the buffer chain for the mark.  nParam1
> ++    contains the index of the port on which the buffer mark is applied.
> ++
> ++    Specification text for more details.
> ++
> ++    @param [in] hComponent
> ++        handle of component to execute the command
> ++    @param [in] Cmd
> ++        Command for the component to execute
> ++    @param [in] nParam
> ++        Parameter for the command to be executed.  When Cmd has the value
> ++        OMX_CommandStateSet, value is a member of OMX_STATETYPE.  When Cmd has
> ++        the value OMX_CommandFlush, value of nParam indicates which port(s)
> ++        to flush. -1 is used to flush all ports a single port index will
> ++        only flush that port.  When Cmd has the value "OMX_CommandPortDisable"
> ++        or "OMX_CommandPortEnable", the component's port is given by
> ++        the value of nParam.  When Cmd has the value "OMX_CommandMarkBuffer"
> ++        the components pot is given by the value of nParam.
> ++    @param [in] pCmdData
> ++        Parameter pointing to the OMX_MARKTYPE structure when Cmd has the value
> ++        "OMX_CommandMarkBuffer".
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_SendCommand(                                    \
> ++         hComponent,                                        \
> ++         Cmd,                                               \
> ++         nParam,                                            \
> ++         pCmdData)                                          \
> ++     ((OMX_COMPONENTTYPE*)hComponent)->SendCommand(         \
> ++         hComponent,                                        \
> ++         Cmd,                                               \
> ++         nParam,                                            \
> ++         pCmdData)                          /* Macro End */
> ++
> ++
> ++/** The OMX_GetParameter macro will get one of the current parameter
> ++    settings from the component.  This macro cannot only be invoked when
> ++    the component is in the OMX_StateInvalid state.  The nParamIndex
> ++    parameter is used to indicate which structure is being requested from
> ++    the component.  The application shall allocate the correct structure
> ++    and shall fill in the structure size and version information before
> ++    invoking this macro.  When the parameter applies to a port, the
> ++    caller shall fill in the appropriate nPortIndex value indicating the
> ++    port on which the parameter applies. If the component has not had
> ++    any settings changed, then the component should return a set of
> ++    valid DEFAULT  parameters for the component.  This is a blocking
> ++    call.
> ++
> ++    The component should return from this call within 20 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] nParamIndex
> ++        Index of the structure to be filled.  This value is from the
> ++        OMX_INDEXTYPE enumeration.
> ++    @param [in,out] pComponentParameterStructure
> ++        Pointer to application allocated structure to be filled by the
> ++        component.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_GetParameter(                                   \
> ++        hComponent,                                         \
> ++        nParamIndex,                                        \
> ++        pComponentParameterStructure)                        \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->GetParameter(         \
> ++        hComponent,                                         \
> ++        nParamIndex,                                        \
> ++        pComponentParameterStructure)    /* Macro End */
> ++
> ++
> ++/** The OMX_SetParameter macro will send an initialization parameter
> ++    structure to a component.  Each structure shall be sent one at a time,
> ++    in a separate invocation of the macro.  This macro can only be
> ++    invoked when the component is in the OMX_StateLoaded state, or the
> ++    port is disabled (when the parameter applies to a port). The
> ++    nParamIndex parameter is used to indicate which structure is being
> ++    passed to the component.  The application shall allocate the
> ++    correct structure and shall fill in the structure size and version
> ++    information (as well as the actual data) before invoking this macro.
> ++    The application is free to dispose of this structure after the call
> ++    as the component is required to copy any data it shall retain.  This
> ++    is a blocking call.
> ++
> ++    The component should return from this call within 20 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] nIndex
> ++        Index of the structure to be sent.  This value is from the
> ++        OMX_INDEXTYPE enumeration.
> ++    @param [in] pComponentParameterStructure
> ++        pointer to application allocated structure to be used for
> ++        initialization by the component.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_SetParameter(                                   \
> ++        hComponent,                                         \
> ++        nParamIndex,                                        \
> ++        pComponentParameterStructure)                        \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->SetParameter(         \
> ++        hComponent,                                         \
> ++        nParamIndex,                                        \
> ++        pComponentParameterStructure)    /* Macro End */
> ++
> ++
> ++/** The OMX_GetConfig macro will get one of the configuration structures
> ++    from a component.  This macro can be invoked anytime after the
> ++    component has been loaded.  The nParamIndex call parameter is used to
> ++    indicate which structure is being requested from the component.  The
> ++    application shall allocate the correct structure and shall fill in the
> ++    structure size and version information before invoking this macro.
> ++    If the component has not had this configuration parameter sent before,
> ++    then the component should return a set of valid DEFAULT values for the
> ++    component.  This is a blocking call.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] nIndex
> ++        Index of the structure to be filled.  This value is from the
> ++        OMX_INDEXTYPE enumeration.
> ++    @param [in,out] pComponentConfigStructure
> ++        pointer to application allocated structure to be filled by the
> ++        component.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++*/
> ++#define OMX_GetConfig(                                      \
> ++        hComponent,                                         \
> ++        nConfigIndex,                                       \
> ++        pComponentConfigStructure)                           \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->GetConfig(            \
> ++        hComponent,                                         \
> ++        nConfigIndex,                                       \
> ++        pComponentConfigStructure)       /* Macro End */
> ++
> ++
> ++/** The OMX_SetConfig macro will send one of the configuration
> ++    structures to a component.  Each structure shall be sent one at a time,
> ++    each in a separate invocation of the macro.  This macro can be invoked
> ++    anytime after the component has been loaded.  The application shall
> ++    allocate the correct structure and shall fill in the structure size
> ++    and version information (as well as the actual data) before invoking
> ++    this macro.  The application is free to dispose of this structure after
> ++    the call as the component is required to copy any data it shall retain.
> ++    This is a blocking call.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] nConfigIndex
> ++        Index of the structure to be sent.  This value is from the
> ++        OMX_INDEXTYPE enumeration above.
> ++    @param [in] pComponentConfigStructure
> ++        pointer to application allocated structure to be used for
> ++        initialization by the component.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_SetConfig(                                      \
> ++        hComponent,                                         \
> ++        nConfigIndex,                                       \
> ++        pComponentConfigStructure)                           \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->SetConfig(            \
> ++        hComponent,                                         \
> ++        nConfigIndex,                                       \
> ++        pComponentConfigStructure)       /* Macro End */
> ++
> ++
> ++/** The OMX_GetExtensionIndex macro will invoke a component to translate
> ++    a vendor specific configuration or parameter string into an OMX
> ++    structure index.  There is no requirement for the vendor to support
> ++    this command for the indexes already found in the OMX_INDEXTYPE
> ++    enumeration (this is done to save space in small components).  The
> ++    component shall support all vendor supplied extension indexes not found
> ++    in the master OMX_INDEXTYPE enumeration.  This is a blocking call.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the GetHandle function.
> ++    @param [in] cParameterName
> ++        OMX_STRING that shall be less than 128 characters long including
> ++        the trailing null byte.  This is the string that will get
> ++        translated by the component into a configuration index.
> ++    @param [out] pIndexType
> ++        a pointer to a OMX_INDEXTYPE to receive the index value.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_GetExtensionIndex(                              \
> ++        hComponent,                                         \
> ++        cParameterName,                                     \
> ++        pIndexType)                                         \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->GetExtensionIndex(    \
> ++        hComponent,                                         \
> ++        cParameterName,                                     \
> ++        pIndexType)                     /* Macro End */
> ++
> ++
> ++/** The OMX_GetState macro will invoke the component to get the current
> ++    state of the component and place the state value into the location
> ++    pointed to by pState.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [out] pState
> ++        pointer to the location to receive the state.  The value returned
> ++        is one of the OMX_STATETYPE members
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp
> ++ */
> ++#define OMX_GetState(                                       \
> ++        hComponent,                                         \
> ++        pState)                                             \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->GetState(             \
> ++        hComponent,                                         \
> ++        pState)                         /* Macro End */
> ++
> ++
> ++/** The OMX_UseBuffer macro will request that the component use
> ++    a buffer (and allocate its own buffer header) already allocated
> ++    by another component, or by the IL Client. This is a blocking
> ++    call.
> ++
> ++    The component should return from this call within 20 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [out] ppBuffer
> ++        pointer to an OMX_BUFFERHEADERTYPE structure used to receive the
> ++        pointer to the buffer header
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp buf
> ++ */
> ++
> ++#define OMX_UseBuffer(                                      \
> ++           hComponent,                                      \
> ++           ppBufferHdr,                                     \
> ++           nPortIndex,                                      \
> ++           pAppPrivate,                                     \
> ++           nSizeBytes,                                      \
> ++           pBuffer)                                         \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->UseBuffer(            \
> ++           hComponent,                                      \
> ++           ppBufferHdr,                                     \
> ++           nPortIndex,                                      \
> ++           pAppPrivate,                                     \
> ++           nSizeBytes,                                      \
> ++           pBuffer)
> ++
> ++
> ++/** The OMX_AllocateBuffer macro will request that the component allocate
> ++    a new buffer and buffer header.  The component will allocate the
> ++    buffer and the buffer header and return a pointer to the buffer
> ++    header.  This is a blocking call.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [out] ppBuffer
> ++        pointer to an OMX_BUFFERHEADERTYPE structure used to receive
> ++        the pointer to the buffer header
> ++    @param [in] nPortIndex
> ++        nPortIndex is used to select the port on the component the buffer will
> ++        be used with.  The port can be found by using the nPortIndex
> ++        value as an index into the Port Definition array of the component.
> ++    @param [in] pAppPrivate
> ++        pAppPrivate is used to initialize the pAppPrivate member of the
> ++        buffer header structure.
> ++    @param [in] nSizeBytes
> ++        size of the buffer to allocate.  Used when bAllocateNew is true.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp buf
> ++ */
> ++#define OMX_AllocateBuffer(                                 \
> ++        hComponent,                                         \
> ++        ppBuffer,                                           \
> ++        nPortIndex,                                         \
> ++        pAppPrivate,                                        \
> ++        nSizeBytes)                                         \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->AllocateBuffer(       \
> ++        hComponent,                                         \
> ++        ppBuffer,                                           \
> ++        nPortIndex,                                         \
> ++        pAppPrivate,                                        \
> ++        nSizeBytes)                     /* Macro End */
> ++
> ++
> ++/** The OMX_FreeBuffer macro will release a buffer header from the component
> ++    which was allocated using either OMX_AllocateBuffer or OMX_UseBuffer. If
> ++    the component allocated the buffer (see the OMX_UseBuffer macro) then
> ++    the component shall free the buffer and buffer header. This is a
> ++    blocking call.
> ++
> ++    The component should return from this call within 20 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] nPortIndex
> ++        nPortIndex is used to select the port on the component the buffer will
> ++        be used with.
> ++    @param [in] pBuffer
> ++        pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
> ++        or AllocateBuffer.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp buf
> ++ */
> ++#define OMX_FreeBuffer(                                     \
> ++        hComponent,                                         \
> ++        nPortIndex,                                         \
> ++        pBuffer)                                            \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->FreeBuffer(           \
> ++        hComponent,                                         \
> ++        nPortIndex,                                         \
> ++        pBuffer)                        /* Macro End */
> ++
> ++
> ++/** The OMX_EmptyThisBuffer macro will send a buffer full of data to an
> ++    input port of a component.  The buffer will be emptied by the component
> ++    and returned to the application via the EmptyBufferDone call back.
> ++    This is a non-blocking call in that the component will record the buffer
> ++    and return immediately and then empty the buffer, later, at the proper
> ++    time.  As expected, this macro may be invoked only while the component
> ++    is in the OMX_StateExecuting.  If nPortIndex does not specify an input
> ++    port, the component shall return an error.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] pBuffer
> ++        pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
> ++        or AllocateBuffer.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp buf
> ++ */
> ++#define OMX_EmptyThisBuffer(                                \
> ++        hComponent,                                         \
> ++        pBuffer)                                            \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->EmptyThisBuffer(      \
> ++        hComponent,                                         \
> ++        pBuffer)                        /* Macro End */
> ++
> ++
> ++/** The OMX_FillThisBuffer macro will send an empty buffer to an
> ++    output port of a component.  The buffer will be filled by the component
> ++    and returned to the application via the FillBufferDone call back.
> ++    This is a non-blocking call in that the component will record the buffer
> ++    and return immediately and then fill the buffer, later, at the proper
> ++    time.  As expected, this macro may be invoked only while the component
> ++    is in the OMX_ExecutingState.  If nPortIndex does not specify an output
> ++    port, the component shall return an error.
> ++
> ++    The component should return from this call within 5 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [in] pBuffer
> ++        pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
> ++        or AllocateBuffer.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp buf
> ++ */
> ++#define OMX_FillThisBuffer(                                 \
> ++        hComponent,                                         \
> ++        pBuffer)                                            \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->FillThisBuffer(       \
> ++        hComponent,                                         \
> ++        pBuffer)                        /* Macro End */
> ++
> ++
> ++
> ++/** The OMX_UseEGLImage macro will request that the component use
> ++    a EGLImage provided by EGL (and allocate its own buffer header)
> ++    This is a blocking call.
> ++
> ++    The component should return from this call within 20 msec.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the OMX_GetHandle function.
> ++    @param [out] ppBuffer
> ++        pointer to an OMX_BUFFERHEADERTYPE structure used to receive the
> ++        pointer to the buffer header.  Note that the memory location used
> ++        for this buffer is NOT visible to the IL Client.
> ++    @param [in] nPortIndex
> ++        nPortIndex is used to select the port on the component the buffer will
> ++        be used with.  The port can be found by using the nPortIndex
> ++        value as an index into the Port Definition array of the component.
> ++    @param [in] pAppPrivate
> ++        pAppPrivate is used to initialize the pAppPrivate member of the
> ++        buffer header structure.
> ++    @param [in] eglImage
> ++        eglImage contains the handle of the EGLImage to use as a buffer on the
> ++        specified port.  The component is expected to validate properties of
> ++        the EGLImage against the configuration of the port to ensure the component
> ++        can use the EGLImage as a buffer.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup comp buf
> ++ */
> ++#define OMX_UseEGLImage(                                    \
> ++           hComponent,                                      \
> ++           ppBufferHdr,                                     \
> ++           nPortIndex,                                      \
> ++           pAppPrivate,                                     \
> ++           eglImage)                                        \
> ++    ((OMX_COMPONENTTYPE*)hComponent)->UseEGLImage(          \
> ++           hComponent,                                      \
> ++           ppBufferHdr,                                     \
> ++           nPortIndex,                                      \
> ++           pAppPrivate,                                     \
> ++           eglImage)
> ++
> ++/** The OMX_Init method is used to initialize the OMX core.  It shall be the
> ++    first call made into OMX and it should only be executed one time without
> ++    an interviening OMX_Deinit call.
> ++
> ++    The core should return from this call within 20 msec.
> ++
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Init(void);
> ++
> ++
> ++/** The OMX_Deinit method is used to deinitialize the OMX core.  It shall be
> ++    the last call made into OMX. In the event that the core determines that
> ++    thare are components loaded when this call is made, the core may return
> ++    with an error rather than try to unload the components.
> ++
> ++    The core should return from this call within 20 msec.
> ++
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Deinit(void);
> ++
> ++
> ++/** The OMX_ComponentNameEnum method will enumerate through all the names of
> ++    recognised valid components in the system. This function is provided
> ++    as a means to detect all the components in the system run-time. There is
> ++    no strict ordering to the enumeration order of component names, although
> ++    each name will only be enumerated once.  If the OMX core supports run-time
> ++    installation of new components, it is only requried to detect newly
> ++    installed components when the first call to enumerate component names
> ++    is made (i.e. when nIndex is 0x0).
> ++
> ++    The core should return from this call in 20 msec.
> ++
> ++    @param [out] cComponentName
> ++        pointer to a null terminated string with the component name.  The
> ++        names of the components are strings less than 127 bytes in length
> ++        plus the trailing null for a maximum size of 128 bytes.  An example
> ++        of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0".  Names are
> ++        assigned by the vendor, but shall start with "OMX." and then have
> ++        the Vendor designation next.
> ++    @param [in] nNameLength
> ++        number of characters in the cComponentName string.  With all
> ++        component name strings restricted to less than 128 characters
> ++        (including the trailing null) it is recomended that the caller
> ++        provide a input string for the cComponentName of 128 characters.
> ++    @param [in] nIndex
> ++        number containing the enumeration index for the component.
> ++        Multiple calls to OMX_ComponentNameEnum with increasing values
> ++        of nIndex will enumerate through the component names in the
> ++        system until OMX_ErrorNoMore is returned.  The value of nIndex
> ++        is 0 to (N-1), where N is the number of valid installed components
> ++        in the system.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  When the value of nIndex exceeds the number of
> ++        components in the system minus 1, OMX_ErrorNoMore will be
> ++        returned. Otherwise the appropriate OMX error will be returned.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_ComponentNameEnum(
> ++    OMX_OUT OMX_STRING cComponentName,
> ++    OMX_IN  OMX_U32 nNameLength,
> ++    OMX_IN  OMX_U32 nIndex);
> ++
> ++
> ++/** The OMX_GetHandle method will locate the component specified by the
> ++    component name given, load that component into memory and then invoke
> ++    the component's methods to create an instance of the component.
> ++
> ++    The core should return from this call within 20 msec.
> ++
> ++    @param [out] pHandle
> ++        pointer to an OMX_HANDLETYPE pointer to be filled in by this method.
> ++    @param [in] cComponentName
> ++        pointer to a null terminated string with the component name.  The
> ++        names of the components are strings less than 127 bytes in length
> ++        plus the trailing null for a maximum size of 128 bytes.  An example
> ++        of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0".  Names are
> ++        assigned by the vendor, but shall start with "OMX." and then have
> ++        the Vendor designation next.
> ++    @param [in] pAppData
> ++        pointer to an application defined value that will be returned
> ++        during callbacks so that the application can identify the source
> ++        of the callback.
> ++    @param [in] pCallBacks
> ++        pointer to a OMX_CALLBACKTYPE structure that will be passed to the
> ++        component to initialize it with.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_GetHandle(
> ++    OMX_OUT OMX_HANDLETYPE* pHandle,
> ++    OMX_IN  OMX_STRING cComponentName,
> ++    OMX_IN  OMX_PTR pAppData,
> ++    OMX_IN  OMX_CALLBACKTYPE* pCallBacks);
> ++
> ++
> ++/** The OMX_FreeHandle method will free a handle allocated by the OMX_GetHandle
> ++    method.  If the component reference count goes to zero, the component will
> ++    be unloaded from memory.
> ++
> ++    The core should return from this call within 20 msec when the component is
> ++    in the OMX_StateLoaded state.
> ++
> ++    @param [in] hComponent
> ++        Handle of the component to be accessed.  This is the component
> ++        handle returned by the call to the GetHandle function.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_FreeHandle(
> ++    OMX_IN  OMX_HANDLETYPE hComponent);
> ++
> ++
> ++
> ++/** The OMX_SetupTunnel method will handle the necessary calls to the components
> ++    to setup the specified tunnel the two components.  NOTE: This is
> ++    an actual method (not a #define macro).  This method will make calls into
> ++    the component ComponentTunnelRequest method to do the actual tunnel
> ++    connection.
> ++
> ++    The ComponentTunnelRequest method on both components will be called.
> ++    This method shall not be called unless the component is in the
> ++    OMX_StateLoaded state except when the ports used for the tunnel are
> ++    disabled. In this case, the component may be in the OMX_StateExecuting,
> ++    OMX_StatePause, or OMX_StateIdle states.
> ++
> ++    The core should return from this call within 20 msec.
> ++
> ++    @param [in] hOutput
> ++        Handle of the component to be accessed.  Also this is the handle
> ++        of the component whose port, specified in the nPortOutput parameter
> ++        will be used the source for the tunnel. This is the component handle
> ++        returned by the call to the OMX_GetHandle function.  There is a
> ++        requirement that hOutput be the source for the data when
> ++        tunelling (i.e. nPortOutput is an output port).  If 0x0, the component
> ++        specified in hInput will have it's port specified in nPortInput
> ++        setup for communication with the application / IL client.
> ++    @param [in] nPortOutput
> ++        nPortOutput is used to select the source port on component to be
> ++        used in the tunnel.
> ++    @param [in] hInput
> ++        This is the component to setup the tunnel with. This is the handle
> ++        of the component whose port, specified in the nPortInput parameter
> ++        will be used the destination for the tunnel. This is the component handle
> ++        returned by the call to the OMX_GetHandle function.  There is a
> ++        requirement that hInput be the destination for the data when
> ++        tunelling (i.e. nPortInut is an input port).   If 0x0, the component
> ++        specified in hOutput will have it's port specified in nPortPOutput
> ++        setup for communication with the application / IL client.
> ++    @param [in] nPortInput
> ++        nPortInput is used to select the destination port on component to be
> ++        used in the tunnel.
> ++    @return OMX_ERRORTYPE
> ++        If the command successfully executes, the return code will be
> ++        OMX_ErrorNone.  Otherwise the appropriate OMX error will be returned.
> ++        When OMX_ErrorNotImplemented is returned, one or both components is
> ++        a non-interop component and does not support tunneling.
> ++
> ++        On failure, the ports of both components are setup for communication
> ++        with the application / IL Client.
> ++    @ingroup core tun
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_SetupTunnel(
> ++    OMX_IN  OMX_HANDLETYPE hOutput,
> ++    OMX_IN  OMX_U32 nPortOutput,
> ++    OMX_IN  OMX_HANDLETYPE hInput,
> ++    OMX_IN  OMX_U32 nPortInput);
> ++
> ++/** @ingroup cp */
> ++OMX_API OMX_ERRORTYPE   OMX_GetContentPipe(
> ++    OMX_OUT OMX_HANDLETYPE *hPipe,
> ++    OMX_IN OMX_STRING szURI);
> ++
> ++/** The OMX_GetComponentsOfRole method will return the number of components that support the given
> ++    role and (if the compNames field is non-NULL) the names of those components. The call will fail if
> ++    an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the
> ++    client should:
> ++        * first call this function with the compNames field NULL to determine the number of component names
> ++        * second call this function with the compNames field pointing to an array of names allocated
> ++          according to the number returned by the first call.
> ++
> ++    The core should return from this call within 5 msec.
> ++
> ++    @param [in] role
> ++        This is generic standard component name consisting only of component class
> ++        name and the type within that class (e.g. 'audio_decoder.aac').
> ++    @param [inout] pNumComps
> ++        This is used both as input and output.
> ++
> ++        If compNames is NULL, the input is ignored and the output specifies how many components support
> ++        the given role.
> ++
> ++        If compNames is not NULL, on input it bounds the size of the input structure and
> ++        on output, it specifies the number of components string names listed within the compNames parameter.
> ++    @param [inout] compNames
> ++        If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings which accepts
> ++        a list of the names of all physical components that implement the specified standard component name.
> ++        Each name is NULL terminated. numComps indicates the number of names.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_GetComponentsOfRole (
> ++	OMX_IN      OMX_STRING role,
> ++    OMX_INOUT   OMX_U32 *pNumComps,
> ++    OMX_INOUT   OMX_U8  **compNames);
> ++
> ++/** The OMX_GetRolesOfComponent method will return the number of roles supported by the given
> ++    component and (if the roles field is non-NULL) the names of those roles. The call will fail if
> ++    an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the
> ++    client should:
> ++        * first call this function with the roles field NULL to determine the number of role names
> ++        * second call this function with the roles field pointing to an array of names allocated
> ++          according to the number returned by the first call.
> ++
> ++    The core should return from this call within 5 msec.
> ++
> ++    @param [in] compName
> ++        This is the name of the component being queried about.
> ++    @param [inout] pNumRoles
> ++        This is used both as input and output.
> ++
> ++        If roles is NULL, the input is ignored and the output specifies how many roles the component supports.
> ++
> ++        If compNames is not NULL, on input it bounds the size of the input structure and
> ++        on output, it specifies the number of roles string names listed within the roles parameter.
> ++    @param [out] roles
> ++        If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings
> ++        which accepts a list of the names of all standard components roles implemented on the
> ++        specified component name. numComps indicates the number of names.
> ++    @ingroup core
> ++ */
> ++OMX_API OMX_ERRORTYPE OMX_GetRolesOfComponent (
> ++	OMX_IN      OMX_STRING compName,
> ++    OMX_INOUT   OMX_U32 *pNumRoles,
> ++    OMX_OUT     OMX_U8 **roles);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> ++
> +diff -rupN a/usr/include/OpenMAX/il/OMX_ImageExt.h b/usr/include/OpenMAX/il/OMX_ImageExt.h
> +--- a/usr/include/OpenMAX/il/OMX_ImageExt.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_ImageExt.h	2011-08-09 12:28:16.000000000 +0200
> +@@ -0,0 +1,55 @@
> ++/*
> ++ * Copyright (c) 2011 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_ImageExt.h - OpenMax IL version 1.1.2
> ++ * The OMX_ImageExt header file contains extensions to the
> ++ * definitions used by both the application and the component to
> ++ * access image items.
> ++ */
> ++
> ++#ifndef OMX_ImageExt_h
> ++#define OMX_ImageExt_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/* Each OMX header shall include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully
> ++ */
> ++#include <OMX_Core.h>
> ++
> ++/** Enum for standard image codingtype extensions */
> ++typedef enum OMX_IMAGE_CODINGEXTTYPE {
> ++    OMX_IMAGE_CodingExtUnused = OMX_IMAGE_CodingKhronosExtensions,
> ++    OMX_IMAGE_CodingWEBP,         /**< WebP image format */
> ++} OMX_IMAGE_CODINGEXTTYPE;
> ++
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif /* OMX_ImageExt_h */
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Image.h b/usr/include/OpenMAX/il/OMX_Image.h
> +--- a/usr/include/OpenMAX/il/OMX_Image.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Image.h	2011-08-16 11:38:40.000000000 +0200
> +@@ -0,0 +1,328 @@
> ++/**
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ */
> ++
> ++/**
> ++ * @file OMX_Image.h - OpenMax IL version 1.1.2
> ++ * The structures needed by Image components to exchange parameters and
> ++ * configuration data with the components.
> ++ */
> ++#ifndef OMX_Image_h
> ++#define OMX_Image_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++/**
> ++ * Each OMX header must include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully
> ++ */
> ++
> ++#include <OMX_IVCommon.h>
> ++
> ++/** @defgroup imaging OpenMAX IL Imaging Domain
> ++ * @ingroup iv
> ++ * Structures for OpenMAX IL Imaging domain
> ++ * @{
> ++ */
> ++
> ++/**
> ++ * Enumeration used to define the possible image compression coding.
> ++ */
> ++typedef enum OMX_IMAGE_CODINGTYPE {
> ++    OMX_IMAGE_CodingUnused,      /**< Value when format is N/A */
> ++    OMX_IMAGE_CodingAutoDetect,  /**< Auto detection of image format */
> ++    OMX_IMAGE_CodingJPEG,        /**< JPEG/JFIF image format */
> ++    OMX_IMAGE_CodingJPEG2K,      /**< JPEG 2000 image format */
> ++    OMX_IMAGE_CodingEXIF,        /**< EXIF image format */
> ++    OMX_IMAGE_CodingTIFF,        /**< TIFF image format */
> ++    OMX_IMAGE_CodingGIF,         /**< Graphics image format */
> ++    OMX_IMAGE_CodingPNG,         /**< PNG image format */
> ++    OMX_IMAGE_CodingLZW,         /**< LZW image format */
> ++    OMX_IMAGE_CodingBMP,         /**< Windows Bitmap format */
> ++    OMX_IMAGE_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_IMAGE_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_IMAGE_CodingMax = 0x7FFFFFFF
> ++} OMX_IMAGE_CODINGTYPE;
> ++
> ++
> ++/**
> ++ * Data structure used to define an image path. The number of image paths
> ++ * for input and output will vary by type of the image component.
> ++ *
> ++ *  Input (aka Source) : Zero Inputs, one Output,
> ++ *  Splitter           : One Input, 2 or more Outputs,
> ++ *  Processing Element : One Input, one output,
> ++ *  Mixer              : 2 or more inputs, one output,
> ++ *  Output (aka Sink)  : One Input, zero outputs.
> ++ *
> ++ * The PortDefinition structure is used to define all of the parameters
> ++ * necessary for the compliant component to setup an input or an output
> ++ * image path.  If additional vendor specific data is required, it should
> ++ * be transmitted to the component using the CustomCommand function.
> ++ * Compliant components will prepopulate this structure with optimal
> ++ * values during the OMX_GetParameter() command.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  cMIMEType             : MIME type of data for the port
> ++ *  pNativeRender         : Platform specific reference for a display if a
> ++ *                          sync, otherwise this field is 0
> ++ *  nFrameWidth           : Width of frame to be used on port if
> ++ *                          uncompressed format is used.  Use 0 for
> ++ *                          unknown, don't care or variable
> ++ *  nFrameHeight          : Height of frame to be used on port if
> ++ *                          uncompressed format is used. Use 0 for
> ++ *                          unknown, don't care or variable
> ++ *  nStride               : Number of bytes per span of an image (i.e.
> ++ *                          indicates the number of bytes to get from
> ++ *                          span N to span N+1, where negative stride
> ++ *                          indicates the image is bottom up
> ++ *  nSliceHeight          : Height used when encoding in slices
> ++ *  bFlagErrorConcealment : Turns on error concealment if it is supported by
> ++ *                          the OMX component
> ++ *  eCompressionFormat    : Compression format used in this instance of
> ++ *                          the component. When OMX_IMAGE_CodingUnused is
> ++ *                          specified, eColorFormat is valid
> ++ *  eColorFormat          : Decompressed format used by this component
> ++ *  pNativeWindow         : Platform specific reference for a window object if a
> ++ *                          display sink , otherwise this field is 0x0.
> ++ */
> ++typedef struct OMX_IMAGE_PORTDEFINITIONTYPE {
> ++    OMX_STRING cMIMEType;
> ++    OMX_NATIVE_DEVICETYPE pNativeRender;
> ++    OMX_U32 nFrameWidth;
> ++    OMX_U32 nFrameHeight;
> ++    OMX_S32 nStride;
> ++    OMX_U32 nSliceHeight;
> ++    OMX_BOOL bFlagErrorConcealment;
> ++    OMX_IMAGE_CODINGTYPE eCompressionFormat;
> ++    OMX_COLOR_FORMATTYPE eColorFormat;
> ++    OMX_NATIVE_WINDOWTYPE pNativeWindow;
> ++} OMX_IMAGE_PORTDEFINITIONTYPE;
> ++
> ++
> ++/**
> ++ * Port format parameter.  This structure is used to enumerate the various
> ++ * data input/output format supported by the port.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize              : Size of the structure in bytes
> ++ *  nVersion           : OMX specification version information
> ++ *  nPortIndex         : Indicates which port to set
> ++ *  nIndex             : Indicates the enumeration index for the format from
> ++ *                       0x0 to N-1
> ++ *  eCompressionFormat : Compression format used in this instance of the
> ++ *                       component. When OMX_IMAGE_CodingUnused is specified,
> ++ *                       eColorFormat is valid
> ++ *  eColorFormat       : Decompressed format used by this component
> ++ */
> ++typedef struct OMX_IMAGE_PARAM_PORTFORMATTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nIndex;
> ++    OMX_IMAGE_CODINGTYPE eCompressionFormat;
> ++    OMX_COLOR_FORMATTYPE eColorFormat;
> ++} OMX_IMAGE_PARAM_PORTFORMATTYPE;
> ++
> ++
> ++/**
> ++ * Flash control type
> ++ *
> ++ * ENUMS
> ++ *  Torch : Flash forced constantly on
> ++ */
> ++typedef enum OMX_IMAGE_FLASHCONTROLTYPE {
> ++    OMX_IMAGE_FlashControlOn = 0,
> ++    OMX_IMAGE_FlashControlOff,
> ++    OMX_IMAGE_FlashControlAuto,
> ++    OMX_IMAGE_FlashControlRedEyeReduction,
> ++    OMX_IMAGE_FlashControlFillin,
> ++    OMX_IMAGE_FlashControlTorch,
> ++    OMX_IMAGE_FlashControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_IMAGE_FlashControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_IMAGE_FlashControlMax = 0x7FFFFFFF
> ++} OMX_IMAGE_FLASHCONTROLTYPE;
> ++
> ++
> ++/**
> ++ * Flash control configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize         : Size of the structure in bytes
> ++ *  nVersion      : OMX specification version information
> ++ *  nPortIndex    : Port that this structure applies to
> ++ *  eFlashControl : Flash control type
> ++ */
> ++typedef struct OMX_IMAGE_PARAM_FLASHCONTROLTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_IMAGE_FLASHCONTROLTYPE eFlashControl;
> ++} OMX_IMAGE_PARAM_FLASHCONTROLTYPE;
> ++
> ++
> ++/**
> ++ * Focus control type
> ++ */
> ++typedef enum OMX_IMAGE_FOCUSCONTROLTYPE {
> ++    OMX_IMAGE_FocusControlOn = 0,
> ++    OMX_IMAGE_FocusControlOff,
> ++    OMX_IMAGE_FocusControlAuto,
> ++    OMX_IMAGE_FocusControlAutoLock,
> ++    OMX_IMAGE_FocusControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_IMAGE_FocusControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_IMAGE_FocusControlMax = 0x7FFFFFFF
> ++} OMX_IMAGE_FOCUSCONTROLTYPE;
> ++
> ++
> ++/**
> ++ * Focus control configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize           : Size of the structure in bytes
> ++ *  nVersion        : OMX specification version information
> ++ *  nPortIndex      : Port that this structure applies to
> ++ *  eFocusControl   : Focus control
> ++ *  nFocusSteps     : Focus can take on values from 0 mm to infinity.
> ++ *                    Interest is only in number of steps over this range.
> ++ *  nFocusStepIndex : Current focus step index
> ++ */
> ++typedef struct OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_IMAGE_FOCUSCONTROLTYPE eFocusControl;
> ++    OMX_U32 nFocusSteps;
> ++    OMX_U32 nFocusStepIndex;
> ++} OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE;
> ++
> ++
> ++/**
> ++ * Q Factor for JPEG compression, which controls the tradeoff between image
> ++ * quality and size.  Q Factor provides a more simple means of controlling
> ++ * JPEG compression quality, without directly programming Quantization
> ++ * tables for chroma and luma
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nQFactor   : JPEG Q factor value in the range of 1-100. A factor of 1
> ++ *               produces the smallest, worst quality images, and a factor
> ++ *               of 100 produces the largest, best quality images.  A
> ++ *               typical default is 75 for small good quality images
> ++ */
> ++typedef struct OMX_IMAGE_PARAM_QFACTORTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nQFactor;
> ++} OMX_IMAGE_PARAM_QFACTORTYPE;
> ++
> ++/**
> ++ * Quantization table type
> ++ */
> ++
> ++typedef enum OMX_IMAGE_QUANTIZATIONTABLETYPE {
> ++    OMX_IMAGE_QuantizationTableLuma = 0,
> ++    OMX_IMAGE_QuantizationTableChroma,
> ++    OMX_IMAGE_QuantizationTableChromaCb,
> ++    OMX_IMAGE_QuantizationTableChromaCr,
> ++    OMX_IMAGE_QuantizationTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_IMAGE_QuantizationTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_IMAGE_QuantizationTableMax = 0x7FFFFFFF
> ++} OMX_IMAGE_QUANTIZATIONTABLETYPE;
> ++
> ++/**
> ++ * JPEG quantization tables are used to determine DCT compression for
> ++ * YUV data, as an alternative to specifying Q factor, providing exact
> ++ * control of compression
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                   : Size of the structure in bytes
> ++ *  nVersion                : OMX specification version information
> ++ *  nPortIndex              : Port that this structure applies to
> ++ *  eQuantizationTable      : Quantization table type
> ++ *  nQuantizationMatrix[64] : JPEG quantization table of coefficients stored
> ++ *                            in increasing columns then by rows of data (i.e.
> ++ *                            row 1, ... row 8). Quantization values are in
> ++ *                            the range 0-255 and stored in linear order
> ++ *                            (i.e. the component will zig-zag the
> ++ *                            quantization table data if required internally)
> ++ */
> ++typedef struct OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_IMAGE_QUANTIZATIONTABLETYPE eQuantizationTable;
> ++    OMX_U8 nQuantizationMatrix[64];
> ++} OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE;
> ++
> ++
> ++/**
> ++ * Huffman table type, the same Huffman table is applied for chroma and
> ++ * luma component
> ++ */
> ++typedef enum OMX_IMAGE_HUFFMANTABLETYPE {
> ++    OMX_IMAGE_HuffmanTableAC = 0,
> ++    OMX_IMAGE_HuffmanTableDC,
> ++    OMX_IMAGE_HuffmanTableACLuma,
> ++    OMX_IMAGE_HuffmanTableACChroma,
> ++    OMX_IMAGE_HuffmanTableDCLuma,
> ++    OMX_IMAGE_HuffmanTableDCChroma,
> ++    OMX_IMAGE_HuffmanTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_IMAGE_HuffmanTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_IMAGE_HuffmanTableMax = 0x7FFFFFFF
> ++} OMX_IMAGE_HUFFMANTABLETYPE;
> ++
> ++/**
> ++ * JPEG Huffman table
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                            : Size of the structure in bytes
> ++ *  nVersion                         : OMX specification version information
> ++ *  nPortIndex                       : Port that this structure applies to
> ++ *  eHuffmanTable                    : Huffman table type
> ++ *  nNumberOfHuffmanCodeOfLength[16] : 0-16, number of Huffman codes of each
> ++ *                                     possible length
> ++ *  nHuffmanTable[256]               : 0-255, the size used for AC and DC
> ++ *                                     HuffmanTable are 16 and 162
> ++ */
> ++typedef struct OMX_IMAGE_PARAM_HUFFMANTTABLETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_IMAGE_HUFFMANTABLETYPE eHuffmanTable;
> ++    OMX_U8 nNumberOfHuffmanCodeOfLength[16];
> ++    OMX_U8 nHuffmanTable[256];
> ++}OMX_IMAGE_PARAM_HUFFMANTTABLETYPE;
> ++
> ++/** @} */
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_IndexExt.h b/usr/include/OpenMAX/il/OMX_IndexExt.h
> +--- a/usr/include/OpenMAX/il/OMX_IndexExt.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_IndexExt.h	2011-08-18 13:48:18.000000000 +0200
> +@@ -0,0 +1,90 @@
> ++/*
> ++ * Copyright (c) 2010 The Khronos Group Inc. 
> ++ * 
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions: 
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software. 
> ++ * 
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
> ++ *
> ++ */
> ++
> ++/** @file OMX_IndexExt.h - OpenMax IL version 1.1.2
> ++ * The OMX_IndexExt header file contains extensions to the definitions 
> ++ * for both applications and components .
> ++ */
> ++
> ++#ifndef OMX_IndexExt_h
> ++#define OMX_IndexExt_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/* Each OMX header shall include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully
> ++ */
> ++#include <OMX_Index.h>
> ++
> ++
> ++/** Khronos standard extension indices.
> ++
> ++This enum lists the current Khronos extension indices to OpenMAX IL.
> ++*/
> ++typedef enum OMX_INDEXEXTTYPE {
> ++
> ++    /* Component parameters and configurations */
> ++    OMX_IndexExtComponentStartUnused = OMX_IndexKhronosExtensions + 0x00100000,
> ++    OMX_IndexConfigCallbackRequest,                 /**< reference: OMX_CONFIG_CALLBACKREQUESTTYPE */
> ++    OMX_IndexConfigCommitMode,                      /**< reference: OMX_CONFIG_COMMITMODETYPE */
> ++    OMX_IndexConfigCommit,                          /**< reference: OMX_CONFIG_COMMITTYPE */
> ++
> ++    /* Port parameters and configurations */
> ++    OMX_IndexExtPortStartUnused = OMX_IndexKhronosExtensions + 0x00200000,
> ++
> ++    /* Audio parameters and configurations */
> ++    OMX_IndexExtAudioStartUnused = OMX_IndexKhronosExtensions + 0x00400000,
> ++
> ++    /* Image parameters and configurations */
> ++    OMX_IndexExtImageStartUnused = OMX_IndexKhronosExtensions + 0x00500000,
> ++
> ++    /* Video parameters and configurations */
> ++    OMX_IndexExtVideoStartUnused = OMX_IndexKhronosExtensions + 0x00600000,
> ++    OMX_IndexParamNalStreamFormatSupported,         /**< reference: OMX_NALSTREAMFORMATTYPE */
> ++    OMX_IndexParamNalStreamFormat,                  /**< reference: OMX_NALSTREAMFORMATTYPE */
> ++    OMX_IndexParamNalStreamFormatSelect,            /**< reference: OMX_NALSTREAMFORMATTYPE */
> ++    OMX_IndexParamVideoVp8,                         /**< reference: OMX_VIDEO_PARAM_VP8TYPE */
> ++    OMX_IndexConfigVideoVp8ReferenceFrame,          /**< reference: OMX_VIDEO_VP8REFERENCEFRAMETYPE */
> ++    OMX_IndexConfigVideoVp8ReferenceFrameType,      /**< reference: OMX_VIDEO_VP8REFERENCEFRAMEINFOTYPE */
> ++
> ++    /* Image & Video common configurations */
> ++    OMX_IndexExtCommonStartUnused = OMX_IndexKhronosExtensions + 0x00700000,
> ++
> ++    /* Other configurations */
> ++    OMX_IndexExtOtherStartUnused = OMX_IndexKhronosExtensions + 0x00800000,
> ++
> ++    /* Time configurations */
> ++    OMX_IndexExtTimeStartUnused = OMX_IndexKhronosExtensions + 0x00900000,
> ++
> ++    OMX_IndexExtMax = 0x7FFFFFFF
> ++} OMX_INDEXEXTTYPE;
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif /* OMX_IndexExt_h */
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Index.h b/usr/include/OpenMAX/il/OMX_Index.h
> +--- a/usr/include/OpenMAX/il/OMX_Index.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Index.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,258 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** @file OMX_Index.h - OpenMax IL version 1.1.2
> ++ *  The OMX_Index header file contains the definitions for both applications
> ++ *  and components .
> ++ */
> ++
> ++
> ++#ifndef OMX_Index_h
> ++#define OMX_Index_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++/* Each OMX header must include all required header files to allow the
> ++ *  header to compile without errors.  The includes below are required
> ++ *  for this header file to compile successfully
> ++ */
> ++#include <OMX_Types.h>
> ++
> ++
> ++/** The OMX_INDEXTYPE enumeration is used to select a structure when either
> ++ *  getting or setting parameters and/or configuration data.  Each entry in
> ++ *  this enumeration maps to an OMX specified structure.  When the
> ++ *  OMX_GetParameter, OMX_SetParameter, OMX_GetConfig or OMX_SetConfig methods
> ++ *  are used, the second parameter will always be an entry from this enumeration
> ++ *  and the third entry will be the structure shown in the comments for the entry.
> ++ *  For example, if the application is initializing a cropping function, the
> ++ *  OMX_SetConfig command would have OMX_IndexConfigCommonInputCrop as the second parameter
> ++ *  and would send a pointer to an initialized OMX_RECTTYPE structure as the
> ++ *  third parameter.
> ++ *
> ++ *  The enumeration entries named with the OMX_Config prefix are sent using
> ++ *  the OMX_SetConfig command and the enumeration entries named with the
> ++ *  OMX_PARAM_ prefix are sent using the OMX_SetParameter command.
> ++ */
> ++typedef enum OMX_INDEXTYPE {
> ++
> ++    OMX_IndexComponentStartUnused = 0x01000000,
> ++    OMX_IndexParamPriorityMgmt,             /**< reference: OMX_PRIORITYMGMTTYPE */
> ++    OMX_IndexParamAudioInit,                /**< reference: OMX_PORT_PARAM_TYPE */
> ++    OMX_IndexParamImageInit,                /**< reference: OMX_PORT_PARAM_TYPE */
> ++    OMX_IndexParamVideoInit,                /**< reference: OMX_PORT_PARAM_TYPE */
> ++    OMX_IndexParamOtherInit,                /**< reference: OMX_PORT_PARAM_TYPE */
> ++    OMX_IndexParamNumAvailableStreams,      /**< reference: OMX_PARAM_U32TYPE */
> ++    OMX_IndexParamActiveStream,             /**< reference: OMX_PARAM_U32TYPE */
> ++    OMX_IndexParamSuspensionPolicy,         /**< reference: OMX_PARAM_SUSPENSIONPOLICYTYPE */
> ++    OMX_IndexParamComponentSuspended,       /**< reference: OMX_PARAM_SUSPENSIONTYPE */
> ++    OMX_IndexConfigCapturing,               /**< reference: OMX_CONFIG_BOOLEANTYPE */
> ++    OMX_IndexConfigCaptureMode,             /**< reference: OMX_CONFIG_CAPTUREMODETYPE */
> ++    OMX_IndexAutoPauseAfterCapture,         /**< reference: OMX_CONFIG_BOOLEANTYPE */
> ++    OMX_IndexParamContentURI,               /**< reference: OMX_PARAM_CONTENTURITYPE */
> ++    OMX_IndexParamCustomContentPipe,        /**< reference: OMX_PARAM_CONTENTPIPETYPE */
> ++    OMX_IndexParamDisableResourceConcealment, /**< reference: OMX_RESOURCECONCEALMENTTYPE */
> ++    OMX_IndexConfigMetadataItemCount,       /**< reference: OMX_CONFIG_METADATAITEMCOUNTTYPE */
> ++    OMX_IndexConfigContainerNodeCount,      /**< reference: OMX_CONFIG_CONTAINERNODECOUNTTYPE */
> ++    OMX_IndexConfigMetadataItem,            /**< reference: OMX_CONFIG_METADATAITEMTYPE */
> ++    OMX_IndexConfigCounterNodeID,           /**< reference: OMX_CONFIG_CONTAINERNODEIDTYPE */
> ++    OMX_IndexParamMetadataFilterType,       /**< reference: OMX_PARAM_METADATAFILTERTYPE */
> ++    OMX_IndexParamMetadataKeyFilter,        /**< reference: OMX_PARAM_METADATAFILTERTYPE */
> ++    OMX_IndexConfigPriorityMgmt,            /**< reference: OMX_PRIORITYMGMTTYPE */
> ++    OMX_IndexParamStandardComponentRole,    /**< reference: OMX_PARAM_COMPONENTROLETYPE */
> ++
> ++    OMX_IndexPortStartUnused = 0x02000000,
> ++    OMX_IndexParamPortDefinition,           /**< reference: OMX_PARAM_PORTDEFINITIONTYPE */
> ++    OMX_IndexParamCompBufferSupplier,       /**< reference: OMX_PARAM_BUFFERSUPPLIERTYPE */
> ++    OMX_IndexReservedStartUnused = 0x03000000,
> ++
> ++    /* Audio parameters and configurations */
> ++    OMX_IndexAudioStartUnused = 0x04000000,
> ++    OMX_IndexParamAudioPortFormat,          /**< reference: OMX_AUDIO_PARAM_PORTFORMATTYPE */
> ++    OMX_IndexParamAudioPcm,                 /**< reference: OMX_AUDIO_PARAM_PCMMODETYPE */
> ++    OMX_IndexParamAudioAac,                 /**< reference: OMX_AUDIO_PARAM_AACPROFILETYPE */
> ++    OMX_IndexParamAudioRa,                  /**< reference: OMX_AUDIO_PARAM_RATYPE */
> ++    OMX_IndexParamAudioMp3,                 /**< reference: OMX_AUDIO_PARAM_MP3TYPE */
> ++    OMX_IndexParamAudioAdpcm,               /**< reference: OMX_AUDIO_PARAM_ADPCMTYPE */
> ++    OMX_IndexParamAudioG723,                /**< reference: OMX_AUDIO_PARAM_G723TYPE */
> ++    OMX_IndexParamAudioG729,                /**< reference: OMX_AUDIO_PARAM_G729TYPE */
> ++    OMX_IndexParamAudioAmr,                 /**< reference: OMX_AUDIO_PARAM_AMRTYPE */
> ++    OMX_IndexParamAudioWma,                 /**< reference: OMX_AUDIO_PARAM_WMATYPE */
> ++    OMX_IndexParamAudioSbc,                 /**< reference: OMX_AUDIO_PARAM_SBCTYPE */
> ++    OMX_IndexParamAudioMidi,                /**< reference: OMX_AUDIO_PARAM_MIDITYPE */
> ++    OMX_IndexParamAudioGsm_FR,              /**< reference: OMX_AUDIO_PARAM_GSMFRTYPE */
> ++    OMX_IndexParamAudioMidiLoadUserSound,   /**< reference: OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE */
> ++    OMX_IndexParamAudioG726,                /**< reference: OMX_AUDIO_PARAM_G726TYPE */
> ++    OMX_IndexParamAudioGsm_EFR,             /**< reference: OMX_AUDIO_PARAM_GSMEFRTYPE */
> ++    OMX_IndexParamAudioGsm_HR,              /**< reference: OMX_AUDIO_PARAM_GSMHRTYPE */
> ++    OMX_IndexParamAudioPdc_FR,              /**< reference: OMX_AUDIO_PARAM_PDCFRTYPE */
> ++    OMX_IndexParamAudioPdc_EFR,             /**< reference: OMX_AUDIO_PARAM_PDCEFRTYPE */
> ++    OMX_IndexParamAudioPdc_HR,              /**< reference: OMX_AUDIO_PARAM_PDCHRTYPE */
> ++    OMX_IndexParamAudioTdma_FR,             /**< reference: OMX_AUDIO_PARAM_TDMAFRTYPE */
> ++    OMX_IndexParamAudioTdma_EFR,            /**< reference: OMX_AUDIO_PARAM_TDMAEFRTYPE */
> ++    OMX_IndexParamAudioQcelp8,              /**< reference: OMX_AUDIO_PARAM_QCELP8TYPE */
> ++    OMX_IndexParamAudioQcelp13,             /**< reference: OMX_AUDIO_PARAM_QCELP13TYPE */
> ++    OMX_IndexParamAudioEvrc,                /**< reference: OMX_AUDIO_PARAM_EVRCTYPE */
> ++    OMX_IndexParamAudioSmv,                 /**< reference: OMX_AUDIO_PARAM_SMVTYPE */
> ++    OMX_IndexParamAudioVorbis,              /**< reference: OMX_AUDIO_PARAM_VORBISTYPE */
> ++
> ++    OMX_IndexConfigAudioMidiImmediateEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE */
> ++    OMX_IndexConfigAudioMidiControl,        /**< reference: OMX_AUDIO_CONFIG_MIDICONTROLTYPE */
> ++    OMX_IndexConfigAudioMidiSoundBankProgram, /**< reference: OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE */
> ++    OMX_IndexConfigAudioMidiStatus,         /**< reference: OMX_AUDIO_CONFIG_MIDISTATUSTYPE */
> ++    OMX_IndexConfigAudioMidiMetaEvent,      /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE */
> ++    OMX_IndexConfigAudioMidiMetaEventData,  /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE */
> ++    OMX_IndexConfigAudioVolume,             /**< reference: OMX_AUDIO_CONFIG_VOLUMETYPE */
> ++    OMX_IndexConfigAudioBalance,            /**< reference: OMX_AUDIO_CONFIG_BALANCETYPE */
> ++    OMX_IndexConfigAudioChannelMute,        /**< reference: OMX_AUDIO_CONFIG_CHANNELMUTETYPE */
> ++    OMX_IndexConfigAudioMute,               /**< reference: OMX_AUDIO_CONFIG_MUTETYPE */
> ++    OMX_IndexConfigAudioLoudness,           /**< reference: OMX_AUDIO_CONFIG_LOUDNESSTYPE */
> ++    OMX_IndexConfigAudioEchoCancelation,    /**< reference: OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE */
> ++    OMX_IndexConfigAudioNoiseReduction,     /**< reference: OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE */
> ++    OMX_IndexConfigAudioBass,               /**< reference: OMX_AUDIO_CONFIG_BASSTYPE */
> ++    OMX_IndexConfigAudioTreble,             /**< reference: OMX_AUDIO_CONFIG_TREBLETYPE */
> ++    OMX_IndexConfigAudioStereoWidening,     /**< reference: OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE */
> ++    OMX_IndexConfigAudioChorus,             /**< reference: OMX_AUDIO_CONFIG_CHORUSTYPE */
> ++    OMX_IndexConfigAudioEqualizer,          /**< reference: OMX_AUDIO_CONFIG_EQUALIZERTYPE */
> ++    OMX_IndexConfigAudioReverberation,      /**< reference: OMX_AUDIO_CONFIG_REVERBERATIONTYPE */
> ++    OMX_IndexConfigAudioChannelVolume,      /**< reference: OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE */
> ++
> ++    /* Image specific parameters and configurations */
> ++    OMX_IndexImageStartUnused = 0x05000000,
> ++    OMX_IndexParamImagePortFormat,          /**< reference: OMX_IMAGE_PARAM_PORTFORMATTYPE */
> ++    OMX_IndexParamFlashControl,             /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */
> ++    OMX_IndexConfigFocusControl,            /**< reference: OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE */
> ++    OMX_IndexParamQFactor,                  /**< reference: OMX_IMAGE_PARAM_QFACTORTYPE */
> ++    OMX_IndexParamQuantizationTable,        /**< reference: OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE */
> ++    OMX_IndexParamHuffmanTable,             /**< reference: OMX_IMAGE_PARAM_HUFFMANTTABLETYPE */
> ++    OMX_IndexConfigFlashControl,            /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */
> ++
> ++    /* Video specific parameters and configurations */
> ++    OMX_IndexVideoStartUnused = 0x06000000,
> ++    OMX_IndexParamVideoPortFormat,          /**< reference: OMX_VIDEO_PARAM_PORTFORMATTYPE */
> ++    OMX_IndexParamVideoQuantization,        /**< reference: OMX_VIDEO_PARAM_QUANTIZATIONTYPE */
> ++    OMX_IndexParamVideoFastUpdate,          /**< reference: OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE */
> ++    OMX_IndexParamVideoBitrate,             /**< reference: OMX_VIDEO_PARAM_BITRATETYPE */
> ++    OMX_IndexParamVideoMotionVector,        /**< reference: OMX_VIDEO_PARAM_MOTIONVECTORTYPE */
> ++    OMX_IndexParamVideoIntraRefresh,        /**< reference: OMX_VIDEO_PARAM_INTRAREFRESHTYPE */
> ++    OMX_IndexParamVideoErrorCorrection,     /**< reference: OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE */
> ++    OMX_IndexParamVideoVBSMC,               /**< reference: OMX_VIDEO_PARAM_VBSMCTYPE */
> ++    OMX_IndexParamVideoMpeg2,               /**< reference: OMX_VIDEO_PARAM_MPEG2TYPE */
> ++    OMX_IndexParamVideoMpeg4,               /**< reference: OMX_VIDEO_PARAM_MPEG4TYPE */
> ++    OMX_IndexParamVideoWmv,                 /**< reference: OMX_VIDEO_PARAM_WMVTYPE */
> ++    OMX_IndexParamVideoRv,                  /**< reference: OMX_VIDEO_PARAM_RVTYPE */
> ++    OMX_IndexParamVideoAvc,                 /**< reference: OMX_VIDEO_PARAM_AVCTYPE */
> ++    OMX_IndexParamVideoH263,                /**< reference: OMX_VIDEO_PARAM_H263TYPE */
> ++    OMX_IndexParamVideoProfileLevelQuerySupported, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */
> ++    OMX_IndexParamVideoProfileLevelCurrent, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */
> ++    OMX_IndexConfigVideoBitrate,            /**< reference: OMX_VIDEO_CONFIG_BITRATETYPE */
> ++    OMX_IndexConfigVideoFramerate,          /**< reference: OMX_CONFIG_FRAMERATETYPE */
> ++    OMX_IndexConfigVideoIntraVOPRefresh,    /**< reference: OMX_CONFIG_INTRAREFRESHVOPTYPE */
> ++    OMX_IndexConfigVideoIntraMBRefresh,     /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */
> ++    OMX_IndexConfigVideoMBErrorReporting,   /**< reference: OMX_CONFIG_MBERRORREPORTINGTYPE */
> ++    OMX_IndexParamVideoMacroblocksPerFrame, /**< reference: OMX_PARAM_MACROBLOCKSTYPE */
> ++    OMX_IndexConfigVideoMacroBlockErrorMap, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */
> ++    OMX_IndexParamVideoSliceFMO,            /**< reference: OMX_VIDEO_PARAM_AVCSLICEFMO */
> ++    OMX_IndexConfigVideoAVCIntraPeriod,     /**< reference: OMX_VIDEO_CONFIG_AVCINTRAPERIOD */
> ++    OMX_IndexConfigVideoNalSize,            /**< reference: OMX_VIDEO_CONFIG_NALSIZE */
> ++
> ++    /* Image & Video common Configurations */
> ++    OMX_IndexCommonStartUnused = 0x07000000,
> ++    OMX_IndexParamCommonDeblocking,         /**< reference: OMX_PARAM_DEBLOCKINGTYPE */
> ++    OMX_IndexParamCommonSensorMode,         /**< reference: OMX_PARAM_SENSORMODETYPE */
> ++    OMX_IndexParamCommonInterleave,         /**< reference: OMX_PARAM_INTERLEAVETYPE */
> ++    OMX_IndexConfigCommonColorFormatConversion, /**< reference: OMX_CONFIG_COLORCONVERSIONTYPE */
> ++    OMX_IndexConfigCommonScale,             /**< reference: OMX_CONFIG_SCALEFACTORTYPE */
> ++    OMX_IndexConfigCommonImageFilter,       /**< reference: OMX_CONFIG_IMAGEFILTERTYPE */
> ++    OMX_IndexConfigCommonColorEnhancement,  /**< reference: OMX_CONFIG_COLORENHANCEMENTTYPE */
> ++    OMX_IndexConfigCommonColorKey,          /**< reference: OMX_CONFIG_COLORKEYTYPE */
> ++    OMX_IndexConfigCommonColorBlend,        /**< reference: OMX_CONFIG_COLORBLENDTYPE */
> ++    OMX_IndexConfigCommonFrameStabilisation,/**< reference: OMX_CONFIG_FRAMESTABTYPE */
> ++    OMX_IndexConfigCommonRotate,            /**< reference: OMX_CONFIG_ROTATIONTYPE */
> ++    OMX_IndexConfigCommonMirror,            /**< reference: OMX_CONFIG_MIRRORTYPE */
> ++    OMX_IndexConfigCommonOutputPosition,    /**< reference: OMX_CONFIG_POINTTYPE */
> ++    OMX_IndexConfigCommonInputCrop,         /**< reference: OMX_CONFIG_RECTTYPE */
> ++    OMX_IndexConfigCommonOutputCrop,        /**< reference: OMX_CONFIG_RECTTYPE */
> ++    OMX_IndexConfigCommonDigitalZoom,       /**< reference: OMX_CONFIG_SCALEFACTORTYPE */
> ++    OMX_IndexConfigCommonOpticalZoom,       /**< reference: OMX_CONFIG_SCALEFACTORTYPE*/
> ++    OMX_IndexConfigCommonWhiteBalance,      /**< reference: OMX_CONFIG_WHITEBALCONTROLTYPE */
> ++    OMX_IndexConfigCommonExposure,          /**< reference: OMX_CONFIG_EXPOSURECONTROLTYPE */
> ++    OMX_IndexConfigCommonContrast,          /**< reference: OMX_CONFIG_CONTRASTTYPE */
> ++    OMX_IndexConfigCommonBrightness,        /**< reference: OMX_CONFIG_BRIGHTNESSTYPE */
> ++    OMX_IndexConfigCommonBacklight,         /**< reference: OMX_CONFIG_BACKLIGHTTYPE */
> ++    OMX_IndexConfigCommonGamma,             /**< reference: OMX_CONFIG_GAMMATYPE */
> ++    OMX_IndexConfigCommonSaturation,        /**< reference: OMX_CONFIG_SATURATIONTYPE */
> ++    OMX_IndexConfigCommonLightness,         /**< reference: OMX_CONFIG_LIGHTNESSTYPE */
> ++    OMX_IndexConfigCommonExclusionRect,     /**< reference: OMX_CONFIG_RECTTYPE */
> ++    OMX_IndexConfigCommonDithering,         /**< reference: OMX_CONFIG_DITHERTYPE */
> ++    OMX_IndexConfigCommonPlaneBlend,        /**< reference: OMX_CONFIG_PLANEBLENDTYPE */
> ++    OMX_IndexConfigCommonExposureValue,     /**< reference: OMX_CONFIG_EXPOSUREVALUETYPE */
> ++    OMX_IndexConfigCommonOutputSize,        /**< reference: OMX_FRAMESIZETYPE */
> ++    OMX_IndexParamCommonExtraQuantData,     /**< reference: OMX_OTHER_EXTRADATATYPE */
> ++    OMX_IndexConfigCommonFocusRegion,       /**< reference: OMX_CONFIG_FOCUSREGIONTYPE */
> ++    OMX_IndexConfigCommonFocusStatus,       /**< reference: OMX_PARAM_FOCUSSTATUSTYPE */
> ++    OMX_IndexConfigCommonTransitionEffect,  /**< reference: OMX_CONFIG_TRANSITIONEFFECTTYPE */
> ++
> ++    /* Reserved Configuration range */
> ++    OMX_IndexOtherStartUnused = 0x08000000,
> ++    OMX_IndexParamOtherPortFormat,          /**< reference: OMX_OTHER_PARAM_PORTFORMATTYPE */
> ++    OMX_IndexConfigOtherPower,              /**< reference: OMX_OTHER_CONFIG_POWERTYPE */
> ++    OMX_IndexConfigOtherStats,              /**< reference: OMX_OTHER_CONFIG_STATSTYPE */
> ++
> ++
> ++    /* Reserved Time range */
> ++    OMX_IndexTimeStartUnused = 0x09000000,
> ++    OMX_IndexConfigTimeScale,               /**< reference: OMX_TIME_CONFIG_SCALETYPE */
> ++    OMX_IndexConfigTimeClockState,          /**< reference: OMX_TIME_CONFIG_CLOCKSTATETYPE */
> ++    OMX_IndexConfigTimeActiveRefClock,      /**< reference: OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE */
> ++    OMX_IndexConfigTimeCurrentMediaTime,    /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */
> ++    OMX_IndexConfigTimeCurrentWallTime,     /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */
> ++    OMX_IndexConfigTimeCurrentAudioReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */
> ++    OMX_IndexConfigTimeCurrentVideoReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */
> ++    OMX_IndexConfigTimeMediaTimeRequest,    /**< reference: OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE (write only) */
> ++    OMX_IndexConfigTimeClientStartTime,     /**<reference:  OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */
> ++    OMX_IndexConfigTimePosition,            /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE */
> ++    OMX_IndexConfigTimeSeekMode,            /**< reference: OMX_TIME_CONFIG_SEEKMODETYPE */
> ++
> ++
> ++    OMX_IndexKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    /* Vendor specific area */
> ++    OMX_IndexVendorStartUnused = 0x7F000000,
> ++    /* Vendor specific structures should be in the range of 0x7F000000
> ++       to 0x7FFFFFFE.  This range is not broken out by vendor, so
> ++       private indexes are not guaranteed unique and therefore should
> ++       only be sent to the appropriate component. */
> ++
> ++    OMX_IndexMax = 0x7FFFFFFF
> ++
> ++} OMX_INDEXTYPE;
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_IVCommon.h b/usr/include/OpenMAX/il/OMX_IVCommon.h
> +--- a/usr/include/OpenMAX/il/OMX_IVCommon.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_IVCommon.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,920 @@
> ++/**
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/**
> ++ * @file OMX_IVCommon.h - OpenMax IL version 1.1.2
> ++ *  The structures needed by Video and Image components to exchange
> ++ *  parameters and configuration data with the components.
> ++ */
> ++#ifndef OMX_IVCommon_h
> ++#define OMX_IVCommon_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/**
> ++ * Each OMX header must include all required header files to allow the header
> ++ * to compile without errors.  The includes below are required for this header
> ++ * file to compile successfully
> ++ */
> ++
> ++#include <OMX_Core.h>
> ++
> ++/** @defgroup iv OpenMAX IL Imaging and Video Domain
> ++ * Common structures for OpenMAX IL Imaging and Video domains
> ++ * @{
> ++ */
> ++
> ++
> ++/**
> ++ * Enumeration defining possible uncompressed image/video formats.
> ++ *
> ++ * ENUMS:
> ++ *  Unused                 : Placeholder value when format is N/A
> ++ *  Monochrome             : black and white
> ++ *  8bitRGB332             : Red 7:5, Green 4:2, Blue 1:0
> ++ *  12bitRGB444            : Red 11:8, Green 7:4, Blue 3:0
> ++ *  16bitARGB4444          : Alpha 15:12, Red 11:8, Green 7:4, Blue 3:0
> ++ *  16bitARGB1555          : Alpha 15, Red 14:10, Green 9:5, Blue 4:0
> ++ *  16bitRGB565            : Red 15:11, Green 10:5, Blue 4:0
> ++ *  16bitBGR565            : Blue 15:11, Green 10:5, Red 4:0
> ++ *  18bitRGB666            : Red 17:12, Green 11:6, Blue 5:0
> ++ *  18bitARGB1665          : Alpha 17, Red 16:11, Green 10:5, Blue 4:0
> ++ *  19bitARGB1666          : Alpha 18, Red 17:12, Green 11:6, Blue 5:0
> ++ *  24bitRGB888            : Red 24:16, Green 15:8, Blue 7:0
> ++ *  24bitBGR888            : Blue 24:16, Green 15:8, Red 7:0
> ++ *  24bitARGB1887          : Alpha 23, Red 22:15, Green 14:7, Blue 6:0
> ++ *  25bitARGB1888          : Alpha 24, Red 23:16, Green 15:8, Blue 7:0
> ++ *  32bitBGRA8888          : Blue 31:24, Green 23:16, Red 15:8, Alpha 7:0
> ++ *  32bitARGB8888          : Alpha 31:24, Red 23:16, Green 15:8, Blue 7:0
> ++ *  YUV411Planar           : U,Y are subsampled by a factor of 4 horizontally
> ++ *  YUV411PackedPlanar     : packed per payload in planar slices
> ++ *  YUV420Planar           : Three arrays Y,U,V.
> ++ *  YUV420PackedPlanar     : packed per payload in planar slices
> ++ *  YUV420SemiPlanar       : Two arrays, one is all Y, the other is U and V
> ++ *  YUV422Planar           : Three arrays Y,U,V.
> ++ *  YUV422PackedPlanar     : packed per payload in planar slices
> ++ *  YUV422SemiPlanar       : Two arrays, one is all Y, the other is U and V
> ++ *  YCbYCr                 : Organized as 16bit YUYV (i.e. YCbYCr)
> ++ *  YCrYCb                 : Organized as 16bit YVYU (i.e. YCrYCb)
> ++ *  CbYCrY                 : Organized as 16bit UYVY (i.e. CbYCrY)
> ++ *  CrYCbY                 : Organized as 16bit VYUY (i.e. CrYCbY)
> ++ *  YUV444Interleaved      : Each pixel contains equal parts YUV
> ++ *  RawBayer8bit           : SMIA camera output format
> ++ *  RawBayer10bit          : SMIA camera output format
> ++ *  RawBayer8bitcompressed : SMIA camera output format
> ++ */
> ++typedef enum OMX_COLOR_FORMATTYPE {
> ++    OMX_COLOR_FormatUnused,
> ++    OMX_COLOR_FormatMonochrome,
> ++    OMX_COLOR_Format8bitRGB332,
> ++    OMX_COLOR_Format12bitRGB444,
> ++    OMX_COLOR_Format16bitARGB4444,
> ++    OMX_COLOR_Format16bitARGB1555,
> ++    OMX_COLOR_Format16bitRGB565,
> ++    OMX_COLOR_Format16bitBGR565,
> ++    OMX_COLOR_Format18bitRGB666,
> ++    OMX_COLOR_Format18bitARGB1665,
> ++    OMX_COLOR_Format19bitARGB1666,
> ++    OMX_COLOR_Format24bitRGB888,
> ++    OMX_COLOR_Format24bitBGR888,
> ++    OMX_COLOR_Format24bitARGB1887,
> ++    OMX_COLOR_Format25bitARGB1888,
> ++    OMX_COLOR_Format32bitBGRA8888,
> ++    OMX_COLOR_Format32bitARGB8888,
> ++    OMX_COLOR_FormatYUV411Planar,
> ++    OMX_COLOR_FormatYUV411PackedPlanar,
> ++    OMX_COLOR_FormatYUV420Planar,
> ++    OMX_COLOR_FormatYUV420PackedPlanar,
> ++    OMX_COLOR_FormatYUV420SemiPlanar,
> ++    OMX_COLOR_FormatYUV422Planar,
> ++    OMX_COLOR_FormatYUV422PackedPlanar,
> ++    OMX_COLOR_FormatYUV422SemiPlanar,
> ++    OMX_COLOR_FormatYCbYCr,
> ++    OMX_COLOR_FormatYCrYCb,
> ++    OMX_COLOR_FormatCbYCrY,
> ++    OMX_COLOR_FormatCrYCbY,
> ++    OMX_COLOR_FormatYUV444Interleaved,
> ++    OMX_COLOR_FormatRawBayer8bit,
> ++    OMX_COLOR_FormatRawBayer10bit,
> ++    OMX_COLOR_FormatRawBayer8bitcompressed,
> ++    OMX_COLOR_FormatL2,
> ++    OMX_COLOR_FormatL4,
> ++    OMX_COLOR_FormatL8,
> ++    OMX_COLOR_FormatL16,
> ++    OMX_COLOR_FormatL24,
> ++    OMX_COLOR_FormatL32,
> ++    OMX_COLOR_FormatYUV420PackedSemiPlanar,
> ++    OMX_COLOR_FormatYUV422PackedSemiPlanar,
> ++    OMX_COLOR_Format18BitBGR666,
> ++    OMX_COLOR_Format24BitARGB6666,
> ++    OMX_COLOR_Format24BitABGR6666,
> ++    OMX_COLOR_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_COLOR_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_COLOR_FormatMax = 0x7FFFFFFF
> ++} OMX_COLOR_FORMATTYPE;
> ++
> ++
> ++/**
> ++ * Defines the matrix for conversion from RGB to YUV or vice versa.
> ++ * iColorMatrix should be initialized with the fixed point values
> ++ * used in converting between formats.
> ++ */
> ++typedef struct OMX_CONFIG_COLORCONVERSIONTYPE {
> ++    OMX_U32 nSize;              /**< Size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version info */
> ++    OMX_U32 nPortIndex;         /**< Port that this struct applies to */
> ++    OMX_S32 xColorMatrix[3][3]; /**< Stored in signed Q16 format */
> ++    OMX_S32 xColorOffset[4];    /**< Stored in signed Q16 format */
> ++}OMX_CONFIG_COLORCONVERSIONTYPE;
> ++
> ++
> ++/**
> ++ * Structure defining percent to scale each frame dimension.  For example:
> ++ * To make the width 50% larger, use fWidth = 1.5 and to make the width
> ++ * 1/2 the original size, use fWidth = 0.5
> ++ */
> ++typedef struct OMX_CONFIG_SCALEFACTORTYPE {
> ++    OMX_U32 nSize;            /**< Size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version info */
> ++    OMX_U32 nPortIndex;       /**< Port that this struct applies to */
> ++    OMX_S32 xWidth;           /**< Fixed point value stored as Q16 */
> ++    OMX_S32 xHeight;          /**< Fixed point value stored as Q16 */
> ++}OMX_CONFIG_SCALEFACTORTYPE;
> ++
> ++
> ++/**
> ++ * Enumeration of possible image filter types
> ++ */
> ++typedef enum OMX_IMAGEFILTERTYPE {
> ++    OMX_ImageFilterNone,
> ++    OMX_ImageFilterNoise,
> ++    OMX_ImageFilterEmboss,
> ++    OMX_ImageFilterNegative,
> ++    OMX_ImageFilterSketch,
> ++    OMX_ImageFilterOilPaint,
> ++    OMX_ImageFilterHatch,
> ++    OMX_ImageFilterGpen,
> ++    OMX_ImageFilterAntialias,
> ++    OMX_ImageFilterDeRing,
> ++    OMX_ImageFilterSolarize,
> ++    OMX_ImageFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_ImageFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_ImageFilterMax = 0x7FFFFFFF
> ++} OMX_IMAGEFILTERTYPE;
> ++
> ++
> ++/**
> ++ * Image filter configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize        : Size of the structure in bytes
> ++ *  nVersion     : OMX specification version information
> ++ *  nPortIndex   : Port that this structure applies to
> ++ *  eImageFilter : Image filter type enumeration
> ++ */
> ++typedef struct OMX_CONFIG_IMAGEFILTERTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_IMAGEFILTERTYPE eImageFilter;
> ++} OMX_CONFIG_IMAGEFILTERTYPE;
> ++
> ++
> ++/**
> ++ * Customized U and V for color enhancement
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize             : Size of the structure in bytes
> ++ *  nVersion          : OMX specification version information
> ++ *  nPortIndex        : Port that this structure applies to
> ++ *  bColorEnhancement : Enable/disable color enhancement
> ++ *  nCustomizedU      : Practical values: 16-240, range: 0-255, value set for
> ++ *                      U component
> ++ *  nCustomizedV      : Practical values: 16-240, range: 0-255, value set for
> ++ *                      V component
> ++ */
> ++typedef struct OMX_CONFIG_COLORENHANCEMENTTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bColorEnhancement;
> ++    OMX_U8 nCustomizedU;
> ++    OMX_U8 nCustomizedV;
> ++} OMX_CONFIG_COLORENHANCEMENTTYPE;
> ++
> ++
> ++/**
> ++ * Define color key and color key mask
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nARGBColor : 32bit Alpha, Red, Green, Blue Color
> ++ *  nARGBMask  : 32bit Mask for Alpha, Red, Green, Blue channels
> ++ */
> ++typedef struct OMX_CONFIG_COLORKEYTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nARGBColor;
> ++    OMX_U32 nARGBMask;
> ++} OMX_CONFIG_COLORKEYTYPE;
> ++
> ++
> ++/**
> ++ * List of color blend types for pre/post processing
> ++ *
> ++ * ENUMS:
> ++ *  None          : No color blending present
> ++ *  AlphaConstant : Function is (alpha_constant * src) +
> ++ *                  (1 - alpha_constant) * dst)
> ++ *  AlphaPerPixel : Function is (alpha * src) + (1 - alpha) * dst)
> ++ *  Alternate     : Function is alternating pixels from src and dst
> ++ *  And           : Function is (src & dst)
> ++ *  Or            : Function is (src | dst)
> ++ *  Invert        : Function is ~src
> ++ */
> ++typedef enum OMX_COLORBLENDTYPE {
> ++    OMX_ColorBlendNone,
> ++    OMX_ColorBlendAlphaConstant,
> ++    OMX_ColorBlendAlphaPerPixel,
> ++    OMX_ColorBlendAlternate,
> ++    OMX_ColorBlendAnd,
> ++    OMX_ColorBlendOr,
> ++    OMX_ColorBlendInvert,
> ++    OMX_ColorBlendKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_ColorBlendVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_ColorBlendMax = 0x7FFFFFFF
> ++} OMX_COLORBLENDTYPE;
> ++
> ++
> ++/**
> ++ * Color blend configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize             : Size of the structure in bytes
> ++ *  nVersion          : OMX specification version information
> ++ *  nPortIndex        : Port that this structure applies to
> ++ *  nRGBAlphaConstant : Constant global alpha values when global alpha is used
> ++ *  eColorBlend       : Color blend type enumeration
> ++ */
> ++typedef struct OMX_CONFIG_COLORBLENDTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nRGBAlphaConstant;
> ++    OMX_COLORBLENDTYPE  eColorBlend;
> ++} OMX_CONFIG_COLORBLENDTYPE;
> ++
> ++
> ++/**
> ++ * Hold frame dimension
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nWidth     : Frame width in pixels
> ++ *  nHeight    : Frame height in pixels
> ++ */
> ++typedef struct OMX_FRAMESIZETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nWidth;
> ++    OMX_U32 nHeight;
> ++} OMX_FRAMESIZETYPE;
> ++
> ++
> ++/**
> ++ * Rotation configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nRotation  : +/- integer rotation value
> ++ */
> ++typedef struct OMX_CONFIG_ROTATIONTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nRotation;
> ++} OMX_CONFIG_ROTATIONTYPE;
> ++
> ++
> ++/**
> ++ * Possible mirroring directions for pre/post processing
> ++ *
> ++ * ENUMS:
> ++ *  None       : No mirroring
> ++ *  Vertical   : Vertical mirroring, flip on X axis
> ++ *  Horizontal : Horizontal mirroring, flip on Y axis
> ++ *  Both       : Both vertical and horizontal mirroring
> ++ */
> ++typedef enum OMX_MIRRORTYPE {
> ++    OMX_MirrorNone = 0,
> ++    OMX_MirrorVertical,
> ++    OMX_MirrorHorizontal,
> ++    OMX_MirrorBoth,
> ++    OMX_MirrorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_MirrorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_MirrorMax = 0x7FFFFFFF
> ++} OMX_MIRRORTYPE;
> ++
> ++
> ++/**
> ++ * Mirroring configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  eMirror    : Mirror type enumeration
> ++ */
> ++typedef struct OMX_CONFIG_MIRRORTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_MIRRORTYPE  eMirror;
> ++} OMX_CONFIG_MIRRORTYPE;
> ++
> ++
> ++/**
> ++ * Position information only
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nX         : X coordinate for the point
> ++ *  nY         : Y coordinate for the point
> ++ */
> ++typedef struct OMX_CONFIG_POINTTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nX;
> ++    OMX_S32 nY;
> ++} OMX_CONFIG_POINTTYPE;
> ++
> ++
> ++/**
> ++ * Frame size plus position
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nLeft      : X Coordinate of the top left corner of the rectangle
> ++ *  nTop       : Y Coordinate of the top left corner of the rectangle
> ++ *  nWidth     : Width of the rectangle
> ++ *  nHeight    : Height of the rectangle
> ++ */
> ++typedef struct OMX_CONFIG_RECTTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nLeft;
> ++    OMX_S32 nTop;
> ++    OMX_U32 nWidth;
> ++    OMX_U32 nHeight;
> ++} OMX_CONFIG_RECTTYPE;
> ++
> ++
> ++/**
> ++ * Deblocking state; it is required to be set up before starting the codec
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize       : Size of the structure in bytes
> ++ *  nVersion    : OMX specification version information
> ++ *  nPortIndex  : Port that this structure applies to
> ++ *  bDeblocking : Enable/disable deblocking mode
> ++ */
> ++typedef struct OMX_PARAM_DEBLOCKINGTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bDeblocking;
> ++} OMX_PARAM_DEBLOCKINGTYPE;
> ++
> ++
> ++/**
> ++ * Stabilization state
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  bStab      : Enable/disable frame stabilization state
> ++ */
> ++typedef struct OMX_CONFIG_FRAMESTABTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bStab;
> ++} OMX_CONFIG_FRAMESTABTYPE;
> ++
> ++
> ++/**
> ++ * White Balance control type
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  SunLight : Referenced in JSR-234
> ++ *  Flash    : Optimal for device's integrated flash
> ++ */
> ++typedef enum OMX_WHITEBALCONTROLTYPE {
> ++    OMX_WhiteBalControlOff = 0,
> ++    OMX_WhiteBalControlAuto,
> ++    OMX_WhiteBalControlSunLight,
> ++    OMX_WhiteBalControlCloudy,
> ++    OMX_WhiteBalControlShade,
> ++    OMX_WhiteBalControlTungsten,
> ++    OMX_WhiteBalControlFluorescent,
> ++    OMX_WhiteBalControlIncandescent,
> ++    OMX_WhiteBalControlFlash,
> ++    OMX_WhiteBalControlHorizon,
> ++    OMX_WhiteBalControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_WhiteBalControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_WhiteBalControlMax = 0x7FFFFFFF
> ++} OMX_WHITEBALCONTROLTYPE;
> ++
> ++
> ++/**
> ++ * White Balance control configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize            : Size of the structure in bytes
> ++ *  nVersion         : OMX specification version information
> ++ *  nPortIndex       : Port that this structure applies to
> ++ *  eWhiteBalControl : White balance enumeration
> ++ */
> ++typedef struct OMX_CONFIG_WHITEBALCONTROLTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_WHITEBALCONTROLTYPE eWhiteBalControl;
> ++} OMX_CONFIG_WHITEBALCONTROLTYPE;
> ++
> ++
> ++/**
> ++ * Exposure control type
> ++ */
> ++typedef enum OMX_EXPOSURECONTROLTYPE {
> ++    OMX_ExposureControlOff = 0,
> ++    OMX_ExposureControlAuto,
> ++    OMX_ExposureControlNight,
> ++    OMX_ExposureControlBackLight,
> ++    OMX_ExposureControlSpotLight,
> ++    OMX_ExposureControlSports,
> ++    OMX_ExposureControlSnow,
> ++    OMX_ExposureControlBeach,
> ++    OMX_ExposureControlLargeAperture,
> ++    OMX_ExposureControlSmallApperture,
> ++    OMX_ExposureControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_ExposureControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_ExposureControlMax = 0x7FFFFFFF
> ++} OMX_EXPOSURECONTROLTYPE;
> ++
> ++
> ++/**
> ++ * White Balance control configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize            : Size of the structure in bytes
> ++ *  nVersion         : OMX specification version information
> ++ *  nPortIndex       : Port that this structure applies to
> ++ *  eExposureControl : Exposure control enumeration
> ++ */
> ++typedef struct OMX_CONFIG_EXPOSURECONTROLTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_EXPOSURECONTROLTYPE eExposureControl;
> ++} OMX_CONFIG_EXPOSURECONTROLTYPE;
> ++
> ++
> ++/**
> ++ * Defines sensor supported mode.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nFrameRate : Single shot mode is indicated by a 0
> ++ *  bOneShot   : Enable for single shot, disable for streaming
> ++ *  sFrameSize : Framesize
> ++ */
> ++typedef struct OMX_PARAM_SENSORMODETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nFrameRate;
> ++    OMX_BOOL bOneShot;
> ++    OMX_FRAMESIZETYPE sFrameSize;
> ++} OMX_PARAM_SENSORMODETYPE;
> ++
> ++
> ++/**
> ++ * Defines contrast level
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nContrast  : Values allowed for contrast -100 to 100, zero means no change
> ++ */
> ++typedef struct OMX_CONFIG_CONTRASTTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nContrast;
> ++} OMX_CONFIG_CONTRASTTYPE;
> ++
> ++
> ++/**
> ++ * Defines brightness level
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize       : Size of the structure in bytes
> ++ *  nVersion    : OMX specification version information
> ++ *  nPortIndex  : Port that this structure applies to
> ++ *  nBrightness : 0-100%
> ++ */
> ++typedef struct OMX_CONFIG_BRIGHTNESSTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nBrightness;
> ++} OMX_CONFIG_BRIGHTNESSTYPE;
> ++
> ++
> ++/**
> ++ * Defines backlight level configuration for a video sink, e.g. LCD panel
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nBacklight : Values allowed for backlight 0-100%
> ++ *  nTimeout   : Number of milliseconds before backlight automatically turns
> ++ *               off.  A value of 0x0 disables backight timeout
> ++ */
> ++typedef struct OMX_CONFIG_BACKLIGHTTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nBacklight;
> ++    OMX_U32 nTimeout;
> ++} OMX_CONFIG_BACKLIGHTTYPE;
> ++
> ++
> ++/**
> ++ * Defines setting for Gamma
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nGamma     : Values allowed for gamma -100 to 100, zero means no change
> ++ */
> ++typedef struct OMX_CONFIG_GAMMATYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nGamma;
> ++} OMX_CONFIG_GAMMATYPE;
> ++
> ++
> ++/**
> ++ * Define for setting saturation
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize       : Size of the structure in bytes
> ++ *  nVersion    : OMX specification version information
> ++ *  nPortIndex  : Port that this structure applies to
> ++ *  nSaturation : Values allowed for saturation -100 to 100, zero means
> ++ *                no change
> ++ */
> ++typedef struct OMX_CONFIG_SATURATIONTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nSaturation;
> ++} OMX_CONFIG_SATURATIONTYPE;
> ++
> ++
> ++/**
> ++ * Define for setting Lightness
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nLightness : Values allowed for lightness -100 to 100, zero means no
> ++ *               change
> ++ */
> ++typedef struct OMX_CONFIG_LIGHTNESSTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_S32 nLightness;
> ++} OMX_CONFIG_LIGHTNESSTYPE;
> ++
> ++
> ++/**
> ++ * Plane blend configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Index of input port associated with the plane.
> ++ *  nDepth     : Depth of the plane in relation to the screen. Higher
> ++ *               numbered depths are "behind" lower number depths.
> ++ *               This number defaults to the Port Index number.
> ++ *  nAlpha     : Transparency blending component for the entire plane.
> ++ *               See blending modes for more detail.
> ++ */
> ++typedef struct OMX_CONFIG_PLANEBLENDTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nDepth;
> ++    OMX_U32 nAlpha;
> ++} OMX_CONFIG_PLANEBLENDTYPE;
> ++
> ++
> ++/**
> ++ * Define interlace type
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                 : Size of the structure in bytes
> ++ *  nVersion              : OMX specification version information
> ++ *  nPortIndex            : Port that this structure applies to
> ++ *  bEnable               : Enable control variable for this functionality
> ++ *                          (see below)
> ++ *  nInterleavePortIndex  : Index of input or output port associated with
> ++ *                          the interleaved plane.
> ++ *  pPlanarPortIndexes[4] : Index of input or output planar ports.
> ++ */
> ++typedef struct OMX_PARAM_INTERLEAVETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bEnable;
> ++    OMX_U32 nInterleavePortIndex;
> ++} OMX_PARAM_INTERLEAVETYPE;
> ++
> ++
> ++/**
> ++ * Defines the picture effect used for an input picture
> ++ */
> ++typedef enum OMX_TRANSITIONEFFECTTYPE {
> ++    OMX_EffectNone,
> ++    OMX_EffectFadeFromBlack,
> ++    OMX_EffectFadeToBlack,
> ++    OMX_EffectUnspecifiedThroughConstantColor,
> ++    OMX_EffectDissolve,
> ++    OMX_EffectWipe,
> ++    OMX_EffectUnspecifiedMixOfTwoScenes,
> ++    OMX_EffectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_EffectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_EffectMax = 0x7FFFFFFF
> ++} OMX_TRANSITIONEFFECTTYPE;
> ++
> ++
> ++/**
> ++ * Structure used to configure current transition effect
> ++ *
> ++ * STRUCT MEMBERS:
> ++ * nSize      : Size of the structure in bytes
> ++ * nVersion   : OMX specification version information
> ++ * nPortIndex : Port that this structure applies to
> ++ * eEffect    : Effect to enable
> ++ */
> ++typedef struct OMX_CONFIG_TRANSITIONEFFECTTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_TRANSITIONEFFECTTYPE eEffect;
> ++} OMX_CONFIG_TRANSITIONEFFECTTYPE;
> ++
> ++
> ++/**
> ++ * Defines possible data unit types for encoded video data. The data unit
> ++ * types are used both for encoded video input for playback as well as
> ++ * encoded video output from recording.
> ++ */
> ++typedef enum OMX_DATAUNITTYPE {
> ++    OMX_DataUnitCodedPicture,
> ++    OMX_DataUnitVideoSegment,
> ++    OMX_DataUnitSeveralSegments,
> ++    OMX_DataUnitArbitraryStreamSection,
> ++    OMX_DataUnitKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_DataUnitVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_DataUnitMax = 0x7FFFFFFF
> ++} OMX_DATAUNITTYPE;
> ++
> ++
> ++/**
> ++ * Defines possible encapsulation types for coded video data unit. The
> ++ * encapsulation information is used both for encoded video input for
> ++ * playback as well as encoded video output from recording.
> ++ */
> ++typedef enum OMX_DATAUNITENCAPSULATIONTYPE {
> ++    OMX_DataEncapsulationElementaryStream,
> ++    OMX_DataEncapsulationGenericPayload,
> ++    OMX_DataEncapsulationRtpPayload,
> ++    OMX_DataEncapsulationKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_DataEncapsulationVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_DataEncapsulationMax = 0x7FFFFFFF
> ++} OMX_DATAUNITENCAPSULATIONTYPE;
> ++
> ++
> ++/**
> ++ * Structure used to configure the type of being decoded/encoded
> ++ */
> ++typedef struct OMX_PARAM_DATAUNITTYPE {
> ++    OMX_U32 nSize;            /**< Size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< Port that this structure applies to */
> ++    OMX_DATAUNITTYPE eUnitType;
> ++    OMX_DATAUNITENCAPSULATIONTYPE eEncapsulationType;
> ++} OMX_PARAM_DATAUNITTYPE;
> ++
> ++
> ++/**
> ++ * Defines dither types
> ++ */
> ++typedef enum OMX_DITHERTYPE {
> ++    OMX_DitherNone,
> ++    OMX_DitherOrdered,
> ++    OMX_DitherErrorDiffusion,
> ++    OMX_DitherOther,
> ++    OMX_DitherKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_DitherVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_DitherMax = 0x7FFFFFFF
> ++} OMX_DITHERTYPE;
> ++
> ++
> ++/**
> ++ * Structure used to configure current type of dithering
> ++ */
> ++typedef struct OMX_CONFIG_DITHERTYPE {
> ++    OMX_U32 nSize;            /**< Size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;       /**< Port that this structure applies to */
> ++    OMX_DITHERTYPE eDither;   /**< Type of dithering to use */
> ++} OMX_CONFIG_DITHERTYPE;
> ++
> ++typedef struct OMX_CONFIG_CAPTUREMODETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;     /**< Port that this structure applies to */
> ++    OMX_BOOL bContinuous;   /**< If true then ignore frame rate and emit capture
> ++                             *   data as fast as possible (otherwise obey port's frame rate). */
> ++    OMX_BOOL bFrameLimited; /**< If true then terminate capture after the port emits the
> ++                             *   specified number of frames (otherwise the port does not
> ++                             *   terminate the capture until instructed to do so by the client).
> ++                             *   Even if set, the client may manually terminate the capture prior
> ++                             *   to reaching the limit. */
> ++    OMX_U32 nFrameLimit;      /**< Limit on number of frames emitted during a capture (only
> ++                               *   valid if bFrameLimited is set). */
> ++} OMX_CONFIG_CAPTUREMODETYPE;
> ++
> ++typedef enum OMX_METERINGTYPE {
> ++
> ++    OMX_MeteringModeAverage,     /**< Center-weighted average metering. */
> ++    OMX_MeteringModeSpot,	      /**< Spot (partial) metering. */
> ++    OMX_MeteringModeMatrix,      /**< Matrix or evaluative metering. */
> ++
> ++    OMX_MeteringKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_MeteringVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_EVModeMax = 0x7fffffff
> ++} OMX_METERINGTYPE;
> ++
> ++typedef struct OMX_CONFIG_EXPOSUREVALUETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_METERINGTYPE eMetering;
> ++    OMX_S32 xEVCompensation;      /**< Fixed point value stored as Q16 */
> ++    OMX_U32 nApertureFNumber;     /**< e.g. nApertureFNumber = 2 implies "f/2" - Q16 format */
> ++    OMX_BOOL bAutoAperture;		/**< Whether aperture number is defined automatically */
> ++    OMX_U32 nShutterSpeedMsec;    /**< Shutterspeed in milliseconds */
> ++    OMX_BOOL bAutoShutterSpeed;	/**< Whether shutter speed is defined automatically */
> ++    OMX_U32 nSensitivity;         /**< e.g. nSensitivity = 100 implies "ISO 100" */
> ++    OMX_BOOL bAutoSensitivity;	/**< Whether sensitivity is defined automatically */
> ++} OMX_CONFIG_EXPOSUREVALUETYPE;
> ++
> ++/**
> ++ * Focus region configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize           : Size of the structure in bytes
> ++ *  nVersion        : OMX specification version information
> ++ *  nPortIndex      : Port that this structure applies to
> ++ *  bCenter         : Use center region as focus region of interest
> ++ *  bLeft           : Use left region as focus region of interest
> ++ *  bRight          : Use right region as focus region of interest
> ++ *  bTop            : Use top region as focus region of interest
> ++ *  bBottom         : Use bottom region as focus region of interest
> ++ *  bTopLeft        : Use top left region as focus region of interest
> ++ *  bTopRight       : Use top right region as focus region of interest
> ++ *  bBottomLeft     : Use bottom left region as focus region of interest
> ++ *  bBottomRight    : Use bottom right region as focus region of interest
> ++ */
> ++typedef struct OMX_CONFIG_FOCUSREGIONTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bCenter;
> ++    OMX_BOOL bLeft;
> ++    OMX_BOOL bRight;
> ++    OMX_BOOL bTop;
> ++    OMX_BOOL bBottom;
> ++    OMX_BOOL bTopLeft;
> ++    OMX_BOOL bTopRight;
> ++    OMX_BOOL bBottomLeft;
> ++    OMX_BOOL bBottomRight;
> ++} OMX_CONFIG_FOCUSREGIONTYPE;
> ++
> ++/**
> ++ * Focus Status type
> ++ */
> ++typedef enum OMX_FOCUSSTATUSTYPE {
> ++    OMX_FocusStatusOff = 0,
> ++    OMX_FocusStatusRequest,
> ++    OMX_FocusStatusReached,
> ++    OMX_FocusStatusUnableToReach,
> ++    OMX_FocusStatusLost,
> ++    OMX_FocusStatusKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_FocusStatusVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_FocusStatusMax = 0x7FFFFFFF
> ++} OMX_FOCUSSTATUSTYPE;
> ++
> ++/**
> ++ * Focus status configuration
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize               : Size of the structure in bytes
> ++ *  nVersion            : OMX specification version information
> ++ *  nPortIndex          : Port that this structure applies to
> ++ *  eFocusStatus        : Specifies the focus status
> ++ *  bCenterStatus       : Use center region as focus region of interest
> ++ *  bLeftStatus         : Use left region as focus region of interest
> ++ *  bRightStatus        : Use right region as focus region of interest
> ++ *  bTopStatus          : Use top region as focus region of interest
> ++ *  bBottomStatus       : Use bottom region as focus region of interest
> ++ *  bTopLeftStatus      : Use top left region as focus region of interest
> ++ *  bTopRightStatus     : Use top right region as focus region of interest
> ++ *  bBottomLeftStatus   : Use bottom left region as focus region of interest
> ++ *  bBottomRightStatus  : Use bottom right region as focus region of interest
> ++ */
> ++typedef struct OMX_PARAM_FOCUSSTATUSTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_FOCUSSTATUSTYPE eFocusStatus;
> ++    OMX_BOOL bCenterStatus;
> ++    OMX_BOOL bLeftStatus;
> ++    OMX_BOOL bRightStatus;
> ++    OMX_BOOL bTopStatus;
> ++    OMX_BOOL bBottomStatus;
> ++    OMX_BOOL bTopLeftStatus;
> ++    OMX_BOOL bTopRightStatus;
> ++    OMX_BOOL bBottomLeftStatus;
> ++    OMX_BOOL bBottomRightStatus;
> ++} OMX_PARAM_FOCUSSTATUSTYPE;
> ++
> ++/** @} */
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Other.h b/usr/include/OpenMAX/il/OMX_Other.h
> +--- a/usr/include/OpenMAX/il/OMX_Other.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Other.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,337 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** @file OMX_Other.h - OpenMax IL version 1.1.2
> ++ *  The structures needed by Other components to exchange
> ++ *  parameters and configuration data with the components.
> ++ */
> ++
> ++#ifndef OMX_Other_h
> ++#define OMX_Other_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++/* Each OMX header must include all required header files to allow the
> ++ *  header to compile without errors.  The includes below are required
> ++ *  for this header file to compile successfully
> ++ */
> ++
> ++#include <OMX_Core.h>
> ++
> ++
> ++/**
> ++ * Enumeration of possible data types which match to multiple domains or no
> ++ * domain at all.  For types which are vendor specific, a value above
> ++ * OMX_OTHER_VENDORTSTART should be used.
> ++ */
> ++typedef enum OMX_OTHER_FORMATTYPE {
> ++    OMX_OTHER_FormatTime = 0, /**< Transmission of various timestamps, elapsed time,
> ++                                   time deltas, etc */
> ++    OMX_OTHER_FormatPower,    /**< Perhaps used for enabling/disabling power
> ++                                   management, setting clocks? */
> ++    OMX_OTHER_FormatStats,    /**< Could be things such as frame rate, frames
> ++                                   dropped, etc */
> ++    OMX_OTHER_FormatBinary,   /**< Arbitrary binary data */
> ++    OMX_OTHER_FormatVendorReserved = 1000, /**< Starting value for vendor specific
> ++                                                formats */
> ++
> ++    OMX_OTHER_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_OTHER_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_OTHER_FormatMax = 0x7FFFFFFF
> ++} OMX_OTHER_FORMATTYPE;
> ++
> ++/**
> ++ * Enumeration of seek modes.
> ++ */
> ++typedef enum OMX_TIME_SEEKMODETYPE {
> ++    OMX_TIME_SeekModeFast = 0, /**< Prefer seeking to an approximation
> ++                                * of the requested seek position over
> ++                                * the actual seek position if it
> ++                                * results in a faster seek. */
> ++    OMX_TIME_SeekModeAccurate, /**< Prefer seeking to the actual seek
> ++                                * position over an approximation
> ++                                * of the requested seek position even
> ++                                * if it results in a slower seek. */
> ++    OMX_TIME_SeekModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_TIME_SeekModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_TIME_SeekModeMax = 0x7FFFFFFF
> ++} OMX_TIME_SEEKMODETYPE;
> ++
> ++/* Structure representing the seekmode of the component */
> ++typedef struct OMX_TIME_CONFIG_SEEKMODETYPE {
> ++    OMX_U32 nSize;                  /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;       /**< OMX specification version information */
> ++    OMX_TIME_SEEKMODETYPE eType;    /**< The seek mode */
> ++} OMX_TIME_CONFIG_SEEKMODETYPE;
> ++
> ++/** Structure representing a time stamp used with the following configs
> ++ * on the Clock Component (CC):
> ++ *
> ++ * OMX_IndexConfigTimeCurrentWallTime: query of the CC?s current wall
> ++ *     time
> ++ * OMX_IndexConfigTimeCurrentMediaTime: query of the CC?s current media
> ++ *     time
> ++ * OMX_IndexConfigTimeCurrentAudioReference and
> ++ * OMX_IndexConfigTimeCurrentVideoReference: audio/video reference
> ++ *     clock sending SC its reference time
> ++ * OMX_IndexConfigTimeClientStartTime: a Clock Component client sends
> ++ *     this structure to the Clock Component via a SetConfig on its
> ++ *     client port when it receives a buffer with
> ++ *     OMX_BUFFERFLAG_STARTTIME set. It must use the timestamp
> ++ *     specified by that buffer for nStartTimestamp.
> ++ *
> ++ * It?s also used with the following config on components in general:
> ++ *
> ++ * OMX_IndexConfigTimePosition: IL client querying component position
> ++ * (GetConfig) or commanding a component to seek to the given location
> ++ * (SetConfig)
> ++ */
> ++typedef struct OMX_TIME_CONFIG_TIMESTAMPTYPE {
> ++    OMX_U32 nSize;               /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;    /**< OMX specification version
> ++                                  *   information */
> ++    OMX_U32 nPortIndex;     /**< port that this structure applies to */
> ++    OMX_TICKS nTimestamp;	     /**< timestamp .*/
> ++} OMX_TIME_CONFIG_TIMESTAMPTYPE;
> ++
> ++/** Enumeration of possible reference clocks to the media time. */
> ++typedef enum OMX_TIME_UPDATETYPE {
> ++      OMX_TIME_UpdateRequestFulfillment,    /**< Update is the fulfillment of a media time request. */
> ++      OMX_TIME_UpdateScaleChanged,	        /**< Update was generated because the scale chagned. */
> ++      OMX_TIME_UpdateClockStateChanged,     /**< Update was generated because the clock state changed. */
> ++      OMX_TIME_UpdateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++      OMX_TIME_UpdateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++      OMX_TIME_UpdateMax = 0x7FFFFFFF
> ++} OMX_TIME_UPDATETYPE;
> ++
> ++/** Enumeration of possible reference clocks to the media time. */
> ++typedef enum OMX_TIME_REFCLOCKTYPE {
> ++      OMX_TIME_RefClockNone,    /**< Use no references. */
> ++      OMX_TIME_RefClockAudio,	/**< Use references sent through OMX_IndexConfigTimeCurrentAudioReference */
> ++      OMX_TIME_RefClockVideo,   /**< Use references sent through OMX_IndexConfigTimeCurrentVideoReference */
> ++      OMX_TIME_RefClockKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++      OMX_TIME_RefClockVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++      OMX_TIME_RefClockMax = 0x7FFFFFFF
> ++} OMX_TIME_REFCLOCKTYPE;
> ++
> ++/** Enumeration of clock states. */
> ++typedef enum OMX_TIME_CLOCKSTATE {
> ++      OMX_TIME_ClockStateRunning,             /**< Clock running. */
> ++      OMX_TIME_ClockStateWaitingForStartTime, /**< Clock waiting until the
> ++                                               *   prescribed clients emit their
> ++                                               *   start time. */
> ++      OMX_TIME_ClockStateStopped,             /**< Clock stopped. */
> ++      OMX_TIME_ClockStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++      OMX_TIME_ClockStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++      OMX_TIME_ClockStateMax = 0x7FFFFFFF
> ++} OMX_TIME_CLOCKSTATE;
> ++
> ++/** Structure representing a media time request to the clock component.
> ++ *
> ++ *  A client component sends this structure to the Clock Component via a SetConfig
> ++ *  on its client port to specify a media timestamp the Clock Component
> ++ *  should emit.  The Clock Component should fulfill the request by sending a
> ++ *  OMX_TIME_MEDIATIMETYPE when its media clock matches the requested
> ++ *  timestamp.
> ++ *
> ++ *  The client may require a media time request be fulfilled slightly
> ++ *  earlier than the media time specified. In this case the client specifies
> ++ *  an offset which is equal to the difference between wall time corresponding
> ++ *  to the requested media time and the wall time when it will be
> ++ *  fulfilled.
> ++ *
> ++ *  A client component may uses these requests and the OMX_TIME_MEDIATIMETYPE to
> ++ *  time events according to timestamps. If a client must perform an operation O at
> ++ *  a time T (e.g. deliver a video frame at its corresponding timestamp), it makes a
> ++ *  media time request at T (perhaps specifying an offset to ensure the request fulfillment
> ++ *  is a little early). When the clock component passes the resulting OMX_TIME_MEDIATIMETYPE
> ++ *  structure back to the client component, the client may perform operation O (perhaps having
> ++ *  to wait a slight amount more time itself as specified by the return values).
> ++ */
> ++
> ++typedef struct OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
> ++    OMX_U32 nPortIndex;         /**< port that this structure applies to */
> ++    OMX_PTR pClientPrivate;     /**< Client private data to disabiguate this media time
> ++                                 *   from others (e.g. the number of the frame to deliver).
> ++                                 *   Duplicated in the media time structure that fulfills
> ++                                 *   this request. A value of zero is reserved for time scale
> ++                                 *   updates. */
> ++    OMX_TICKS nMediaTimestamp;  /**< Media timestamp requested.*/
> ++    OMX_TICKS nOffset;          /**< Amount of wall clock time by which this
> ++                                 *   request should be fulfilled early */
> ++} OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE;
> ++
> ++/**< Structure sent from the clock component client either when fulfilling
> ++ *   a media time request or when the time scale has changed.
> ++ *
> ++ *   In the former case the Clock Component fills this structure and times its emission
> ++ *   to a client component (via the client port) according to the corresponding media
> ++ *   time request sent by the client. The Clock Component should time the emission to occur
> ++ *   when the requested timestamp matches the Clock Component's media time but also the
> ++ *   prescribed offset early.
> ++ *
> ++ *   Upon scale changes the clock component clears the nClientPrivate data, sends the current
> ++ *   media time and sets the nScale to the new scale via the client port. It emits a
> ++ *   OMX_TIME_MEDIATIMETYPE to all clients independent of any requests. This allows clients to
> ++ *   alter processing to accomodate scaling. For instance a video component might skip inter-frames
> ++ *   in the case of extreme fastforward. Likewise an audio component might add or remove samples
> ++ *   from an audio frame to scale audio data.
> ++ *
> ++ *   It is expected that some clock components may not be able to fulfill requests
> ++ *   at exactly the prescribed time. This is acceptable so long as the request is
> ++ *   fulfilled at least as early as described and not later. This structure provides
> ++ *   fields the client may use to wait for the remaining time.
> ++ *
> ++ *   The client may use either the nOffset or nWallTimeAtMedia fields to determine the
> ++ *   wall time until the nMediaTimestamp actually occurs. In the latter case the
> ++ *   client can get a more accurate value for offset by getting the current wall
> ++ *   from the cloc component and subtracting it from nWallTimeAtMedia.
> ++ */
> ++
> ++typedef struct OMX_TIME_MEDIATIMETYPE {
> ++    OMX_U32 nSize;                  /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;       /**< OMX specification version information */
> ++    OMX_U32 nClientPrivate;         /**< Client private data to disabiguate this media time
> ++                                     *   from others. Copied from the media time request.
> ++                                     *   A value of zero is reserved for time scale updates. */
> ++    OMX_TIME_UPDATETYPE eUpdateType; /**< Reason for the update */
> ++    OMX_TICKS nMediaTimestamp;      /**< Media time requested. If no media time was
> ++                                     *   requested then this is the current media time. */
> ++    OMX_TICKS nOffset;              /**< Amount of wall clock time by which this
> ++                                     *   request was actually fulfilled early */
> ++
> ++    OMX_TICKS nWallTimeAtMediaTime; /**< Wall time corresponding to nMediaTimeStamp.
> ++                                     *   A client may compare this value to current
> ++                                     *   media time obtained from the Clock Component to determine
> ++                                     *   the wall time until the media timestamp is really
> ++                                     *   current. */
> ++    OMX_S32 xScale;                 /**< Current media time scale in Q16 format. */
> ++    OMX_TIME_CLOCKSTATE eState;     /* Seeking Change. Added 7/12.*/
> ++                                    /**< State of the media time. */
> ++} OMX_TIME_MEDIATIMETYPE;
> ++
> ++/** Structure representing the current media time scale factor. Applicable only to clock
> ++ *  component, other components see scale changes via OMX_TIME_MEDIATIMETYPE buffers sent via
> ++ *  the clock component client ports. Upon recieving this config the clock component changes
> ++ *  the rate by which the media time increases or decreases effectively implementing trick modes.
> ++ */
> ++typedef struct OMX_TIME_CONFIG_SCALETYPE {
> ++    OMX_U32 nSize;                  /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;       /**< OMX specification version information */
> ++    OMX_S32 xScale;                 /**< This is a value in Q16 format which is used for
> ++                                     * scaling the media time */
> ++} OMX_TIME_CONFIG_SCALETYPE;
> ++
> ++/** Bits used to identify a clock port. Used in OMX_TIME_CONFIG_CLOCKSTATETYPE?s nWaitMask field */
> ++#define OMX_CLOCKPORT0 0x00000001
> ++#define OMX_CLOCKPORT1 0x00000002
> ++#define OMX_CLOCKPORT2 0x00000004
> ++#define OMX_CLOCKPORT3 0x00000008
> ++#define OMX_CLOCKPORT4 0x00000010
> ++#define OMX_CLOCKPORT5 0x00000020
> ++#define OMX_CLOCKPORT6 0x00000040
> ++#define OMX_CLOCKPORT7 0x00000080
> ++
> ++/** Structure representing the current mode of the media clock.
> ++ *  IL Client uses this config to change or query the mode of the
> ++ *  media clock of the clock component. Applicable only to clock
> ++ *  component.
> ++ *
> ++ *  On a SetConfig if eState is OMX_TIME_ClockStateRunning media time
> ++ *  starts immediately at the prescribed start time. If
> ++ *  OMX_TIME_ClockStateWaitingForStartTime the Clock Component ignores
> ++ *  the given nStartTime and waits for all clients specified in the
> ++ *  nWaitMask to send starttimes (via
> ++ *  OMX_IndexConfigTimeClientStartTime). The Clock Component then starts
> ++ *  the media clock using the earliest start time supplied. */
> ++typedef struct OMX_TIME_CONFIG_CLOCKSTATETYPE {
> ++    OMX_U32 nSize;              /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;   /**< OMX specification version
> ++                                 *   information */
> ++    OMX_TIME_CLOCKSTATE eState; /**< State of the media time. */
> ++    OMX_TICKS nStartTime;       /**< Start time of the media time. */
> ++    OMX_TICKS nOffset;          /**< Time to offset the media time by
> ++                                 * (e.g. preroll). Media time will be
> ++                                 * reported to be nOffset ticks earlier.
> ++                                 */
> ++    OMX_U32 nWaitMask;          /**< Mask of OMX_CLOCKPORT values. */
> ++} OMX_TIME_CONFIG_CLOCKSTATETYPE;
> ++
> ++/** Structure representing the reference clock currently being used to
> ++ *  compute media time. IL client uses this config to change or query the
> ++ *  clock component's active reference clock */
> ++typedef struct OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE {
> ++    OMX_U32 nSize;                  /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion;       /**< OMX specification version information */
> ++    OMX_TIME_REFCLOCKTYPE eClock;   /**< Reference clock used to compute media time */
> ++} OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE;
> ++
> ++/** Descriptor for setting specifics of power type.
> ++ *  Note: this structure is listed for backwards compatibility. */
> ++typedef struct OMX_OTHER_CONFIG_POWERTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_BOOL bEnablePM;       /**< Flag to enable Power Management */
> ++} OMX_OTHER_CONFIG_POWERTYPE;
> ++
> ++
> ++/** Descriptor for setting specifics of stats type.
> ++ *  Note: this structure is listed for backwards compatibility. */
> ++typedef struct OMX_OTHER_CONFIG_STATSTYPE {
> ++    OMX_U32 nSize;            /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    /* what goes here */
> ++} OMX_OTHER_CONFIG_STATSTYPE;
> ++
> ++
> ++/**
> ++ * The PortDefinition structure is used to define all of the parameters
> ++ * necessary for the compliant component to setup an input or an output other
> ++ * path.
> ++ */
> ++typedef struct OMX_OTHER_PORTDEFINITIONTYPE {
> ++    OMX_OTHER_FORMATTYPE eFormat;  /**< Type of data expected for this channel */
> ++} OMX_OTHER_PORTDEFINITIONTYPE;
> ++
> ++/**  Port format parameter.  This structure is used to enumerate
> ++  *  the various data input/output format supported by the port.
> ++  */
> ++typedef struct OMX_OTHER_PARAM_PORTFORMATTYPE {
> ++    OMX_U32 nSize; /**< size of the structure in bytes */
> ++    OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
> ++    OMX_U32 nPortIndex; /**< Indicates which port to set */
> ++    OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */
> ++    OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */
> ++} OMX_OTHER_PARAM_PORTFORMATTYPE;
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Types.h b/usr/include/OpenMAX/il/OMX_Types.h
> +--- a/usr/include/OpenMAX/il/OMX_Types.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Types.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,359 @@
> ++/*
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_Types.h - OpenMax IL version 1.1.2
> ++ *  The OMX_Types header file contains the primitive type definitions used by
> ++ *  the core, the application and the component.  This file may need to be
> ++ *  modified to be used on systems that do not have "char" set to 8 bits,
> ++ *  "short" set to 16 bits and "long" set to 32 bits.
> ++ */
> ++
> ++#ifndef OMX_Types_h
> ++#define OMX_Types_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/** The OMX_API and OMX_APIENTRY are platform specific definitions used
> ++ *  to declare OMX function prototypes.  They are modified to meet the
> ++ *  requirements for a particular platform */
> ++#ifdef __SYMBIAN32__
> ++#   ifdef __OMX_EXPORTS
> ++#       define OMX_API __declspec(dllexport)
> ++#   else
> ++#       ifdef _WIN32
> ++#           define OMX_API __declspec(dllexport)
> ++#       else
> ++#           define OMX_API __declspec(dllimport)
> ++#       endif
> ++#   endif
> ++#else
> ++#   ifdef _WIN32
> ++#      ifdef __OMX_EXPORTS
> ++#          define OMX_API __declspec(dllexport)
> ++#      else
> ++#          define OMX_API __declspec(dllimport)
> ++#      endif
> ++#   else
> ++#      ifdef __OMX_EXPORTS
> ++#          define OMX_API
> ++#      else
> ++#          define OMX_API extern
> ++#      endif
> ++#   endif
> ++#endif
> ++
> ++#ifndef OMX_APIENTRY
> ++#define OMX_APIENTRY
> ++#endif
> ++
> ++/** OMX_IN is used to identify inputs to an OMX function.  This designation
> ++    will also be used in the case of a pointer that points to a parameter
> ++    that is used as an output. */
> ++#ifndef OMX_IN
> ++#define OMX_IN
> ++#endif
> ++
> ++/** OMX_OUT is used to identify outputs from an OMX function.  This
> ++    designation will also be used in the case of a pointer that points
> ++    to a parameter that is used as an input. */
> ++#ifndef OMX_OUT
> ++#define OMX_OUT
> ++#endif
> ++
> ++
> ++/** OMX_INOUT is used to identify parameters that may be either inputs or
> ++    outputs from an OMX function at the same time.  This designation will
> ++    also be used in the case of a pointer that  points to a parameter that
> ++    is used both as an input and an output. */
> ++#ifndef OMX_INOUT
> ++#define OMX_INOUT
> ++#endif
> ++
> ++/** OMX_ALL is used to as a wildcard to select all entities of the same type
> ++ *  when specifying the index, or referring to a object by an index.  (i.e.
> ++ *  use OMX_ALL to indicate all N channels). When used as a port index
> ++ *  for a config or parameter this OMX_ALL denotes that the config or
> ++ *  parameter applies to the entire component not just one port. */
> ++#define OMX_ALL 0xFFFFFFFF
> ++
> ++/** In the following we define groups that help building doxygen documentation */
> ++
> ++/** @defgroup core OpenMAX IL core
> ++ * Functions and structure related to the OMX IL core
> ++ */
> ++
> ++ /** @defgroup comp OpenMAX IL component
> ++ * Functions and structure related to the OMX IL component
> ++ */
> ++
> ++/** @defgroup rpm Resource and Policy Management
> ++ * Structures for resource and policy management of components
> ++ */
> ++
> ++/** @defgroup buf Buffer Management
> ++ * Buffer handling functions and structures
> ++ */
> ++
> ++/** @defgroup tun Tunneling
> ++ * @ingroup core comp
> ++ * Structures and functions to manage tunnels among component ports
> ++ */
> ++
> ++/** @defgroup cp Content Pipes
> ++ *  @ingroup core
> ++ */
> ++
> ++ /** @defgroup metadata Metadata handling
> ++  *
> ++  */
> ++
> ++/** OMX_U8 is an 8 bit unsigned quantity that is byte aligned */
> ++typedef unsigned char OMX_U8;
> ++
> ++/** OMX_S8 is an 8 bit signed quantity that is byte aligned */
> ++typedef signed char OMX_S8;
> ++
> ++/** OMX_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */
> ++typedef unsigned short OMX_U16;
> ++
> ++/** OMX_S16 is a 16 bit signed quantity that is 16 bit word aligned */
> ++typedef signed short OMX_S16;
> ++
> ++/** OMX_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */
> ++typedef unsigned long OMX_U32;
> ++
> ++/** OMX_S32 is a 32 bit signed quantity that is 32 bit word aligned */
> ++typedef signed long OMX_S32;
> ++
> ++
> ++/* Users with compilers that cannot accept the "long long" designation should
> ++   define the OMX_SKIP64BIT macro.  It should be noted that this may cause
> ++   some components to fail to compile if the component was written to require
> ++   64 bit integral types.  However, these components would NOT compile anyway
> ++   since the compiler does not support the way the component was written.
> ++*/
> ++#ifndef OMX_SKIP64BIT
> ++#ifdef __SYMBIAN32__
> ++/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
> ++typedef unsigned long long OMX_U64;
> ++
> ++/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */
> ++typedef signed long long OMX_S64;
> ++
> ++#elif defined(WIN32)
> ++
> ++/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
> ++typedef unsigned __int64  OMX_U64;
> ++
> ++/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */
> ++typedef signed   __int64  OMX_S64;
> ++
> ++#else /* WIN32 */
> ++
> ++/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
> ++typedef unsigned long long OMX_U64;
> ++
> ++/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */
> ++typedef signed long long OMX_S64;
> ++
> ++#endif /* WIN32 */
> ++#endif
> ++
> ++
> ++/** The OMX_BOOL type is intended to be used to represent a true or a false
> ++    value when passing parameters to and from the OMX core and components.  The
> ++    OMX_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary.
> ++ */
> ++typedef enum OMX_BOOL {
> ++    OMX_FALSE = 0,
> ++    OMX_TRUE = !OMX_FALSE,
> ++    OMX_BOOL_MAX = 0x7FFFFFFF
> ++} OMX_BOOL;
> ++
> ++/** The OMX_PTR type is intended to be used to pass pointers between the OMX
> ++    applications and the OMX Core and components.  This is a 32 bit pointer and
> ++    is aligned on a 32 bit boundary.
> ++ */
> ++typedef void* OMX_PTR;
> ++
> ++/** The OMX_STRING type is intended to be used to pass "C" type strings between
> ++    the application and the core and component.  The OMX_STRING type is a 32
> ++    bit pointer to a zero terminated string.  The  pointer is word aligned and
> ++    the string is byte aligned.
> ++ */
> ++typedef char* OMX_STRING;
> ++
> ++/** The OMX_BYTE type is intended to be used to pass arrays of bytes such as
> ++    buffers between the application and the component and core.  The OMX_BYTE
> ++    type is a 32 bit pointer to a zero terminated string.  The  pointer is word
> ++    aligned and the string is byte aligned.
> ++ */
> ++typedef unsigned char* OMX_BYTE;
> ++
> ++/** OMX_UUIDTYPE is a very long unique identifier to uniquely identify
> ++    at runtime.  This identifier should be generated by a component in a way
> ++    that guarantees that every instance of the identifier running on the system
> ++    is unique. */
> ++typedef unsigned char OMX_UUIDTYPE[128];
> ++
> ++/** The OMX_DIRTYPE enumeration is used to indicate if a port is an input or
> ++    an output port.  This enumeration is common across all component types.
> ++ */
> ++typedef enum OMX_DIRTYPE
> ++{
> ++    OMX_DirInput,              /**< Port is an input port */
> ++    OMX_DirOutput,             /**< Port is an output port */
> ++    OMX_DirMax = 0x7FFFFFFF
> ++} OMX_DIRTYPE;
> ++
> ++/** The OMX_ENDIANTYPE enumeration is used to indicate the bit ordering
> ++    for numerical data (i.e. big endian, or little endian).
> ++ */
> ++typedef enum OMX_ENDIANTYPE
> ++{
> ++    OMX_EndianBig, /**< big endian */
> ++    OMX_EndianLittle, /**< little endian */
> ++    OMX_EndianMax = 0x7FFFFFFF
> ++} OMX_ENDIANTYPE;
> ++
> ++
> ++/** The OMX_NUMERICALDATATYPE enumeration is used to indicate if data
> ++    is signed or unsigned
> ++ */
> ++typedef enum OMX_NUMERICALDATATYPE
> ++{
> ++    OMX_NumericalDataSigned, /**< signed data */
> ++    OMX_NumericalDataUnsigned, /**< unsigned data */
> ++    OMX_NumercialDataMax = 0x7FFFFFFF
> ++} OMX_NUMERICALDATATYPE;
> ++
> ++
> ++/** Unsigned bounded value type */
> ++typedef struct OMX_BU32 {
> ++    OMX_U32 nValue; /**< actual value */
> ++    OMX_U32 nMin;   /**< minimum for value (i.e. nValue >= nMin) */
> ++    OMX_U32 nMax;   /**< maximum for value (i.e. nValue <= nMax) */
> ++} OMX_BU32;
> ++
> ++
> ++/** Signed bounded value type */
> ++typedef struct OMX_BS32 {
> ++    OMX_S32 nValue; /**< actual value */
> ++    OMX_S32 nMin;   /**< minimum for value (i.e. nValue >= nMin) */
> ++    OMX_S32 nMax;   /**< maximum for value (i.e. nValue <= nMax) */
> ++} OMX_BS32;
> ++
> ++
> ++/** Structure representing some time or duration in microseconds. This structure
> ++  *  must be interpreted as a signed 64 bit value. The quantity is signed to accommodate
> ++  *  negative deltas and preroll scenarios. The quantity is represented in microseconds
> ++  *  to accomodate high resolution timestamps (e.g. DVD presentation timestamps based
> ++  *  on a 90kHz clock) and to allow more accurate and synchronized delivery (e.g.
> ++  *  individual audio samples delivered at 192 kHz). The quantity is 64 bit to
> ++  *  accommodate a large dynamic range (signed 32 bit values would allow only for plus
> ++  *  or minus 35 minutes).
> ++  *
> ++  *  Implementations with limited precision may convert the signed 64 bit value to
> ++  *  a signed 32 bit value internally but risk loss of precision.
> ++  */
> ++#ifndef OMX_SKIP64BIT
> ++typedef OMX_S64 OMX_TICKS;
> ++#else
> ++typedef struct OMX_TICKS
> ++{
> ++    OMX_U32 nLowPart;    /** low bits of the signed 64 bit tick value */
> ++    OMX_U32 nHighPart;   /** high bits of the signed 64 bit tick value */
> ++} OMX_TICKS;
> ++#endif
> ++#define OMX_TICKS_PER_SECOND 1000000
> ++
> ++/** Define the public interface for the OMX Handle.  The core will not use
> ++    this value internally, but the application should only use this value.
> ++ */
> ++typedef void* OMX_HANDLETYPE;
> ++
> ++typedef struct OMX_MARKTYPE
> ++{
> ++    OMX_HANDLETYPE hMarkTargetComponent;   /**< The component that will
> ++                                                generate a mark event upon
> ++                                                processing the mark. */
> ++    OMX_PTR pMarkData;   /**< Application specific data associated with
> ++                              the mark sent on a mark event to disambiguate
> ++                              this mark from others. */
> ++} OMX_MARKTYPE;
> ++
> ++
> ++/** OMX_NATIVE_DEVICETYPE is used to map a OMX video port to the
> ++ *  platform & operating specific object used to reference the display
> ++ *  or can be used by a audio port for native audio rendering */
> ++typedef void* OMX_NATIVE_DEVICETYPE;
> ++
> ++/** OMX_NATIVE_WINDOWTYPE is used to map a OMX video port to the
> ++ *  platform & operating specific object used to reference the window */
> ++typedef void* OMX_NATIVE_WINDOWTYPE;
> ++
> ++
> ++/** Define the OMX IL version that corresponds to this set of header files.
> ++ *  We also define a combined version that can be used to write or compare
> ++ *  values of the 32bit nVersion field, assuming a little endian architecture */
> ++#define OMX_VERSION_MAJOR 1
> ++#define OMX_VERSION_MINOR 1
> ++#define OMX_VERSION_REVISION 2
> ++#define OMX_VERSION_STEP 0
> ++
> ++#define OMX_VERSION ((OMX_VERSION_STEP<<24) | (OMX_VERSION_REVISION<<16) | (OMX_VERSION_MINOR<<8) | OMX_VERSION_MAJOR)
> ++
> ++
> ++/** The OMX_VERSIONTYPE union is used to specify the version for
> ++    a structure or component.  For a component, the version is entirely
> ++    specified by the component vendor.  Components doing the same function
> ++    from different vendors may or may not have the same version.  For
> ++    structures, the version shall be set by the entity that allocates the
> ++    structure.  For structures specified in the OMX 1.1 specification, the
> ++    value of the version shall be set to 1.1.0.0 in all cases.  Access to the
> ++    OMX_VERSIONTYPE can be by a single 32 bit access (e.g. by nVersion) or
> ++    by accessing one of the structure elements to, for example, check only
> ++    the Major revision.
> ++ */
> ++typedef union OMX_VERSIONTYPE
> ++{
> ++    struct
> ++    {
> ++        OMX_U8 nVersionMajor;   /**< Major version accessor element */
> ++        OMX_U8 nVersionMinor;   /**< Minor version accessor element */
> ++        OMX_U8 nRevision;       /**< Revision version accessor element */
> ++        OMX_U8 nStep;           /**< Step version accessor element */
> ++    } s;
> ++    OMX_U32 nVersion;           /**< 32 bit value to make accessing the
> ++                                    version easily done in a single word
> ++                                    size copy/compare operation */
> ++} OMX_VERSIONTYPE;
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_VideoExt.h b/usr/include/OpenMAX/il/OMX_VideoExt.h
> +--- a/usr/include/OpenMAX/il/OMX_VideoExt.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_VideoExt.h	2011-08-18 13:29:40.000000000 +0200
> +@@ -0,0 +1,123 @@
> ++/*
> ++ * Copyright (c) 2010 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/** OMX_VideoExt.h - OpenMax IL version 1.1.2
> ++ * The OMX_VideoExt header file contains extensions to the
> ++ * definitions used by both the application and the component to
> ++ * access video items.
> ++ */
> ++
> ++#ifndef OMX_VideoExt_h
> ++#define OMX_VideoExt_h
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++/* Each OMX header shall include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully
> ++ */
> ++#include <OMX_Core.h>
> ++
> ++/** NALU Formats */
> ++typedef enum OMX_NALUFORMATSTYPE {
> ++    OMX_NaluFormatStartCodes = 1,
> ++    OMX_NaluFormatOneNaluPerBuffer = 2,
> ++    OMX_NaluFormatOneByteInterleaveLength = 4,
> ++    OMX_NaluFormatTwoByteInterleaveLength = 8,
> ++    OMX_NaluFormatFourByteInterleaveLength = 16,
> ++    OMX_NaluFormatCodingMax = 0x7FFFFFFF
> ++} OMX_NALUFORMATSTYPE;
> ++
> ++/** NAL Stream Format */
> ++typedef struct OMX_NALSTREAMFORMATTYPE{
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_NALUFORMATSTYPE eNaluFormat;
> ++} OMX_NALSTREAMFORMATTYPE;
> ++
> ++/** Enum for standard video codingtype extensions */
> ++typedef enum OMX_VIDEO_CODINGEXTTYPE {
> ++    OMX_VIDEO_ExtCodingUnused = OMX_VIDEO_CodingKhronosExtensions,
> ++    OMX_VIDEO_CodingVP8,        /**< VP8/WebM */ 
> ++} OMX_VIDEO_CODINGEXTTYPE;
> ++
> ++/** VP8 profiles */
> ++typedef enum OMX_VIDEO_VP8PROFILETYPE {
> ++    OMX_VIDEO_VP8ProfileMain = 0x01,
> ++    OMX_VIDEO_VP8ProfileUnknown = 0x6EFFFFFF,
> ++    OMX_VIDEO_VP8ProfileMax = 0x7FFFFFFF
> ++} OMX_VIDEO_VP8PROFILETYPE;
> ++
> ++/** VP8 levels */
> ++typedef enum OMX_VIDEO_VP8LEVELTYPE {
> ++    OMX_VIDEO_VP8Level_Version0 = 0x01,
> ++    OMX_VIDEO_VP8Level_Version1 = 0x02,
> ++    OMX_VIDEO_VP8Level_Version2 = 0x04,
> ++    OMX_VIDEO_VP8Level_Version3 = 0x08,
> ++    OMX_VIDEO_VP8LevelUnknown = 0x6EFFFFFF,
> ++    OMX_VIDEO_VP8LevelMax = 0x7FFFFFFF
> ++} OMX_VIDEO_VP8LEVELTYPE;
> ++
> ++/** VP8 Param */
> ++typedef struct OMX_VIDEO_PARAM_VP8TYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_VIDEO_VP8PROFILETYPE eProfile;
> ++    OMX_VIDEO_VP8LEVELTYPE eLevel;
> ++    OMX_U32 nDCTPartitions;
> ++    OMX_BOOL bErrorResilientMode;
> ++} OMX_VIDEO_PARAM_VP8TYPE;
> ++
> ++/** Structure for configuring VP8 reference frames */
> ++typedef struct OMX_VIDEO_VP8REFERENCEFRAMETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bPreviousFrameRefresh;
> ++    OMX_BOOL bGoldenFrameRefresh;
> ++    OMX_BOOL bAlternateFrameRefresh;
> ++    OMX_BOOL bUsePreviousFrame;
> ++    OMX_BOOL bUseGoldenFrame;
> ++    OMX_BOOL bUseAlternateFrame;
> ++} OMX_VIDEO_VP8REFERENCEFRAMETYPE;
> ++
> ++/** Structure for querying VP8 reference frame type */
> ++typedef struct OMX_VIDEO_VP8REFERENCEFRAMEINFOTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bIsIntraFrame;
> ++    OMX_BOOL bIsGoldenOrAlternateFrame;
> ++} OMX_VIDEO_VP8REFERENCEFRAMEINFOTYPE;
> ++
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif /* OMX_VideoExt_h */
> ++/* File EOF */
> +diff -rupN a/usr/include/OpenMAX/il/OMX_Video.h b/usr/include/OpenMAX/il/OMX_Video.h
> +--- a/usr/include/OpenMAX/il/OMX_Video.h	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/include/OpenMAX/il/OMX_Video.h	2011-08-09 09:08:06.000000000 +0200
> +@@ -0,0 +1,1060 @@
> ++/**
> ++ * Copyright (c) 2008 The Khronos Group Inc.
> ++ *
> ++ * Permission is hereby granted, free of charge, to any person obtaining
> ++ * a copy of this software and associated documentation files (the
> ++ * "Software"), to deal in the Software without restriction, including
> ++ * without limitation the rights to use, copy, modify, merge, publish,
> ++ * distribute, sublicense, and/or sell copies of the Software, and to
> ++ * permit persons to whom the Software is furnished to do so, subject
> ++ * to the following conditions:
> ++ * The above copyright notice and this permission notice shall be included
> ++ * in all copies or substantial portions of the Software.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> ++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> ++ *
> ++ */
> ++
> ++/**
> ++ *  @file OMX_Video.h - OpenMax IL version 1.1.2
> ++ *  The structures is needed by Video components to exchange parameters
> ++ *  and configuration data with OMX components.
> ++ */
> ++#ifndef OMX_Video_h
> ++#define OMX_Video_h
> ++
> ++/** @defgroup video OpenMAX IL Video Domain
> ++ * @ingroup iv
> ++ * Structures for OpenMAX IL Video domain
> ++ * @{
> ++ */
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif /* __cplusplus */
> ++
> ++
> ++/**
> ++ * Each OMX header must include all required header files to allow the
> ++ * header to compile without errors.  The includes below are required
> ++ * for this header file to compile successfully
> ++ */
> ++
> ++#include <OMX_IVCommon.h>
> ++
> ++
> ++/**
> ++ * Enumeration used to define the possible video compression codings.
> ++ * NOTE:  This essentially refers to file extensions. If the coding is
> ++ *        being used to specify the ENCODE type, then additional work
> ++ *        must be done to configure the exact flavor of the compression
> ++ *        to be used.  For decode cases where the user application can
> ++ *        not differentiate between MPEG-4 and H.264 bit streams, it is
> ++ *        up to the codec to handle this.
> ++ */
> ++typedef enum OMX_VIDEO_CODINGTYPE {
> ++    OMX_VIDEO_CodingUnused,     /**< Value when coding is N/A */
> ++    OMX_VIDEO_CodingAutoDetect, /**< Autodetection of coding type */
> ++    OMX_VIDEO_CodingMPEG2,      /**< AKA: H.262 */
> ++    OMX_VIDEO_CodingH263,       /**< H.263 */
> ++    OMX_VIDEO_CodingMPEG4,      /**< MPEG-4 */
> ++    OMX_VIDEO_CodingWMV,        /**< all versions of Windows Media Video */
> ++    OMX_VIDEO_CodingRV,         /**< all versions of Real Video */
> ++    OMX_VIDEO_CodingAVC,        /**< H.264/AVC */
> ++    OMX_VIDEO_CodingMJPEG,      /**< Motion JPEG */
> ++    OMX_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_CodingMax = 0x7FFFFFFF
> ++} OMX_VIDEO_CODINGTYPE;
> ++
> ++
> ++/**
> ++ * Data structure used to define a video path.  The number of Video paths for
> ++ * input and output will vary by type of the Video component.
> ++ *
> ++ *    Input (aka Source) : zero Inputs, one Output,
> ++ *    Splitter           : one Input, 2 or more Outputs,
> ++ *    Processing Element : one Input, one output,
> ++ *    Mixer              : 2 or more inputs, one output,
> ++ *    Output (aka Sink)  : one Input, zero outputs.
> ++ *
> ++ * The PortDefinition structure is used to define all of the parameters
> ++ * necessary for the compliant component to setup an input or an output video
> ++ * path.  If additional vendor specific data is required, it should be
> ++ * transmitted to the component using the CustomCommand function.  Compliant
> ++ * components will prepopulate this structure with optimal values during the
> ++ * GetDefaultInitParams command.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  cMIMEType             : MIME type of data for the port
> ++ *  pNativeRender         : Platform specific reference for a display if a
> ++ *                          sync, otherwise this field is 0
> ++ *  nFrameWidth           : Width of frame to be used on channel if
> ++ *                          uncompressed format is used.  Use 0 for unknown,
> ++ *                          don't care or variable
> ++ *  nFrameHeight          : Height of frame to be used on channel if
> ++ *                          uncompressed format is used. Use 0 for unknown,
> ++ *                          don't care or variable
> ++ *  nStride               : Number of bytes per span of an image
> ++ *                          (i.e. indicates the number of bytes to get
> ++ *                          from span N to span N+1, where negative stride
> ++ *                          indicates the image is bottom up
> ++ *  nSliceHeight          : Height used when encoding in slices
> ++ *  nBitrate              : Bit rate of frame to be used on channel if
> ++ *                          compressed format is used. Use 0 for unknown,
> ++ *                          don't care or variable
> ++ *  xFramerate            : Frame rate to be used on channel if uncompressed
> ++ *                          format is used. Use 0 for unknown, don't care or
> ++ *                          variable.  Units are Q16 frames per second.
> ++ *  bFlagErrorConcealment : Turns on error concealment if it is supported by
> ++ *                          the OMX component
> ++ *  eCompressionFormat    : Compression format used in this instance of the
> ++ *                          component. When OMX_VIDEO_CodingUnused is
> ++ *                          specified, eColorFormat is used
> ++ *  eColorFormat : Decompressed format used by this component
> ++ *  pNativeWindow : Platform specific reference for a window object if a
> ++ *                          display sink , otherwise this field is 0x0.
> ++ */
> ++typedef struct OMX_VIDEO_PORTDEFINITIONTYPE {
> ++    OMX_STRING cMIMEType;
> ++    OMX_NATIVE_DEVICETYPE pNativeRender;
> ++    OMX_U32 nFrameWidth;
> ++    OMX_U32 nFrameHeight;
> ++    OMX_S32 nStride;
> ++    OMX_U32 nSliceHeight;
> ++    OMX_U32 nBitrate;
> ++    OMX_U32 xFramerate;
> ++    OMX_BOOL bFlagErrorConcealment;
> ++    OMX_VIDEO_CODINGTYPE eCompressionFormat;
> ++    OMX_COLOR_FORMATTYPE eColorFormat;
> ++    OMX_NATIVE_WINDOWTYPE pNativeWindow;
> ++} OMX_VIDEO_PORTDEFINITIONTYPE;
> ++
> ++/**
> ++ * Port format parameter.  This structure is used to enumerate the various
> ++ * data input/output format supported by the port.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize              : Size of the structure in bytes
> ++ *  nVersion           : OMX specification version information
> ++ *  nPortIndex         : Indicates which port to set
> ++ *  nIndex             : Indicates the enumeration index for the format from
> ++ *                       0x0 to N-1
> ++ *  eCompressionFormat : Compression format used in this instance of the
> ++ *                       component. When OMX_VIDEO_CodingUnused is specified,
> ++ *                       eColorFormat is used
> ++ *  eColorFormat       : Decompressed format used by this component
> ++ *  xFrameRate         : Indicates the video frame rate in Q16 format
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_PORTFORMATTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nIndex;
> ++    OMX_VIDEO_CODINGTYPE eCompressionFormat;
> ++    OMX_COLOR_FORMATTYPE eColorFormat;
> ++    OMX_U32 xFramerate;
> ++} OMX_VIDEO_PARAM_PORTFORMATTYPE;
> ++
> ++
> ++/**
> ++ * This is a structure for configuring video compression quantization
> ++ * parameter values.  Codecs may support different QP values for different
> ++ * frame types.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version info
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nQpI       : QP value to use for index frames
> ++ *  nQpP       : QP value to use for P frames
> ++ *  nQpB       : QP values to use for bidirectional frames
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_QUANTIZATIONTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nQpI;
> ++    OMX_U32 nQpP;
> ++    OMX_U32 nQpB;
> ++} OMX_VIDEO_PARAM_QUANTIZATIONTYPE;
> ++
> ++
> ++/**
> ++ * Structure for configuration of video fast update parameters.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version info
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  bEnableVFU : Enable/Disable video fast update
> ++ *  nFirstGOB  : Specifies the number of the first macroblock row
> ++ *  nFirstMB   : specifies the first MB relative to the specified first GOB
> ++ *  nNumMBs    : Specifies the number of MBs to be refreshed from nFirstGOB
> ++ *               and nFirstMB
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bEnableVFU;
> ++    OMX_U32 nFirstGOB;
> ++    OMX_U32 nFirstMB;
> ++    OMX_U32 nNumMBs;
> ++} OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE;
> ++
> ++
> ++/**
> ++ * Enumeration of possible bitrate control types
> ++ */
> ++typedef enum OMX_VIDEO_CONTROLRATETYPE {
> ++    OMX_Video_ControlRateDisable,
> ++    OMX_Video_ControlRateVariable,
> ++    OMX_Video_ControlRateConstant,
> ++    OMX_Video_ControlRateVariableSkipFrames,
> ++    OMX_Video_ControlRateConstantSkipFrames,
> ++    OMX_Video_ControlRateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_Video_ControlRateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_Video_ControlRateMax = 0x7FFFFFFF
> ++} OMX_VIDEO_CONTROLRATETYPE;
> ++
> ++
> ++/**
> ++ * Structure for configuring bitrate mode of a codec.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize          : Size of the struct in bytes
> ++ *  nVersion       : OMX spec version info
> ++ *  nPortIndex     : Port that this struct applies to
> ++ *  eControlRate   : Control rate type enum
> ++ *  nTargetBitrate : Target bitrate to encode with
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_BITRATETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_VIDEO_CONTROLRATETYPE eControlRate;
> ++    OMX_U32 nTargetBitrate;
> ++} OMX_VIDEO_PARAM_BITRATETYPE;
> ++
> ++
> ++/**
> ++ * Enumeration of possible motion vector (MV) types
> ++ */
> ++typedef enum OMX_VIDEO_MOTIONVECTORTYPE {
> ++    OMX_Video_MotionVectorPixel,
> ++    OMX_Video_MotionVectorHalfPel,
> ++    OMX_Video_MotionVectorQuarterPel,
> ++    OMX_Video_MotionVectorEighthPel,
> ++    OMX_Video_MotionVectorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_Video_MotionVectorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_Video_MotionVectorMax = 0x7FFFFFFF
> ++} OMX_VIDEO_MOTIONVECTORTYPE;
> ++
> ++
> ++/**
> ++ * Structure for configuring the number of motion vectors used as well
> ++ * as their accuracy.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize            : Size of the struct in bytes
> ++ *  nVersion         : OMX spec version info
> ++ *  nPortIndex       : port that this structure applies to
> ++ *  eAccuracy        : Enumerated MV accuracy
> ++ *  bUnrestrictedMVs : Allow unrestricted MVs
> ++ *  bFourMV          : Allow use of 4 MVs
> ++ *  sXSearchRange    : Search range in horizontal direction for MVs
> ++ *  sYSearchRange    : Search range in vertical direction for MVs
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_MOTIONVECTORTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_VIDEO_MOTIONVECTORTYPE eAccuracy;
> ++    OMX_BOOL bUnrestrictedMVs;
> ++    OMX_BOOL bFourMV;
> ++    OMX_S32 sXSearchRange;
> ++    OMX_S32 sYSearchRange;
> ++} OMX_VIDEO_PARAM_MOTIONVECTORTYPE;
> ++
> ++
> ++/**
> ++ * Enumeration of possible methods to use for Intra Refresh
> ++ */
> ++typedef enum OMX_VIDEO_INTRAREFRESHTYPE {
> ++    OMX_VIDEO_IntraRefreshCyclic,
> ++    OMX_VIDEO_IntraRefreshAdaptive,
> ++    OMX_VIDEO_IntraRefreshBoth,
> ++    OMX_VIDEO_IntraRefreshKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_IntraRefreshVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_IntraRefreshMax = 0x7FFFFFFF
> ++} OMX_VIDEO_INTRAREFRESHTYPE;
> ++
> ++
> ++/**
> ++ * Structure for configuring intra refresh mode
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize        : Size of the structure in bytes
> ++ *  nVersion     : OMX specification version information
> ++ *  nPortIndex   : Port that this structure applies to
> ++ *  eRefreshMode : Cyclic, Adaptive, or Both
> ++ *  nAirMBs      : Number of intra macroblocks to refresh in a frame when
> ++ *                 AIR is enabled
> ++ *  nAirRef      : Number of times a motion marked macroblock has to be
> ++ *                 intra coded
> ++ *  nCirMBs      : Number of consecutive macroblocks to be coded as "intra"
> ++ *                 when CIR is enabled
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_INTRAREFRESHTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_VIDEO_INTRAREFRESHTYPE eRefreshMode;
> ++    OMX_U32 nAirMBs;
> ++    OMX_U32 nAirRef;
> ++    OMX_U32 nCirMBs;
> ++} OMX_VIDEO_PARAM_INTRAREFRESHTYPE;
> ++
> ++
> ++/**
> ++ * Structure for enabling various error correction methods for video
> ++ * compression.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                   : Size of the structure in bytes
> ++ *  nVersion                : OMX specification version information
> ++ *  nPortIndex              : Port that this structure applies to
> ++ *  bEnableHEC              : Enable/disable header extension codes (HEC)
> ++ *  bEnableResync           : Enable/disable resynchronization markers
> ++ *  nResynchMarkerSpacing   : Resynch markers interval (in bits) to be
> ++ *                            applied in the stream
> ++ *  bEnableDataPartitioning : Enable/disable data partitioning
> ++ *  bEnableRVLC             : Enable/disable reversible variable length
> ++ *                            coding
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bEnableHEC;
> ++    OMX_BOOL bEnableResync;
> ++    OMX_U32  nResynchMarkerSpacing;
> ++    OMX_BOOL bEnableDataPartitioning;
> ++    OMX_BOOL bEnableRVLC;
> ++} OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE;
> ++
> ++
> ++/**
> ++ * Configuration of variable block-size motion compensation (VBSMC)
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  b16x16     : Enable inter block search 16x16
> ++ *  b16x8      : Enable inter block search 16x8
> ++ *  b8x16      : Enable inter block search 8x16
> ++ *  b8x8       : Enable inter block search 8x8
> ++ *  b8x4       : Enable inter block search 8x4
> ++ *  b4x8       : Enable inter block search 4x8
> ++ *  b4x4       : Enable inter block search 4x4
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_VBSMCTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL b16x16;
> ++    OMX_BOOL b16x8;
> ++    OMX_BOOL b8x16;
> ++    OMX_BOOL b8x8;
> ++    OMX_BOOL b8x4;
> ++    OMX_BOOL b4x8;
> ++    OMX_BOOL b4x4;
> ++} OMX_VIDEO_PARAM_VBSMCTYPE;
> ++
> ++
> ++/**
> ++ * H.263 profile types, each profile indicates support for various
> ++ * performance bounds and different annexes.
> ++ *
> ++ * ENUMS:
> ++ *  Baseline           : Baseline Profile: H.263 (V1), no optional modes
> ++ *  H320 Coding        : H.320 Coding Efficiency Backward Compatibility
> ++ *                       Profile: H.263+ (V2), includes annexes I, J, L.4
> ++ *                       and T
> ++ *  BackwardCompatible : Backward Compatibility Profile: H.263 (V1),
> ++ *                       includes annex F
> ++ *  ISWV2              : Interactive Streaming Wireless Profile: H.263+
> ++ *                       (V2), includes annexes I, J, K and T
> ++ *  ISWV3              : Interactive Streaming Wireless Profile: H.263++
> ++ *                       (V3), includes profile 3 and annexes V and W.6.3.8
> ++ *  HighCompression    : Conversational High Compression Profile: H.263++
> ++ *                       (V3), includes profiles 1 & 2 and annexes D and U
> ++ *  Internet           : Conversational Internet Profile: H.263++ (V3),
> ++ *                       includes profile 5 and annex K
> ++ *  Interlace          : Conversational Interlace Profile: H.263++ (V3),
> ++ *                       includes profile 5 and annex W.6.3.11
> ++ *  HighLatency        : High Latency Profile: H.263++ (V3), includes
> ++ *                       profile 6 and annexes O.1 and P.5
> ++ */
> ++typedef enum OMX_VIDEO_H263PROFILETYPE {
> ++    OMX_VIDEO_H263ProfileBaseline            = 0x01,
> ++    OMX_VIDEO_H263ProfileH320Coding          = 0x02,
> ++    OMX_VIDEO_H263ProfileBackwardCompatible  = 0x04,
> ++    OMX_VIDEO_H263ProfileISWV2               = 0x08,
> ++    OMX_VIDEO_H263ProfileISWV3               = 0x10,
> ++    OMX_VIDEO_H263ProfileHighCompression     = 0x20,
> ++    OMX_VIDEO_H263ProfileInternet            = 0x40,
> ++    OMX_VIDEO_H263ProfileInterlace           = 0x80,
> ++    OMX_VIDEO_H263ProfileHighLatency         = 0x100,
> ++    OMX_VIDEO_H263ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_H263ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_H263ProfileMax                 = 0x7FFFFFFF
> ++} OMX_VIDEO_H263PROFILETYPE;
> ++
> ++
> ++/**
> ++ * H.263 level types, each level indicates support for various frame sizes,
> ++ * bit rates, decoder frame rates.
> ++ */
> ++typedef enum OMX_VIDEO_H263LEVELTYPE {
> ++    OMX_VIDEO_H263Level10  = 0x01,
> ++    OMX_VIDEO_H263Level20  = 0x02,
> ++    OMX_VIDEO_H263Level30  = 0x04,
> ++    OMX_VIDEO_H263Level40  = 0x08,
> ++    OMX_VIDEO_H263Level45  = 0x10,
> ++    OMX_VIDEO_H263Level50  = 0x20,
> ++    OMX_VIDEO_H263Level60  = 0x40,
> ++    OMX_VIDEO_H263Level70  = 0x80,
> ++    OMX_VIDEO_H263LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_H263LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_H263LevelMax = 0x7FFFFFFF
> ++} OMX_VIDEO_H263LEVELTYPE;
> ++
> ++
> ++/**
> ++ * Specifies the picture type. These values should be OR'd to signal all
> ++ * pictures types which are allowed.
> ++ *
> ++ * ENUMS:
> ++ *  Generic Picture Types:          I, P and B
> ++ *  H.263 Specific Picture Types:   SI and SP
> ++ *  H.264 Specific Picture Types:   EI and EP
> ++ *  MPEG-4 Specific Picture Types:  S
> ++ */
> ++typedef enum OMX_VIDEO_PICTURETYPE {
> ++    OMX_VIDEO_PictureTypeI   = 0x01,
> ++    OMX_VIDEO_PictureTypeP   = 0x02,
> ++    OMX_VIDEO_PictureTypeB   = 0x04,
> ++    OMX_VIDEO_PictureTypeSI  = 0x08,
> ++    OMX_VIDEO_PictureTypeSP  = 0x10,
> ++    OMX_VIDEO_PictureTypeEI  = 0x11,
> ++    OMX_VIDEO_PictureTypeEP  = 0x12,
> ++    OMX_VIDEO_PictureTypeS   = 0x14,
> ++    OMX_VIDEO_PictureTypeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_PictureTypeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_PictureTypeMax = 0x7FFFFFFF
> ++} OMX_VIDEO_PICTURETYPE;
> ++
> ++
> ++/**
> ++ * H.263 Params
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                    : Size of the structure in bytes
> ++ *  nVersion                 : OMX specification version information
> ++ *  nPortIndex               : Port that this structure applies to
> ++ *  nPFrames                 : Number of P frames between each I frame
> ++ *  nBFrames                 : Number of B frames between each I frame
> ++ *  eProfile                 : H.263 profile(s) to use
> ++ *  eLevel                   : H.263 level(s) to use
> ++ *  bPLUSPTYPEAllowed        : Indicating that it is allowed to use PLUSPTYPE
> ++ *                             (specified in the 1998 version of H.263) to
> ++ *                             indicate custom picture sizes or clock
> ++ *                             frequencies
> ++ *  nAllowedPictureTypes     : Specifies the picture types allowed in the
> ++ *                             bitstream
> ++ *  bForceRoundingTypeToZero : value of the RTYPE bit (bit 6 of MPPTYPE) is
> ++ *                             not constrained. It is recommended to change
> ++ *                             the value of the RTYPE bit for each reference
> ++ *                             picture in error-free communication
> ++ *  nPictureHeaderRepetition : Specifies the frequency of picture header
> ++ *                             repetition
> ++ *  nGOBHeaderInterval       : Specifies the interval of non-empty GOB
> ++ *                             headers in units of GOBs
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_H263TYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nPFrames;
> ++    OMX_U32 nBFrames;
> ++    OMX_VIDEO_H263PROFILETYPE eProfile;
> ++	OMX_VIDEO_H263LEVELTYPE eLevel;
> ++    OMX_BOOL bPLUSPTYPEAllowed;
> ++    OMX_U32 nAllowedPictureTypes;
> ++    OMX_BOOL bForceRoundingTypeToZero;
> ++    OMX_U32 nPictureHeaderRepetition;
> ++    OMX_U32 nGOBHeaderInterval;
> ++} OMX_VIDEO_PARAM_H263TYPE;
> ++
> ++
> ++/**
> ++ * MPEG-2 profile types, each profile indicates support for various
> ++ * performance bounds and different annexes.
> ++ */
> ++typedef enum OMX_VIDEO_MPEG2PROFILETYPE {
> ++    OMX_VIDEO_MPEG2ProfileSimple = 0,  /**< Simple Profile */
> ++    OMX_VIDEO_MPEG2ProfileMain,        /**< Main Profile */
> ++    OMX_VIDEO_MPEG2Profile422,         /**< 4:2:2 Profile */
> ++    OMX_VIDEO_MPEG2ProfileSNR,         /**< SNR Profile */
> ++    OMX_VIDEO_MPEG2ProfileSpatial,     /**< Spatial Profile */
> ++    OMX_VIDEO_MPEG2ProfileHigh,        /**< High Profile */
> ++    OMX_VIDEO_MPEG2ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_MPEG2ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_MPEG2ProfileMax = 0x7FFFFFFF
> ++} OMX_VIDEO_MPEG2PROFILETYPE;
> ++
> ++
> ++/**
> ++ * MPEG-2 level types, each level indicates support for various frame
> ++ * sizes, bit rates, decoder frame rates.  No need
> ++ */
> ++typedef enum OMX_VIDEO_MPEG2LEVELTYPE {
> ++    OMX_VIDEO_MPEG2LevelLL = 0,  /**< Low Level */
> ++    OMX_VIDEO_MPEG2LevelML,      /**< Main Level */
> ++    OMX_VIDEO_MPEG2LevelH14,     /**< High 1440 */
> ++    OMX_VIDEO_MPEG2LevelHL,      /**< High Level */
> ++    OMX_VIDEO_MPEG2LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_MPEG2LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_MPEG2LevelMax = 0x7FFFFFFF
> ++} OMX_VIDEO_MPEG2LEVELTYPE;
> ++
> ++
> ++/**
> ++ * MPEG-2 params
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nPFrames   : Number of P frames between each I frame
> ++ *  nBFrames   : Number of B frames between each I frame
> ++ *  eProfile   : MPEG-2 profile(s) to use
> ++ *  eLevel     : MPEG-2 levels(s) to use
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_MPEG2TYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nPFrames;
> ++    OMX_U32 nBFrames;
> ++    OMX_VIDEO_MPEG2PROFILETYPE eProfile;
> ++	OMX_VIDEO_MPEG2LEVELTYPE eLevel;
> ++} OMX_VIDEO_PARAM_MPEG2TYPE;
> ++
> ++
> ++/**
> ++ * MPEG-4 profile types, each profile indicates support for various
> ++ * performance bounds and different annexes.
> ++ *
> ++ * ENUMS:
> ++ *  - Simple Profile, Levels 1-3
> ++ *  - Simple Scalable Profile, Levels 1-2
> ++ *  - Core Profile, Levels 1-2
> ++ *  - Main Profile, Levels 2-4
> ++ *  - N-bit Profile, Level 2
> ++ *  - Scalable Texture Profile, Level 1
> ++ *  - Simple Face Animation Profile, Levels 1-2
> ++ *  - Simple Face and Body Animation (FBA) Profile, Levels 1-2
> ++ *  - Basic Animated Texture Profile, Levels 1-2
> ++ *  - Hybrid Profile, Levels 1-2
> ++ *  - Advanced Real Time Simple Profiles, Levels 1-4
> ++ *  - Core Scalable Profile, Levels 1-3
> ++ *  - Advanced Coding Efficiency Profile, Levels 1-4
> ++ *  - Advanced Core Profile, Levels 1-2
> ++ *  - Advanced Scalable Texture, Levels 2-3
> ++ */
> ++typedef enum OMX_VIDEO_MPEG4PROFILETYPE {
> ++    OMX_VIDEO_MPEG4ProfileSimple           = 0x01,
> ++    OMX_VIDEO_MPEG4ProfileSimpleScalable   = 0x02,
> ++    OMX_VIDEO_MPEG4ProfileCore             = 0x04,
> ++    OMX_VIDEO_MPEG4ProfileMain             = 0x08,
> ++    OMX_VIDEO_MPEG4ProfileNbit             = 0x10,
> ++    OMX_VIDEO_MPEG4ProfileScalableTexture  = 0x20,
> ++    OMX_VIDEO_MPEG4ProfileSimpleFace       = 0x40,
> ++    OMX_VIDEO_MPEG4ProfileSimpleFBA        = 0x80,
> ++    OMX_VIDEO_MPEG4ProfileBasicAnimated    = 0x100,
> ++    OMX_VIDEO_MPEG4ProfileHybrid           = 0x200,
> ++    OMX_VIDEO_MPEG4ProfileAdvancedRealTime = 0x400,
> ++    OMX_VIDEO_MPEG4ProfileCoreScalable     = 0x800,
> ++    OMX_VIDEO_MPEG4ProfileAdvancedCoding   = 0x1000,
> ++    OMX_VIDEO_MPEG4ProfileAdvancedCore     = 0x2000,
> ++    OMX_VIDEO_MPEG4ProfileAdvancedScalable = 0x4000,
> ++    OMX_VIDEO_MPEG4ProfileAdvancedSimple   = 0x8000,
> ++    OMX_VIDEO_MPEG4ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_MPEG4ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_MPEG4ProfileMax              = 0x7FFFFFFF
> ++} OMX_VIDEO_MPEG4PROFILETYPE;
> ++
> ++
> ++/**
> ++ * MPEG-4 level types, each level indicates support for various frame
> ++ * sizes, bit rates, decoder frame rates.  No need
> ++ */
> ++typedef enum OMX_VIDEO_MPEG4LEVELTYPE {
> ++    OMX_VIDEO_MPEG4Level0  = 0x01,   /**< Level 0 */
> ++    OMX_VIDEO_MPEG4Level0b = 0x02,   /**< Level 0b */
> ++    OMX_VIDEO_MPEG4Level1  = 0x04,   /**< Level 1 */
> ++    OMX_VIDEO_MPEG4Level2  = 0x08,   /**< Level 2 */
> ++    OMX_VIDEO_MPEG4Level3  = 0x10,   /**< Level 3 */
> ++    OMX_VIDEO_MPEG4Level4  = 0x20,   /**< Level 4 */
> ++    OMX_VIDEO_MPEG4Level4a = 0x40,   /**< Level 4a */
> ++    OMX_VIDEO_MPEG4Level5  = 0x80,   /**< Level 5 */
> ++    OMX_VIDEO_MPEG4LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_MPEG4LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF
> ++} OMX_VIDEO_MPEG4LEVELTYPE;
> ++
> ++
> ++/**
> ++ * MPEG-4 configuration.  This structure handles configuration options
> ++ * which are specific to MPEG4 algorithms
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                : Size of the structure in bytes
> ++ *  nVersion             : OMX specification version information
> ++ *  nPortIndex           : Port that this structure applies to
> ++ *  nSliceHeaderSpacing  : Number of macroblocks between slice header (H263+
> ++ *                         Annex K). Put zero if not used
> ++ *  bSVH                 : Enable Short Video Header mode
> ++ *  bGov                 : Flag to enable GOV
> ++ *  nPFrames             : Number of P frames between each I frame (also called
> ++ *                         GOV period)
> ++ *  nBFrames             : Number of B frames between each I frame
> ++ *  nIDCVLCThreshold     : Value of intra DC VLC threshold
> ++ *  bACPred              : Flag to use ac prediction
> ++ *  nMaxPacketSize       : Maximum size of packet in bytes.
> ++ *  nTimeIncRes          : Used to pass VOP time increment resolution for MPEG4.
> ++ *                         Interpreted as described in MPEG4 standard.
> ++ *  eProfile             : MPEG-4 profile(s) to use.
> ++ *  eLevel               : MPEG-4 level(s) to use.
> ++ *  nAllowedPictureTypes : Specifies the picture types allowed in the bitstream
> ++ *  nHeaderExtension     : Specifies the number of consecutive video packet
> ++ *                         headers within a VOP
> ++ *  bReversibleVLC       : Specifies whether reversible variable length coding
> ++ *                         is in use
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_MPEG4TYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nSliceHeaderSpacing;
> ++    OMX_BOOL bSVH;
> ++    OMX_BOOL bGov;
> ++    OMX_U32 nPFrames;
> ++    OMX_U32 nBFrames;
> ++    OMX_U32 nIDCVLCThreshold;
> ++    OMX_BOOL bACPred;
> ++    OMX_U32 nMaxPacketSize;
> ++    OMX_U32 nTimeIncRes;
> ++    OMX_VIDEO_MPEG4PROFILETYPE eProfile;
> ++    OMX_VIDEO_MPEG4LEVELTYPE eLevel;
> ++    OMX_U32 nAllowedPictureTypes;
> ++    OMX_U32 nHeaderExtension;
> ++    OMX_BOOL bReversibleVLC;
> ++} OMX_VIDEO_PARAM_MPEG4TYPE;
> ++
> ++
> ++/**
> ++ * WMV Versions
> ++ */
> ++typedef enum OMX_VIDEO_WMVFORMATTYPE {
> ++    OMX_VIDEO_WMVFormatUnused = 0x01,   /**< Format unused or unknown */
> ++    OMX_VIDEO_WMVFormat7      = 0x02,   /**< Windows Media Video format 7 */
> ++    OMX_VIDEO_WMVFormat8      = 0x04,   /**< Windows Media Video format 8 */
> ++    OMX_VIDEO_WMVFormat9      = 0x08,   /**< Windows Media Video format 9 */
> ++    OMX_VIDEO_WMFFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_WMFFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_WMVFormatMax    = 0x7FFFFFFF
> ++} OMX_VIDEO_WMVFORMATTYPE;
> ++
> ++
> ++/**
> ++ * WMV Params
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  eFormat    : Version of WMV stream / data
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_WMVTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_VIDEO_WMVFORMATTYPE eFormat;
> ++} OMX_VIDEO_PARAM_WMVTYPE;
> ++
> ++
> ++/**
> ++ * Real Video Version
> ++ */
> ++typedef enum OMX_VIDEO_RVFORMATTYPE {
> ++    OMX_VIDEO_RVFormatUnused = 0, /**< Format unused or unknown */
> ++    OMX_VIDEO_RVFormat8,          /**< Real Video format 8 */
> ++    OMX_VIDEO_RVFormat9,          /**< Real Video format 9 */
> ++    OMX_VIDEO_RVFormatG2,         /**< Real Video Format G2 */
> ++    OMX_VIDEO_RVFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_RVFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_RVFormatMax = 0x7FFFFFFF
> ++} OMX_VIDEO_RVFORMATTYPE;
> ++
> ++
> ++/**
> ++ * Real Video Params
> ++ *
> ++ * STUCT MEMBERS:
> ++ *  nSize              : Size of the structure in bytes
> ++ *  nVersion           : OMX specification version information
> ++ *  nPortIndex         : Port that this structure applies to
> ++ *  eFormat            : Version of RV stream / data
> ++ *  nBitsPerPixel      : Bits per pixel coded in the frame
> ++ *  nPaddedWidth       : Padded width in pixel of a video frame
> ++ *  nPaddedHeight      : Padded Height in pixels of a video frame
> ++ *  nFrameRate         : Rate of video in frames per second
> ++ *  nBitstreamFlags    : Flags which internal information about the bitstream
> ++ *  nBitstreamVersion  : Bitstream version
> ++ *  nMaxEncodeFrameSize: Max encoded frame size
> ++ *  bEnablePostFilter  : Turn on/off post filter
> ++ *  bEnableTemporalInterpolation : Turn on/off temporal interpolation
> ++ *  bEnableLatencyMode : When enabled, the decoder does not display a decoded
> ++ *                       frame until it has detected that no enhancement layer
> ++ *					 frames or dependent B frames will be coming. This
> ++ *					 detection usually occurs when a subsequent non-B
> ++ *					 frame is encountered
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_RVTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_VIDEO_RVFORMATTYPE eFormat;
> ++    OMX_U16 nBitsPerPixel;
> ++    OMX_U16 nPaddedWidth;
> ++    OMX_U16 nPaddedHeight;
> ++    OMX_U32 nFrameRate;
> ++    OMX_U32 nBitstreamFlags;
> ++    OMX_U32 nBitstreamVersion;
> ++    OMX_U32 nMaxEncodeFrameSize;
> ++    OMX_BOOL bEnablePostFilter;
> ++    OMX_BOOL bEnableTemporalInterpolation;
> ++    OMX_BOOL bEnableLatencyMode;
> ++} OMX_VIDEO_PARAM_RVTYPE;
> ++
> ++
> ++/**
> ++ * AVC profile types, each profile indicates support for various
> ++ * performance bounds and different annexes.
> ++ */
> ++typedef enum OMX_VIDEO_AVCPROFILETYPE {
> ++    OMX_VIDEO_AVCProfileBaseline = 0x01,   /**< Baseline profile */
> ++    OMX_VIDEO_AVCProfileMain     = 0x02,   /**< Main profile */
> ++    OMX_VIDEO_AVCProfileExtended = 0x04,   /**< Extended profile */
> ++    OMX_VIDEO_AVCProfileHigh     = 0x08,   /**< High profile */
> ++    OMX_VIDEO_AVCProfileHigh10   = 0x10,   /**< High 10 profile */
> ++    OMX_VIDEO_AVCProfileHigh422  = 0x20,   /**< High 4:2:2 profile */
> ++    OMX_VIDEO_AVCProfileHigh444  = 0x40,   /**< High 4:4:4 profile */
> ++    OMX_VIDEO_AVCProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_AVCProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_AVCProfileMax      = 0x7FFFFFFF
> ++} OMX_VIDEO_AVCPROFILETYPE;
> ++
> ++
> ++/**
> ++ * AVC level types, each level indicates support for various frame sizes,
> ++ * bit rates, decoder frame rates.  No need
> ++ */
> ++typedef enum OMX_VIDEO_AVCLEVELTYPE {
> ++    OMX_VIDEO_AVCLevel1   = 0x01,     /**< Level 1 */
> ++    OMX_VIDEO_AVCLevel1b  = 0x02,     /**< Level 1b */
> ++    OMX_VIDEO_AVCLevel11  = 0x04,     /**< Level 1.1 */
> ++    OMX_VIDEO_AVCLevel12  = 0x08,     /**< Level 1.2 */
> ++    OMX_VIDEO_AVCLevel13  = 0x10,     /**< Level 1.3 */
> ++    OMX_VIDEO_AVCLevel2   = 0x20,     /**< Level 2 */
> ++    OMX_VIDEO_AVCLevel21  = 0x40,     /**< Level 2.1 */
> ++    OMX_VIDEO_AVCLevel22  = 0x80,     /**< Level 2.2 */
> ++    OMX_VIDEO_AVCLevel3   = 0x100,    /**< Level 3 */
> ++    OMX_VIDEO_AVCLevel31  = 0x200,    /**< Level 3.1 */
> ++    OMX_VIDEO_AVCLevel32  = 0x400,    /**< Level 3.2 */
> ++    OMX_VIDEO_AVCLevel4   = 0x800,    /**< Level 4 */
> ++    OMX_VIDEO_AVCLevel41  = 0x1000,   /**< Level 4.1 */
> ++    OMX_VIDEO_AVCLevel42  = 0x2000,   /**< Level 4.2 */
> ++    OMX_VIDEO_AVCLevel5   = 0x4000,   /**< Level 5 */
> ++    OMX_VIDEO_AVCLevel51  = 0x8000,   /**< Level 5.1 */
> ++    OMX_VIDEO_AVCLevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_AVCLevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_AVCLevelMax = 0x7FFFFFFF
> ++} OMX_VIDEO_AVCLEVELTYPE;
> ++
> ++
> ++/**
> ++ * AVC loop filter modes
> ++ *
> ++ * OMX_VIDEO_AVCLoopFilterEnable               : Enable
> ++ * OMX_VIDEO_AVCLoopFilterDisable              : Disable
> ++ * OMX_VIDEO_AVCLoopFilterDisableSliceBoundary : Disabled on slice boundaries
> ++ */
> ++typedef enum OMX_VIDEO_AVCLOOPFILTERTYPE {
> ++    OMX_VIDEO_AVCLoopFilterEnable = 0,
> ++    OMX_VIDEO_AVCLoopFilterDisable,
> ++    OMX_VIDEO_AVCLoopFilterDisableSliceBoundary,
> ++    OMX_VIDEO_AVCLoopFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_AVCLoopFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_AVCLoopFilterMax = 0x7FFFFFFF
> ++} OMX_VIDEO_AVCLOOPFILTERTYPE;
> ++
> ++
> ++/**
> ++ * AVC params
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize                     : Size of the structure in bytes
> ++ *  nVersion                  : OMX specification version information
> ++ *  nPortIndex                : Port that this structure applies to
> ++ *  nSliceHeaderSpacing       : Number of macroblocks between slice header, put
> ++ *                              zero if not used
> ++ *  nPFrames                  : Number of P frames between each I frame
> ++ *  nBFrames                  : Number of B frames between each I frame
> ++ *  bUseHadamard              : Enable/disable Hadamard transform
> ++ *  nRefFrames                : Max number of reference frames to use for inter
> ++ *                              motion search (1-16)
> ++ *  nRefIdxTrailing           : Pic param set ref frame index (index into ref
> ++ *                              frame buffer of trailing frames list), B frame
> ++ *                              support
> ++ *  nRefIdxForward            : Pic param set ref frame index (index into ref
> ++ *                              frame buffer of forward frames list), B frame
> ++ *                              support
> ++ *  bEnableUEP                : Enable/disable unequal error protection. This
> ++ *                              is only valid of data partitioning is enabled.
> ++ *  bEnableFMO                : Enable/disable flexible macroblock ordering
> ++ *  bEnableASO                : Enable/disable arbitrary slice ordering
> ++ *  bEnableRS                 : Enable/disable sending of redundant slices
> ++ *  eProfile                  : AVC profile(s) to use
> ++ *  eLevel                    : AVC level(s) to use
> ++ *  nAllowedPictureTypes      : Specifies the picture types allowed in the
> ++ *                              bitstream
> ++ *  bFrameMBsOnly             : specifies that every coded picture of the
> ++ *                              coded video sequence is a coded frame
> ++ *                              containing only frame macroblocks
> ++ *  bMBAFF                    : Enable/disable switching between frame and
> ++ *                              field macroblocks within a picture
> ++ *  bEntropyCodingCABAC       : Entropy decoding method to be applied for the
> ++ *                              syntax elements for which two descriptors appear
> ++ *                              in the syntax tables
> ++ *  bWeightedPPrediction      : Enable/disable weighted prediction shall not
> ++ *                              be applied to P and SP slices
> ++ *  nWeightedBipredicitonMode : Default weighted prediction is applied to B
> ++ *                              slices
> ++ *  bconstIpred               : Enable/disable intra prediction
> ++ *  bDirect8x8Inference       : Specifies the method used in the derivation
> ++ *                              process for luma motion vectors for B_Skip,
> ++ *                              B_Direct_16x16 and B_Direct_8x8 as specified
> ++ *                              in subclause 8.4.1.2 of the AVC spec
> ++ *  bDirectSpatialTemporal    : Flag indicating spatial or temporal direct
> ++ *                              mode used in B slice coding (related to
> ++ *                              bDirect8x8Inference) . Spatial direct mode is
> ++ *                              more common and should be the default.
> ++ *  nCabacInitIdx             : Index used to init CABAC contexts
> ++ *  eLoopFilterMode           : Enable/disable loop filter
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_AVCTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nSliceHeaderSpacing;
> ++    OMX_U32 nPFrames;
> ++    OMX_U32 nBFrames;
> ++    OMX_BOOL bUseHadamard;
> ++    OMX_U32 nRefFrames;
> ++	OMX_U32 nRefIdx10ActiveMinus1;
> ++	OMX_U32 nRefIdx11ActiveMinus1;
> ++    OMX_BOOL bEnableUEP;
> ++    OMX_BOOL bEnableFMO;
> ++    OMX_BOOL bEnableASO;
> ++    OMX_BOOL bEnableRS;
> ++    OMX_VIDEO_AVCPROFILETYPE eProfile;
> ++	OMX_VIDEO_AVCLEVELTYPE eLevel;
> ++    OMX_U32 nAllowedPictureTypes;
> ++	OMX_BOOL bFrameMBsOnly;
> ++    OMX_BOOL bMBAFF;
> ++    OMX_BOOL bEntropyCodingCABAC;
> ++    OMX_BOOL bWeightedPPrediction;
> ++    OMX_U32 nWeightedBipredicitonMode;
> ++    OMX_BOOL bconstIpred ;
> ++    OMX_BOOL bDirect8x8Inference;
> ++	OMX_BOOL bDirectSpatialTemporal;
> ++	OMX_U32 nCabacInitIdc;
> ++	OMX_VIDEO_AVCLOOPFILTERTYPE eLoopFilterMode;
> ++} OMX_VIDEO_PARAM_AVCTYPE;
> ++
> ++typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE {
> ++   OMX_U32 nSize;
> ++   OMX_VERSIONTYPE nVersion;
> ++   OMX_U32 nPortIndex;
> ++   OMX_U32 eProfile;      /**< type is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE,
> ++                                 or OMX_VIDEO_MPEG4PROFILETYPE depending on context */
> ++   OMX_U32 eLevel;        /**< type is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE,
> ++                                 or OMX_VIDEO_MPEG4PROFILETYPE depending on context */
> ++   OMX_U32 nProfileIndex; /**< Used to query for individual profile support information,
> ++                               This parameter is valid only for
> ++                               OMX_IndexParamVideoProfileLevelQuerySupported index,
> ++                               For all other indices this parameter is to be ignored. */
> ++} OMX_VIDEO_PARAM_PROFILELEVELTYPE;
> ++
> ++/**
> ++ * Structure for dynamically configuring bitrate mode of a codec.
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize          : Size of the struct in bytes
> ++ *  nVersion       : OMX spec version info
> ++ *  nPortIndex     : Port that this struct applies to
> ++ *  nEncodeBitrate : Target average bitrate to be generated in bps
> ++ */
> ++typedef struct OMX_VIDEO_CONFIG_BITRATETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nEncodeBitrate;
> ++} OMX_VIDEO_CONFIG_BITRATETYPE;
> ++
> ++/**
> ++ * Defines Encoder Frame Rate setting
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize            : Size of the structure in bytes
> ++ *  nVersion         : OMX specification version information
> ++ *  nPortIndex       : Port that this structure applies to
> ++ *  xEncodeFramerate : Encoding framerate represented in Q16 format
> ++ */
> ++typedef struct OMX_CONFIG_FRAMERATETYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 xEncodeFramerate; /* Q16 format */
> ++} OMX_CONFIG_FRAMERATETYPE;
> ++
> ++typedef struct OMX_CONFIG_INTRAREFRESHVOPTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL IntraRefreshVOP;
> ++} OMX_CONFIG_INTRAREFRESHVOPTYPE;
> ++
> ++typedef struct OMX_CONFIG_MACROBLOCKERRORMAPTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nErrMapSize;           /* Size of the Error Map in bytes */
> ++    OMX_U8  ErrMap[1];             /* Error map hint */
> ++} OMX_CONFIG_MACROBLOCKERRORMAPTYPE;
> ++
> ++typedef struct OMX_CONFIG_MBERRORREPORTINGTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_BOOL bEnabled;
> ++} OMX_CONFIG_MBERRORREPORTINGTYPE;
> ++
> ++typedef struct OMX_PARAM_MACROBLOCKSTYPE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nMacroblocks;
> ++} OMX_PARAM_MACROBLOCKSTYPE;
> ++
> ++/**
> ++ * AVC Slice Mode modes
> ++ *
> ++ * OMX_VIDEO_SLICEMODE_AVCDefault   : Normal frame encoding, one slice per frame
> ++ * OMX_VIDEO_SLICEMODE_AVCMBSlice   : NAL mode, number of MBs per frame
> ++ * OMX_VIDEO_SLICEMODE_AVCByteSlice : NAL mode, number of bytes per frame
> ++ */
> ++typedef enum OMX_VIDEO_AVCSLICEMODETYPE {
> ++    OMX_VIDEO_SLICEMODE_AVCDefault = 0,
> ++    OMX_VIDEO_SLICEMODE_AVCMBSlice,
> ++    OMX_VIDEO_SLICEMODE_AVCByteSlice,
> ++    OMX_VIDEO_SLICEMODE_AVCKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
> ++    OMX_VIDEO_SLICEMODE_AVCVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
> ++    OMX_VIDEO_SLICEMODE_AVCLevelMax = 0x7FFFFFFF
> ++} OMX_VIDEO_AVCSLICEMODETYPE;
> ++
> ++/**
> ++ * AVC FMO Slice Mode Params
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nNumSliceGroups : Specifies the number of slice groups
> ++ *  nSliceGroupMapType : Specifies the type of slice groups
> ++ *  eSliceMode : Specifies the type of slice
> ++ */
> ++typedef struct OMX_VIDEO_PARAM_AVCSLICEFMO {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U8 nNumSliceGroups;
> ++    OMX_U8 nSliceGroupMapType;
> ++    OMX_VIDEO_AVCSLICEMODETYPE eSliceMode;
> ++} OMX_VIDEO_PARAM_AVCSLICEFMO;
> ++
> ++/**
> ++ * AVC IDR Period Configs
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nIDRPeriod : Specifies periodicity of IDR frames
> ++ *  nPFrames : Specifies internal of coding Intra frames
> ++ */
> ++typedef struct OMX_VIDEO_CONFIG_AVCINTRAPERIOD {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nIDRPeriod;
> ++    OMX_U32 nPFrames;
> ++} OMX_VIDEO_CONFIG_AVCINTRAPERIOD;
> ++
> ++/**
> ++ * AVC NAL Size Configs
> ++ *
> ++ * STRUCT MEMBERS:
> ++ *  nSize      : Size of the structure in bytes
> ++ *  nVersion   : OMX specification version information
> ++ *  nPortIndex : Port that this structure applies to
> ++ *  nNaluBytes : Specifies the NAL unit size
> ++ */
> ++typedef struct OMX_VIDEO_CONFIG_NALSIZE {
> ++    OMX_U32 nSize;
> ++    OMX_VERSIONTYPE nVersion;
> ++    OMX_U32 nPortIndex;
> ++    OMX_U32 nNaluBytes;
> ++} OMX_VIDEO_CONFIG_NALSIZE;
> ++
> ++/** @} */
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif /* __cplusplus */
> ++
> ++#endif
> ++/* File EOF */
> ++
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-001-pkgconfig.patch b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-001-pkgconfig.patch
> new file mode 100644
> index 0000000..7743c5c
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries-001-pkgconfig.patch
> @@ -0,0 +1,42 @@
> +diff -rupN a/usr/lib/pkgconfig/egl.pc b/usr/lib/pkgconfig/egl.pc
> +--- a/usr/lib/pkgconfig/egl.pc	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/lib/pkgconfig/egl.pc	2014-11-03 15:57:00.428740000 +0100
> +@@ -0,0 +1,10 @@
> ++prefix=/usr
> ++exec_prefix=${prefix}
> ++libdir=/usr/lib
> ++includedir=/usr/include
> ++
> ++Name: egl
> ++Description: EGL implementation
> ++Version: 1
> ++Cflags: -I${includedir}/EGL
> ++Libs: -L${libdir} -lEGL
> +diff -rupN a/usr/lib/pkgconfig/gles.pc b/usr/lib/pkgconfig/gles.pc
> +--- a/usr/lib/pkgconfig/gles.pc	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/lib/pkgconfig/gles.pc	2014-11-03 15:57:06.036740000 +0100
> +@@ -0,0 +1,10 @@
> ++prefix=/usr
> ++exec_prefix=${prefix}
> ++libdir=/usr/lib
> ++includedir=/usr/include
> ++
> ++Name: glesv2
> ++Description: OpenGL ES 1.1 implementation
> ++Version: 1.1
> ++Cflags: -I${includedir}/GLES
> ++Libs: -L${libdir} -lGLESv1_CM
> +diff -rupN a/usr/lib/pkgconfig/glesv2.pc b/usr/lib/pkgconfig/glesv2.pc
> +--- a/usr/lib/pkgconfig/glesv2.pc	1970-01-01 01:00:00.000000000 +0100
> ++++ b/usr/lib/pkgconfig/glesv2.pc	2014-11-03 15:57:13.524740000 +0100
> +@@ -0,0 +1,10 @@
> ++prefix=/usr
> ++exec_prefix=${prefix}
> ++libdir=/usr/lib
> ++includedir=/usr/include
> ++
> ++Name: glesv2
> ++Description: OpenGL ES 2 implementation
> ++Version: 2
> ++Cflags: -I${includedir}/GLESv2
> ++Libs: -L${libdir} -lGLESv2
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.hash b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.hash
> new file mode 100644
> index 0000000..8185593
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.hash
> @@ -0,0 +1,3 @@
> +# From https://developer.nvidia.com/linux-tegra-rel-16
> +sha1 6b57b43f8f9c5b76fa3763144e57c0c16047b1a8 Tegra20_Linux_R16.4.0_armhf.tbz2
> +sha1 44e7f84dd6e3b80d37ecddf9cc133031b2653004 Tegra30_Linux_R16.4.0_armhf.tbz2
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.mk b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.mk
> new file mode 100644
> index 0000000..053480a
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-binaries/nvidia-tegra23-binaries.mk
> @@ -0,0 +1,187 @@
> +################################################################################
> +#
> +# nvidia-tegra3-binaries
> +#
> +################################################################################
> +
> +NVIDIA_TEGRA23_BINARIES_VERSION	= $(NVIDIA_TEGRA23_VERSION)
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA2),y)
> +NVIDIA_TEGRA23_BINARIES_SOURCE = Tegra20_Linux_R$(NVIDIA_TEGRA23_BINARIES_VERSION)_armhf.tbz2
> +endif
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA3),y)
> +NVIDIA_TEGRA23_BINARIES_SOURCE = Tegra30_Linux_R$(NVIDIA_TEGRA23_BINARIES_VERSION)_armhf.tbz2
> +endif
> +NVIDIA_TEGRA23_BINARIES_SITE = $(NVIDIA_TEGRA23_SITE)
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS), y)
> +NVIDIA_TEGRA23_BINARIES_LICENSE = License For Customer Use of NVIDIA Software, LGPLv2.1
> +NVIDIA_TEGRA23_BINARIES_LICENSE_FILES = nv_tegra/LICENSE nv_tegra/nv_sample_apps/LICENSE.gst-openmax
> +else
> +NVIDIA_TEGRA23_BINARIES_LICENSE = License For Customer Use of NVIDIA Software
> +NVIDIA_TEGRA23_BINARIES_LICENSE_FILES = nv_tegra/LICENSE
> +endif
> +
> +NVIDIA_TEGRA23_BINARIES_INSTALL_STAGING = YES
> +NVIDIA_TEGRA23_BINARIES_INSTALL_TARGET = YES
> +
> +NVIDIA_TEGRA23_BINARIES_DEPENDENCIES = xlib_libX11 xlib_libXext xlib_libXv
> +NVIDIA_TEGRA23_BINARIES_PROVIDES = libegl libgles libopenmax
> +
> +NVIDIA_TEGRA23_BINARIES_LIBS_VERSION = nv_tegra_release
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA2),y)
> +NVIDIA_TEGRA23_BINARIES_FIRMWARE = \
> +		nvrm_avp.bin nvavp_vid_ucode_alt.bin nvavp_os_0ff00000.bin \
> +		nvavp_os_eff00000.bin
> +endif
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA3),y)
> +NVIDIA_TEGRA23_BINARIES_FIRMWARE = \
> +		nvrm_avp_0ff00000.bin nvrm_avp_8e000000.bin nvrm_avp_9e000000.bin \
> +		nvrm_avp_be000000.bin nvrm_avp_eff00000.bin nvavp_vid_ucode_alt.bin \
> +		nvavp_os_0ff00000.bin nvavp_os_eff00000.bin
> +endif
> +
> +NVIDIA_TEGRA23_BINARIES_LIBRARIES = \
> +		libardrv_dynamic.so libcgdrv.so libEGL.so.1 libGLESv1_CM.so.1 libGLESv2.so.2 \
> +		libKD.so libnvapputil.so libnvavp.so libnvcwm.so libnvdc.so \
> +		libnvddk_2d.so libnvddk_2d_v2.so libnvddk_disp.so libnvddk_kbc.so \
> +		libnvddk_mipihsi.so libnvddk_nand.so libnvddk_se.so libnvddk_snor.so \
> +		libnvddk_spif.so libnvddk_usbphy.so libnvdispatch_helper.so libnvglsi.so \
> +		libnvmedia_audio.so libnvmm_audio.so libnvmm_camera.so libnvmm_contentpipe.so \
> +		libnvmm_image.so libnvmmlite_audio.so libnvmmlite_image.so libnvmmlite.so \
> +		libnvmmlite_utils.so libnvmmlite_video.so libnvmm_manager.so libnvmm_parser.so \
> +		libnvmm_service.so libnvmm.so libnvmm_utils.so libnvmm_video.so libnvmm_writer.so \
> +		libnvodm_disp.so libnvodm_dtvtuner.so libnvodm_imager.so libnvodm_misc.so \
> +		libnvodm_query.so libnvomxilclient.so libnvomx.so libnvos.so libnvparser.so \
> +		libnvrm_graphics.so libnvrm.so libnvsm.so libnvtestio.so libnvtestresults.so \
> +		libnvtvmr.so libnvwinsys.so libnvwsi.so
> +
> +ifeq ($(BR2_PACKAGE_JPEG_TEGRA23),y)
> +NVIDIA_TEGRA23_BINARIES_PROVIDES += jpeg
> +NVIDIA_TEGRA23_BINARIES_LIBRARIES += libjpeg.so
> +endif
> +
> +NVIDIA_TEGRA23_BINARIES_X11ABI_DRIVERS = \
> +		tegra_drv.abi5.so tegra_drv.abi6.so tegra_drv.abi7.so tegra_drv.abi8.so \
> +		tegra_drv.abi10.so tegra_drv.abi11.so tegra_drv.abi12.so tegra_drv.abi13.so \
> +		tegra_drv.abi14.so
> +
> +NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS = \
> +		libgstnv4l2.so libgstnvvidconv.so libgstnvxvimagesink.so libgstomx.so
> +
> +NVIDIA_TEGRA23_BINARIES_MULTIMEDIA_APPS = nvgstplayer nvgstcapture
> +
> +NVIDIA_TEGRA23_BINARIES_PKGCONFIG = egl.pc gles.pc glesv2.pc
> +
> +NVIDIA_TEGRA23_BINARIES_HEADERS = OpenMAX/il KHR KD GLES2 GLES EGL
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V5),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi5.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V6),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi6.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V7),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi7.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V8),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi8.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V10),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi10.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V11),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi11.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V12),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi12.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V13),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi13.so
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_X11ABI_V14),y)
> +NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER = tegra_drv.abi14.so
> +endif
> +
> +define NVIDIA_TEGRA23_BINARIES_EXTRACT_CMDS
> +	bzcat $(DL_DIR)/$(NVIDIA_TEGRA23_BINARIES_SOURCE) | tar --strip-components=1 -C $(@D) -xf -
> +	rm -rf $(@D)/nv_tegra/nvidia_drivers
> +	mkdir $(@D)/nv_tegra/nvidia_drivers
> +	tar -xvf $(@D)/nv_tegra/nvidia_drivers.tbz2 -C $(@D)/nv_tegra/nvidia_drivers/
> +	rm -rf $(@D)/nv_tegra/nv_sample_apps/nvgstapps
> +	mkdir $(@D)/nv_tegra/nv_sample_apps/nvgstapps
> +	tar -xvf $(@D)/nv_tegra/nv_sample_apps/nvgstapps.tbz2 -C $(@D)/nv_tegra/nv_sample_apps/nvgstapps/
> +endef
> +
> +define NVIDIA_TEGRA23_BINARIES_INSTALL_LIBS
> +	$(foreach lib,$(NVIDIA_TEGRA23_BINARIES_LIBRARIES),
> +		$(INSTALL) -D -m 0644 $(@D)/nv_tegra/nvidia_drivers/usr/lib/$(lib) \
> +			$(1)/usr/lib/$(lib); \
> +	)
> +	(cd $(1)/usr/lib; \
> +		ln -sf libGLESv2.so.2 libGLESv2.so; \
> +		ln -sf libGLESv1_CM.so.1 libGLESv1_CM.so; \
> +		ln -sf libEGL.so.1 libEGL.so \
> +	)
> +	$(INSTALL) -D -m 0644 $(@D)/nv_tegra/nvidia_drivers/etc/$(NVIDIA_TEGRA23_BINARIES_LIBS_VERSION) \
> +		$(1)/etc/$(NVIDIA_TEGRA23_BINARIES_LIBS_VERSION)
> +	$(foreach xabi,$(NVIDIA_TEGRA23_BINARIES_X11ABI_DRIVERS),
> +		$(INSTALL) -D -m 0644 $(@D)/nv_tegra/nvidia_drivers/usr/lib/xorg/modules/drivers/$(xabi) \
> +			$(1)/usr/lib/xorg/modules/drivers/$(xabi); \
> +	)
> +	(cd $(1)/usr/lib/xorg/modules/drivers; \
> +		ln -sf $(NVIDIA_TEGRA23_BINARIES_X_ABI_DRIVER) tegra_drv.so \
> +	)
> +endef
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS),y)
> +define NVIDIA_TEGRA23_BINARIES_INSTALL_GST_PLUGINS
> +	$(foreach gst_plug,$(NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS),
> +		$(INSTALL) -D -m 0644 $(@D)/nv_tegra/nv_sample_apps/nvgstapps/usr/lib/gstreamer-0.10/$(gst_plug) \
> +			$(1)/usr/lib/gstreamer-0.10/$(gst_plug); \
> +	)
> +endef
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS),y)
> +define NVIDIA_TEGRA23_BINARIES_INSTALL_APPS
> +	$(foreach apps,$(NVIDIA_TEGRA23_BINARIES_MULTIMEDIA_APPS),
> +		$(INSTALL) -D -m 0755 $(@D)/nv_tegra/nv_sample_apps/nvgstapps/usr/bin/$(apps) \
> +			$(TARGET_DIR)/usr/bin/$(apps); \
> +	)
> +endef
> +endif
> +
> +define NVIDIA_TEGRA23_BINARIES_INSTALL_STAGING_CMDS
> +	$(call NVIDIA_TEGRA23_BINARIES_INSTALL_LIBS, $(STAGING_DIR))
> +	$(foreach pkgconfig,$(NVIDIA_TEGRA23_BINARIES_PKGCONFIG),
> +		$(INSTALL) -D -m 0644 $(@D)/usr/lib/pkgconfig/$(pkgconfig) \
> +			$(STAGING_DIR)/usr/lib/pkgconfig/$(pkgconfig); \
> +	)
> +	$(foreach header,$(NVIDIA_TEGRA23_BINARIES_HEADERS),
> +		$(INSTALL) -d $(STAGING_DIR)/usr/include/$(header);
> +		$(INSTALL) -D -m 0644 $(@D)/usr/include/$(header)/* \
> +			$(STAGING_DIR)/usr/include/$(header)/; \
> +	)
> +	$(call NVIDIA_TEGRA23_BINARIES_INSTALL_GST_PLUGINS, $(STAGING_DIR))
> +endef
> +
> +define NVIDIA_TEGRA23_BINARIES_INSTALL_TARGET_CMDS
> +	$(foreach firmware,$(NVIDIA_TEGRA23_BINARIES_FIRMWARE),
> +		$(INSTALL) -D -m 0644 $(@D)/nv_tegra/nvidia_drivers/lib/firmware/$(firmware) \
> +			$(TARGET_DIR)/lib/firmware/$(firmware); \
> +	)
> +	$(call NVIDIA_TEGRA23_BINARIES_INSTALL_LIBS, $(TARGET_DIR))
> +	$(call NVIDIA_TEGRA23_BINARIES_INSTALL_GST_PLUGINS, $(TARGET_DIR))
> +	$(NVIDIA_TEGRA23_BINARIES_INSTALL_APPS)
> +endef
> +
> +$(eval $(generic-package))
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-codecs/Config.in b/package/nvidia-tegra23/nvidia-tegra23-codecs/Config.in
> new file mode 100644
> index 0000000..0ac5599
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-codecs/Config.in
> @@ -0,0 +1,9 @@
> +config BR2_PACKAGE_NVIDIA_TEGRA23_CODECS
> +	bool "nvidia-tegra23 codecs"
> +	depends on BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES
> +	help
> +	  NVIDIA Tegra restricted codecs from Linux For Tegra 16.4.0
> +	  These codecs are under
> +	  NVIDIA(r) Tegra(r) Software License Agreement
> +
> +	  https://developer.nvidia.com/linux-tegra-rel-16
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.hash b/package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.hash
> new file mode 100644
> index 0000000..de4a461
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.hash
> @@ -0,0 +1,3 @@
> +# From https://developer.nvidia.com/linux-tegra-rel-16
> +sha1 d0889bf0ca408583a1e88657c6fd18f3659ef1bb Tegra20_Linux-codecs_R16.4.0_armhf.tbz2
> +sha1 a9f298222d3b6a618ef96a6bed9641929b152c8a Tegra30_Linux-codecs_R16.4.0_armhf.tbz2
> diff --git a/package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.mk b/package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.mk
> new file mode 100644
> index 0000000..19bc663
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23-codecs/nvidia-tegra23-codecs.mk
> @@ -0,0 +1,42 @@
> +################################################################################
> +#
> +# nvidia-tegra23-codecs
> +#
> +################################################################################
> +
> +NVIDIA_TEGRA23_CODECS_VERSION = $(NVIDIA_TEGRA23_VERSION)
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA2),y)
> +NVIDIA_TEGRA23_CODECS_SOURCE = Tegra20_Linux-codecs_R$(NVIDIA_TEGRA23_CODECS_VERSION)_armhf.tbz2
> +endif
> +ifeq ($(BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_TEGRA3),y)
> +NVIDIA_TEGRA23_CODECS_SOURCE = Tegra30_Linux-codecs_R$(NVIDIA_TEGRA23_CODECS_VERSION)_armhf.tbz2
> +endif
> +NVIDIA_TEGRA23_CODECS_SITE = $(NVIDIA_TEGRA23_SITE)
> +NVIDIA_TEGRA23_CODECS_LICENSE = NVIDIA(r) Tegra(r) Software License Agreement
> +NVIDIA_TEGRA23_CODECS_LICENSE_FILES = Tegra_Software_License_Agreement-Tegra-Linux-codecs.txt
> +NVIDIA_TEGRA23_CODECS_REDISTRIBUTE = NO
> +NVIDIA_TEGRA23_CODECS_DEPENDENCIES = nvidia-tegra23-binaries
> +NVIDIA_TEGRA23_CODECS_INSTALL_STAGING = NO
> +NVIDIA_TEGRA23_CODECS_INSTALL_TARGET = YES
> +
> +NVIDIA_TEGRA23_CODECS_FIRMWARE = \
> +		nvmm_aacdec.axf nvmm_adtsdec.axf nvmm_h264dec.axf nvmm_h264dec2x.axf \
> +		nvmm_jpegdec.axf nvmm_jpegenc.axf nvmm_manager.axf nvmm_mp3dec.axf \
> +		nvmm_mpeg4dec.axf nvmm_service.axf
> +
> +# The archive contains an archive with the firmware codecs
> +define NVIDIA_TEGRA23_CODECS_EXTRACT_CMDS
> +	bzcat $(DL_DIR)/$(NVIDIA_TEGRA23_CODECS_SOURCE) | tar -C $(@D) -xf -
> +	rm -rf $(@D)/restricted_codecs
> +	mkdir $(@D)/restricted_codecs
> +	tar -xvf $(@D)/restricted_codecs.tbz2 -C $(@D)/restricted_codecs/
> +endef
> +
> +define NVIDIA_TEGRA23_CODECS_INSTALL_TARGET_CMDS
> +	$(foreach codec,$(NVIDIA_TEGRA23_CODECS_FIRMWARE),
> +		$(INSTALL) -D -m 0644 $(@D)/restricted_codecs/lib/firmware/$(codec) \
> +			$(TARGET_DIR)/lib/firmware/$(codec); \
> +	)
> +endef
> +
> +$(eval $(generic-package))
> diff --git a/package/nvidia-tegra23/nvidia-tegra23.mk b/package/nvidia-tegra23/nvidia-tegra23.mk
> new file mode 100644
> index 0000000..2f645d8
> --- /dev/null
> +++ b/package/nvidia-tegra23/nvidia-tegra23.mk
> @@ -0,0 +1,10 @@
> +################################################################################
> +#
> +# nvidia-tegra23
> +#
> +################################################################################
> +
> +NVIDIA_TEGRA23_SITE = https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T
> +NVIDIA_TEGRA23_VERSION = 16.4.0
> +
> +include $(sort $(wildcard package/nvidia-tegra23/*/*.mk))
> -- 
> 2.1.3
> 

> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot


-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list