[Cin] so, it looks like qsv integration a bit harder than just adding few lines ....

Andrew Randrianasulu randrianasulu at gmail.com
Sat Sep 28 18:19:34 CEST 2024


сб, 28 сент. 2024 г., 19:13 Terje J. Hanssen <terjejhanssen at gmail.com>:

>
>
> Den 28.09.2024 17:42, skrev Andrew Randrianasulu:
>
>
>
> сб, 28 сент. 2024 г., 18:35 Terje J. Hanssen <terjejhanssen at gmail.com>:
>
>>
>>
>> Den 28.09.2024 01:22, skrev Andrew Randrianasulu:
>>
>>
>>
>> пт, 27 сент. 2024 г., 23:27 Terje J. Hanssen <terjejhanssen at gmail.com>:
>>
>>>
>>>
>>> Den 27.09.2024 19:45, skrev Andrew Randrianasulu:
>>>
>>>
>>>
>>> пт, 27 сент. 2024 г., 18:55 Terje J. Hanssen <terjejhanssen at gmail.com>:
>>>
>>>>
>>>>
>>>> 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
>>>>
>>>
>>>
>>> note that this line uses *software* x264 encoder, not qsv.
>>>
>>>
>>> Yeah, I was confused by the "-hwaccel_output_format qsv"
>>> See below for another attempt
>>>
>>>
>>> Does av1_qsv/vp9_qsv works? Can you also try with progressive (not
>>> interlaced) video?
>>>
>>> Sorry, none of av1_qsv nor vp9_qsv pixel formats work (interlaced hdv
>>> input)
>>> I was looking for a progressive video to download?
>>>
>>
>> you can try to add deinterlacing filter in cingg? Do not forgot to set
>> format- > interlacing to progressive.
>>
>>
>>> But I tested "h284_qsv/nv12/profile high" rendering wiht SD-DV file
>>> (interlaced) and it worked
>>>
>>> FFStream::encode_frame: encode failed.
>>> file: /Videoklipp/QSV/dv01_07_h264_qsv.mp4
>>>   err: Resource temporarily unavailable
>>> FFStream::flush failed
>>> :file:/Videoklipp/QSV/dv01_07_h264_qsv.mp4
>>>   err: Operation not permitted
>>> Render::render_single: Session finished.
>>> ** rendered 2832 frames in 5.592 secs, 506.438 fps
>>> audio0 pad 32 0 (32)
>>>
>>> ---------------------
>>>
>>
>>
>> so, h264/5 qsv in cingg works, but vp9/av1 not?
>>
>> I'll add two more silly patches as attachment, they hopefully correct
>> hevc/h264 profiles and add remark about how they only usable with ext.
>> ffmpeg (for now).
>>
>> Sorry about such extended debugging. Thanks for patience (over the years!)
>>
>>
>> I did a summary testing today with results before patching:
>>
>> 1)
>> dv_movie.mpg (progressive)
>> dv01_07.dv (interlaced)
>>
>> av1_qsv/vp9_qsv rendering works with nv12 and p010le
>> h264_qsv rendering works with nv12
>>
>> 2)
>> hdv09_04.m2t (interlaced)
>>
>> av1_qsv/vp9_qsv nv12/p010le error ...
>> h264_qsv nv12 error ...
>> hevc_qsv nv12/p010le does render #high profile
>>
>> hdv_movie_0.mpg (progressive)
>> av1_qsv/vp9_qsv nv12/p010le error ...
>> h264_qsv nv12 error ...
>> hevc_qsv nv12/p010le does render #high profile
>>
>> 3)
>> hd01.mov (interlaced)
>>
>> av1_qsv/vp9_qsv nv12/p010le error ...
>> h264_qsv nv12 error ...
>> hevc_qsv nv12/p010le does render #high profile
>>
>> ---------------------------
>>
>> After adding the latest two patches and make install,  1) above doesn't
>> work anymore.
>> Tried also to comment out each of the two new options.
>> Any idea why?
>>
>
> no idea o.O
>
>
> To verify if my patch procedure was right (?) here is my procedure and
> output:
>
> # git am 0001-Add-nv12-as-def.-pixformat-for-qsv-profiles-clarify-.patch
> Applying: Add nv12 as def. pixformat for qsv profiles, clarify when it work
> .git/rebase-apply/patch:18: new blank line at EOF.
> +
> warning: 1 line adds whitespace errors.
> localhost:/home/cinelerra/cinelerra-5.1
>
> # git am 0002-Modify-remaining-_qsv-orofiles-to-use-nv12-fix-typo-.patch
> Applying: Modify remaining _qsv orofiles to use nv12, fix typo in hevc_qsv
>
> # make install > make_install.log 2>&1
>
> Attach make_install.log by email
>
>
> does "git reset --hard git-hash-before-you-added-patches" && make install
> restore 1) ?
>
>
> Could you explain or detqail this a bit more?
>

use git log, it will show long commit hash (bunch of numbers and letters).
Note commit hash for commit just adding qsv profiles, two commits below
from top.

try select it fully or first 8 (?) characters into clipboard

execute "git reset --hard "insert from clipboard"

verify with git log that two new commits are gone.

make install again






>
> normal ffmpeg renders all three input files with qsv encoders, right?
>
>
> I think so, but can try afterwards.
>

there is another set of settings to try with av1 encode:

https://forum.level1techs.com/t/ffmpeg-av1-encoding-using-intel-arc-gpu-tips/205120/2



>
>
>> I have not continued with 2) and 3) above so far.
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20240928/5dbbad4a/attachment-0001.htm>


More information about the Cin mailing list