Skip to main content

BitstreamStats

Struct BitstreamStats 

Source
pub struct BitstreamStats { /* private fields */ }
Expand description

Accumulated bitstream quality statistics.

Call BitstreamStats::update_psnr and/or BitstreamStats::update_ssim after each encoded frame to accumulate per-frame metrics. Aggregated averages can then be retrieved via BitstreamStats::mean_psnr and BitstreamStats::mean_ssim.

Implementations§

Source§

impl BitstreamStats

Source

pub fn new() -> Self

Create a new, empty statistics accumulator.

Source

pub fn update_psnr(&mut self, orig: &[u8], recon: &[u8], w: u32, h: u32)

Compute and record the PSNR between the original and reconstructed pixel buffers for one frame.

PSNR is computed on the luma (Y) plane:

MSE = sum((orig[i] - recon[i])^2) / (w * h)
PSNR = 10 * log10(255^2 / MSE)

An MSE of 0.0 (identical buffers) yields +∞ dB; in that case 100.0 dB is recorded as a practical maximum.

§Parameters
  • orig – original uncompressed pixel buffer (u8 luma, length w * h).
  • recon – reconstructed pixel buffer (same layout as orig).
  • w – frame width in pixels.
  • h – frame height in pixels.
§Panics

Panics if orig.len() != w * h or recon.len() != w * h.

Source

pub fn mean_psnr(&self) -> Option<f64>

Returns the mean PSNR across all recorded frames, or None if no frames have been processed.

Source

pub fn min_psnr(&self) -> Option<f64>

Returns the minimum per-frame PSNR, or None if no frames recorded.

Source

pub fn max_psnr(&self) -> Option<f64>

Returns the maximum per-frame PSNR, or None if no frames recorded.

Source

pub fn update_ssim(&mut self, orig: &[u8], recon: &[u8], w: u32, h: u32)

Compute and record the mean SSIM between original and reconstructed buffers for one frame.

Uses the simplified single-window SSIM formula (per-image, not per-patch) as a fast approximation:

μ_x, μ_y  — mean pixel values
σ_x, σ_y  — standard deviations
σ_xy      — cross-covariance
SSIM = (2μ_xμ_y + C1)(2σ_xy + C2) / ((μ_x²+μ_y²+C1)(σ_x²+σ_y²+C2))

with C1 = (0.01 * 255)^2 and C2 = (0.03 * 255)^2.

§Parameters
  • orig – original pixel buffer (u8 luma, length w * h).
  • recon – reconstructed pixel buffer (same layout).
  • w – frame width in pixels.
  • h – frame height in pixels.
§Panics

Panics if orig.len() != w * h or recon.len() != w * h.

Source

pub fn mean_ssim(&self) -> Option<f64>

Returns the mean SSIM across all recorded frames, or None if no frames have been processed.

Source

pub fn min_ssim(&self) -> Option<f64>

Returns the minimum per-frame SSIM, or None if no frames recorded.

Source

pub fn max_ssim(&self) -> Option<f64>

Returns the maximum per-frame SSIM, or None if no frames recorded.

Source

pub fn psnr_frame_count(&self) -> u64

Returns the number of frames that contributed to PSNR statistics.

Source

pub fn ssim_frame_count(&self) -> u64

Returns the number of frames that contributed to SSIM statistics.

Source

pub fn reset(&mut self)

Reset all statistics.

Trait Implementations§

Source§

impl Clone for BitstreamStats

Source§

fn clone(&self) -> BitstreamStats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BitstreamStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for BitstreamStats

Source§

fn default() -> BitstreamStats

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.