pub struct SwScaler { /* 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 SwScaler
impl SwScaler
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 SwScaler
impl Element for SwScaler
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.Source§fn graph_id(&self) -> Option<ElementId>
fn graph_id(&self) -> Option<ElementId>
ChainBuilder and keep the default None implementation.Source§fn attach_context(&mut self, _context: &Arc<Context>)
fn attach_context(&mut self, _context: &Arc<Context>)
Element::pp_log_mut hands it the pipeline’s
identity: the clock, the playback clock and the bus are the
pipeline’s to give, not the caller’s to choose. Read moreimpl Send for SwScaler
Source§impl Sink for SwScaler
impl Sink for SwScaler
Source§fn input_contract(&self) -> InputContract
fn input_contract(&self) -> InputContract
swscale reads the planes on the CPU, so a device texture is unreachable memory here rather than merely the wrong format.
Source§fn consume(&mut self, buf: MediaBuffer) -> Result<()>
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.Source§fn ready_consume(&mut self) -> bool
fn ready_consume(&mut self) -> bool
Self::consume can make progress now. Read more