Драйвер Apple Video Decoder отправлен на ревью в ядро Linux
Sofus Forstreuter опубликовал 14 патчей для драйвера AVD, обеспечивающего аппаратное декодирование H.264, H.265, VP9 на M1/M2/M3, а на M3+ ещё и AV1. Драйвер использует V4L2 M2M stateless decoder API и программируется через один регистр с помощью Cortex-M3.
Последний код для поддержки Apple Silicon, продвигаемый проектом Asahi Linux в ядро Linux, — это драйвер AVD, используемый для ускоренного воспроизведения видео на SoC Apple M1 / M2 / M3.
Софус Форстрейтер опубликовал сегодня набор из 14 патчей для рассмотрения в списке рассылки ядра Linux, представив драйвер AVD для декодера видео Apple (Apple Video Decoder). Этот обратно спроектированный драйвер с открытым исходным кодом обеспечивает аппаратное декодирование видео на Mac с Apple M1, M2 и M3. Декодер видео Apple поддерживает H.264, H.265 и VP9. Для Apple M3 и новее также поддерживается AV1.
Ожидается, что драйвер AVD для Linux будет также расширен для работы на SoC M4, M5, M6 и Neo, и некоторая работа по разработке прошивки для поддержки нового оборудования уже ведется. Asahi Linux размещает необходимую прошивку AVD, разработанную ими, в этом репозитории.
Разработка этого драйвера AVD для Linux заняла несколько лет, включая работу по обратной разработке. Драйвер реализует API безгражданского декодера Video 4 Linux 2 (V4L2) M2M.
Что касается аппаратной конструкции декодера видео Apple, Софус отметил в сопроводительном письме к серии патчей:
«AVD несколько уникален как видео декодер и IP-блок на SoC Apple Silicon. Вместо обычного подхода "один регистр для каждого параметра", AVD программируется через один-единственный регистр. Это означает, что порядок записей важен, но также важно убедиться, что мы не пишем быстрее, чем оборудование может обработать. Для решения этой проблемы драйвер записывает "инструкции" в список "сегментов". Затем общая функция отправляет их оборудованию, каждый раз дожидаясь, когда оборудование отстанет.
Блок также включает сопроцессор Cortex-M3, принимающий неподписанный код. CM3 не является обязательным, но это единственный способ получать IRQ статуса декодирования. На данный момент CM3 обрабатывает только настраиваемую конфигурацию декодирования и перенаправляет все IRQ на AP [1]. В будущем это будет расширено для обработки отправки инструкций, что, вероятно, приведет к снижению энергопотребления; некоторые первоначальные тесты даже предполагают немного более быстрое время декодирования».
Патчи AVD теперь представлены для рассмотрения в списке рассылки ядра Linux для возможного включения в будущую версию ядра через подсистему media.