[Cin] so, it looks like qsv integration a bit harder than just adding few lines ....
Terje J. Hanssen
terjejhanssen at gmail.com
Fri Sep 27 17:55:33 CEST 2024
Den 27.09.2024 12:44, skrev Andrew Randrianasulu:
>
>
> пт, 27 сент. 2024 г., 12:40 Terje J. Hanssen <terjejhanssen at gmail.com>:
>
>
>
> Den 26.09.2024 01:18, skrev Andrew Randrianasulu:
>>
>>
>> On Thu, Sep 26, 2024 at 2:06 AM Terje J. Hanssen
>> <terjejhanssen at gmail.com> wrote:
>>
>>
>>
>> Den 25.09.2024 23:22, skrev Andrew Randrianasulu:
>>>
>>>
>>> чт, 26 сент. 2024 г., 00:16 Terje J. Hanssen
>>> <terjejhanssen at gmail.com>:
>>>
>>>
>>>
>>> Den 25.09.2024 21:33, skrev Andrew Randrianasulu:
>>>>
>>>>
>>>> ср, 25 сент. 2024 г., 18:25 Terje J. Hanssen
>>>> <terjejhanssen at gmail.com>:
>>>>
>>>>
>>>>
>>>> Den 25.09.2024 00:27, skrev Andrew Randrianasulu:
>>>>> try this git patch, do not forgot to make install
>>>>> again, or put profiles in bin/ffmpeg/video folder
>>>>> manually.
>>>>
>>>> # cd /home/cinelerra/cinelerra-5.1
>>>> # mv /home/terje/0001-Qsv-encoders-for-testing.patch .
>>>>
>>>> # git am 0001-Qsv-encoders-for-testing.patch
>>>> Applying: Qsv encoders for testing
>>>>
>>>>
>>>> make install > make_install.log 2&1
>>>>
>>>>
>>>>
>>>> make install > make_install.log 2>&1 ?
>>>>
>>> Sorry. I should cleanup all ">" with Find & Replace in
>>> my note, and oversaw here should be two of them in this
>>> command ;(
>>>
>>> Now make install went through without faults as I could
>>> see, but attach it by email again.
>>>
>>> But unhappily, no success with testing Cingg Qsv Rendering.
>>> All attempts so far breaks with the output below:
>>>
>>> FFMPEG::open_encoder err: Internal bug, should not
>>> have happened
>>> int FFMPEG::open_encoder(const char*, const char*):
>>>
>>> ----------
>>> localhost:/home/cinelerra/cinelerra-5.1 # bin/cin
>>> Cinelerra Infinity - built: Sep 23 2024 10:31:07
>>> ----------
>>> 1)
>>> Loaded hdv09_04.m2t
>>> Render:
>>> Output to file: /Videoklipp/QSV/hdv09_04_h264_qsv.mp4
>>> File format: FFMPEG-mp4
>>> Compression: h264_qsv.mp4
>>> Pixels: qsv
>>>
>>> libva info: VA-API version 1.22.0
>>> libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
>>> libva info: Found init function __vaDriverInit_1_21
>>> libva info: va_openDriver() returns 0
>>> libva info: VA-API version 1.22.0
>>> libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
>>> libva info: Found init function __vaDriverInit_1_21
>>> libva info: va_openDriver() returns 0
>>>
>>> FFMPEG::open_encoder err: Internal bug, should not have
>>> happened
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed h264_qsv:/Videoklipp/QSV/hdv09_04_h264_qsv.mp4
>>> Render::render_single: Session finished.
>>> --------------
>>> 2a)
>>> Loaded hdv09_04.m2t
>>> Render:
>>> Output to file: /Videoklipp/QSV/hdv09_04_h265_qsv.mp4
>>> File format: FFMPEG-mp4
>>>
>>> Compression: h265_qsv.mp4
>>> Pixels: qsv
>>>
>>> [hevc_qsv encoder @ 0x7f44e0d0bd80] [Eval @
>>> 0x7f44e57eb6f0] Undefined constant or missing '(' in 'high'
>>> [hevc_qsv encoder @ 0x7f44e0d0bd80] Unable to parse
>>> option value "high"
>>> [hevc_qsv encoder @ 0x7f44e0d0bd80] Error setting option
>>> profile to value high.
>>> FFMPEG::open_encoder err: Invalid argument
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed hevc_qsv:/Videoklipp/QSV/hdv09_04_h265_qsv.mp4
>>> Render::render_single: Session finished.
>>>
>>
>> # profile=high
>> Pixels: qsv (yuv420 isn't available)
>>
>> Didn't render:
>> FFMPEG::open_encoder err: Internal bug, should not have happened
>> int FFMPEG::open_encoder(const char*, const char*):
>> open failed hevc_qsv:/Videoklipp/QSV/hdv09_04_h265_qsv.mp4
>> Render::render_single: Session finished.
>>
>>
>>
>>> ----------------
>>> 2b)
>>> Compression: h265_qsv.mp4
>>> Pixels: p010le
>>>
>>> [hevc_qsv encoder @ 0x7f93dcdb3c00] [Eval @
>>> 0x7f93cbff06f0] Undefined constant or missing '(' in 'high'
>>> [hevc_qsv encoder @ 0x7f93dcdb3c00] Unable to parse
>>> option value "high"
>>> [hevc_qsv encoder @ 0x7f93dcdb3c00] Error setting option
>>> profile to value high.
>>> FFMPEG::open_encoder err: Invalid argument
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed hevc_qsv:/Videoklipp/QSV/hdv09_04_h265_qsv.mp4
>>> Render::render_single: Session finished.
>>>
>>
>> Some progress:
>>
>> # profile=high
>> Pixels: yuvy422 (yuv420 isn't available)
>> Settings>Appearance: BT.709/MPEG2
>>
>> Rendered:
>> Render::render_single: Session finished.
>> ** rendered 5972 frames in 33.999 secs, 175.652 fps
>> audio0 pad 64 0 (64)
>>
>> VLC playback OK
>>
>> ffprobe -hide_banner hdv09_04_h265_qsv.mp4
>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hdv09_04_h265_qsv.mp4':
>> Metadata:
>> major_brand : isom
>> minor_version : 512
>> compatible_brands: isomiso2mp41
>> encoder : Lavf61.1.100
>> Duration: 00:03:58.88, start: 0.000000, bitrate: 3359 kb/s
>> Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 /
>> 0x31766568), yuv422p(tv, bt709/unknown/unknown, top coded
>> first (swapped)), 1440x1080 [SAR 4:3 DAR 16:9], 3223 kb/s, 25
>> fps, 25 tbr, 12800 tbn (default)
>> Metadata:
>> handler_name : VideoHandler
>> vendor_id : [0][0][0][0]
>> Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D),
>> 48000 Hz, stereo, fltp, 129 kb/s (default)
>> Metadata:
>> handler_name : SoundHandler
>> vendor_id : [0][0][0][0]
>>
>>
>>
>> ah, so it need tv range .. try also with Pixels nv12 (worked for
>> me on mediacodec)
>
> Not really.,
> Also the default at first startup, appearance BT.601-PAL/MJPEG,
> worked, and then ffprobe output
> Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 / 0x31766568),
> yuv422p(pc, bt470bg/unknown/unknown, top coded first (swapped)),
> 1440x1080 [SAR 4:3 DAR 16:9], 3248 kb/s, 25 fps, 25 tbr, 12800 tbn
> (default)
>
> I just changed it to BT.701/MPEG which is for HD video, and I also
> remembed you also suggested this in a previous thread.
>
> Both yuv422 and nv12 work.
>
> But why isn't also the usual yuv420p available for h264 and h265?
>
>
> not sure, may be qsv library does not support this?
>
> at least I can't see it in source
>
> https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/libavcodec/qsvenc_hevc.c#l399
>
>
>
> Possibly also rename h265 to hevc as ffmpeg use?
>
>
> ok, I'll rename it and add nv12 as default pix format.
>
> can you also see if h264 works with nv12?
No, h264 doesn't work with nv12, neither with # profile=high
I've extracted three ffmpeg QSV code lines below with qsv and yuv420p
used from
https://trac.ffmpeg.org/wiki/Hardware/QuickSync#FullExamples
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -vf
hwdownload,format=nv12 -pix_fmt yuv420p output.yuv
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -vf
hwdownload,format=nv12 -pix_fmt yuv420p -f sdl -
ffmpeg -init_hw_device qsv=hw -filter_hw_device hw -f rawvideo -pix_fmt
yuv420p -s:v 1920x1080 -i input.yuv -vf
hwupload=extra_hw_frames=64,format=qsv -c:v h264_qsv -b:v 5M output.mp4
On the other hand the following VAAPI section and code lines from
'The encoders only accept input as VAAPI surfaces. If the input is in
normal memory, it will need to be uploaded before giving the frames to
the encoder - in the ffmpeg utility, the |hwupload| filter can be used
for this. It will upload to a surface with the same layout as the
software frame, so it may be necessary to add a |format| filter
immediately before to get the input into the right format (hardware
generally wants the |nv12| layout, but most software functions use the
|yuv420p| layout). The |hwupload| filter also requires a device to
upload to, which needs to be defined before the filter graph is created.'
ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf
'format=nv12,hwupload' -c:v h264_vaapi output.mp4
and from my own ffmpeg test
ffmpeg -hide_banner -hwaccel_output_format qsv -i hdv09_04.m2t
hdv09_04_h264_qsv.mp4
[mpeg2video @ 0x5575e097b4c0] Invalid frame dimensions 0x0.
Last message repeated 3 times
[mpegts @ 0x5575e0975e00] PES packet size mismatch
[mpegts @ 0x5575e0975e00] Packet corrupt (stream = 1, dts = 258142320).
[mpegts @ 0x5575e0975e00] Could not find codec parameters for stream 2
(Unknown: none ([160][0][0][0] / 0x00A0)): unknown codec
Consider increasing the value for the 'analyzeduration' (0) and
'probesize' (5000000) options
[mpegts @ 0x5575e0975e00] Could not find codec parameters for stream 3
(Unknown: none ([161][0][0][0] / 0x00A1)): unknown codec
Consider increasing the value for the 'analyzeduration' (0) and
'probesize' (5000000) options
Input #0, mpegts, from 'hdv09_04.m2t':
Duration: 00:03:59.06, start: 2629.496000, bitrate: 26110 kb/s
Program 100
Stream #0:0[0x810]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002),
yuv420p(tv, bt709, top first), 1440x1080 [SAR 4:3 DAR 16:9], 25000 kb/s,
25 fps, 25 tbr, 90k tbn
Side data:
cpb: bitrate max/min/avg: 25000000/0/0 buffer size: 7340032
vbv_delay: N/A
Stream #0:1[0x814]: Audio: mp2 (mp3float) ([3][0][0][0] / 0x0003),
48000 Hz, stereo, fltp, 384 kb/s
Stream #0:2[0x815]: Unknown: none ([160][0][0][0] / 0x00A0)
Stream #0:3[0x811]: Unknown: none ([161][0][0][0] / 0x00A1)
File 'hdv09_04_h264_qsv.mp4' already exists. Overwrite? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (mp2 (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x5575e097d5c0] using SAR=4/3
[libx264 @ 0x5575e097d5c0] using cpu capabilities: MMX2 SSE2Fast SSSE3
SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x5575e097d5c0] profile High, level 4.0, 4:2:0, 8-bit
[libx264 @ 0x5575e097d5c0] 264 - core 164 - H.264/MPEG-4 AVC codec -
Copyleft 2003-2023 - http://www.videolan.org/x264.html - options:
cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1
psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1
cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=30
lookahead_threads=5 sliced_threads=0 nr=0 decimate=1 interlaced=0
bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250
keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf
mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40
aq=1:1.00
Output #0, mp4, to 'hdv09_04_h264_qsv.mp4':
Metadata:
encoder : Lavf61.1.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709, top
coded first (swapped)), 1440x1080 [SAR 4:3 DAR 16:9], q=2-31, 25 fps,
12800 tbn
Metadata:
encoder : Lavc61.3.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo,
fltp, 128 kb/s
Metadata:
encoder : Lavc61.3.100 aac
[mpegts @ 0x5575e0975e00] PES packet size mismatch0:03:51.80
bitrate=8956.8kbits/s dup=12 drop=0 speed=6.35x
[mpegts @ 0x5575e0975e00] Packet corrupt (stream = 1, dts = 258142320).
[mpeg2video @ 0x5575e09a6b80] ac-tex damaged at 10 61
[mpeg2video @ 0x5575e09a6b80] Warning MVs not available
[mpeg2video @ 0x5575e09a6b80] concealing 630 DC, 630 AC, 630 MV errors
in P frame
[vist#0:0/mpeg2video @ 0x5575e097de80] [dec:mpeg2video @ 0x5575e0a8c0c0]
corrupt decoded frame=0 speed=6.36x
[out#0/mp4 @ 0x5575e09ad380] video:255836KiB audio:3774KiB subtitle:0KiB
other streams:0KiB global headers:0KiB muxing overhead: 0.068494%
frame= 5977 fps=160 q=-1.0 Lsize= 259787KiB time=00:03:58.77
bitrate=8912.9kbits/s dup=14 drop=0 speed=6.37x
[libx264 @ 0x5575e097d5c0] frame I:54 Avg QP:22.80 size:193221
[libx264 @ 0x5575e097d5c0] frame P:1658 Avg QP:25.06 size: 92898
[libx264 @ 0x5575e097d5c0] frame B:4265 Avg QP:27.85 size: 22864
[libx264 @ 0x5575e097d5c0] consecutive B-frames: 3.6% 2.4% 4.0% 89.9%
[libx264 @ 0x5575e097d5c0] mb I I16..4: 4.9% 87.3% 7.7%
[libx264 @ 0x5575e097d5c0] mb P I16..4: 1.2% 13.2% 1.0% P16..4: 41.6%
21.2% 13.9% 0.0% 0.0% skip: 7.8%
[libx264 @ 0x5575e097d5c0] mb B I16..4: 0.2% 1.2% 0.1% B16..8:
45.7% 5.9% 1.8% direct: 7.2% skip:37.9% L0:43.2% L1:43.3% BI:13.5%
[libx264 @ 0x5575e097d5c0] 8x8 transform intra:85.8% inter:80.8%
[libx264 @ 0x5575e097d5c0] coded y,uvDC,uvAC intra: 79.9% 63.7% 20.4%
inter: 33.1% 18.6% 1.6%
[libx264 @ 0x5575e097d5c0] i16 v,h,dc,p: 16% 52% 15% 17%
[libx264 @ 0x5575e097d5c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 16% 36%
4% 5% 5% 5% 5% 7%
[libx264 @ 0x5575e097d5c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 57% 9%
3% 4% 4% 4% 3% 4%
[libx264 @ 0x5575e097d5c0] i8c dc,h,v,p: 57% 19% 20% 4%
[libx264 @ 0x5575e097d5c0] Weighted P-Frames: Y:15.3% UV:6.2%
[libx264 @ 0x5575e097d5c0] ref P L0: 47.1% 15.9% 26.2% 9.9% 0.8%
[libx264 @ 0x5575e097d5c0] ref B L0: 82.8% 14.6% 2.6%
[libx264 @ 0x5575e097d5c0] ref B L1: 93.4% 6.6%
[libx264 @ 0x5575e097d5c0] kb/s:8766.10
[aac @ 0x5575e09abd80] Qavg: 488.617
>
>
>
>
>>
>>
>>> ----------------
>>> 3a)
>>> Loaded hdv09_04.m2t
>>> Render:
>>> Output to file: /Videoklipp/QSV/hdv09_04_av1_qsv.mp4
>>> File format: FFMPEG-mp4
>>>
>>> Compression: av1_qsv.mp4
>>> Pixels: qsv
>>>
>>> FFMPEG::open_encoder err: Internal bug, should not have
>>> happened
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed av1_qsv:/Videoklipp/QSV/hdv09_04_av1_qsv.mp4
>>> Render::render_single: Session finished.
>>> --------------
>>> 3b)
>>> Compression: av1_qsv.mp4
>>> Pixels: p010le
>>>
>>> [av1_qsv @ 0x7f1c302e7080] Current picture structure is
>>> unsupported
>>> [av1_qsv @ 0x7f1c302e7080] some encoding parameters are
>>> not supported by the QSV runtime. Please double check
>>> the input parameters.
>>> FFMPEG::open_encoder err: Function not implemented
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed av1_qsv:/Videoklipp/QSV/hdv09_04_av1_qsv.mp4
>>> Render::render_single: Session finished.
>>> -----------------
>>> 4a)
>>> Loaded hd01.mov
>>> Render:
>>> Output to file: /Videoklipp/QSV/hdv09_04_h265_qsv.mp4
>>> File format: FFMPEG-mp4
>>>
>>> Compression: h265_qsv.mp4
>>> Pixels: qsv
>>>
>>> [hevc_qsv encoder @ 0x7f4b8d6f9ac0] [Eval @
>>> 0x7f4b62ff66f0] Undefined constant or missing '(' in 'high'
>>> [hevc_qsv encoder @ 0x7f4b8d6f9ac0] Unable to parse
>>> option value "high"
>>> [hevc_qsv encoder @ 0x7f4b8d6f9ac0] Error setting option
>>> profile to value high.
>>> FFMPEG::open_encoder err: Invalid argument
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed hevc_qsv:/Videoklipp/MOV/hd01_qsv.mp4
>>> Render::render_single: Session finished.
>>>
>>>
>>> I think you can try to comment out (with #) line with
>>> profile=high. in h265_qsv.mp4
>>
>> # profile=high
>> Pixels: qsv (yuv420 isn't available)
>>
>> Didn't render:
>> FFMPEG::open_encoder err: Internal bug, should not have happened
>> int FFMPEG::open_encoder(const char*, const char*):
>> open failed hevc_qsv:/Videoklipp/MOV/hd01_qsv.mp4
>> Render::render_single: Session finished.
>>
>>
>>>
>>> You also probably can stick to yuv420p (if available)
>>> because qsv implies image already in hw-specifuc format and
>>> ffmpeg does not do this conversion for us
>>>
>>>
>>> --------------------
>>> 4b)
>>> Compression: h265_qsv.mp4
>>> Pixels: yuyv422
>>>
>>> [hevc_qsv encoder @ 0x7f4ba4070f00] [Eval @
>>> 0x7f4b5bff86f0] Undefined constant or missing '(' in 'high'
>>> [hevc_qsv encoder @ 0x7f4ba4070f00] Unable to parse
>>> option value "high"
>>> [hevc_qsv encoder @ 0x7f4ba4070f00] Error setting option
>>> profile to value high.
>>> FFMPEG::open_encoder err: Invalid argument
>>> int FFMPEG::open_encoder(const char*, const char*):
>>> open failed hevc_qsv:/Videoklipp/MOV/hd01_qsv.mp4
>>> Render::render_single: Session finished.
>>>
>>
>> Some progress:
>>
>> # profile=high
>> Pixels: yuyv422 (yuv420 isn't available)
>> Settings>Appearance: BT.709/MPEG2
>>
>> Rendered:
>> FFStream::encode_frame: encode failed.
>> file: /Videoklipp/MOV/hd01_qsv.mp4
>> err: Resource temporarily unavailable
>> FFStream::flush failed
>> :file:/Videoklipp/MOV/hd01_qsv.mp4
>> err: Operation not permitted
>> Render::render_single: Session finished.
>> ** rendered 1781 frames in 14.617 secs, 121.844 fps
>> audio0 pad 128 0 (128)
>>
>> VLC playback OK
>>
>> ffprobe -hide_banner hd01_qsv.mp4
>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'hd01_qsv.mp4':
>> Metadata:
>> major_brand : isom
>> minor_version : 512
>> compatible_brands: isomiso2mp41
>> encoder : Lavf61.1.100
>> Duration: 00:01:11.28, start: 0.000000, bitrate: 2744 kb/s
>> Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 /
>> 0x31766568), yuv422p(tv, bt709/unknown/unknown, top coded
>> first (swapped)), 1920x1080 [SAR 1:1 DAR 16:9], 2377 kb/s, 25
>> fps, 25 tbr, 12800 tbn (default)
>> Metadata:
>> handler_name : VideoHandler
>> vendor_id : [0][0][0][0]
>> Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D),
>> 48000 Hz, 16 channels, fltp, 378 kb/s (default)
>> Metadata:
>> handler_name : SoundHandler
>> vendor_id : [0][0][0][0]
>>
>>
>>
>>
>>
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20240927/1f4c46b3/attachment-0001.htm>
More information about the Cin
mailing list