# OpenMAX

OpenMAX (Open Media Acceleration), a menudo abreviado como "OMX", es un conjunto multiplataforma no patentado y sin derechos de autor de interfaces de programación en lenguaje C. Proporciona abstracciones para rutinas que son especialmente útiles para el procesamiento de audio, video e imágenes fijas. Está diseñado para dispositivos de sistemas integrados y de baja potencia (incluidos teléfonos inteligentes, videoconsolas, reproductores de medios digitales y decodificadores) que necesitan procesar de manera eficiente grandes cantidades de datos multimedia de manera predecible, como códecs de video, bibliotecas de gráficos y otras funciones de video, imagen, audio, voz y habla.
OpenMAX proporciona tres capas de interfaces: capa de aplicación (AL), capa de integración (IL) y capa de desarrollo (DL). OpenMAX es administrado por el consorcio de tecnología sin ánimo de lucro Khronos Group.

## Historia

Anunciado en julio de 2004, el grupo de trabajo OpenMAX fue fundado inicialmente por miembros de ARM, Motorola, Samsung, STMicroelectronics y Texas Instruments. La versión 1.0 de la especificación se publicó en diciembre de 2005. El último borrador producido por el grupo de trabajo OpenMAX (1.2.0) data de 2011 y ningún producto ha sido declarado conforme desde 2012. La especificación OpenMAX nunca se actualizó para admitir códecs recientes como HEVC o VP9, lo que convierte a Android en la fuente de facto de actualizaciones del estándar OpenMAX IL.

## Capas

OpenMAX AL es la interfaz entre las aplicaciones multimedia, como un reproductor multimedia, y el marco de trabajo de la plataforma multimedia. Permite a las empresas que desarrollan aplicaciones migrar fácilmente sus aplicaciones a diferentes plataformas (clientes) que soportan la interfaz de programación de aplicaciones (API) OpenMAX AL.
OpenMAX IL es la interfaz entre el marco de medios (como StageFright o MediaCodec API en Android, DirectShow en Windows, FFmpeg o GStreamer en Linux) y un conjunto de componentes multimedia (como códecs de audio o video). Permite a las empresas que construyen plataformas (por ejemplo, permitir la implementación de un reproductor de MP3) cambiar fácilmente componentes como decodificadores de MP3 y efectos de ecualizador y comprar componentes para su plataforma de diferentes proveedores.
OpenMAX DL es la interfaz entre el hardware físico, como chips de procesador de señal digital (DSP), CPU, GPU y software, como códecs de video y motores 3D. Permite a las empresas integrar fácilmente nuevo hardware compatible con OpenMAX DL sin volver a optimizar su software de bajo nivel.

## Capa de aplicación (Application layer)

OpenMAX AL se adapta a casos de uso comunes de aplicaciones multimedia al estandarizar un conjunto de objetos representativos, así como interfaces en esos objetos, para controlarlos y configurarlos. La API OpenMAX AL se divide en dos perfiles: Media Player y Media Player/Recorder. Una plataforma puede cumplir con uno o ambos perfiles al proporcionar todas las características incluidas en un perfil.
Es una API multimedia en lenguaje C a nivel de aplicación diseñada para dispositivos con recursos limitados. El diseño de la API OpenMAX AL pone especial énfasis en garantizar que la API sea adecuada para dispositivos móviles integrados, incluidos teléfonos móviles básicos, teléfonos inteligentes con "funciones", PDA y reproductores de música digital móviles. No obstante, esto no excluye su aplicabilidad a otros dispositivos sofisticados de reproducción y grabación de medios.
El diseño de la API de OpenMAX AL presta especial atención a la facilidad de uso para los desarrolladores de aplicaciones. Su estado como una API multiplataforma abierta permite a los desarrolladores portar la misma fuente en varios dispositivos con un esfuerzo mínimo. Por lo tanto, OpenMAX AL proporciona una base estable para el desarrollo de aplicaciones.

### Características

Las características de OpenMAX AL incluyen:
* Reproducción y grabación de video
* Reproducción y grabación de audio
* Captura de imagen (cámara) y visualización
* Controles de cámara
* Radio y RDS
* Reproducción MIDI básica
* Extracción e inserción de metadatos

#### Extensión de televisión digital

Una especificación de extensión de televisión digital (DTV) de OpenMAX AL agrega funciones de sintonización, reproducción, grabación y guía electrónica de programación de TV móvil independientes de los estándares a OpenMAX AL Multimedia API, como una API de lenguaje C multiplataforma modular libre de regalías para alta aplicaciones relacionadas con la televisión digital de alto rendimiento en dispositivos móviles e integrados. DTV Extension es compatible con todos los principales estándares de TV móvil (por ejemplo, DVB-H, ISDB-T, T-DMB, etc.), y admite métodos de entrega de transmisión, unidifusión y multidifusión para TV digital.

### Especificaciones de las versiones

* Especificación provisional de OpenMAX AL 1.0: una versión provisional, con fecha 2007-09-02, para facilitar los comentarios de la comunidad antes del lanzamiento final de 1.0.
* Especificación OpenMAX AL 1.0 - con fecha 2009-06-23
* Especificación OpenMAX AL 1.0.1 - con fecha 2010-03-12
* Especificación OpenMAX AL 1.1 - con fecha 2011-01-18

### Implementaciones

* Android 4.0 y versiones posteriores exponen OpenMAX AL como parte de su NDK (Kit de desarrollo nativo).
* LIM OpenMAX es una implementación de código abierto de OpenMAX AL y OpenMAX IL para Linux.

### Comparación con OpenSL ES

OpenSL ES (Open Sound Library for Embedded Systems) es otra API de Khronos Group que también proporciona una biblioteca de audio para el mismo mercado objetivo que OpenMAX AL, mientras que OpenMAX apunta a los servicios multimedia completos. El subconjunto de audio OpenSL ES y OpenMAX AL comparten la misma arquitectura común y tienen algunas características comunes:
* Reproducción y grabación de audio
* Reproducción MIDI básica
* Extracción de metadatos

## Capa de integración (Integration layer)

La API OpenMAX IL se esfuerza por brindar portabilidad a los componentes multimedia en una variedad de plataformas que utilizan el lenguaje C. En OpenMAX IL, los componentes representan bloques individuales de funcionalidad. Los componentes pueden ser fuentes, sumideros, códecs, filtros, divisores, mezcladores o cualquier otro operador de datos. Dependiendo de la implementación, un componente posiblemente podría representar una pieza de hardware, un códec de software, otro procesador o una combinación de los mismos.
La interfaz abstrae la arquitectura de hardware y software en el sistema. La API de OpenMAX IL permite al usuario cargar, controlar, conectar y descargar los componentes individuales. Esta arquitectura central flexible permite que la capa de integración implemente fácilmente casi cualquier caso de uso de medios y se combine con los marcos de trabajo de medios basados en gráficos existentes. El enfoque clave de OpenMAX IL API es la portabilidad de los componentes de medios.
El diseño de la API de OpenMAX IL presta especial atención a la flexibilidad de los casos de uso y las transferencias de datos optimizadas entre componentes.
La API de OpenMAX IL se eligió como base para que la API integre los códecs de audio y video en Android, lo que ha resultado en que la mayoría de los proveedores de SoC envíen una implementación mínima que solo admite el subconjunto requerido por Android. Las aplicaciones no usan esos componentes de OpenMAX IL directamente, sino solo a través de la API de Android MediaCodec. El subconjunto de Android de OpenMAX IL con sus extensiones es ahora el estándar de facto.
En 2011 se lanzó la versión provisional 1.2.0.

### Implementaciones

* Tizonia es una implementación OpenMAX IL de código abierto para Linux que admite la versión 1.2.0.
* Bellagio es una implementación OpenMAX IL de código abierto para Linux mantenida por STMicroelectronics.
* LIM OpenMAX es una implementación de código abierto de OpenMAX AL y OpenMAX IL para Linux.
* Mesa proporciona controladores acelerados por hardware que se pueden usar con Bellagio o Tizonia.
* Android StageFright, una implementación parcial de IL que es el estándar de facto.

## Capa de desarrollo (Development layer)

La API OpenMAX DL define un conjunto de núcleos multimedia de bajo nivel o bloques de construcción de procesamiento de medios. Los bloques de construcción pueden usarse para acelerar puntos de acceso computacionales tradicionales dentro de códecs de medios estandarizados y otros motores de procesamiento de medios integrados. El alcance funcional de la interfaz OpenMAX DL abarca varios dominios, incluido el procesamiento de señales y procesamiento de imágenes, codificación de audio, codificación de imágenes y codificación de video.
OpenMAX DL se divide en cinco dominios de aplicación:
* AC - Códecs de audio (componentes de decodificador MP3 y decodificador AAC)
* IC - Códecs de imagen (componentes JPEG)
* IP: procesamiento de imágenes (funciones genéricas de procesamiento de imágenes)
* SP - Procesamiento de señal (funciones genéricas de procesamiento de audio)
* VC - Códecs de video (componentes H.264 y MP4)

### Implementaciones

* Las implementaciones optimizadas para NEON (para núcleos Cortex A8) y SIMD (para núcleos ARM11), así como una implementación de referencia ANSI C, estaban disponibles previamente en ARM para usuarios registrados.
* La API de OpenMAX es compatible con la consola PlayStation 3.

## Grupo de trabajo

El grupo de trabajo OpenMAX se fundó junto con el proyecto hermano OpenVG el 6 de julio de 2004. Los miembros promotores en 2008 fueron AMD, Apple, ARM, Creative, Dell Inc, Ericsson, Freescale, Imagination Technologies Group plc, Intel, IBM, Motorola, Nokia, Nvidia Corporation, Samsung Electronics Co. Ltd, SK Telecom, Sony Computer Entertainment Inc y Instrumentos de Texas.