[Cin] 10bit VAAPI encoding test thread continued

Andrew Randrianasulu randrianasulu at gmail.com
Mon Nov 11 19:01:58 CET 2024


On Mon, Nov 11, 2024 at 8:43 PM Terje J. Hanssen <terjejhanssen at gmail.com>
wrote:

>
>
>
> Den 09.11.2024 17:16, skrev Andrew Randrianasulu:
>
>
>
> сб, 9 нояб. 2024 г., 19:10 Terje J. Hanssen <terjejhanssen at gmail.com>:
>
>>
>>
>>
>> Den 09.11.2024 10:48, skrev Terje J. Hanssen:
>>
>>
>>
>>
>> Den 09.11.2024 00:10, skrev Andrew Randrianasulu:
>>
>>
>>
>> сб, 9 нояб. 2024 г., 01:58 Terje J. Hanssen <terjejhanssen at gmail.com>:
>>
>>>
>>>
>>>
>>> Den 07.11.2024 22:53, skrev Terje J. Hanssen:
>>>
>>>
>>>
>>>
>>> Den 07.11.2024 20:41, skrev Andrew Randrianasulu:
>>>
>>>
>>>>>
>>>>
>>>> sorry I mean set like this
>>>> export CIN_10BIT_ENC=1
>>>>
>>>>
>>>>
>>>> Now hevc_vaapi was able to render to yuv420p10le, that is 10-bit 420p,
>>>> by selecting pixels p010le.
>>>> Also rendering with pixels y210 resulted in yuv420p10le, that is not
>>>> 10-bit 422p as for hevc_qsv below.
>>>>
>>>> I would assume this is caused due to the incomplete hevc_vapi.mp4
>>>> preset as shown below?
>>>>
>>>
>>> More like incomplete code that does not yet know how to get custom
>>> format ... so far as name says it only adds 10bit 4:2:0  encoding, not
>>> 4:2:2 subsampling.
>>>
>>>
>>> can you test other vaapi/qsv profiles too?
>>>
>>>
>>> also with test picture actually containing more than 8bit values? ;)
>>>
>>>
>>> To the latter; the input file cfhd01.mkv was 10bit 422: yuv422p10le
>>>
>>> Maybe have a look at and compare with the hevc_qsv code that managed
>>> 10bit 422: yuv422p10le?
>>>
>>>
>>>
>>> Summary
>>> ----------------
>>>
>>> hevc_vaapi.mp4 and av1_vaapi.mp4
>>> Pixels:     vaapi (default and only option) works and results in yuv420p
>>>                 p010 or p010le written works and result in yuv420p10le
>>>                 y210 or all variants y210le/Y210/le render (with
>>> fallback) to yuv420p10le
>>>
>>> h264_vaapi.mp4 didn't render (error message)
>>>
>>
>> yeah, no 10bit h264 here (while possible by spec)
>>
>>
>>
>>> av1_qsv.mp4 is for external ffmpeg
>>>
>>
>> if you still have my onevpl patch applied (and enabled it earlier with
>> configure switch) too - qsv should work ...
>>
>> try it too just in case?
>>
>>
>> av1_qsv.mp4
>> Would not render at all
>>
>> [av1_qsv @ 0x7fe19826f240] Current picture structure is unsupported
>> [av1_qsv @ 0x7fe19826f240] 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/Cineform/cfhd01_av1_qsv_pix_nv12.mp4
>> Render::render_single: Session finished.
>>
>>
>> hevc_qsv.mp4
>> Does render, but only to yuv420p now.
>> For one or another reason pixel formats p010le and y210le results in
>> yuv420p.
>> That is I am not able to reconstruct the previous 10bit results below.
>> I do another attempt next day.
>>
>>
>>
>> hevc_qsv.mp4  revised:
>> pixel formats p010le and y210le render again to yuv420p10le and
>> .yuv422p10le respectively
>> Woops; only when these window lines are commented out as written in my
>> previous post !
>>
>> # profile=main
>> # cin_pix_fmt=nv12
>>
>> Works both with and without
>> export CIN_10BIT_ENC=1
>> before cin/bin
>>
>
>
> we most likely will need new profiles for 10bit everything anyway ...
>
> thanks for continued (and very exhaustive!) testing
>
>
> Also the preset's combination of pixel formats and the right (ffmpeg)
> codec profiles would need an overhaul.
>
> As mentioned already above:
>
> hevc_qsv.mp4  revised:
> pixel formats p010le and y210le render again to yuv420p10le and
> .yuv422p10le respectively
> Woops; only when these window lines are commented out as written in my
> previous post !
>
> # profile=main
> # cin_pix_fmt=nv12
>
>
> I experimented additional and got
>
> y210/profile=1  ==> yuv422p10le
>
> y210/ profile=main10/ profile=2/ profile=3 ==> yuv420p10le
>
> I got similar results with my own dynamic Cingg built with ffmpeg 7.1.
>
> --------------------------
>
> So a question beside:
>
> Yesterday I did a new (monthly) upgrade of Tumbleweed-Slowroll, which
> replaced Packman package libs and ffmpeg 7.1
>
> After that, the static Cingg with onevpl and 10bit patch would not render
> hevc_qsv.
>
> Today's upgrade with new Packman packages up-to-date with the new Slowroll
> version, and now Cingg worked as before:
>
>  ffmpeg-7 ffmpeg-7-libavcodec-devel ffmpeg-7-libavdevice-devel
> ffmpeg-7-libavfilter-devel
>   ffmpeg-7-libavformat-devel ffmpeg-7-libavutil-devel
> ffmpeg-7-libpostproc-devel ffmpeg-7-libswresample-devel
>   ffmpeg-7-libswscale-devel libavcodec61 libavdevice61 libavfilter10
> libavformat61 libavutil59 libpostproc58
>   libswresample5 libswscale8
>
> So even Cingg with onevpl is static built, it looks like it is dependent
> of one or more system packages/libs beside?
> Any idea what packages it can be ?
>


onevpl/vaapi/vdpau - they all linked  dynamically (not sure if static
version of them even possible)



>
>
>
>
>>
>>
>>
>>
>>
>>
>>
>>>
>>>
>>> (probably made up something in GIMP 2.10, save as tiff/EXR, import in
>>> cingg, set format to rgba-float, rendrer ..... hm, may be use YUView to see
>>> pixel values independently of cinelerra's decoding abilities? a bit of
>>> adventure, but should provide some proof about encoding)
>>>
>>>
>>>> ffprobe -hide_banner cfhd01_hevc_vaapi_pix_p010le.mp4
>>>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
>>>> 'cfhd01_hevc_vaapi_pix_p010le.mp4':
>>>>   Metadata:
>>>>     major_brand     : isom
>>>>     minor_version   : 512
>>>>     compatible_brands: isomiso2mp41
>>>>     encoder         : Lavf61.1.100
>>>>   Duration: 00:01:11.20, start: 0.000000, bitrate: 11082 kb/s
>>>>   Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568),
>>>> yuv420p10le(tv, bt709/unknown/unknown, top coded first (swapped)),
>>>> 1920x1080 [SAR 1:1 DAR 16:9], 11080 kb/s, 25 fps, 25 tbr, 12800 tbn
>>>> (default)
>>>>       Metadata:
>>>>         handler_name    : VideoHandler
>>>>         vendor_id       : [0][0][0][0]
>>>>
>>>> ffprobe -hide_banner cfhd01_hevc_vaapi_pix_y210.mp4
>>>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
>>>> 'cfhd01_hevc_vaapi_pix_y210.mp4':
>>>>   Metadata:
>>>>     major_brand     : isom
>>>>     minor_version   : 512
>>>>     compatible_brands: isomiso2mp41
>>>>     encoder         : Lavf61.1.100
>>>>   Duration: 00:01:11.20, start: 0.000000, bitrate: 11082 kb/s
>>>>   Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568),
>>>> yuv420p10le(tv, bt709/unknown/unknown, top coded first (swapped)),
>>>> 1920x1080 [SAR 1:1 DAR 16:9], 11080 kb/s, 25 fps, 25 tbr, 12800 tbn
>>>> (default)
>>>>       Metadata:
>>>>         handler_name    : VideoHandler
>>>>         vendor_id       : [0][0][0][0]
>>>>
>>>>
>>>>> -----
>>>>>
>>>>> No hevc_vaapi 10bit worked:
>>>>>
>>>>> localhost:/Cin/ffmpeg/video # cat hevc_vaapi.mp4
>>>>> mp4 hevc_vaapi
>>>>> # cin_hw_dev=vaapi
>>>>>
>>>>> I tested hevc_vaapi.m4 and tried to write p010 both in the pixels
>>>>> field and as format=p010 in the widget,
>>>>> but only 8bit 420p each time.
>>>>>
>>>>> -------------------------------
>>>>>
>>>>> hevc_qsv 10 bit worked with p010 and with y210
>>>>>
>>>>> localhost:/Cin/ffmpeg/video # cat hevc_qsv.mp4
>>>>> # only usable with ext. ffmpeg, another pixfmt is yuyv422
>>>>> mp4 hevc_qsv
>>>>> # profile=main
>>>>> # cin_pix_fmt=nv12
>>>>>
>>>>>
>>>>> ffprobe -hide_banner cfhd01_hevc_qsv_pix_p010le.mp4
>>>>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
>>>>> 'cfhd01_hevc_qsv_pix_p010le.mp4':
>>>>>   Metadata:
>>>>>     major_brand     : isom
>>>>>     minor_version   : 512
>>>>>     compatible_brands: isomiso2mp41
>>>>>     encoder         : Lavf61.1.100
>>>>>   Duration: 00:01:11.20, start: 0.000000, bitrate: 28276 kb/s
>>>>>   Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568),
>>>>> yuv420p10le(tv, bt709/unknown/unknown, top coded first (swapped)),
>>>>> 1920x1080 [SAR 1:1 DAR 16:9], 28273 kb/s, 25 fps, 25 tbr, 12800 tbn
>>>>> (default)
>>>>>       Metadata:
>>>>>         handler_name    : VideoHandler
>>>>>         vendor_id       : [0][0][0][0]
>>>>>
>>>>>
>>>>> ffprobe -hide_banner cfhd01_hevc_qsv_pix_y210le.mp4
>>>>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
>>>>> 'cfhd01_hevc_qsv_pix_y210le.mp4':
>>>>>   Metadata:
>>>>>     major_brand     : isom
>>>>>     minor_version   : 512
>>>>>     compatible_brands: isomiso2mp41
>>>>>     encoder         : Lavf61.1.100
>>>>>   Duration: 00:01:11.20, start: 0.000000, bitrate: 32074 kb/s
>>>>>   Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 / 0x31766568),
>>>>> yuv422p10le(tv, bt709/unknown/unknown, top coded first (swapped)),
>>>>> 1920x1080 [SAR 1:1 DAR 16:9], 32071 kb/s, 25 fps, 25 tbr, 12800 tbn
>>>>> (default)
>>>>>       Metadata:
>>>>>         handler_name    : VideoHandler
>>>>>         vendor_id       : [0][0][0][0]
>>>>>
>>>>>
>>>>>>
>>>>>> you also can set bin/ffmpeg/encode.opts loglevel to debug, but render
>>>>>> exactly one frame so log will be smaller.
>>>>>>
>>>>>>
>>>>>> How to render render exactly one frame ?
>>>>>>
>>>>>
>>>>> In render  dialog window there is selection of render range with 4
>>>>> choices ... 1 frame mp4/webm should be perfectly legal :)
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> "git log" where?
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> in cinelerra-5.1 directory, or some down the hierarchy ...
>>>>>>>
>>>>>>> this is command, part of git suite of commands.
>>>>>>>
>>>>>>> displays log of commits in git repo. (for me it uses l"less" as
>>>>>>> pager, so you can scroll around and search)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20241111/3b9eafa6/attachment-0001.htm>


More information about the Cin mailing list