pub struct D3d12Renderer { /* private fields */ }Available on Windows and crate feature
d3d12 and (crate features d3d11 or d3d12 or wasapi-renderer) only.Expand description
Terminal sink that submits decoded video frames to a caller-supplied
D3d12FrameRenderer. Only built with the d3d12 feature —
every consumer that doesn’t need to render to a window pulls in
neither this nor the windows dependency it needs for the zero-copy
path.
Handles two kinds of input, dispatched on frame.format():
Pixel::YUV420P: CPU-decoded (e.g. fromSwDecoder) — copies pixel bytes to the GPU viaD3d12FrameRenderer::submit_yuv420p.Pixel::D3D12: GPU-decoded (fromD3d12vaDecoder) — zero-copy, draws straight from the decoder’s own texture viaD3d12FrameRenderer::submit_nv12_texture.
Implementations§
Source§impl D3d12Renderer
impl D3d12Renderer
Sourcepub fn new(
name: impl Into<String>,
renderer: Box<dyn D3d12FrameRenderer>,
) -> Self
pub fn new( name: impl Into<String>, renderer: Box<dyn D3d12FrameRenderer>, ) -> Self
renderer is whatever the caller’s own D3d12FrameRenderer
implementation is — already constructed and pointed at a real
window/device by the time it gets here. This element doesn’t
create or own a window itself.
Trait Implementations§
Source§impl Element for D3d12Renderer
impl Element for D3d12Renderer
Source§fn name(&self) -> Arc<str> ⓘ
fn name(&self) -> Arc<str> ⓘ
Returns a cheap clone (refcount bump, not a deep copy) of this
element’s name —
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
See
ElementType.Source§fn pp_log(&self) -> &PpLog
fn pp_log(&self) -> &PpLog
This element’s identity for
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
Mutable access to the same field
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§impl Sink for D3d12Renderer
impl Sink for D3d12Renderer
fn consume(&mut self, buf: MediaBuffer) -> Result<()>
Source§fn control(&mut self, _msg: ControlMsg) -> Result<()>
fn control(&mut self, _msg: ControlMsg) -> Result<()>
Reacts to a
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.Auto Trait Implementations§
impl !RefUnwindSafe for D3d12Renderer
impl !Sync for D3d12Renderer
impl !UnwindSafe for D3d12Renderer
impl Freeze for D3d12Renderer
impl Send for D3d12Renderer
impl Unpin for D3d12Renderer
impl UnsafeUnpin for D3d12Renderer
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
Mutably borrows from an owned value. Read more