OMAP L138: Тест производительности видео кодеков H264 и MPEG4.

 

 

 

    Попала мне в рука плата OMAPL138 LCDK на основе системы на кристалле OMAP-L138 от Texas

Instruments.

Было принято решение посмотреть, что из себя представляет данная система на задаче записи видео

на HDD под управлением ОС Linux.

 

    OMAP L138 содержит в своем составе процессор ARM926EJ-S + C674x floating point DSP.

По информации производителя(Texas Instruments) система позволяет осуществлять захват и сжатие

видео в реальном времени.

Производитель (TI) дает к данной системе SDK (OMAP-L138 DVSDK) на основе ОС Linux с набором

аудио и видео кодеков.

 

    Данная система обладает широким набором периферии из которой в первую очередь будет

интересовать:

1. VPIF - порт захвата видео к которому на плате подключен видео кодек.

2. SATA порт для подключения HDD.

На плате присутствует TVP5147PFP NTSC/PAL/SECAM 10-Bit Digital Video Decoder к которому можно

подключить обычную D1(720x576) PAL видеокамера. К SATA - обычный HDD.

 

SDK.

    В комплекте SDK помимо исходников ядра и файловой системы, есть набор тестовых программ

примеров позволяющих проверить работу систем ввода вывода и т.п.

SDK и примеры упрощают работу с периферией платы и позволяют создавать своё ПО на основе

примеров за короткое время.

 

Доработка SDK.

1. Установлено ПО необходимое для работы SDK(apt-get install ....).

2. Была отключена проверка версии системы под которой работает SDK.

По умолчанию SDK настроен на работу в Ubuntu 10.04. После отключения проверки SDK прекрасно

работает на Debian 9 x64.

3. Внесены изменения в ядро драйвер VPIF (захват входного видео сигнала). По умолчанию драйвер

не умеет собирать полный кадр из двух полукадров(входной сигнал PAL, развёртка через строчная,

кадр состоит из двух полукадров).

4. Внесены изменения в примеры, позволяющие захватить и сжать кадр кодеком H264 или MPEG4.

Исходники SDK находятся на GitHub.

 

Тестирование скорости кодирования видео.

Входной сигнал PAL(720x576), 25 Hz (40 мс).

Настройки кодека по умолчанию.

Запись видео в файл, сырой видео поток (без контейнера MKV или AVI и т.п.).

 

Лог работы кодека H264.

Starting application...

 Frame 0: Read UYVY frame size 829440 (720x576) from file
[1] Encode: 35701us

 Frame 1: Read UYVY frame size 829440 (720x576) from file
[2] Encode: 54292us

 Frame 2: Read UYVY frame size 829440 (720x576) from file
[3] Encode: 49723us

 Frame 3: Read UYVY frame size 829440 (720x576) from file
[4] Encode: 48880us

 Frame 4: Read UYVY frame size 829440 (720x576) from file
[5] Encode: 49491us

 Frame 5: Read UYVY frame size 829440 (720x576) from file
[6] Encode: 49101us

 Frame 6: Read UYVY frame size 829440 (720x576) from file
[7] Encode: 48279us

 Frame 7: Read UYVY frame size 829440 (720x576) from file
[8] Encode: 48237us

 Frame 8: Read UYVY frame size 829440 (720x576) from file
[9] Encode: 48140us

 Frame 9: Read UYVY frame size 829440 (720x576) from file
[10] Encode: 47993us

 Frame 10: Read UYVY frame size 829440 (720x576) from file
[11] Encode: 53664us

 Frame 11: Read UYVY frame size 829440 (720x576) from file
[12] Encode: 47966us

 Frame 12: Read UYVY frame size 829440 (720x576) from file
[13] Encode: 47894us

 Frame 13: Read UYVY frame size 829440 (720x576) from file
[14] Encode: 48313us

 Frame 14: Read UYVY frame size 829440 (720x576) from file
[15] Encode: 48341us

 Frame 15: Read UYVY frame size 829440 (720x576) from file
[16] Encode: 49346us

 Frame 16: Read UYVY frame size 829440 (720x576) from file
[17] Encode: 49162us

 Frame 17: Read UYVY frame size 829440 (720x576) from file
[18] Encode: 56711us

 Frame 18: Read UYVY frame size 829440 (720x576) from file
[19] Encode: 55518us

 Frame 19: Read UYVY frame size 829440 (720x576) from file
[20] Encode: 56235us

 Frame 20: Read UYVY frame size 829440 (720x576) from file
[21] Encode: 55686us

Время кодирования 1 кадра > 40 мс. Т.е. кодек не успевает сжимать....

 


Лог работы кодека MPEG4.

Starting application...

 Frame 0: Read UYVY frame size 829440 (720x576) from file
[1] Encode: 28449us

 Frame 1: Read UYVY frame size 829440 (720x576) from file
[2] Encode: 37915us

 Frame 2: Read UYVY frame size 829440 (720x576) from file
[3] Encode: 33136us

 Frame 3: Read UYVY frame size 829440 (720x576) from file
[4] Encode: 32917us

 Frame 4: Read UYVY frame size 829440 (720x576) from file
[5] Encode: 33229us

 Frame 5: Read UYVY frame size 829440 (720x576) from file
[6] Encode: 33172us

 Frame 6: Read UYVY frame size 829440 (720x576) from file
[7] Encode: 32878us

 Frame 7: Read UYVY frame size 829440 (720x576) from file
[8] Encode: 32837us

 Frame 8: Read UYVY frame size 829440 (720x576) from file
[9] Encode: 32791us

 Frame 9: Read UYVY frame size 829440 (720x576) from file
[10] Encode: 32765us

 Frame 10: Read UYVY frame size 829440 (720x576) from file
[11] Encode: 37999us

 Frame 11: Read UYVY frame size 829440 (720x576) from file
[12] Encode: 32642us

 Frame 12: Read UYVY frame size 829440 (720x576) from file
[13] Encode: 32664us

 Frame 13: Read UYVY frame size 829440 (720x576) from file
[14] Encode: 37779us

 Frame 14: Read UYVY frame size 829440 (720x576) from file
[15] Encode: 32823us

 Frame 15: Read UYVY frame size 829440 (720x576) from file
[16] Encode: 33165us
.................
 Frame 21: Read UYVY frame size 829440 (720x576) from file
[22] Encode: 34483us

 Frame 22: Read UYVY frame size 829440 (720x576) from file
[23] Encode: 39310us

 Frame 23: Read UYVY frame size 829440 (720x576) from file
[24] Encode: 33541us

 Frame 28: Read UYVY frame size 829440 (720x576) from file
[29] Encode: 39142us

 Frame 30: Read UYVY frame size 829440 (720x576) from file
[31] Encode: 27391us
.................
 Frame 60: Read UYVY frame size 829440 (720x576) from file
[61] Encode: 27631us
.................
 Frame 68: Read UYVY frame size 829440 (720x576) from file
[69] Encode: 40825us
.................
 Frame 80: Read UYVY frame size 829440 (720x576) from file
[81] Encode: 40125us

 Frame 83: Read UYVY frame size 829440 (720x576) from file
[84] Encode: 40781us

 

MPEG4 уже лучше но время кодирования 1 кадра иногда переваливает за 40 мс.

Т.е. кодек с трудом успевает сжимать....

 

 

    Есть подозрение, что в силу того что кадр состоит из YUV линейно расположенных в памяти,

DSP тратит дополнительное время на выбор Y и UV компонент. Т.к. приходится осуществлять

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

    В DM36x захват совмещен с сортировкой. Т.е. в результате кадр располагается в памяти в

следующем порядке. В начале кадра располагаются Y компоненты, затем располагаются UV

цветоразностные компоненты. Расположение Y, затем UV позволяет быстрее и эффективнее

получать доступ к памяти кадра.

С другой стороны TI и не говорил что OMAP-L138 это мультимедийный процессор.

Сжатие видео это, задача второго - третьего плана.

 

 

 Проблемы с SATA интерфейсом.

    Как выяснилось OMAP L138 может работать только с HDD с интерфейсом SATA-I или SATA-II.

HDD SATA-III OMAP L138 не видит, из-за аппаратной ошибки в модуле SATA.

Увы но найти HDD с SATA-I или II это проблема.

Компьютерная периферия так быстро меняется что за ней не угнаться.

Этаже проблема присутствует и в AM1808. Мда, это сильно ограничивает возможности применения.