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

Terje J. Hanssen terjejhanssen at gmail.com
Sat Sep 28 17:39:18 CEST 2024



Den 28.09.2024 17:35, skrev Terje J. Hanssen:
>
>
> 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?
>
> I have not continued with 2) and 3) above so far.
>

Add some Cingg output:

FFMPEG::scan: codec open failed
FFMPEG::scan:file=/Videoklipp/QSV/dv_movie_0.mpg
audio0 pad 32 0 (32)
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv_movie_0_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv_movie_0_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv_movie_0_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv_movie_0_av1_qsv.mp4
Render::render_single: Session finished.
^C** intr at 0x7f7b3ea8f25e in pid 102978, tid 102978
writing debug data to /tmp/cinelerra_102978.dmp
lock_items: 19
lock_frees: 28
^C
localhost:/home/cinelerra/cinelerra-5.1 # bin/cin
Cinelerra Infinity - built: Sep 23 2024 10:31:07
git://git.cinelerra-gg.org/goodguy/cinelerra.git
(c) 2006-2019 Heroine Virtual Ltd. by Adam Williams
2007-2020 mods for Cinelerra-GG by W.P.Morrow aka goodguy
2003-2017 mods for Cinelerra-CV by CinelerraCV team
2015-2024 mods for Cinelerra-GG by Cinelerra-GG team

Libav version: Lavc61.3.100

Cinelerra is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. There is absolutely no warranty for Cinelerra.

int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv01_07_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv01_07_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv01_07_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv01_07_av1_qsv.mp4
Render::render_single: Session finished.
int FFMPEG::init_encoder(const char*):
mismatch audio/video file format: /Videoklipp/QSV/dv01_07_av1_qsv.mp4
Render::render_single: Session finished.
Total excess of backups: -50
Session time: 0:07:07
Cpu time: user: 0:00:07.647 sys: 0:00:04.063

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20240928/73f03fba/attachment-0001.htm>


More information about the Cin mailing list