Сегодня 28 марта 2024
18+
MWC 2018 2018 Computex IFA 2018
реклама
Программное обеспечение

Возвращение к OpenML

⇣ Содержание
автор: А.Такиев



Четыре года прошло с тех пор, как была написана моя статья об OpenML (open media library), вернее о том, что должно было стать этим программным интерфейсом, так как на то время OpenML существовал лишь в виде расплывчатых концепций.

За это время многое поменялось… Один из участников альянса OpenML - компания 3DFX разорилась и была продана, но ее место заняла компания-покупатель nVidia. Другой участник - S3, после распродажи оставшегося имущества окончательно сгинул со сцены. Главный конкурент OpenML - компания Microsoft, выпустила сперва восьмую версию API DirectX, затем девятую, но так и не воплотила в жизнь концепцию Fahrenheit, которая на 2000 год была, как казалось, весьма мощной идеей. И хотя какие-то части Fahrenheit, конечно-же попали в интерфейсы прикладного программирования (API) DirectX, но, тем не менее концеция в полном объеме реализована не была, возможно будучи отложена на время, чтобы было что показать в DirectX 10.

Разработки Open сообщества так же не стояли на месте, хоть это и не сопровождалось таким шумом как успехи Microsoft. Со временем нужда в открытых программных интерфейсах, способных интегрировать 2D/3D графику, звук и управлять отображениями мультимедиа потоков не только не исчезла, а многократно усилилась, особенно нужда в мультиплатформенных, с поддержкой большого количества операционных систем стандартах. На фоне резко усилившегося интереса к Linux и его клонам, понятно, что сообществу программистов стал жизненно необходим набор мощных открытых API способных заменить DirectX от Microsoft на иных платформах и операционных системах. За минувшие годы была проделана большая работа - был существенно улучшен главный конкурент Direct3D - OpenGL, появилась разработка призванная конкурировать с DirectSound - OpenAL и, наконец, как недостающее звено между вышеперечисленными стандартами окончательно был сформирован OpenML - главный конкурент DirectShow.

За годы прошедшие с первой публикации об OpenML много воды утекло. Проект обзавелся законченной официальной спецификацией и даже SDK (software development kit - набор инструментариев для разработчика программного обеспечения), который пока носит статус beta, но к весне 2004 года выйдет окончательный релиз. Появился логотип, являющийся перекрашенной переделкой логотипа OpenGL, что не удивительно, так как у OpenML тесная интеграция с OpenGL, а так же общий владелец - Silicon Graphics Inc. Даже писать это название надо теперь не иначе, как OpenML® или OpenML™ - как-никак, зарегестрированный товарный знак, что, впрочем, не мешает ему быть открытым и свободным для некомерческого использования. Что же касается внутреннего содержимого, то, как это часто бывает, окончательный продукт не похож на первоначальный концепт, хотя основа, конечно, осталась. Но первоначальный костяк концепций основательно оброс мышцами практической реализации, что приводит к необходимости гораздо более глубокого описания этого интерфейса программирования, нежели первоначальный обзор, написанный много лет назад. Ну, а кому интересна история, всегда могут прочитать эту старую статью "OpenML. Первый взгляд". Итак, начнем с начала.

Разработчики

Главным разработчиком проекта с самого рождения проекта и по нынешний день по прежнему является группа Khronos. Как известно "хронос" - греческий корень обозначающий время, течение времени. Назвав свою группу именно так, разработчики хотели подчеркнуть, что их детище будет синхронизировать, то есть объединять во времени, различные медиаконтенты, аудио- и видеопотоки, и так же как время является универсальной величиной - всемирным эталоном, так и разработки Khronos станут когда-нибудь единым стандартом.


Тип организации Khronos обозначается абревиатурой SIG (Special Interest Group - группа с особой целью), то есть это группа с внешним финансированием, созданая специально для работ над одной темой - OpenML. Инвесторами группы (и, естественно, совладельцами OpenML) являются такие гиганты компьютерного мира, как 3Dlabs Inc., ATI Technologies Inc., Discreet Logic Inc., Evans and Sutherland Computer Corporation, Intel Corporation, NVIDIA Corporation, Silicon Graphics Inc., Motorola Inc., Nokia, Sun Microsystems Inc.

SIG Khronos версии 1.0 была создана в январе 2000 года. В руководящий состав группы на тот момент входили представители трех компаний: Roi Agneta из Evans & Sutherland Computer Corporation, Matthew Allard и William Clifford из Intel Corporation и Randi Rost из 3Dlabs Inc. Именно тогда и была создана львиная доля проекта OpenML, пройдя тернистый путь от невнятных концепций, до стройной официальной спецификации.

В 2001 году SIG Khronos была переформирована, в связи с изменениями в руководстве и сменой приоритетов исследований, получив номер 2.0. В руководстве вместо четырех руководителей остался один - Randi Rost из 3Dlabs Inc. Так же сменилась политика привлечения , если ранее участники SIG набирались из персонала компаний-инвесторов, то теперь стали привлекаться сторонние рабочие группы для работы над разными частями проектов. Что же касается направлений исследований, то так как официальная спецификация API OpenML была доведена до версии 1.0, то работы над дальнейшим его развитием существенно замедлились, сосредоточившись на создании и доведении до ума SDK и DDK (driver development kit - набор инструментариев для создания драйверов устройств) для OpenML. Кроме того, OpenML перестал быть единственным проектом SIG Khronos, помимо него появилась новая разработка группы Khronos - OpenGL ES (OpenGL for Embedded Systems - OpenGL для встраиваемых систем, то есть для разного рода PDA, сотовых телефонов, автомобильных и авиационных компьютеров). Графически эволюция SIG Khronos может быть представлена в следующем виде:


Появление второго направления не могло не сказаться на скорости разработки OpenML в худшую сторону. Для примера - спецификация OpenML 1.1 должна была появиться по заявлениям разработчиков SIG Khronos 1.0 еще в третьем квартале 2001 года. После переформирования группы до SIG Khronos 2.0 дата выпуска этой спецификации была передвинута на конец 2004 года. Тем не менее, SDK OpenML медленно, но верно достиг стадии беты, а совсем скоро будет выпущена окончательная версия.

Начиная с 2002 года, SIG Khronos предлагает четырехуровневую систему участия в проекте. Выглядит это так, начиная с самого нижнего уровня:

1.Независимые разработчики программного обеспечения - могут бесплатно использовать библиотеки OpenML, драйвера устройств поддержкой этого API, а так же SDK, но только для некоммерческого использования. В случае применения вышеперечисленных программных продуктов в коммерческих разработках, необходимо производить выплаты, о размерах которых разработчик должен договориться с SIG Khronos.

2.Привилегированные разработчики (adopters - "усыновители") - за единовременную оплату в размере 1000 долларов, разработчики получают, так называемый, adopters pack - право разработки коммерческих приложений без каких-либо выплат, возможность использования логотипа OpenML® в своих продуктах, а так же возможность предлагать на рассмотрение SIG Khronos изменения в спецификации OpenML.

3. Вкладчики (сontributors) - компании и организации, за сумму 3500 долларов в год имеющие право досрочно получать доступ ко всем изменениям в спецификации, а так же влиять на работу рабочих групп участвующих в проекте и вносить предложения по доработке OpenML в нужном им направлении.

4.Промоутеры (promoters) - главные инвесторы компании, за сумму равную 15000 долларов в год получающие право заседать в "Палате директоров", чтобы управлять деятельностью SIG Khronos, а так же обладающие правом окончательной ратификации спецификации.

По сравнению с 2000 годом число основных инвесторов проекта несколько изменилось. 3DFX и S3 выпали по известным причинам, Dell и Compaq отсоединились всвязи со своими проблемами, в результате которых они прекратили свое независимое существование, будучи поглощены другими компаниями. Из присоединившихся можно назвать корпорацию nVidia, как правопреемника поглощенной ею 3DFX, Sun Microsystems Inc., которая собирается использовать OpenML в своих разработках, производителя профессиональных ускорителей трехмерной графики и плат для обработки видео RealVision, а так же телефонных гигантов - Nokia и Motorola, которые заинтересованы в появлении мультимедиа на своих мобильных телефонах.

Все вышеуказанные участники проекта OpenML так же являются членами таких известных организаций как MPEG, ISO, OpenGL ARB, и AAF, что позволяет надеться на то, что OpenML, сумеет стать в общий ряд с такими признанными творцами стандартов.

Помимо основных инвесторов проекта, существуют так же десятки компаний, которые хоть и не участвуют непосредственно в финансировании проекта, но готовы включить поддержку OpenML в свои изделия или программные продукты - так называемые вкладчики. Среди таких компаний можно назвать Panasonic, Epson, SiS, Texas Instruments и многие других.

Распространением и продвижением OpenML на рынке программных продуктов, а так же вопросами лицензирования занимается разработчик - SIG Khronos. Лицензирование OpenML подчиняется положениям GPL (GNU Public License), то есть является бесплатным для некоммерческого использования. Все права на зарегистрированные торговые знаки OpenML и OpenGL принадлежат Silicon Graphics,Inc. и с ее разрешения используются SIG Khronos.

Возможности OpenML

OpenML - это прежде всего стандарт, который со временем, весьма вероятно, станет промышленным в области мультимедиа, таким же как и OpenGL в области 3D графики. Благодаря стандартизации исчезает нужда в, так называемых, Native API, не совместимых друг с другом, существенно облегчается программирование приложений и убираются проблемы совместимости аппаратного обеспечения. OpenML является низкоуровневым API в том же смысле, что и OpenGL, являясь симбионтом для этого 3D API, используя его стандартные интерфейсы для вывода видеоинформации и привнося в него то, чего он был лишен - возможности воспроизведения аудио/видео потоков и работы с внешними аудио/видео устройствами. API OpenML создавался на основе dmSDK 2.0 (digital media SDK) от SGI.

OpenML в ходе работы опирается на четыре основных компонента:

  • ввод/вывод аудио/видео потоков (собственно сам ML)
  • управление видеоподсистемой графических устройств (MLdc)
  • расширения OpenGL
  • синхронизация аудио/видео информации (UST/MSC)
Схематически концепцию API OpenML можно воспроизвести так:

Интерфейсы программирования OpenML обеспечивают возможность работы с видеоинформацией, 2D/3D графикой и звуком используя такие операционные системы, как Microsoft Windows, Linux, UNIX (на текущий момент поддерживается IRIX, а в перспективе все остальные *NIX, включая и MacOS начиная с версии X которая, как известно, базируется на UNIX ядре Darwin) и разнообразнейшие платформы на которых эти операционные системы в состоянии работать. API OpenML преставлят собой мощный инструмент, способный существенно облегчить работу программистам в таких областях как:

  • кодирование/декодирование мультимедиа потоков как средствами самого API, так и с помощью более высокоуровневых кодеков сторонних разработчиков, использующих программные интерфейсы OpenML (ближайший аналог - фильтры DirectShow из набора API DirectX)
  • поддержка асинхронной передачи данных между прикладной программой и мультимедийными устройствами такими как, видеовход, аудиовыход, и устройства отображения графической информации
  • обеспечение простой синхронизации, которая позволяет прикладным программам коррелировать между собой множественные цифровые аудио/видео потоки и координировать их представление конечному пользователю
  • обеспечение управлением устройствами и решение вопросов совместимости путем использования специальных драйверов устройств с поддержкой OpenML (так же, как сейчас во всех драйверах видеокарт есть поддержка OpenGL и DirectX, так и в будущем, надеюсь недалеком, ко всем мультимедийным устройствам, которые возможно подключить к компьютеру будут прилагаться драйвера с поддержкой OpenML) .
  • обеспечение гибкого механизма буферизации, который позволяет добиться плавного воспроизведения цифровой аудио/видео информации с максимально возможной производительностью для данной аппаратной платформы.
  • воспроизведение и запись цифровых аудио/видео потоков, в том числе и чересстрочных (interlace)
  • обработка цифровых аудио/видео потоков (transcoders) в реальном времени
  • поддержка воспроизведения видеопотоков напрямую из OpenGL с форматом пикселя типа CbYCr
  • новые функциональные возможности, позволяющие без особых затруднений сочетать видеоданные с двухмерной и трехмерной графикой.
  • поддержка расширенных функциональных возможностей текстурирования, позволяющие существенно упростить использование фрагментов видеоданных в качестве анимированных текстур. Помимо этого в набор API OpenML входит библиотека OpenMLdc, низкоуровневый API, который позволяет приложениям управлять видеоподсистемой графических устройств. MLdc основан на базе Xdc (расширение к системе X Windows, разработанной SGI для *NIX) и является платформонезависимым API, который может использоваться, для получения информации о мониторе, таблиц гамма-корекции, для обеспечения синхронизации изображения, для загрузки разных форматов видеоизображения, для настройки параметров видеовыхода, для изменения горизонтальной синхронизации изображений и многого другого.За счет чего это достижимо?

OpenML - как это работает?

Рассмотрим основные составляющие OpenML несколько подробнее.

1. Media Library (ML)

Компонент ML обеспечивает интерфейсы программирования для обработки процессов ввода/вывода, преобразования цифровых аудио/видео потоков, а так же синхронизацию носителей аудио/видео информации цифровыми методами в среде программирования OpenML. ML основан на следующих составных частях:

  • бинарное дерево возможностей аудио/видео устройств системы, их управляющих параметров, и адресного пространства.
  • службы сообщений обмена данными между мультимедиа устройствами и приложениями.
  • система организации очереди буферизации сообщений, полученных от устройств

В начале работы при инициализации OpenML создает дерево возможностей (The Capabilities Tree) - список всех устройств в системе, которые могут управляться этим API. Дерево возможностей содержит так же все данные об этих устройствах, включая адресное пространство аппаратных устройств и диапазон возможных значений параметров. Дерево возможностей в общем виде выглядит так:


Где физические устройства - это разнообразнейшее аппаратное обеспечение управляемое OpenML (аудио/видеокарты, цифровые видеокамеры, ТВ-тюнеры и т.д.), логические устройства - это интерфейсы программирования вышеуказанных аппаратных устройств, а так же специфичные для OpenML "разъемы", "пути", транскодеры и "каналы" (смотри словарь терминов и соглашений в конце статьи), параметры управления - список параметров данных и адресное пространство устройств.

Путь данных от одного устройства к другому в программной среде OpenML схематически можно изобразить следующим образом:


Термины "разъем", "путь", буфер, транскодер, каналы объясняются в словаре терминов и соглашений, приведенном в конце статьи.

Основная единица связи между приложением и устройством - сообщение (message). Сообщение - это массив параметров, которые имею идентичную структуру. Каждый параметр однозначно описывается следующими элементами:

1. Название параметра - уникальный тэг, идентифицирующий параметр, который так же должен указывают на тип и размерность параметра, например ML_IMAGE_WIDTH_INT32.

2. Значение параметра - может быть нескольких типов, включая 64-разрядные целые числа, 32-разрядные целых числа и указатели на основные типы.

3. Длина параметра - количество допустимых элементов в массиве значений.

4. Максимальная длина - максимальное количество элементов в массиве значений. Если значение максимальной длины равно 0, то после выполнения запроса на данный параметр в качестве значения возвращается размер массива.

Для создания и пересылки сообщений в OpenML имеется служба сообщений, а для устранения задержек при пересылке и для обеспечения равномерного обмена сообщениями между устройствами есть система организации очереди сообщений и механизмы буферизации сообщений, чтобы гарантировать непрерывный поток данных через логические устройства. Для соединения приложения с логическим устройством используются две очереди: отсылающая очередь используется для движения сообщений от приложения к устройству, и принимающая очередь используется для сообщений, идущих от устройства к приложению.

2. OpenMLdc

API управления видеоподсистемой графических устройств OpenMLdc обеспечивает программный интерфейс для легкой инициализации, установки и изменения параметров управления устройствами выходного видеосигнала, а так же инициализации и управления каналами устройств отображения видеоинформации (это может быть как компьютерный монитор, так и телеприемник HDTV (телевидение высокой четкости)).

Этот компонент позволяет осуществлять управление следующими компонентами:

  • экранами и каналами формирования изображения
  • получением информации о мониторе
  • позиционированием канала выходного видеосигнала
  • запросами и параметрами настройки формата видеосигнала
  • вертикальным обратным ходом луча
  • чересстрочной или прогрессивной разверткой
  • управление пилообразными сигналами коэффициента контрастности
  • синхронизацией видеосигнала

API MLdc состоит из следующих компонент:

  • механизма запроса наличия управляемых MLdc устройств вывода видеоинформации в системе и их инициализации.
  • механизма инициализации и контроля выходного видеосигнала.
  • службы сообщений статуса видеосигнала, в процессе его прохождения от видео устройства до приложения.
  • система организации очереди буферизации сообщений, полученных от устройства вывода видеосигнала.
  • механизм, для связи с мониторами, которые способны отправлять и принимать команды.
  • расширенный интерфейс программирования, позволяющий сторонним программистам писать собственные расширения к API MLdc.
  • протокол удаленного доступа, который позволяет приложениям обращаться к устройствам ввода/вывода аудио/видеоданных на удаленных машинах (аналогично Xdc - расширению X Windows), как показано на следующем рисунке:

3. Расширения OpenGL

Несмотря на то, что OpenGL не является частью OpenML, тем не менее, этот API необходим для полноценной работы OpenML, являясь для него ключевым компонентом. Для достижения лучших результатов в процессе обработки медиаконтентов, OpenML добавляет несколько расширений OpenGL, а так же использует уже имеющиеся в этом API расширения. Для работы OpenML требует OpenGL версии 1.2

Список расширений используемых при работе OpenML, можно разделить на три категории, вот некоторые из них для образца:

Расширения, которые облегчают интеграцию OpenGL с компонентами OpenML, для организации ввода/вывода аудио/видео потоков.

GL_OML_subsample,

GL_OML_resample

Эти расширения были созданы SIG Khronos. Они добавляют поддержку форматов пиксела изображения вида 4:2:2 и 4:2:2:4, которые используется для создания и обработки видеоинформации формата YCrCb и YCrCbA.

GL_OML_interlace

Это расширение используется для работы с чересстрочным форматом видеоданных. " Расширения, которые обеспечивают повышают качество рендеринга видеоизображения.

GL_ARB_texture_border_clamp

Это стандартное расширение OpenGL. Используется для фильтрации границ текстур, позволяя замаскировать границы при наложении видеоданных на 2D/3D сцену.

GL_SGIS_texture_color_mask

Данное расширение позволяет работать с отдельными цветовыми компонентами текстур. " Расширения, которые обеспечивают расширенное управление средствами OpenGL.

GL_ARB_imaging

Расширение OpenGL 1.2 обеспечивающее функционирование конвейерных функций.

Существуют так же расширения OpenML и для GLX в среде X Windows. Подробнее о расширениях OpenGL и GLX можно узнать из официальной спецификации OpenML по адресу.

4. Синхронизация

Для синхронизации аудио/видео потоков в OpenML есть ряд вспомогательных механизмов. Наиболее важным из них является счетчик UST (Unadjusted System Time - независимое системное время). UST - это высокоточный системный таймер использующий 64-битные переменные и позволяющий учитывать время до наносекунд. UST не зависит от системных часов и общей системной загруженности, позволяя линейно учитывать ход времени. UST начинает исполняться сразу же после инициализации OpenML и не требует предварительной настройки.

Так же немаловажным механизмом является MSC (Media Stream Counter - счетчик аудио/видео потоков), который увеличивает свое значение при пересылке пакетов информации: для видео единичным значением будет фрейм, для 3D графики - рейтрейсинг (отрисовка 3D сцены), для аудио - звуковой сэмпл. С помощью MSC удается

Используя пару UST/MSC , приложение может точно управлять и синхронизировать потоки носителей между различными устройствами в системе, сопрягать между собой медиаконтенты разного происхождения.

И, наконец, последний участник - SBC (Swap Buffer Count - счетчик переключений буфера) - увеличивает свое значение при переключении видеобуфера, что важно при синхронизации графической 3D/2D информации получаемой от OpenGL c медиаконтентами от различных источников управляемых OpenML.


API MLdc и OpenML содержат механизм, позволяющий нарастить их возможности за счет добавления расширений, аналогично расширениям OpenGL. Это сделано для того, чтобы интерфейсы программирования были гибкими и расширяемыми, обеспечивая своевременную поддержку новых устройств. Так как SDK OpenML и OpenMLdc поставляются вместе с исходными кодами, то каждый желающий может внести свои собственные расширения в эти API, но только, если будет следовать следующим соглашениям:

1.Расширения должны быть идентифицированы символьными строковыми названиями с нулевым символом в конце.

2. Название не должно не содержат пробелы.

3. Каждое название расширения должно начаться с префикса, обозначающего разработчика, который создал данное расширение, сопровождаемое символом подчеркивания.

4. Подобно названиям расширений OpenGL, если данное расширение поддерживают несколько разработчиков, то можно дать префикс "EXT".

5.Если расширение становится повсеместно поддерживаемым и утверждено SIG Khronos, тогда оно получает префикс "OML".

6.Точки входа в функции, которые являются частью расширения, должны использовать те же самые префиксные символы как суффикс. Например, если идентификатор расширения выгладит как "XYZ", то каждое название расширения должно иметь форму "XYZ_some_extensions_name", а имя функции должно иметь форму "mldcSomeFunctionNameXYZ."

7.С помощью расширений можно привносить новые функциональные возможности или новые видеоформаты, но для расширений, которые добавляют, дополнительные структуры или константы к базовому API, их создатель должен снабдить разработчиков файлами заголовков со структурами и названиями констант. Однако, если данное расширение будет принято сообществом программистов повсеместно и ратифицировано SIG Khronos, то новые структуры и константы будут включены в файлы заголовков, поставляющиеся в комплекте SDK API OpenML MLdc.

Как показал опыт OpenGL, подобный механизм расширений помогает не только своевременно учитывать и поддерживать все новшества появляющиеся в аппаратной части компьютеров, ведь производителю компьютерного оборудования намного быстрее написать собственное расширение стандарта, чем ждать, когда выйдет очередная официальная спецификация (как это было с nVIDIA), но и позволяет существенно ускорить разработку новых версий спецификации, обкатывая на расширениях новые функциональные возможности и форматы, которые могут войти в официальный стандарт.

Что сделано?

Первая аппаратура способная работать под управлением OpenML на платформе Windows была продемонстрирована SIG Khronos на выставке SIGGRAPH прошедшей в городе Сан-Диего 29-31 июля 2003. Привилегированный разработчик Jahshaka, продемонстрировал свою одноименную высокоуровневую систему обработки видеоинформации и создания спецэффектов в реальном времени базирующуюся на API OpenML.


Эта демонстрационная версия работала на видеокарте VREngine SD10 от RealVision, используя VPU P10 от 3Dlabs - одного из главных участников проекта OpenML. Было наглядно продемонстрировано, что OpenML позволяет существенно сократить затраты времени на разработку подобных систем, освобождая разработчиков от программирования множества нестандартных интерфейсов мультимедийных аппаратных средств на разных платформах.

В феврале 2004 года выпущен комплект разработчика OpenML SDK beta 2, окончательный релиз намечен на конец весны 2004 года, на данный момент поддерживаются следующие платформы, операционные системы и средства разработки:

  • IRIX 6.5 (MIPSpro 7.3 or 7.4) available from SGI
  • Red Hat Linux 8.0 (GNU gcc version 3.2.X)
  • Windows XP (MSVC 6.0, Metrowerks Code Warrior 8, GNU gcc 3.2.X)
В дальнейшем этот список будет существенно пополнен.

Задел на будущее

В ближайших планах SIG Khronos выпустить, после продолжительного бета-тестирования окончательный релиз SDK для OpenML под Windows, Linux и IRIX - это случится в конце весны 2004 года.

После создания спецификации OpenML 1.0, SIG Khronos приступила к дальнейшему развитию и совершенствованию этого API. Спецификация OpenML 1.1 должна выйти по заверению разработчиков осенью 2004 года, SDK будет выпущен позднее, сроки не называются. Из информации, представленной SIG Khronos на различного рода презентациях, видны основные направления работ в версии 1.1. Продолжится интеграция OpenML, OpenGL и OpenAL, добиваясь той же степени сплоченности всех этих API, которую мы наблюдаем в DirectX. Будет добавлен программный интерфейс управления ресурсами OpenGL. Появится поддержка интерфейсов di/dd. Будет улучшено управление памятью и рендерингом текстур, включая чересстрочные (interlaced) текстуры. Будут добавлены расширенные возможности цветопередачи - более 8 бит на каждый компонент пикселя. Будет улучшено общее качество рендеринга, а так же повышена общая эффективность, включая асинхронные операции. И, наконец, планируется поддержка большего количества платформ и операционных систем, в частности, все разновидности UNIX и MacOS X.

Помимо этого в рамках проекта OpenGL ES ведется разработка компактной версии OpenML для мобильных устройств названная без затей OpenML ES. Будущим мобильным сетям третьего поколения (3G) жизненно необходим единый стандарт в области обработки и пересылки мультимедиа - аудио/видео потоков, сжатие их и воспроизведение, общий низкоуровневый программный интерфейс, поддерживающий разнообразное мобильное железо, а от его обилия уже рябит в глазах. Работы над OpenML ES ведутся параллельно с "большим братом", и если учесть огромную популярность мобильных телефонов, PDA и смартофонов, то возможно этот крошечный API в будущем окажется популярнее версии для персональных компьютеров, став главным источником доходов SIG Khronos.

Словарь терминов и соглашений

графика / видео (graphics / video)

В OpenML, термины графика и видео не являются синонимами: -"графика" указывает графический дисплей, используемый пользовательским интерфейсом на компьютере; -"видео" указывает на тип пересылаемого или получаемого сигнала.

медиаконтент

Синоним выражения "поток аудио/видеоданных"

рендеринг

Термин, обычно используемый для обозначения процессов формирования и отображения 2D/3D сцен, но может быть использован и для обозначения аналогичных процессов при воспроизведении медиаконтента.

дерево возможностей (capability tree)

Дерево возможностей - иерархический список всех устройств управляемых OpenML в системе, с подробной информацией о каждом устройстве, его параметрах и адресном пространстве.

система (system)

Самый высокий уровень в иерархии дерева возможностей. Система - машина, на которой выполняется приложение. Этой машине при инициализации OpenML дается имя ML_SYSTEM_LOCALHOST. Каждая система содержит одно или более физических устройств.

физическое устройство (physical device)

Устройство, которое соответствует аппаратно-зависимым модулям в OpenML. Примеры устройств - аудио/видеокарты, цифровые видеокамеры, ТВ-тюнеры. Каждый аппаратно-зависимый модуль может содержать множество логических устройств.

"разъем" (jack)

Логическое устройство, которое является интерфейсом ввода/вывода системы. Примеры разъемов - композитный видеовход на видеокарте или микрофонный вход на аудиокарте. В связи с путаницей между логическими и физическими разъемами, которая может возникнуть при переводе, я этот термин буду заключать в кавычки. "Разъемы" часто, но не обязательно, соответствуют физическому устройству - возможна ситуация, что к одному "разъему" в OpenML могут соответствовать несколько физических устройств и наоборот - для физического разъема, могут быть созданы несколько логических "разъемов".

"путь" (path)

Логическое устройство, обеспечивающее логические связи между памятью и логическими "разъемами". Аналогично предыдущему термину, чтобы избегать путаницы, название этого логического устройства при переводе, так же будет писаться в кавычках. Пример для иллюстрации "путь" выходного видеосигнала транспортирует данные от буфера, размещенного в памяти, до "разъема" выходного видеосигнала.

транскодер

Транскодер - логическое устройство, которое берет данные от буферов через входной канал или каналы, обрабатывает данные, и возвращает данные на другой буфер через канал вывода. Пути пересылки данных от памяти до транскодера, и от транскодера до памяти, называют каналами (pipes). Пример транскодера - кодирование/декодирование видеоданных в формате MPEG-4, декомпрессия JPG или декодирование MP3.

буфер(buffer)

Это блок оперативной памяти, характеризующийся отдельной виртуальной адресацией и длиной. Буферы не отображаются в дереве возможностей OpenML, поскольку они создаются и управляются приложением. Буферы используются для уменьшения дискретизации при пересылке и обработке данных.

UST (Unadjusted System Time)

Независимый системный таймер. UST - специальные системные часы использующие 64 переменные и позволяющие отсчитывать время с точностью до наносекунд. UST начинает исполняться сразу же после инициализации OpenML и не требует предварительной настройки. Этот таймер используется, для синхронизации потоков аудио/видео данных.

MSC (Media Stream Count)

Счетчик потока данных. MSC - счетчик сэмплов аудио/видео данных, которые прошли через "разъемы". Используется для синхронизации потоков аудио/видео данных.

SBC (Swap Buffer Count)

Счетчик переключений буфера, который используется для формирования 2D/3D изображения в OpenGL. Используется для синхронизации графической 3D/2D информации получаемой от OpenGL c аудио/видео потоками от устройств управляемых OpenML, при совместном рендеринге медиаконтента и 2D/3D сцен.

P.S.

Конечно, очень многое в статью не вошло, описания команд, расширений, констант, примеры программ - если бы все это было включено, получилась не статья, а справочное пособие, а это не было моей целью. Эта статья - описание нового интерфейса программирования, и если он Вас заинтересовал, если захотелось использовать его в своих разработках, творить с его помощью что-то новое, значит, цель этой статьи достигнута и дальше Вы вполне самостоятельно можете найти дополнительную информацию в сети Интернет, например по ссылкам, приведенным ниже, ну а если нет, то никакое пособие не помогло бы мне в этом :).

Ссылки по данной теме:

Все новости о проекте OpenML, как и четыре года назад Вы можете узнать на этом сайте.

Скачать OpenML SDK для Windows или Linux вместе с документацией можно там же, пройдя регистрацию на этой странице.

Online справочник по OpenML, который содержит подробную информацию для разработчиков программного обеспечения с примерами программ можно найти на сайте SGI на этой странице.

 
 
⇣ Содержание
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Вечерний 3DNews
Каждый будний вечер мы рассылаем сводку новостей без белиберды и рекламы. Две минуты на чтение — и вы в курсе главных событий.

window-new
Soft
Hard
Тренды 🔥