Получение мультимедийных драйверов с открытым исходным кодом в Arm Linux – одна из самых сложных задач, поэтому о драйверах GPU с открытым исходным кодом для ускорения 2D и 3D графики особо не говорится, но работа над аппаратным декодированием и кодированием видео также является проблемой.
Ранее мы видели, что Bootlin работает над драйвером с открытым исходным кодом Cedrus для Allwinner VPU (Video Processing Unit), а Collabora – над драйверами с открытым исходным кодом для VeriSilicon Hantro G1 и G2 VPU, которые можно найти в некоторых процессорах Rockchip, NXP и Microchip.
Ранее компании удавалось создать драйвер с открытым исходным кодом Hantro G1 для кодеков JPEG, MPEG-2, VP8 и H. 264, но H. 265/HEVC полагается на Hantro G2, и только что был представлен патч для аппаратного декодирования видео H. 265-на NXP i.MX 8M Quad для mainline Linux.
В своем сообщении Бенджамин Гиньяр дает больше пояснений:
IMX8MQ получил два VPU, но до сих пор был включен только G1. Эта серия предназначена для добавления второго VPU (также известного как G2) и обеспечения базовой поддержки декодирования HEVC.
Чтобы иметь возможность декодировать HEVC, необходимо добавить/обновить некоторые структуры в файле uapi. В дополнение к ним требуется один специальный элемент управления HANTRO, чтобы сообщить драйверу о количестве битов, которые необходимо пропустить в начале заголовка слайса. Аппаратным средствам требуется выделить несколько вспомогательных буферов для хранения данных фрейма ссылок, списка масштабирования или данных о размере плитки.
Драйвер был протестирован с помощью flutter test suite stream.
Например с помощью этой команды: ./fluster.py run -ts JCT-VC-HEVC_V1 -d GStreamer-H.265-V4L2SL-Gst1.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
./v4l2-compliance -m 1 v4l2-compliance 1.21.0-4705, 64 bits, 64-bit time_t v4l2-compliance SHA: 733f7a54f79d 2021-02-03 08:25:49 Compliance test for hantro-vpu device /dev/media1: Media Driver Info: Driver name : hantro-vpu Model : hantro-vpu Serial : Bus info : platform: hantro-vpu Media version : 5.11.0 Hardware revision: 0x00000000 (0) Driver version : 5.11.0 Required ioctls: test MEDIA_IOC_DEVICE_INFO: OK test invalid ioctls: OK Allow for multiple opens: test second /dev/media1 open: OK test MEDIA_IOC_DEVICE_INFO: OK test for unlimited opens: OK Media Controller ioctls: test MEDIA_IOC_G_TOPOLOGY: OK Entities: 3 Interfaces: 1 Pads: 4 Links: 4 test MEDIA_IOC_ENUM_ENTITIES/LINKS: OK test MEDIA_IOC_SETUP_LINK: OK |
Для справки: v4l2-совместимость является частью пакета v4l-utils, а в Debian / Ubuntu может быть установлена с помощью apt:
1 |
sudo apt install v4l-utils |
Параметр «m» используется для выбора узла /dev/media?, например /dev/media1.
Бенджамин далее объясняет, что Hantro G1/G2 являются ускорителями без сохранения состояния, что означает, что им не требуется прошивка для работы. Как отмечается в сообщении в блоге на Collabora, это делает их более подходящими для реализации с открытым исходным кодом. В частности, драйвер разделен на две части: драйвер ядра (драйвер Video4Linux2 Hantro) и компонент пользовательского пространства, такой как GStreamer и FFMPEG.
Драйвер Hantro с открытым исходным кодом все еще находится в промежуточном каталоге, зарезервированном для кода WiP, поэтому потребуется дальнейшая работа, чтобы сделать его стабильным API и использовать его программами пользовательского уровня по умолчанию. В дальнейшем Collabora также будет работать над декодированием VP9 и кодированием с аппаратным ускорением V4L2.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.