Введение

OpenMAX (Open Media Acceleration), часто сокращаемый как "OMX", — это кросс-платформенный набор интерфейсов программирования на языке C, не являющийся проприетарным и не требующий выплаты роялти. Он предоставляет абстракции для процедур, особенно полезных при обработке аудио, видео и неподвижных изображений. Он предназначен для маломощных и встраиваемых систем (включая смартфоны, игровые консоли, цифровые медиаплееры и ТВ-приставки), которым необходимо эффективно обрабатывать большие объемы мультимедийных данных предсказуемым образом, например, видеокодеки, графические библиотеки и другие функции для работы с видео, изображениями, аудио, голосом и речью. OpenMAX предоставляет три уровня интерфейсов: прикладной (AL), интеграционный (IL) и уровень разработки (DL). Управляется OpenMAX некоммерческим технологическим консорциумом Khronos Group.

История

Первоначально анонсирован в июле 2004 года. Рабочая группа OpenMAX была первоначально основана компаниями ARM, Motorola, Samsung, STMicroelectronics и Texas Instruments. Версия 1.0 спецификации была опубликована в декабре 2005 года. Последний проект, созданный рабочей группой OpenMAX (1.2.0), датируется 2011 годом, и с 2012 года ни один продукт не был признан соответствующим стандарту. Спецификация OpenMAX так и не была обновлена для поддержки современных кодеков, таких как HEVC или VP9, что сделало Android фактическим источником обновлений стандарта OpenMAX IL.

Слои

OpenMAX AL — это интерфейс между мультимедийными приложениями, такими как медиаплеер, и платформенным медиафреймворком. Он позволяет компаниям, разрабатывающим приложения, легко переносить свои приложения на различные платформы (клиентов), поддерживающие интерфейс программирования приложений OpenMAX AL (API). OpenMAX IL — это интерфейс между медиафреймворком (например, StageFright или MediaCodec API на Android, DirectShow на Windows, FFmpeg или GStreamer на Linux) и набором мультимедийных компонентов (таких как аудио- или видеокодеки). Это позволяет компаниям, создающим платформы (например, обеспечивающим реализацию MP3-плеера), легко заменять компоненты, такие как MP3-декодеры и эффекты эквалайзера, и приобретать компоненты для своей платформы у разных поставщиков. OpenMAX DL — это интерфейс между физическим оборудованием, таким как чипы цифровых сигнальных процессоров (DSP), центральные процессоры (CPU), графические процессоры (GPU) и программным обеспечением, например, видеокодеками и 3D-движками. Он позволяет компаниям легко интегрировать новое оборудование, поддерживающее OpenMAX DL, без повторной оптимизации их программного обеспечения нижнего уровня.

Слой приложений

OpenMAX AL обеспечивает поддержку типичных сценариев использования мультимедийных приложений путем стандартизации набора репрезентативных объектов и интерфейсов для этих объектов, позволяющих управлять и настраивать их. API OpenMAX AL разделен на два профиля: Media Player и Media Player/Recorder. Платформа может соответствовать одному или обоим профилям, предоставляя все функции, включенные в соответствующий профиль. Это API для мультимедиа на языке C, работающий на уровне приложений и предназначенный для устройств с ограниченными ресурсами. При разработке API OpenMAX AL особое внимание уделяется его пригодности для мобильных встраиваемых устройств, включая простые мобильные телефоны, смартфоны с расширенными функциями, КПК и портативные цифровые музыкальные плееры. Однако это не исключает возможности его использования и в более сложных устройствах для воспроизведения и записи мультимедиа. Конструкция API OpenMAX AL ориентирована на удобство разработчиков приложений. Его статус открытого кроссплатформенного API позволяет разработчикам переносить один и тот же исходный код на различные устройства с минимальными усилиями, обеспечивая тем самым стабильную основу для разработки приложений.

Расширение цифрового телевидения

Спецификация расширения OpenMAX AL для цифрового телевидения (DTV) добавляет в мультимедийный API OpenMAX AL функциональность настройки, воспроизведения, записи и отображения электронного программного гида для мобильного телевидения, не зависящую от стандартов. Это модульный, бесплатный от роялти, кросс-платформенный API на языке C, предназначенный для высокопроизводительных приложений, связанных с цифровым телевидением, на мобильных и встраиваемых устройствах. Расширение DTV совместимо со всеми основными стандартами мобильного телевидения (например, DVB-H, ISDB-T, T-DMB и др.) и поддерживает методы широковещательной передачи, а также одноадресной и многоадресной доставки для цифрового телевидения.

Версии спецификаций

OpenMAX AL 1.0 Предварительная спецификация – предварительная версия от 2007-09-02, предназначенная для сбора отзывов от сообщества перед финальным выпуском версии 1.0. OpenMAX AL 1.0 Спецификация от 2009-06-23. OpenMAX AL 1.0.1 Спецификация от 2010-03-12. OpenMAX AL 1.1 Спецификация от 2011-01-18.

Реализация

Android 4.0 и более поздние версии предоставляют OpenMAX AL как часть своего NDK (Native Development Kit). LIM OpenMAX — это реализация OpenMAX AL и OpenMAX IL для Linux с открытым исходным кодом.

Интеграционный слой

API OpenMAX IL стремится обеспечить переносимость медиакомпонентов на широкий спектр платформ с использованием языка C. В OpenMAX IL компоненты представляют собой отдельные функциональные блоки. Компонентами могут быть источники, приемники, кодеки, фильтры, разветвители, микшеры или любые другие операторы данных. В зависимости от реализации, компонент может представлять собой аппаратное обеспечение, программный кодек, другой процессор или их комбинацию. Интерфейс абстрагирует аппаратную и программную архитектуру системы. API OpenMAX IL позволяет пользователю загружать, контролировать, соединять и выгружать отдельные компоненты. Эта гибкая базовая архитектура позволяет интеграционному слою легко реализовывать практически любые сценарии использования медиа и интегрироваться с существующими медиафреймворками, основанными на графах. Ключевой целью API OpenMAX IL является переносимость медиакомпонентов. Дизайн API OpenMAX IL уделяет особое внимание гибкости сценариев использования и оптимизированной передаче данных между компонентами. API OpenMAX IL был выбран в качестве основы для API интеграции аудио- и видеокодеков в Android, что привело к тому, что большинство производителей SoC поставляют минимальную реализацию, поддерживающую только подмножество, необходимое для Android. Приложения не используют эти компоненты OpenMAX IL напрямую, а только через API Android MediaCodec. Подмножество OpenMAX IL для Android с его расширениями стало де-факто стандартом. В 2011 году была выпущена предварительная версия 1.2.0.

Реализация

Tizonia — это реализация OpenMAX IL с открытым исходным кодом для Linux, поддерживающая версию 1.2.0. Bellagio — это реализация OpenMAX IL с открытым исходным кодом для Linux, разрабатываемая компанией STMicroelectronics. LIM OpenMAX — это реализация OpenMAX AL и OpenMAX IL с открытым исходным кодом для Linux. Mesa предоставляет драйверы с аппаратным ускорением, которые можно использовать с Bellagio или Tizonia. Android StageFright — это частичная реализация IL, фактически ставшая отраслевым стандартом.

Реализация

Оптимизированные реализации для NEON (для ядер Cortex A8) и SIMD (для ядер ARM11), а также эталонная реализация ANSI C ранее предоставлялись ARM зарегистрированным пользователям. Консоль PlayStation 3 поддерживает API OpenMAX.

Рабочая группа

Рабочая группа OpenMAX была основана одновременно с родственным проектом OpenVG 6 июля 2004 года. В 2008 году членами-сторонниками были 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 и Texas Instruments.