Adobe испытывает затруднения с аппаратным ускорением Flash в Linux

Сотрудник компании в своем блоге поделился проблемами реализации аппаратного ускорения видеодекодирования Flash-плагина в Linux. 

Mike Melanson, ведущий инженер Adobe по поддержке технологии Flash в операционных системах Unix/Linux, опубликовал в своем блоге серию сообщений о проблемах, с которыми компания столкнулась при реализации аппаратного ускорения декодирования и воспроизведения видео в Linux.

Adobe logo

Первой проблемой является разнообразие и различный уровень реализации API работы с аппаратными ускорителями видеодекодирования в Linux, представленное на специальной иллюстрации:

Декодирование видео в Linux

Разработчикам приходится иметь дело по меньшей мере с тремя проприетарными API, каждый из которых поддерживает лишь оборудование одного вендора (AMD для XvBA, NVIDIA для VDPAU и Broadcom для CrystalHD), причем, например, для XvBA спецификации в открытом доступе отсутствуют. Заявленные же как «универсальные» API вроде VA на самом деле являются лишь программными прослойками ко всё тем же VDPAU и XvBA. Мало того, определенное распространение получило использование оборудования напрямую из программ или через API универсальных вычислений, такие как CUDA и OpenCL.

Второй проблемой является отсутствие у имеющихся API ускорения декодирования и соответствующих драйверов оборудования функций по возврату полностью декодированных кадров приложению. В реализациях NVIDIA и AMD декодированный поток сразу уходит в устройство отображения, что может быть приемлемо для «чистых» проигрывателей мультимедиа, но неприемлемо для Flash, которому нужно объединять видео и прочие элементы веб-страницы в единое изображение. Проблема наглядно показана на иллюстрациях:

Воспроизведение видео проигрывателем
Воспроизведение видео в случае Flash

При этом в среде Windows возможность возврата декодированного видеопотока приложению реализована.

На иллюстрациях видна и третья проблема ускорения видео Flash в Linux — необходимость конверсии цветового пространства YUV в RGB. В частности, именно поэтому невозможно использовать расширение Х-интерфейса Xv для вывода и масштабирования видео. Два года назад Adobe предпринимала попытку задействовать OpenGL для данных операций, но столкнулась с низким качеством реализации OpenGL во многих открытых драйверах видеокарт и невозможностью одновременного использования OpenGL для видео и набиравших популярность эффектов Compiz.

В результате, если на платформе Windows бета-версия Adobe Flash 10.1 с поддержкой аппаратного ускорения декодирования и воспроизведения видео в формате H.264 доступна уже несколько месяцев, Linux версия Flash-плагина по-прежнему использует лишь программное воспроизведение. Но Mike Melanson сообщает, что так или иначе работа над реализацией аппаратного ускорения Flash в Linux продолжается, и что Adobe рассчитывает на встречные движения разработчиков драйверов по реализации необходимых функций.