Пока собрал в P9 программу AppEncGL.
Потребовалось поставить дополнительно GLUT
Спойлер
$ ldd AppEncGL
linux-vdso.so.1 (0x00007ffe79513000)
libnvidia-encode.so.1 => /usr/lib64/libnvidia-encode.so.1 (0x00007f2fed463000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f2fed326000)
libGL.so.1 => /usr/lib64/libGL.so.1 (0x00007f2fed293000)
libglut.so.3 => /usr/lib64/libglut.so.3 (0x00007f2fed1db000)
libEGL.so.1 => /usr/lib64/libEGL.so.1 (0x00007f2fed1c6000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f2fecfc0000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2fecfa4000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2fecde6000)
libnvcuvid.so.1 => /usr/lib64/libnvcuvid.so.1 (0x00007f2fec8d2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2fec8cd000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f2fec8a5000)
libGLX.so.0 => /usr/lib64/libGLX.so.0 (0x00007f2fec872000)
libGLdispatch.so.0 => /usr/lib64/libGLdispatch.so.0 (0x00007f2fec7b4000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2fec793000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2fec5fd000)
libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x00007f2fec5f0000)
libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1 (0x00007f2fec3ea000)
libXi.so.6 => /usr/lib64/libXi.so.6 (0x00007f2fec3d7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2fed6a8000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f2fec3d0000)
libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f2fec3c8000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f2fec3b4000)
libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007f2fec1aa000)
Понятия не имею что делает программа. Вероятнее всего, кодирует видео ...
Выудил от нее ожидаемые параметры
Спойлер
-i Input file path
-o Output file path
-s Input resolution in this form: WxH
-if Input format: iyuv nv12
-c Context type: glx egl
-codec Codec: h264 hevc
-preset Preset: default hp hq bd ll ll_hp ll_hq lossless lossless_hp
-profile H264: baseline main high high444; HEVC: main main10 frext
-rc Rate control mode: constqp vbr cbr cbr_ll_hq cbr_hq vbr_hq
-fps Frame rate
-gop Length of GOP (Group of Pictures)
-bf Number of consecutive B-frames
-bitrate Average bit rate, can be in unit of 1, K, M
-maxbitrate Max bit rate, can be in unit of 1, K, M
-vbvbufsize VBV buffer size in bits, can be in unit of 1, K, M
-vbvinit VBV initial delay in bits, can be in unit of 1, K, M
-aq Enable spatial AQ and set its stength (range 1-15, 0-auto)
-temporalaq (No value) Enable temporal AQ
-lookahead Maximum depth of lookahead (range 0-32)
-cq Target constant quality level for VBR mode (range 1-51, 0-auto)
-qmin Min QP value
-qmax Max QP value
-initqp Initial QP value
-constqp QP value for constqp rate control mode
Note: QP value can be in the form of qp_of_P_B_I or qp_P,qp_B,qp_I (no space)
Судя по всему, предстоит как-то получить видео в "сыром" формате - iyuv или nv12. Пока без понятия что это. Подозреваю, что от этой заботы меня спасет какой-то пример транскодирования (такие программы в SDK есть). Но не сомневаюсь, что это добавит зависимостей программе. Их и так достаточно.
Образцы видео не нашел. Скормил "от Балды" что есть. И разница под пользователем из группы wheel и root есть.
Под root ошибок нет.
Спойлер
# AppEncGL -i "М11 стала трассой-призраком-ShdPc0CMhLQ.mp4" -o "М11 стала трассой-призраком-ShdPc0CMhLQ.x265.mp4" -s 854x480
[INFO ][05:04:18] Encoding Parameters:
codec : h264
preset : default
profile : (default)
chroma : yuv420
bitdepth : 8
rc : constqp (P,B,I=28,31,25)
fps : 30/1
gop : INF
bf : 0
size : 854x480
bitrate : 0
maxbitrate : 0
vbvbufsize : 0
vbvinit : 0
aq : disabled
temporalaq : disabled
lookahead : disabled
cq :
qmin : P,B,I=0,0,0
qmax : P,B,I=0,0,0
initqp : P,B,I=0,0,0
Total frames encoded: 36
Saved in file М11 стала трассой-призраком-ShdPc0CMhLQ.x265.mp4
А когда прав не хватает вылезает ошибка
$ AppEncGL -i "М11 стала трассой-призраком-ShdPc0CMhLQ.mp4" -o "М11 стала трассой-призраком-ShdPc0CMhLQ.x265.mp4" -s 854x480
NvEncoder : m_nvenc.nvEncOpenEncodeSessionEx(&encodeSessionExParams, &hEncoder) returned error 2 at ../../NvCodec/NvEncoder/NvEncoder.cpp:52
В исходниках в этой строке
NVENC_API_CALL(m_nvenc.nvEncOpenEncodeSessionEx(&encodeSessionExParams, &hEncoder));
Судя по описанию типа NVENCSTATUS значение 2 - это:
/**
* This indicates that devices pass by the client is not supported.
*/
NV_ENC_ERR_UNSUPPORTED_DEVICE,
И это какая-то ерунда, т.к. переход под root тут же делает устройство поддерживаемым.