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

Andrew Randrianasulu randrianasulu at gmail.com
Sun Sep 29 03:56:47 CEST 2024


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

>
>
> Den 28.09.2024 18:19, skrev Andrew Randrianasulu:
>
>
>
> сб, 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
>
>
>
> As I am quite unfamiliar and uncomfortable with this stuff, this might be
> over my head.
> Maybe I better reconstruct the previous install instead?
>
> I succeeded to still get the most robust method to work
> h265_qsv rendering works with nv12 and p010le and #profile high
>
> So I wonder if something may have happened with h264/av1/vp9-qsv
> with default nv12 some new options, because they worked in 1) before
> patching.
>


sure, you can just edit those profile  files manually, either in bin/ffmpeg
or in ffmpeg/

you can comment  out cin_pix_format line and select "pixels" manually.

Also, you can try to set bitrate to some value, like 1000k , by butting
b=1000k in gui profile editor.

I am honestly very surprised  why only hevc works reliably. I thought if
something set up wrong hevc will be first to fail. But we have what we
have: yet another mystery in sw/hw land!



>
>
>
>
>>
>> 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/20240929/68b4f4ac/attachment-0001.htm>


More information about the Cin mailing list