Устройство видеорегистрации изображения в JPEG2000
Заказчик
Компания - разработчик и производитель малогабаритных систем цифровой регистрации аудио и видеоинформации.
Задача
Заказчиком поставлена задача разработать устройство видео регистрации, предназначенное для оцифровки получаемого в формате PAL/NTSC видеосигнала, его сжатия, накопления и передачи аудио/видео данных, полученных от источника аналоговых аудио- и видеосигналов.
Общая структура устройства:

Необходимо предусмотреть долгосрочную автономную работу с управлением и снятием данных по низкоскоростному радио каналу.
Решение
Опытно-конструкторская работа (ОКР) проведена с целью изучения характеристик аппаратного кодека ADV202 по сжатию видео изображения, разработки программного обеспечения и прототипа устройства регистрации видео изображения в формате JPEG 2000 на базе отладочного набора ADV202 BF-Expander.
Концепция
В качестве алгоритма сжатия видеоинформации выбран Motion JPEG 2000, обладающий следующими преимуществами:
- высокая степень и качество компрессии, помехоустойчивость;
- вейвлетная технология позволяет с минимальными усилиями осуществлять изменение разрешения изображения;
- отсутствие межкадровой связи позволяет выделять из видеопотока отдельные кадры без какой-либо обработки.
Создан действующий прототип устройства на базе набора разработки Analog Devices BF533 EZ-Kit Lite (архитектура Blackfin) под управлением ОС Linux (uClinux-dist).
Прототип позволяет производить запись видео в формате Motion JPEG 2000 на USB Flash накопитель.
Разработан и реализован протокол управления видеорегистратором, имеющий следующие возможности:
- задание качества записываемого видеопотока (D1, QCIF, CIF);
- установка параметров записи (разрешение, яркость, контраст, цветность, видеостандарт, степень компрессии);
- управление файловым архивом (просмотр содержимого, загрузка и выгрузка файлов, удаление файлов, очистка архива);
- поиск и выборка фрагментов записи по заданным параметрам из видеоархива;
- вещание по низкоскоростному каналу, как в режиме realtime, так и из видео архива, с установкой желаемого разрешения, частоты кадров и длительности фрагмента;
- управление питанием (sleep и resume).
Прототип конструктивно состоит из 3-х компонент:
Программное обеспечение
В качестве основы управляющего ПО используется uClinux-dist - дистрибутив Linux, поставляемый в исходных кодах для последующей сборки, ориентированный на встраиваемые системы. uClinux-dist позволяет создавать различные профили сборки, быстро интегрировать новые компоненты и детально настроить сборку 3rd-party компонент.
При работе использовался Free/Open Source BSP, официально рекомендуемый компанией Analog Devices.
В процессе разработки пришлось внести следующие модификации:
- Урезание загрузчика U-Boot для минимизации времени загрузки;
- Портирование из основной ветки ядра Linux и адаптацию для архитектуры Blackfin стека usbnet для поддержки USB-Ethernet адаптера D-Link DUB-E100.
Для управления аппаратной компрессией JPEG 2000 разработан драйвер чипа ADV202, предоставляющий интерфейс v4l2 (Video for Linux Two), c помощью которого пользовательское приложение по запросу может производить захват (capture) сжатого JPEG 2000 потока, регулировать параметры яркости, насыщения и контраста через драйвер видео АЦП ADV7183B. Загрузка прошивки для ADV202 производилась через стандартный класс firmware loader, предоставляемый ядром Linux.
Разработан программный модуль, сохраняющий кадры, принятые от ADV202, в видеопоток. При этом в служебные поля кадра JPEG 2000 помещается специальная информация. Полученные данные сохраняются в виде файлов в AVI контейнере.
Формат сохраняемых файлов позволяет просматривать их стандартными средствами Windows XP (при наличии необходимых декодеров). Для отображения служебной информации при просмотре видеофайла был разработан специальный видеофильтр DirectShow.
Видео архив регистратора представляет собой USB Flash накопитель с файловой системой FAT32, содержащий набор AVI файлов. В случае заполнения накопителя, файл с наиболее ранним временем записи удаляется и на его место записывается новый.
Видео в формате Motion JPEG 2000 не имеет межкадровых зависимостей, что позволило эффективно реализовать функцию извлечения из архива кадров с произвольным шагом.

Управляющий слой реализован как однопоточное приложение-сервер по технологии FSM (finite state machine или конечный автомат).
Из технических решений особо следует отметить поддержку сети поверх USB в отладочных вариантах прошивок, эмуляцию дополнительного RS-232 порта через SPORT, что позволило существенно упростить отладку.
В пакете поддержки аппаратуры для BF533 отсутствуют программные средства по контролю работы с памятью. Тем не менее 64% кода удалось покрыть локальными тестами во многом благодаря тому, что драйвер vivi (Virtual Video Capture Board) частично эмулирует видео-устройство на i386.
Недостатки
- В ходе ОКР выявлен ряд проблем со стандартным пакетом поддержки аппаратуры BSP для BF533 (в частности, драйвер USB не до конца поддерживает wakeup/resume после suspend)
- Видеокодек ADV202 при работе сильно нагревается, что может сделать некомфортным использование конечного изделия при скрытном ношении человеком. Рекомендуется переход на видеокодек AD212, который, согласно документации, выделяет тепла на 30% меньше.
- Видеокодек ADV202 содержит большое количество задокументированных производителем ошибок реализации (в частности, наблюдаются артефакты изображения, имеются проблемы с записью non-interlaced изображений). Рекомендуется переход на Видеокодек AD212.
Преимущества
- Компактная прошивка - полная система занимает всего 1.5 Mb и вместе с загрузчиком U-Boot умещается на 2Mb.
- Поддержка передового формата JPEG 2000 с вейвлетной технологией, позволяющей менять разрешение изображения с незначительной нагрузкой на процессор, выдать "стоп-кадр" для любого из фрагментов видеозаписи. Характеризуется высокой степенью и качеством компрессии и помехоустойчивостью.
- Передовая архитектура управляющего ПО, максимально эффективно утилизирующая производительность платформы.
- Широкое использование стандартных FOSS (free and open software) компонент, таких как uClinux-dist, ffmpeg и ядро Linux, позволивших значительно сократить время разработки.
| Технологии |
Embedded Linux, Motion JPEG 2000, Blackfin, FSM (конечные автоматы), v4l2 |
| Языки программирования |
C, bash |
| Средства разработки |
GCC, GNU make, cunit, uClinux-dist, ffmpeg |
| Средства управления проектом |
DotProject, Mantis, SVN |
| Трудозатраты |
163 человеко-дня |
| Срок выполнения проекта |
4 месяца |
|