enum ConstantRate {
Buffer,
Unbounded,
Seconds(f64),
}Expand description
What bounds the frames of a constant-rate session, by what the driver’s rate control does with each bound.
A buffer of vbv_bits (a frame and a half) with every frame capped at it is the tightest,
and the default. Intel’s iHD stops coding under it: measured on Intel Arc at 1080p and
60 fps, its H.264 and HEVC rate controls skip every block and pad the frame with zeros up
to the target once the buffer or the cap binds, and its AV1 one spends a third of the
target, so a scroll sat at 19 to 20 dB at 2, 8, and 30 Mbit/s alike and a still screen was
never refined. So on that driver H.264 and HEVC run with no bound of their own, where a
still screen of text at 2 Mbit/s reaches 46 to 51 dB, and AV1, which takes no cap, in a
buffer of IHD_AV1_BUFFER_S, which halved its largest frame. The driver’s low-delay frame
tolerance holds an H.264 frame to three budgets, but leaves a still screen of dense text
at 27 dB, every block skipped; a cap of six budgets cost HEVC 3 dB. Its VP9 refines in
the default buffer and keeps it.
Variants§
Buffer
The session’s buffer, and the frame cap where the driver takes one.
Unbounded
No buffer and no cap.
Seconds(f64)
A buffer of this many seconds of the target and no cap.
Trait Implementations§
Source§impl Clone for ConstantRate
impl Clone for ConstantRate
Source§fn clone(&self) -> ConstantRate
fn clone(&self) -> ConstantRate
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ConstantRate
Source§impl Debug for ConstantRate
impl Debug for ConstantRate
Source§impl PartialEq for ConstantRate
impl PartialEq for ConstantRate
impl StructuralPartialEq for ConstantRate
Auto Trait Implementations§
impl Freeze for ConstantRate
impl RefUnwindSafe for ConstantRate
impl Send for ConstantRate
impl Sync for ConstantRate
impl Unpin for ConstantRate
impl UnsafeUnpin for ConstantRate
impl UnwindSafe for ConstantRate
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more