From: Timo Rothenpieler <timo@rothenpieler.org>
To: Cameron Gutman <aicommander@gmail.com>
Cc: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH v2] avcodec/nvenc: add option to skip padding OBUs
Date: Sat, 29 Mar 2025 23:31:16 +0100
Message-ID: <33a6ba16-9f46-469d-a566-da854d1f84f6@rothenpieler.org> (raw)
In-Reply-To: <CAAfxzZ22E74JT1QY_7P67D6CvKjfFboig8RQ_L3axFSgHx=LEg@mail.gmail.com>
On 29.03.2025 23:28, Cameron Gutman wrote:
> On Sat, Mar 29, 2025 at 4:42 PM Timo Rothenpieler <timo@rothenpieler.org> wrote:
>>
>> On 29.03.2025 22:37, Cameron Gutman wrote:
>>> On Sat, Mar 29, 2025 at 4:26 PM Timo Rothenpieler <timo@rothenpieler.org> wrote:
>>>>
>>>> On 29.03.2025 22:17, Cameron Gutman wrote:
>>>>> On Sat, Mar 29, 2025 at 4:02 PM Timo Rothenpieler <timo@rothenpieler.org> wrote:
>>>>>>
>>>>>> On 29.03.2025 21:58, Cameron Gutman wrote:
>>>>>>> Some scenarios (such as game streaming or videoconferencing) may use CBR
>>>>>>> to strictly cap the maximum encoded bitrate, but they don't mind the
>>>>>>> bitrate falling below the target if the encoder doesn't need the
>>>>>>> additional headroom.
>>>>>>
>>>>>> But why aren't they using vbr with a maxrate then?
>>>>>> I didn't add this conditionally since when in CBR mode, you actually
>>>>>> really want a constant bitrate.
>>>>>> If you're okay with it dropping lower, why not use another mode with a
>>>>>> maxrate set?
>>>>>>
>>>>>
>>>>> As I understand it, the rate control behavior of CBR without filler is
>>>>> different from
>>>>> just using VBR, particularly for low latency applications. Nvidia recommends use
>>>>> of CBR [0] (with or without filler depending on application needs [1])
>>>>> rather than
>>>>> using VBR for low latency applications.
>>>>>
>>>>> Also FWIW, we don't set enableFillerDataInsertion for CBR on H.264 and HEVC,
>>>>> so those will dip below the target bitrate in CBR mode while AV1 will not.
>>>>
>>>> We probably should really. In the past outputBufferingPeriodSEI
>>>> controlled this in some weird way.
>>>>
>>>> The expectation of CBR by default should be to be actually constant no
>>>> matter what.
>>>>
>>>> I just don't know what actual role the buffering period SEI plays this
>>>> day, with the new option now existing.
>>>>
>>>> If you like you can add the same logic for that flag as well.
>>>>
>>>> I'd also prefer this to be called strict_cbr or cbr_padding or
>>>> something, to make it obvious what it relates to.
>>>
>>> To ensure I understand, you want the following:
>>> 1. Rename the filler_data option in this patch to strict_cbr (keeping
>>> the default value of 1)
>>
>> Yes, definitely keep it enabled by default.
>> I'm not too picky about the exact name, as long as it contains cbr.
>>
>> Might even slightly prefer cbr_padding, since it's more obvious to the
>> common user what it does.
>>
>
> Sounds good to me.
>
>>> 2. Change H.264 and HEVC to set enableFillerDataInsertion for CBR by
>>> default and add strict_cbr option to those too
>>
>> Yes, or whatever the option ends up named.
>>
>>> 3. Don't set outputBufferingPeriodSEI = 1 unless filler data is also enabled
>>
>> That's what I'm not sure about.
>> To my knowledge, and given that people stream to Twitch and other
>> services with strict CBR requirements, h264 and hevc already produce
>> strict CBR.
>>
>> I'd want the new option to toggle the strict CBR behaviour, and would
>> need to investigate first what that implies.
>>
>> Might just be that filler data insertion is enabled by default there,
>> but not for AV1.
>> Or it's actually somehow related to the buffering period SEI. Since it's
>> the only original user of the IS_CBR check.
>>
>
> When looking through the older headers, I saw that
> outputBufferingPeriodSEI used to have the following comment:
>
> "When set for following rateControlMode : NV_ENC_PARAMS_RC_CBR,
> NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ, NV_ENC_PARAMS_RC_CBR_HQ, filler data
> is inserted if needed to achieve HRD bitrate"
>
> However, this was removed starting in SDK 12.0. Since it's hard to say
> what each driver version between SDK 9.1 and SDK 12.0 will do with a
> mismatch between outputBufferingPeriodSEI and
> enableFillerDataInsertion, I think it's probably safest to tie the
> options together for now.
Sounds good to me
>> So for now, if you want to add the option for the other codecs to, just
>> make it toggle the new flag.
>>
>> (And keep in mind that the oldest SDK still supported does not have that
>> flag, so it'll need a feature guard)
>
> Thanks for the heads up. Looks like it was added in SDK 9.1.
>
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
prev parent reply other threads:[~2025-03-29 22:31 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-29 20:58 Cameron Gutman
2025-03-29 21:02 ` Timo Rothenpieler
2025-03-29 21:17 ` Cameron Gutman
2025-03-29 21:26 ` Timo Rothenpieler
2025-03-29 21:37 ` Cameron Gutman
2025-03-29 21:42 ` Timo Rothenpieler
2025-03-29 22:28 ` Cameron Gutman
2025-03-29 22:31 ` Timo Rothenpieler [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=33a6ba16-9f46-469d-a566-da854d1f84f6@rothenpieler.org \
--to=timo@rothenpieler.org \
--cc=aicommander@gmail.com \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git