henry_flower: A melancholy wolf (Default)
henry_flower ([personal profile] henry_flower) wrote2025-02-14 04:18 pm

Перевірка на хадварні відеокодувальники ув Кроумі

Бовзер Кроум має інтернáльну сторінку chrome://gpu/, яка малює, поміж інших речей, статуса хадварних відеокодувальників. Якщо драйвер gpu не опиняється ув блеклисті (це слово можна знову використовувати?), ближче до кінця там з'являється таблиця з рядками

Decode hevc main    64x64 to 8192x4352 pixels

З інтернáльною сторінкою пов'язано багато смішного. Наприклад, одного разу на безмежні узбережжя скелястих форумів гоогла викинуло монголку:

"Добрий дєнь! вопрос про страніцу chrome://gpu - у мєня поддєржка ЯндєксКарти запросіла пріслать содєржімоє єтой страніци. Єто что, вообщє? Єто бєзопасно? Я вставіла єє в адрєсную строку і получіла коллапс какой-то - цвєтниє полоси, клінья, сєґмєнти і прочую бєлібєрду, послє чєґо всє откритиє страніци інтєрнєта пошлі "плясать" - содєржімоє пєрєкорєжіло. Вірус, что лі?"

Раніше, якщо треба було дивитися на окремі відеофрейми, брався src відеокодеку на C та відчайдушно компілювався ув вебасемблі. Зараз це ліпше робити ні, т.я. бовзер розуміє вдосталь відеокодеків самотужки і має новітнього ойпіай (йому 5 років) для маніпулювання фреймами--WebCodecs.

Ув лайнаксі, Кроум використовує хадварні відеокодувальникі через завдяки за допомогою VAAPI. Якщо дістро має застарілі (або занадто нові) версії Mesa з їх DRI-драйверами, відеокодувальники ув Кроумі будуть софтварними, навіть якщо GPU підтримує їх хадварну акселерацію. З ідіотськими порадами "не викидайте старі комп'ютери, а інсталюйте на них лайнакса", наївний користувач отримує гул кулерів, який був відсутній ув віндюку, де Кроум дружив з драйверами GPU.

WebCodecs має метода статичного VideoDecoder.isConfigSupported(), яким можна перевірити чи використовує Кроум могутню акселерацію для конкретного кодека. З VideoEncoder це можна перевірити для конкретної роздільної здатності.

Наприклад, якщо пастнути текста нижче ув дівтулзову консоль, воно надрукує трохи більш зручну табличку, аніж простирадла з chrome://gpu/:

Promise.all([
    ['AV1',   'av01.0.08M.10'],
    ['H.264', 'avc1.640033'],
    ['H.265', 'hev1.1.6.L120.90'],
    ['VP8',   'vp8'],
    ['VP9',   'vp09.00.40.08']
].map( async v => ({
    name: v[0],
    codec: v[1],
    support: (await VideoDecoder.isConfigSupported({
        codec: v[1], hardwareAcceleration: "prefer-hardware",
    })).supported
}))).then(console.table)

(Звичайно шо isConfigSupported() є червона хфункція, т.я. потрібно нагадувати гіпадрілам постійно шо життя це є боротьба.)

На жаль, console.table() не вертає html, тому щоб написати уйоб-сторінку, яку зручно відкривати на SBC з ондроїдом або кетайських тівібоксах, треба малювати все самому.

Мінімальний приклад (працює лише ув Кроумі; Файрфокс видає галімат'ю):

$ wc -l *html
47 index.html

є отут (вибачте що не Реакт). Ув якості домашнього завдання, додайте вибір варіянтів baseline/main/high кодеків з <select>.