pub struct TwoPassStateTracker { /* private fields */ }Expand description
Lightweight two-pass VBR state tracker.
Provides a simplified API for recording per-frame complexity values during the first pass and computing per-frame bitrate targets during the second pass.
§Usage
use oximedia_codec::vbr_twopass::TwoPassStateTracker;
let mut state = TwoPassStateTracker::new();
state.record_first_pass(1.5); // frame 0
state.record_first_pass(0.8); // frame 1
state.record_first_pass(2.3); // frame 2
let bits_frame0 = state.compute_bitrate(1.5, 4_000_000);
assert!(bits_frame0 > 0);Implementations§
Source§impl TwoPassStateTracker
impl TwoPassStateTracker
Sourcepub fn record_first_pass(&mut self, complexity: f32)
pub fn record_first_pass(&mut self, complexity: f32)
Record a complexity value for one frame during the first pass.
complexity must be a non-negative floating-point value. Typical
values are SAD-normalised intra/inter costs in the range 0.1 – 20.0.
Sourcepub fn compute_bitrate(&self, complexity: f32, budget: u32) -> u32
pub fn compute_bitrate(&self, complexity: f32, budget: u32) -> u32
Compute the per-frame bitrate target for a frame with the given complexity.
Uses complexity-proportional allocation:
target_bits = budget * complexity / sum(all_complexities)If the accumulated first-pass data is empty the entire budget is
returned (no-op case).
§Parameters
complexity– complexity value of the current frame (should have been recorded viaSelf::record_first_pass).budget– total bit budget for the session (bits).
§Returns
Target number of bits for this frame, as a u32. Clamped to at least 1
and at most budget.
Sourcepub fn frame_count(&self) -> usize
pub fn frame_count(&self) -> usize
Returns the number of frames recorded in the first pass.
Sourcepub fn total_complexity(&self) -> f32
pub fn total_complexity(&self) -> f32
Returns the total accumulated complexity.
Sourcepub fn mean_complexity(&self) -> f32
pub fn mean_complexity(&self) -> f32
Returns the average complexity per frame.
Trait Implementations§
Source§impl Clone for TwoPassStateTracker
impl Clone for TwoPassStateTracker
Source§fn clone(&self) -> TwoPassStateTracker
fn clone(&self) -> TwoPassStateTracker
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TwoPassStateTracker
impl Debug for TwoPassStateTracker
Source§impl Default for TwoPassStateTracker
impl Default for TwoPassStateTracker
Source§fn default() -> TwoPassStateTracker
fn default() -> TwoPassStateTracker
Auto Trait Implementations§
impl Freeze for TwoPassStateTracker
impl RefUnwindSafe for TwoPassStateTracker
impl Send for TwoPassStateTracker
impl Sync for TwoPassStateTracker
impl Unpin for TwoPassStateTracker
impl UnsafeUnpin for TwoPassStateTracker
impl UnwindSafe for TwoPassStateTracker
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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