use std::sync::atomic::AtomicBool;
use re_mutex::Mutex;
use crate::decode::{AsyncDecoder, Chunk, FrameResult, Result};
use crate::{Sender, VideoDataDescription};
pub use super::sync_decoder::SyncDecoder;
pub struct SyncDecoderWrapper {
sync_decoder: Mutex<Box<dyn SyncDecoder + Send>>,
output_sender: Sender<FrameResult>,
should_stop: AtomicBool,
}
impl SyncDecoderWrapper {
pub fn new(
_debug_name: String,
sync_decoder: Box<dyn SyncDecoder + Send>,
output_sender: Sender<FrameResult>,
) -> Self {
re_tracing::profile_function!();
Self {
sync_decoder: Mutex::new(sync_decoder),
output_sender,
should_stop: AtomicBool::new(false),
}
}
}
impl AsyncDecoder for SyncDecoderWrapper {
fn submit_chunk(&mut self, chunk: Chunk) -> Result<()> {
re_tracing::profile_function!();
self.sync_decoder
.lock()
.submit_chunk(&self.should_stop, chunk, &self.output_sender);
Ok(())
}
fn reset(&mut self, video_data_description: &VideoDataDescription) -> Result<()> {
re_tracing::profile_function!();
self.sync_decoder.lock().reset(video_data_description);
Ok(())
}
}