Skip to main content

EncoderHandle

Struct EncoderHandle 

Source
pub struct EncoderHandle {
    pub cancel: Arc<AtomicBool>,
    pub encoder: Arc<Mutex<Option<Box<dyn VideoEncoder>>>>,
    pub output_path: PathBuf,
    pub feed_thread: Option<JoinHandle<()>>,
}
Expand description

Live encoder + its background feed-thread cancel flag. Owned by RecordingState::encoder for the duration of a session.

The M-EXPORT.3 v0 ships with a test-pattern feed thread — pushes a solid-colour BGRA frame at 30 fps so the encoder produces a real (trivial) .mp4 file the user can verify the orchestration end-to-end with. Real per-channel pixel forwarding (extending camera/screen/SCK pipelines to push frames) is the M-EXPORT.3.1 follow-up.

Fields§

§cancel: Arc<AtomicBool>

Cooperative cancel flag for the feed thread.

§encoder: Arc<Mutex<Option<Box<dyn VideoEncoder>>>>

The encoder itself. Wrapped in Mutex<Option<...>> so the feed thread can push from its lock; finalize calls take()

  • invokes Box::finalize after the thread joins.
§output_path: PathBuf

Output path the encoder was configured to write to. Mirrored here so stop_recording can include it in RecordingSummary without re-querying.

§feed_thread: Option<JoinHandle<()>>

Background thread feeding the encoder. Some while active, None after take_for_finalize() removes it.

Implementations§

Source§

impl EncoderHandle

Source

pub fn start_with_real_capture( encoder_config: EncoderConfig, camera_slot: FrameSlot, screen_slot: FrameSlot, audio_mixer: SharedAudioMixer, screen_dims: StreamDimensions, cam_dims: StreamDimensions, ) -> Result<Self, EncodeError>

Start the encoder + a real-capture feed thread that pulls composed frames from crate::recording_compose::RecordingCompose and mixed audio from SharedAudioMixer (M-PIX.6).

The compose pump is constructed inside the feed thread — wisp’s Application (wgpu Device + Queue) isn’t Send across the worker boundary in all configurations, and constructing it on the thread that uses it avoids the question entirely.

§Errors

Returns the underlying encode error if the encoder can’t be constructed (parent dir missing, scratch file open failure). Wisp init errors at compose-pump construction happen on the feed thread; logged but don’t fail the handle creation.

Source

pub fn start_with_test_pattern( encoder_config: EncoderConfig, palette_seed: u64, ) -> Result<Self, EncodeError>

Start an encoder + spawn the test-pattern feed thread. Returns a handle whose finalize_now() produces the final container path.

palette_seed controls the test-pattern colour (different per session id so multiple recordings produce visually distinct previews).

Source

pub fn finalize_now(self) -> Result<PathBuf, EncodeError>

Stop the feed thread and finalize the encoder. Returns the output path on success.

§Errors

Returns the underlying [media::encode::EncodeError] if the gst-launch subprocess fails.

Trait Implementations§

Source§

impl Debug for EncoderHandle

Source§

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

Formats the value using the given formatter. 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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,