Программное обеспечение

Возвращение к 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 имеется служба сообщений, а для устранения задержек при пересылке и для обеспечения равномерного обмена сообщениями между устройствами есть система организации очереди сообщений и механизмы буферизации сообщений, чтобы гарантировать непрерывный поток данных через логические устройства. Для соединения приложения с логическим устройством используются две очереди: отсылающая очередь используется для движения сообщений от приложения к устройству, и принимающая очередь используется для сообщений, идущих от устройства к приложению.

Следующая страница →
 
⇣ Содержание
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Материалы по теме
⇣ Комментарии
window-new
Soft
Hard
Тренды 🔥