77230

Интеграция мультимедиа решений с аппаратным ускорением для MID устройства

Курсовая

Информатика, кибернетика и программирование

MID (mobile internet device) - это устройства, которые отвечают требованиям низкого энергопотребления, мобильности, а также предоставляющие обширные возможности для работы в сети. По сути MID - это компьютер по размеру не многим больше телефона...

Русский

2015-02-02

205 KB

1 чел.

Санкт-Петербургский Государственный Университет

Математико-механический факультет

Кафедра системного программирования


Интеграция мультимедиа решений с аппаратным ускорением для MID устройства

Курсовая работа студента 444 группы
Елизарова Егора Алексеевича

Научные руководители      Иванов Артем Сергеевич

(Генеральный директор компании Embedded Alley Solutions Rus,

выпускник кафедры информатики 2002г.)

Толстолыткин Григорий Сергевич

(Ведущий программист Embedded Alley Solutions Rus,

выпускник кафедры системного программирования 2002 г.)

Санкт-Петербург

2009


Оглавление

[1]
Оглавление

[2] Введение

[3] Постановка задачи

[4] Аппаратное ускорение

[5] Обзор существующих медиа фреймворков для ос Linux

[6]  Cравнение выбранных фреймворков

[7] Результаты

[8] Проблемы

[9] Заключение

[10] Список литературы


  1.  Введение

В настоящее время рынок мобильных устройств удивляет разного рода новинками. Телефоны из обычных аппаратов для разговоров превратились в полноценные медиа устройства. Довольно сложно представить себе средний мобильный телефон без камеры или mp3 проигрывателя. В то же время экран мобильного телефона не может позволить в полной мере насладиться просмотром любимых сайтов или получить удовольствие от понравившегося фильма. С другой стороны, под рукой не всегда оказываются компьютер или ноутбук, которые легко справляются с подобного рода задачами.  В этих условиях на рынке стали появляться такие устройства, как нeтбуки (netbooks) и МИДы (MID).

MID (mobile internet device) - это устройства, которые отвечают требованиям низкого энергопотребления, мобильности, а также предоставляющие обширные возможности для работы в сети. По сути MID - это компьютер по размеру не многим больше телефона, но по мощности сопоставимый с домашним компьютером двух-трех летней давности.

Что же получает пользователь, имея в руках подобного рода устройство? Это разного рода возможности сети: просмотр веб страниц, почта, разнообразные im-клиенты и интернет сервисы. К тому же доступны различные полезные приложения: календарь, калькулятор, программы для просмотра документов. Водителям и путешественникам пригодится наличие карт с навигацией. Создатели MIDов учли также и потребности людей, которые не прочь провести свой досуг, окунаясь в игровые реалии. WiFi и WiMAX: для тех, кто всегда любит оставаться на связи. MIDы  поддерживают такие технологии, как Bluetooth и 3G. На подобного рода устройствах имеются слоты для карт памяти, а также usb, благодаря которым к интернет девайсам можно подключать различную периферию. Естественно, присутствует возможность управления файлами. Преимуществом MIDов перед, скажем, КПК, является то, что они построены на архитектуре x86, что позволяет запускать на них те же приложения, что и на домашнем ПК. Стоит упомянуть и о GSM стеке: функция телефона по-прежнему является одной из основных для мобильных устройств в наше время.

Еще одной немаловажной функцией, на которой мы остановимся подробнее, является проигрывание видео и аудио.  Экраны подобных устройств обладают высоким разрешением (800*480, 1024*600). Отличительной чертой MIDов от, пожалуй, всех существующих на данный момент мобильных устройств является возможность просмотра видео высокого разрешения как на встроенном, так и на внешнем экране. Устройства обладают интерфейсами HDMI для подключения внешнего монитора или телевизора.  Проигрывание такого рода видео требует довольно больших мощностей, что вместе с требованиями низкого энергопотребления и мобильности, делает эту задачу довольно трудной. Для решения подобного рода задач была предложена идея делегирования части работы по декодированию видео с центрального процессора (cpu) на графический(GPU) и аппаратные кодеки.

  1.  Постановка задачи

Существует MID устройство (о котором и пойдет речь далее) Compal JAX10  на базе процессора Intel Atom и графического чипсета Intel SCH(System Controller Hub) US15W со встроенным акселератором Intel GMA 500. Данная комбинация известна также как платформа intel Menlow. На рынке можно встретить аналогичные устройства: Gigabyte M528 и Aigo P8860. На нашем устройстве установлена ОС Linux, а именно Moblin 2. В качестве медиа решения был выбран open source кросс платформенный продукт xbmc.

Как любое MID устройство JAX10 должен проигрывать видео разных форматов, в том числе  и HD видео. Отсюда возникает задача интеграции аппаратного ускорения в xbmc. Xbmc может использовать как встроенный «dvdpalyer», так и любой другой внешний плеер.  Практически любой плеер построен на основе какого-то медиа фреймворка, который предоставляет различные функции по обработке, декодированию и отображению мультимедиа файлов.

Таким образом, задача разбивается на несколько подзадач:

  1.  Изучение аппаратного ускорения
    1.  Изучение акселератора GMA500
    2.  Изучение способов аппаратного декодирования
    3.  Изучение API для работы с аппаратным ускорением на данной платформе
  2.  Выбор медиа фреймворка для дальнейшей интеграции
    1.  Изучение существующих фреймворков для ос Linux
    2.  Сравнение фреймворков
    3.  Изучение возможности использования аппаратного ускорения для конкретных фреймворков
    4.  Выбор одного из фреймворков для дальнейшей реализации
    5.  Выбор плеера использующего данный фреймворк
  3.  Интеграция аппаратного ускорения при помощи выбранного фреймворка в существующее медиа решение
    1.  Интеграция видео акселерации в данный фреймворк
    2.  Интеграция фреймворка в выбранный плеер
    3.  Портирование плеера на MID устройсво
    4.  Интеграция плеера в медиа решение
  4.  Интеграция с другими участниками команды разработчиков с целью получения работающего приложения
  5.  Аппаратное ускорение

Платформа Menlow предоставляет возможность использования аппаратного ускорения для 3D и 2D. Так же имеются кодеки для аппаратного декодирования видео в форматах h264, vc1, mpeg2, mpeg4(h263), wmv9. Драйвера для данных устройств предоставляются в виде бинарных файлов. В качестве интерфейса для работы с данными кодеками Intel предлагает Video Acceleration API (vaapi), находящийся в пакете libva.

Libva является надстройкой над библиотекой libXv (X video extension) и ее расширением libXvMC (motion compensation). Альтернативой libva в данный момент является libvdpau (Video Decode and Presentation API for Unix), активно внедряемая на рынок компанией Nvidia. На просторах сети можно найти vaapi бэкенд для vdpau, то есть любое приложение, поддерживающее vaapi акселерацию, поддерживает и ускорение на базе vdpau. К сожалению, в данный момент акселерация, основанная на vaapi, работает только с чипсетом Intel SCH US15W, который довольно редко встречается на рынке (помимо приведенных выше устройств мне известены netbook Dell mini 10, a также Sony p series, работающие на том же чипсете). Vdpau ускорение, напротив, поддерживается довольно большим количеством различных устройств.  Стоит заметить, что акселерация на базе vdpau уже реализована в выбранном медиа решении.

Как же работает аппаратное ускорение? Для начала попробуем разобраться, как работает обычный медиа плеер.  Медиа файл помимо заголовка содержит несколько потоков, среди которых есть как видео, так и аудио потоки. Каждый поток разбивается на пакеты, которые в свою очередь содержат фреймы. В фрейме и лежит закодированный кадр, возможно побитый на так называемые слайсы. Далее каждый фрейм раскодируется, и получается картинка.  В случае необходимости меняются размеры и цветовой формат полученного изображения. Финальным шагом является отображение полученной картинки. Аппаратное ускорение позволяет переложить ответственность за последние три пункта с CPU  аппаратные кодеки. То есть вместо того, чтобы декодировать фрейм программно, надо просто скопировать его в соответствующий буфер аппаратного кодека. Кодекам также сообщается необходимое разрешение выходного потока, что позволяет избежать необходимости последующего изменения размеров получаемой картинки. На выходе получается раскодированная информация в некоторой структуре. Теперь текущее  изображение может быть либо получено, либо выведено на экран.

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

Подводя итоги, кратко опишем шаги, которые необходимо сделать для корректной работы ускорения на базе vaapi.

  1.  На устройство должны быть установлены драйвера с поддержкой vaapi. На данный момент Intel предлагает два варианта: psb драйвера и iegd(Intel embedded graphic driver). В нашем случае были выбраны psb драйвера предоставленные Intel.
  2.  На устройство должны быть установлены пакеты для работы с vaapi. В нашем случае использовалась версия 0.29, а позднее 0.30. Так же необходимо правильно выставить переменные окружения, по которым libva ищет драйвер.
  3.  Далее в приложение, работающее с libva необходимо добавить следующие шаги
    1.  Инициализация vaapi
    2.  Конфигурирование канала между приложением и кодеками
    3.  Для каждого кадра: заполнение соответствующих буферов аппаратных кодеков
    4.  Для каждого кадра: получение раскодированной информации во внутреннем формате vaapi
    5.  Для каждого кадра: вывод полученной информации на экран, либо получение картинки в общепринятом формате (На данный момент поддерживается только NV12)
    6.  Освобождение структур vaapi
  4.  Обзор существующих медиа фреймворков для ос Linux

Здесь мы остановимся на двух наиболее популярных в наше время решениях для ОС Linux: Gstremer и Helix. А также рассмотрим библиотеку для обработки видео ffmpeg.

Gstreamer – стандартный фреймфорк ОС Linux. Используется в GNOME. Фреймворк основан на канальном взаимодействии. Плеер на основе gstreamer строится из блоков, каждый из которых имеет входной интерфейс sink и выходной source. В качестве примера приведем  схему иллюстрирующую проигрывание mp3 файла:

Ядро феймворка предоставляется в пакете gstreamer, а дополнительные модули и компоненты предоставляются в виде плагинов, основной набор которых находится в пакете gstreamer-plugins-base. Пакет gstreamer-plugins-good содержит модули для работы с хорошо сопровождаемыми декодерами, для которых не возникает проблем с лицензией.  И аналогично с пакетами gstreamer-plugins-bad и gstreamer-plugins-ugly. Отдельно отметим пакет gst-ffmpeg, который построен на основе библиотеки ffmpeg, на которой мы остановимся поподробнее позднее.

Gstreamer также содержит компоненту gst-launch, которая позволяет создавать канал и запускать его из терминала, что дает возможность оценить производительность, а также проверить правильность создания канала до создания пользовательского приложения.

Среди плееров, написанных на основе gstreamer-а, стоит упомянуть следующие:  Elisa (кросс-платформенное open-source медиа решение на основе OpenGL), Rythmbox (аналог Itunes под Linux), Totem (стандатный видео плеер в GNOME), Moblin-media (Видео плеер, написанный для moblin1).

Helix – кросс-платформенный open source фреймворк, написанный в рамках одноименного проекта. Helix часто используется в мобильных устройствах и представляет собой клиент-серверную систему. Опишем основные ее части:

  •  Helix DNA Client – мультиформатный кросс-платформеный медиа движок
  •  Helix DNA Server – движок для получения потокового видео и аудио
  •  Helix Producer – помогает при создании медиа файлов.
  •  Helix Player -  open source плеер построенный на базе Helix DNA Client

В качестве примера использования ниже приведена схема работы Moblin-media на основе фреймворка Helix:

Helix используется в большинстве современных мобильныx телефонов таких производителей, как Motorola, Sony Erricson, Sumsung. Internet tablets от Nokia также пользуются данной технологией. Самым известным плеером на данном движке является Real Player. Существует и его версия для мобильных устройств называемая rp4mid. 

FFmpeg – библиотека для работы с аудио и видео.  Состоит из нескольких частей:

  •  Libavcodec содержит декодеры  для различных видов аудио и видео кодеков
  •  Libavformat cодержит демуксеры для контейнеров различных мультимедиа форматов.
  •  Libavutils содержит простые математические функции, генераторы случайных чисел и т.д.
  •  Libswscale содержит механизмы для изменения размеров картинки и приведения цветовых  форматов
  •  Libavdevice содержит различные функции для работы с устройствами ввода - вывода
  •  Ffplay простой медиа плеер с выводом, основанным на базе библиотеки SDL
  •  Ffserver сервер для работы с потоковым аудио и видео
  •  Ffmpeg приложение для конвертации между форматами.

Ffmpeg предлагает функции, которые выполняют основные этапы обработки медиа файлов (описанной выше). Данная библиотека получила очень широкое применение в ОС Linux. На его базе написаны уже упомянутый медиа фреймворк gstreamer, dvdplayer, встроенный в выбранное медиа решение (xbmc), mplayer - пожалуй, самый известный плеер для ОС Linux и многие другие приложения.

  1.   Cравнение выбранных фреймворков

Для сравнения на JAX10 были портированы gstreamer, rp4mid, ffmpeg и mplayer(популярный плеер на базе ffmpeg). Для начала выделим основные критерии сравнения в порядке приоритета.

  1.  Поддержка основных форматов (mpeg1, mpeg2, mpeg4, h264, wmv9)
  2.  Возможность использования vaapi
  3.  Простота интеграции решения с акселерацией в xbmc
  4.  Производительность

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

Создатели real player предлагают использовать прекомпилированные плагины использующие vaapi, тем самым, в данном решении аппаратная акселерация присутствует и уже реализованна.  

FFmpeg, в свою очередь, до недавнего времени имел лишь акселерацию на базе vdpau, но в январе-феврале, в svn репозитории продукта появилась и поддержка для vaapi. К сожалению, фаза инициализации vaapi и его конфигурирования была оставлена для реализации в коде внешнего плеера, использующего ffmpeg, и не была реализована в ffplay. Для проверки работоспособности ускорения я решил добавить недостающие компоненты в утилиту ffplay.

Незадолго до момента появления официальной поддержки vaapi для ffmpeg в сети появились патчи на mplayer, добавляющие акселерацию в него.

Для gstreamer компания fluendo выпустила набор кодеков, поддерживающих аппаратную акселерацию, но, к сожалению он не был доступен для меня в рамках данной курсовой работы.

С точки зрения интеграции в xbmc есть два подхода:

  1.  Обновление ffmpeg внутри xbmc на более новый, а также добавление необходимых инициализаций и конфигураций во встроенный dvdplayer
  2.  Добавление плеера с интегрированной акселерацией (например rp4mid или mplayer) вместо встроенного в xbmc

Ввиду реализации xbmc, более правильным с точки зрения медиа системы решением является использование уже существующего dvdplayer-а.

Для оценки производительности запустим проигрывание одинаковых файлов на выбранных плеерах. Оценим три показателя: наличие артефактов, наличие задержек при проигрывании видео, и показатели загрузки cpu (для оценки показателей использовалась утилита top).

  •  Gstreamer(gst-launch) проигрывал видео c заметными задержками, т.е. с полной загрузкой cpu, артефакты появлялись, но не очень часто
  •  Mplayer при запуске без акселерации на одном из входных файлов показывал загрузку cpu 50-60%, артефакты практически отсутствовали; При запуске с акселерацией дал хорошие показатели по загрузке cpu (15-20% на том же входном файле), однако на некоторых входных файлах появилось довольно большое количество артефактов
  •  Rp4mid (с включенной акселерацией) показал очень неплохие результаты: при загрузке cpu сопоставимой с загрузкой в случае mplayera с акселерацией, количество артефактов на экране на тех же входных файлах было гораздо меньше.
  •  Ffmpeg (ffplay) при реализации ускорения в этом плеере возникли проблемы с выводом на экран (обсудим их позже). При запуске без ускорения, получен результат, аналогичный результату, полученному при запуске mplayer-а без ускорения

Для интеграции акселерации в xbmc решено было изменить встроенный dvdplayer. Основным критерием при выборе была относительная простота реализации данного решения.

  1.  Результаты

В рамках данной курсовой работы были выполнены следующие пункты:

  1.  Изучены способы аппаратной акселерации при работе с чипсетом GMA500
  2.  Изучено устройство основных медиа плееров для OC Linux
  3.  Изучены основные медиа фреймворки для ОС Linux, а также проведен их сравнительный анализ в рамках нашей задачи
  4.  Изучены методы изменения функций проигрывания видео в xbmc
  5.  Добавлена реализация vaapi в ffplay (на 90%)
  6.  Работа по интеграции акселерации в xbmc выполнена на 60%
  7.  Проблемы

Среди встретившихся проблем стоит упомянуть следующие:

  •  Малая распространенность технологии vaapi.
  •  Недостаточная документированность

В интернете практически нет материалов по vaapi, единственное место в котором описан процесс реализации ускорения – комментарии к коду libva. Только в феврале в интернете появились примеры реализации ускорения, выложенные автором патчей на mplayer и ffmpeg.

  •  Для vaapi естественным является вывод кадра на экран без передачи его в пользовательское приложение, однако большинство плееров требуют получения изображения для дальнейшего отображения.
  •  Что же касается ffplay, основная проблема заключается в том, что плеер предусматривает вывод картинки на экран через SDL: в качестве параметра в соответствующую функцию передается указатель на картинку в формате YUV420P, однако текущая версия libva может возвращать картинку лишь в формате NV12. Конвертация между форматами будет занимать процессорное время, а значит мы не получим ощутимого выигрыша от использования аппаратной акселерации.
  •  При внедрении в xbmc  помимо проблем с выводом изображения на экран, появляется проблема обновления встроенного ffmpeg. Данное медиа решение использует систему динамических библиотек: для каждой внешней библиотеки пишется DllWrapper согласно некоторому шаблону, и при добавлении внешних библиотек их исходный код некоторым образом изменяется.
  •  Недостаток времени для реализации всей задачи в целом
  1.  Заключение

Задача выполнена на 80%. С одной стороны изучены все необходимые подходы и технологии, а с другой интеграция до сих пор не завершена ввиду перечисленных выше проблем, а также недостатка времени.  Работы по завершению интегрирования до сих пор продолжаются. Надеюсь, что в ближайшем будущем работа будет завершена и изменения будут загружены в официальный репозиторий проекта xbmc.

В рамках данной курсовой работы я узнал много нового про обработку видео в целом и про аппаратное ускорение. В целом я доволен проделанной работой.

  1.  Список литературы
  2.  http://www.intel.com/
  3.  http://www.ffmpeg.org/
  4.  https://helixcommunity.org/
  5.  http://gstreamer.org/
  6.  http://www.splitted-desktop.com/
  7.  http://www.fluendo.com/
  8.  Intel® System Controller Hub (Intel®SCH) Datasheet


 

А также другие работы, которые могут Вас заинтересовать

237. Теоретический расчет работы электродвигателя 193.34 KB
  Определение мощности и частоты вращения двигателя, общий коэффициент полезного действия. Фактическая частота вращения на валу рабочей машины, расчет зубчатых колёс редуктора. Конструктивные размеры шестерни и колеса.
238. Система электронно-цифровой подписи 648.47 KB
  Изучения руководства пользователя программы, регистрация открытых ключей и проверка подписей. Вывод названия организации и составление отчетов по запросу банк - клиент. Проверка правильности работы программы и наличия цифровой подписи.
239. Расчет показателей судна и его энергетический установки 368.5 KB
  Обоснование эксплуатационных режимов работы главных двигателей СЭУ. Выбор схемы обеспечения судна электроэнергией и теплом. Выбор режима работы главных двигателей судна. Обоснование и выбор схемы энергетического теплоснабжения.
240. Принципы расчета оплаты труда персонала предприятия 479.5 KB
  Основные принципы организации оплаты труда, состав фонда оплаты труда. Теоретические основы системы организации и оплаты труда. Направления по усовершенствованию системы оплаты труда. Совершенствования системы оплаты труда для повышения ее стимулирующий функции.
241. Разработка и реализация алгоритмов обработки данных, получаемых с помощью сканирующих нанотвердомеров семейства НаноСкан 409.92 KB
  Пользовательский интерфейс программы NanoScan Viewer. Реализация метода индентирования в НаноСкан-3Д. Апробация разработанного алгоритма на примере серии измерений твердости образца твердого сплава на основе кубического нитрида бора.
242. Конструкция и рабочие процессы авиационных двигателей 358.5 KB
  Двигатель предназначен для установки на пассажирские и транспортные самолеты. Расчет на прочность рабочей лопатки первой ступени компрессора. Определение запасов прочности лопаток. Расчет на прочность диска первой ступени компрессора.
243. Создание Windows приложения с использованием Windows Forms 401 KB
  Разработка алгоритма и программы на языке С# вычисления площади, ограниченной двумя кривыми, заданными вариантом индивидуального задания для интервала, определяемого пользователем в диалоговом режиме.
244. Привод к операционному токарному станку 8.91 MB
  Разработка рационального и технологичного привода к операционному токарному станку. Чья конструкция имела бы наибольшую экономическую эффективность и максимально соответствовала заданным техническим параметрам.
245. Напрямки модифікації несиметричних ацилоїнів 1.05 MB
  Вивчення термічного ацилоїнового перегрупування продуктів взаємодії арилгліоксалів з сільваном. Проведення селективної взаємодії арилгліоксалів з активованими ароматичними системами. Встановлення структури утворених продуктів.