Skip to main content

SegmentSelector

Struct SegmentSelector 

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

Segment the CONTINUOUS camera stream by print layer and pick the parked frame per layer with select_park_frame — the dense-stream alternative to the sparse snapshot burst.

The native park runs at the LAYER CHANGE: a brief (~0.5 s) far-left dwell whose delay vs the layer_num edge is large and WILDLY variable (it’s the layer-change gcode, so it lands near the layer’s end relative to the edge, drifting with layer time). A sparse grid of single grabs misses it, and so does a short fixed window after the edge — the very failure that defeated the snapshot burst. The robust answer is to accumulate the WHOLE layer (every frame until the next layer edge) and let the MEDIAN subtraction isolate the transient far-left head against the layer’s typical printing frames. So window_ms is a generous SAFETY CAP (max accumulation before forcing a selection, to bound memory if the A1’s layer_num sticks), NOT a gate: in normal operation the next layer edge finalizes the segment first, well within the cap. Feed gray frames as they arrive (their stream idx, capture time, and the current layer); each layer’s frames accumulate until the next layer (or the cap), then the selector runs over them and emits the chosen frame’s index. Pure (no I/O): the caller owns ffmpeg + the ring JPEGs and copies the picked index out.

Implementations§

Source§

impl SegmentSelector

Source

pub fn new(w: usize, h: usize, window_ms: u64, cfg: SelectTuning) -> Self

Source

pub fn push( &mut self, layer: i64, idx: u64, t_ms: u64, gray: Vec<u8>, ) -> Option<SegmentPick>

Feed one stream frame. Returns a SegmentPick when a layer’s window CLOSES with a selected park — finalized either when the NEXT layer starts or window_ms elapses. Frames after a layer’s window (until the next layer) are ignored. None otherwise.

Source

pub fn finish(&mut self) -> Option<SegmentPick>

Finalize the last open segment at stream end.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more