pub struct Scaler { /* private fields */ }Expand description
Converts/resizes decoded video frames — pixel format (e.g. the YUV a
decoder produces -> the RGB most inference models expect) and
resolution (source resolution -> a model’s fixed input size) in one
pass via libswscale. A Filter: receives via Sink, pushes the
converted frame on through its own (single) src pad.
Typical placement: right before something with a fixed input contract, e.g. an ONNX object-detection model — not a general-purpose pipeline stage, so most chains won’t need one at all.
Implementations§
Source§impl Scaler
impl Scaler
Sourcepub fn new(
name: impl Into<String>,
dst_format: Pixel,
dst_width: u32,
dst_height: u32,
flags: Flags,
) -> Self
pub fn new( name: impl Into<String>, dst_format: Pixel, dst_width: u32, dst_height: u32, flags: Flags, ) -> Self
dst_format/dst_width/dst_height describe what every output
frame will be; the source side is learned automatically from
whatever frames actually arrive (see context’s docs), so this
doesn’t need decoder parameters up front the way
crate::elements::SwDecoder::new does.
Trait Implementations§
Source§impl Element for Scaler
impl Element for Scaler
Source§fn name(&self) -> Arc<str> ⓘ
fn name(&self) -> Arc<str> ⓘ
crate::bus::BusEvent stores names as
Arc<str> for exactly this reason: a hot path like
crate::queue::Queue posting BusEvent::Dropped once per
overflowed buffer shouldn’t pay for a fresh heap allocation every
time it wants to report which element it is.Source§fn element_type(&self) -> ElementType
fn element_type(&self) -> ElementType
ElementType.Source§fn pp_log(&self) -> &PpLog
fn pp_log(&self) -> &PpLog
crate::bus::Bus::post — same
id/name as Element::name, just already wrapped as the
crate::pp_log::PpLog its pp_info!/pp_warn!/pp_error! macros need. A
stored private field, not built fresh per call, for the same reason
name() returns a cheap Arc<str> clone instead of a fresh String
— see its own docs.Source§fn pp_log_mut(&mut self) -> &mut PpLog
fn pp_log_mut(&mut self) -> &mut PpLog
Element::pp_log reads — used by
crate::pipeline::ChainBuilder to stamp the owning
crate::pipeline::Pipeline’s id onto every element that
passes through it, via element_pp_log. Not meant to be called
from anywhere else.impl Send for Scaler
Source§impl Sink for Scaler
impl Sink for Scaler
fn consume(&mut self, buf: MediaBuffer) -> Result<()>
Source§fn control(&mut self, msg: ControlMsg) -> Result<()>
fn control(&mut self, msg: ControlMsg) -> Result<()>
ControlMsg (pause/resume/stop) and, for anything
with a downstream of its own, forwards it on — same shape as
consume, just a separate channel from MediaBuffer so it can
reach every element (not just ones that already know how to
interpret a data buffer) and, at a crate::queue::Queue, jump
ahead of whatever data is backed up instead of waiting behind it.
No default: every Sink has to consciously decide what this means
for it, rather than silently dropping it.