Кодирование двух полных потоков HD в Linux + GPU с Intel HD4000 / VA API / FFMPEG / OpenGL
Я хочу кодировать / транслировать два полных потока HD в реальном времени с моего ноутбука в удаленное место, используя linux/xorg на хосте.
VA API
для этого я играл с VA API, но производительность довольно плохая - 5,59 кадров в секунду (см. вставку ниже).
FFMPEG
используя ffmpeg с кодированием процессора, я получаю около 200 кадров в секунду, но затем все ядра моего процессора Intel® Core iM- ia-3520M @ 2.90GHz заняты, и вентилятор включается.
планы на будущее
Мне нужна поддержка графического процессора в кодировке, а затем интегрировать ее в программу, которая транслирует виртуальный экран xorg, см. https://lastlog.de/wiki/index.php/Raspberry_PI_virtual_screen для более подробной информации о моих планах.
может быть, h264 даже не то, что я хочу? так что если кто-то посоветует другую реализацию, я бы приветствовал это.
кроме VA API, кажется, есть QuickSync, но я еще не экспериментировал с этим, поскольку он еще не упакован в NixOS.
примечание: мне нужна библиотека, чтобы иметь плавную интеграцию в код.
h264encode -w 1920 -h 1080 - профиль кадра MPSource составляет 1920x1080 и будет кодировать клип до 1920x1088 с кадрированием. INPUT: Попробуйте кодировать H264... INPUT: разрешение: 1920x1080, 60 кадров. INPUT: FrameRate: 30 INPUT: битрейт: 14929920 INPUT: Slieces: 1 INPUT: IntraPeriod: 30 INPUT: IDRPeriod: 60 INPUT: IpPeriod: 1 INPUT: начальный QP: 26 INPUT: минимальный QP: 0 INPUT: источник YUV: автоматически сгенерированный INPUT: кодированный клип: /tmp/test.264 INPUT: Rec Clip: Не сохранять восстановленный фрейм Информация о libva: VA-API версии 0.38.1 Информация о libva: va_getDriverName() возвращает 0 Информация о libva: Попытка открыть /run/opengl-driver/lib/dri/i965_drv_video.so Информация о libva: Найдена Функция инициализации __vaDriverInit_0_38 libva info: va_openDriver() возвращает 0 Использовать профиль VAProfileH264Main Режим контроля скорости поддержки (0x12):CBR CQP RateControl mode: CQP Поддержка VAConfigAttribEncPackedHeaders Поддержка упакованных заголовков Поддерживаемые заголовки упакованных картинок Поддержка упакованных заголовков изображений 1 1 RefPicList1 Loading данные на поверхность 15..... Полная загрузка поверхности \00000059(закодировано 054456 байт) ПРОИЗВОДИТЕЛЬНОСТЬ: частота кадров: 5,59 кадров в секунду (60 кадров, 10730 мс (178,83 мс на кадр)) ВЫПОЛНЕНИЕ: коэффициент сжатия: 51:1 UploadPicture: 10467 мс (174,45, 97,55% процентов) ВЫПОЛНЕНИЕ: vaBeginPicture: 0 мс (0, 00, 0, 00% процентов) ВЫПОЛНЕНИЕ: vaRenderHeader: 1 мс (0, 02, 0, 01% процентов) ВЫПОЛНЕНИЕ: vaEndPicture: 42 мс (0,70, 0,39%) PERFORMANCE: vaSyncSurface: 244 мс (4, 07, 2,27% процентов) PERFORMANCE: SavePicture: 7 мс (0,12, 0, 07% процентов) PERFORMANCE: Others: -31 мс (71582787,75, 40027653,91% процентов) (многопоточность включена, время указано только для справки).)
Я видел https://www.reddit.com/r/linux/comments/1qk1yu/is_there_currently_opensource_software_to_encode/ но я не уверен, что с этим делать.
1 ответ
Теперь вы можете использовать либо (или оба) FFmpeg и libav для достижения того же.
Я написал рецензию, которая позволит вам развернуть и использовать аппаратное кодирование на основе VAAPI как для ffmpeg, так и для libav, и в качестве плюса приведу ссылки на любые ограничения кодировщика, с которыми вы можете столкнуться в зависимости от вашего оборудования.
Для справки, вот пример сборки со всеми кодировщиками VAAPI, включенными на сегодняшний день, при необходимости измените их в соответствии с вашими требованиями:
Создание двоичного файла FFmpeg с поддержкой VAAPI с поддержкой декодирования VP8/9 и аппаратного ускорения кодирования на испытательном стенде Skylake:
Платформа сборки: Ubuntu 16.04LTS.
Перво-наперво:
Сначала создайте цепочку зависимостей.
- cmrt:
Это диспетчер ядра C для Media Runtime GPU для семейства Intel G45 & HD Graphics. это необходимое условие для сборки пакета https://github.com/01org/intel-hybrid-driver.
git clone https://github.com/01org/cmrt
cd cmrt
./autogen.sh
./configure
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
sudo ldconfig -vvvv
Этот пакет обеспечивает поддержку кодеков VPx проекта WebM. Ускорение GPU обеспечивается с помощью медиа-ядер, выполняемых на графических процессорах Intel GEN. Гибридный драйвер обеспечивает декодирование энтропии с привязкой к процессору (например, CPBAC) и управляет параметрами и буферами медиа-ядра GEN GPU.
Это необходимое условие для создания libva с желаемой конфигурацией, чтобы мы могли получить доступ к возможностям гибридного декодирования серии VPX на поддерживаемых аппаратных конфигурациях.
git clone https://github.com/01org/intel-hybrid-driver
cd intel-hybrid-driver
./autogen.sh
./configure
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
sudo ldconfig -vvv
Этот пакет содержит драйвер пользовательского режима VA-API (Video Acceleration API) для графических процессоров семейства Intel GEN. Текущая серверная часть видеодрайвера обеспечивает мост к графическим процессорам GEN через упаковку буферов и команд, которые должны быть отправлены в драйвер i915 для использования аппаратных и шейдерных функций для декодирования, кодирования и обработки видео. он также предоставляет оболочку для драйвера intel-hybrid-driver при вызове для обработки задач гибридного декодирования VP8/9 на поддерживаемом оборудовании (должен быть настроен с --enable-hybrid-codec
опция).
git clone https://github.com/01org/intel-vaapi-driver
cd intel-vaapi-driver
./autogen.sh
./configure --enable-hybrid-codec
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
sudo ldconfig -vvvv
Libva - это реализация для VA-API (Video Acceleration API)
VA-API - это библиотека с открытым исходным кодом и спецификация API, которая предоставляет доступ к возможностям аппаратного ускорения графики для обработки видео. Он состоит из основной библиотеки и бэкэнда ускорения для конкретного драйвера для каждого поддерживаемого поставщика оборудования.
git clone https://github.com/01org/libva
cd libva
./autogen.sh
./configure
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
sudo ldconfig -vvvv
Когда закончите, протестируйте набор поддерживаемых функций VAAPI, запустив vainfo:
vainfo
Вывод на моем текущем испытательном стенде:
libva info: VA-API version 0.40.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_40
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.40 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.8.3.pre1 (glk-alpha-58-g5a984ae)
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileVP9Profile0 : VAEntrypointVLD
Создание полезной сборки FFmpeg для проверки кодировщиков:
Теперь мы создадим двоичный файл FFmpeg, который может использовать преимущества VAAPI для тестирования возможностей кодирования и декодирования в Skylake, используя собственный префикс, поскольку мы загружаем FFmpeg через систему модулей среды на тестовом стенде.
Сначала подготовьте целевые каталоги:
sudo mkdir -p /apps/ffmpeg/dyn
sudo chown -Rc $USER:$USER /apps/ffmpeg/dyn
mkdir -p ~/ffmpeg_sources
Включите дополнительные компоненты по мере необходимости:
(а). Создайте и разверните nasm : Nasm - это ассемблер для оптимизаций x86, используемый x264 и FFmpeg. Настоятельно рекомендуется, или ваша итоговая сборка может быть очень медленной.
Обратите внимание, что теперь мы переключились с Yasm на nasm, так как это текущий ассемблер, который внедряют x265,x264, среди прочего.
cd ~/ffmpeg_sources
wget wget http://www.nasm.us/pub/nasm/releasebuilds/2.14rc0/nasm-2.14rc0.tar.gz
tar xzvf nasm-2.14rc0.tar.gz
cd nasm-2.14rc0
./configure --prefix="/apps/ffmpeg/dyn" --bindir="/apps/ffmpeg/dyn/bin"
make -j$(nproc) VERBOSE=1
make -j$(nproc) install
make -j$(nproc) distclean
(б). Сборка и развертывание libx264 статически: эта библиотека предоставляет видеокодер H.264. См. Руководство по кодированию H.264 для получения дополнительной информации и примеров использования. Это требует, чтобы ffmpeg был настроен с --enable-gpl --enable-libx264.
cd ~/ffmpeg_sources
wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
PATH="/apps/ffmpeg/dyn/bin:$PATH" ./configure --prefix="/apps/ffmpeg/dyn" --bindir="/apps/ffmpeg/dyn/bin" --enable-static --disable-opencl
PATH="/apps/ffmpeg/dyn/bin:$PATH" make -j$(nproc) VERBOSE=1
make -j$(nproc) install VERBOSE=1
make -j$(nproc) distclean
(с). Сборка и настройка libx265: эта библиотека предоставляет видеокодер H.265/HEVC. См. Руководство по кодированию H.265 для получения дополнительной информации и примеров использования.
sudo apt-get install cmake mercurial
cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
PATH="$/apps/ffmpeg/dyn/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/apps/ffmpeg/dyn" -DENABLE_SHARED:bool=off ../../source
make -j$(nproc) VERBOSE=1
make -j$(nproc) install VERBOSE=1
make -j$(nproc) clean VERBOSE=1
(г). Создайте и разверните библиотеку libfdk-aac: она предоставляет аудио кодер AAC. См. AAC Audio Encoding Guide для получения дополнительной информации и примеров использования. Это требует, чтобы ffmpeg был настроен с --enable-libfdk-aac (и --enable-nonfree, если вы также включили --enable-gpl).
cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="/apps/ffmpeg/dyn" --disable-shared
make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
(е). Сборка и настройка libvpx
cd ~/ffmpeg_sources
git clone https://github.com/webmproject/libvpx/
cd libvpx
./configure --prefix="/apps/ffmpeg/dyn" --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \
--enable-postproc --enable-vp9-postproc --enable-multi-res-encoding --enable-webm-io --enable-vp9-highbitdepth --enable-onthefly-bitpacking --enable-realtime-only \
--cpu=native --as=yasm
time make -j$(nproc)
time make -j$(nproc) install
time make clean -j$(nproc)
time make distclean
(е). Build LibVorbis
cd ~/ffmpeg_sources
wget -c -v http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.xz
tar -xvf libvorbis-1.3.5.tar.xz
cd libvorbis-1.3.5
./configure --enable-static --prefix="/apps/ffmpeg/dyn"
time make -j$(nproc)
time make -j$(nproc) install
time make clean -j$(nproc)
time make distclean
(г). Сборка FFmpeg:
cd ~/ffmpeg_sources
git clone https://github.com/FFmpeg/FFmpeg -b master
cd FFmpeg
PATH="/apps/ffmpeg/dyn/bin:$PATH" PKG_CONFIG_PATH="/apps/ffmpeg/dyn/lib/pkgconfig" ./configure \
--pkg-config-flags="--static" \
--prefix="/apps/ffmpeg/dyn" \
--extra-cflags="-I/apps/ffmpeg/dyn/include" \
--extra-ldflags="-L/apps/ffmpeg/dyn/lib" \
--bindir="/apps/ffmpeg/dyn/bin" \
--enable-debug=3 \
--enable-vaapi \
--enable-libvorbis \
--enable-libvpx \
--enable-gpl \
--cpu=native \
--enable-opengl \
--enable-libfdk-aac \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree
PATH="/apps/ffmpeg/dyn/bin:$PATH" make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
hash -r
Примечание: чтобы получить отладочные сборки, опустите distclean
шаг, и вы найдете ffmpeg_g
бинарный в подкаталоге источников.
Мы часто хотим отладочные сборки, когда возникает проблема, и для целей отладки может потребоваться трассировка GDB.
Файл модулей среды для FFmpeg (при необходимости измените, если ваши префиксы различаются, и, если необходимо, добавьте конфликты):
less /usr/share/modules/modulefiles/ffmpeg/vaapi
#%Module1.0#####################################################################
##
## ffmpeg media transcoder modulefile
## By Dennis Mungai <dmngaie@gmail.com>
## February, 2016
##
# for Tcl script use only
set appname ffmpeg
set version dyn
set prefix /apps/${appname}/${version}
set exec_prefix ${prefix}/bin
conflict ffmpeg/git
prepend-path PATH ${exec_prefix}
prepend-path LD_LIBRARY_PATH ${prefix}/lib
Чтобы загрузить и протестировать, запустите:
module load ffmpeg/vaapi
Подтвердите, что все в порядке с помощью:
which ffmpeg
Ожидаемый результат:
/apps/ffmpeg/dyn/bin/ffmpeg
Примеры фрагментов для тестирования новых кодировщиков:
Убедитесь, что кодеры VAAPI были успешно созданы:
ffmpeg -hide_banner -encoders | grep vaapi
V..... h264_vaapi H.264/AVC (VAAPI) (codec h264)
V..... hevc_vaapi H.265/HEVC (VAAPI) (codec hevc)
V..... mjpeg_vaapi MJPEG (VAAPI) (codec mjpeg)
V..... mpeg2_vaapi MPEG-2 (VAAPI) (codec mpeg2video)
V..... vp8_vaapi VP8 (VAAPI) (codec vp8)
См. Справочную документацию для каждого рассматриваемого кодера:
ffmpeg -hide_banner -h encoder='encoder name'
Проверить энкодеры;
Используя GNU параллельно, мы закодируем некоторые файлы mp4 (4k тестовых выборок H.264, 40 минут каждый, 6-канальный звук AAC) на пути ~/src в системе к VP8 и HEVC соответственно, используя приведенные ниже примеры. Обратите внимание, что я настроил кодировщики так, чтобы они соответствовали моим сценариям использования, и включено масштабирование до 1080p. Отрегулируйте по мере необходимости.
При управлении заданиями вы можете использовать gnu-rallel для запуска нескольких заданий с ускорением VAAPI, как показано в примерах ниже:
Для VP8 запуск 10 заданий кодирования одновременно:
parallel -j 10 --verbose '/apps/ffmpeg/dyn/bin/ffmpeg -loglevel debug -threads 4 -hwaccel vaapi -i "{}" -vaapi_device /dev/dri/renderD129 -c:v vp8_vaapi -loop_filter_level:v 63 -loop_filter_sharpness:v 15 -b:v 4500k -maxrate:v 7500k -vf 'format=nv12,hwupload,scale_vaapi=w=1920:h=1080' -c:a libvorbis -b:a 384k -ac 6 -f webm "{.}.webm"' ::: $(find . -type f -name '*.mp4')
Для HEVC с GNU Parallel:
В HEVC Main Profile, запустив 10 заданий кодирования одновременно:
parallel -j 4 --verbose '/apps/ffmpeg/dyn/bin/ffmpeg -loglevel debug -threads 4 -hwaccel vaapi -i "{}" -vaapi_device /dev/dri/renderD129 -c:v hevc_vaapi -qp:v 19 -b:v 2100k -maxrate:v 3500k -vf 'format=nv12,hwupload,scale_vaapi=w=1920:h=1080' -c:a libvorbis -b:a 384k -ac 6 -f matroska "{.}.mkv"' ::: $(find . -type f -name '*.mp4')
Некоторые заметки:
- QuickSync от Intel очень эффективен. Смотрите здесь данные об энергопотреблении и средних нагрузках системы при 10 одновременно работающих кодировках.
- Кодер Skylake HEVC работает очень медленно, и я подозреваю, что на моем оборудовании он может работать медленнее, чем программный кодер x265 и кодек HEVC Kvazaar. Однако его качество при хорошей настройке значительно превосходит другие аппаратные кодеры, такие как кодер Nvidia NVENC HEVC в SKU серии Maxwell GM200. Кодер NVENC на Pascal, однако, быстрее и превосходит кодировщик на реализации кодера Intel Skylake HEVC.
- В отличие от NVENC от Nvidia, нет ограничений на одновременное кодирование для потребительских SKU. Я смог запустить 10 сеансов кодирования одновременно с VAAPI, тогда как с NVENC я бы ограничился двумя максимальными одновременными кодировками на графических процессорах серии GeForce GTX на испытательных стендах. Хорошая работа, Intel.
На сегодняшний день аппаратно-ускоренное кодирование VP9 теперь доступно для FFmpeg. Однако вам понадобится интегрированный графический процессор на базе Intel Kabylake, чтобы воспользоваться этой функцией.
А теперь, с новым кодером vp9_vaapi, вот что мы получаем.
Доступны варианты кодировщика:
ffmpeg -h vp9_vaapi
Выход:
Encoder vp9_vaapi [VP9 (VAAPI)]:
General capabilities: delay
Threading capabilities: none
Supported pixel formats: vaapi_vld
vp9_vaapi AVOptions:
-loop_filter_level <int> E..V.... Loop filter level (from 0 to 63) (default 16)
-loop_filter_sharpness <int> E..V.... Loop filter sharpness (from 0 to 15) (default 4)
Что произойдет, если вы попытаетесь выполнить это на неподдерживаемом оборудовании, скажем, Skylake?
Смотрите пример выходных данных ниже:
[Parsed_format_0 @ 0x42cb500] compat: called with args=[nv12]
[Parsed_format_0 @ 0x42cb500] Setting 'pix_fmts' to value 'nv12'
[Parsed_scale_vaapi_2 @ 0x42cc300] Setting 'w' to value '1920'
[Parsed_scale_vaapi_2 @ 0x42cc300] Setting 'h' to value '1080'
[graph 0 input from stream 0:0 @ 0x42cce00] Setting 'video_size' to value '3840x2026'
[graph 0 input from stream 0:0 @ 0x42cce00] Setting 'pix_fmt' to value '0'
[graph 0 input from stream 0:0 @ 0x42cce00] Setting 'time_base' to value '1/1000'
[graph 0 input from stream 0:0 @ 0x42cce00] Setting 'pixel_aspect' to value '1/1'
[graph 0 input from stream 0:0 @ 0x42cce00] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 0x42cce00] Setting 'frame_rate' to value '24000/1001'
[graph 0 input from stream 0:0 @ 0x42cce00] w:3840 h:2026 pixfmt:yuv420p tb:1/1000 fr:24000/1001 sar:1/1 sws_param:flags=2
[format @ 0x42cba40] compat: called with args=[vaapi_vld]
[format @ 0x42cba40] Setting 'pix_fmts' to value 'vaapi_vld'
[auto_scaler_0 @ 0x42cd580] Setting 'flags' to value 'bicubic'
[auto_scaler_0 @ 0x42cd580] w:iw h:ih flags:'bicubic' interl:0
[Parsed_format_0 @ 0x42cb500] auto-inserting filter 'auto_scaler_0' between the filter 'graph 0 input from stream 0:0' and the filter 'Parsed_format_0'
[AVFilterGraph @ 0x42ca360] query_formats: 6 queried, 4 merged, 1 already done, 0 delayed
[auto_scaler_0 @ 0x42cd580] w:3840 h:2026 fmt:yuv420p sar:1/1 -> w:3840 h:2026 fmt:nv12 sar:1/1 flags:0x4
[hwupload @ 0x42cbcc0] Surface format is nv12.
[AVHWFramesContext @ 0x42ccbc0] Created surface 0x4000000.
[AVHWFramesContext @ 0x42ccbc0] Direct mapping possible.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000001.
[AVHWFramesContext @ 0x42c3e40] Direct mapping possible.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000002.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000003.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000004.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000005.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000006.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000007.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000008.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x4000009.
[AVHWFramesContext @ 0x42c3e40] Created surface 0x400000a.
[vp9_vaapi @ 0x409da40] Encoding entrypoint not found (19 / 6).
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
[AVIOContext @ 0x40fdac0] Statistics: 0 seeks, 0 writeouts
[aac @ 0x40fcb00] Qavg: -nan
[AVIOContext @ 0x409f820] Statistics: 32768 bytes read, 0 seeks
Conversion failed!
Интересными битами являются предупреждения точки входа для кодирования VP9, отсутствующего на этой конкретной платформе, что подтверждается выводом vainfo:
libva info: VA-API version 0.40.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_40
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.40 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.8.4.pre1 (glk-alpha-71-gc3110dc)
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileVP9Profile0 : VAEntrypointVLD
Точка входа VLD (для декодирования с переменной длиной) для профиля 0 VP9 является самой дальнейшей, к которой Skylake относится с точки зрения аппаратного ускорения VP9.
Они с тестовыми стендами Kabylake, запускают эти тесты кодирования и отчитываются:-)