placeholder functions for decoding
This commit is contained in:
parent
ba47cd1b3b
commit
fc1465b52f
3 changed files with 60 additions and 2 deletions
9
src/decode/cmds.rs
Normal file
9
src/decode/cmds.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
use std::sync::Arc;
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
|
use crate::util;
|
||||||
|
use crate::decode::codecs::Decoder;
|
||||||
|
|
||||||
|
pub fn spawn(metadata: Arc<util::Metadata>) -> Result<(impl Decoder, impl Decoder), Box<dyn Error>> {
|
||||||
|
todo!();
|
||||||
|
}
|
33
src/decode/codecs/mod.rs
Normal file
33
src/decode/codecs/mod.rs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
use std::sync::mpsc;
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
|
use crate::util;
|
||||||
|
|
||||||
|
pub trait Decoder {
|
||||||
|
fn write_nalu(&mut self, nalu: util::NALUPacket) -> Result<(), Box<dyn Error + Send + Sync>>;
|
||||||
|
fn write_loop(&mut self, chan_in: mpsc::Receiver<util::NALUPacket>, err_in: mpsc::Sender<Box<dyn Error + Send + Sync>>) {
|
||||||
|
loop {
|
||||||
|
let nalu = match chan_in.recv() {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(err) => {util::thread_freeze(err_in, Box::new(err)); return}
|
||||||
|
};
|
||||||
|
match self.write_nalu(nalu) {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(err) => {util::thread_freeze(err_in, err); return}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn read_raw(&mut self) -> Result<util::RawMedia, Box<dyn Error + Send + Sync>>;
|
||||||
|
fn read_loop(&mut self, chan_out: mpsc::Sender<util::RawMedia>, err_in: mpsc::Sender<Box<dyn Error + Send + Sync>>) {
|
||||||
|
loop {
|
||||||
|
let raw_sample = match self.read_raw() {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(err) => {util::thread_freeze(err_in, err); return}
|
||||||
|
};
|
||||||
|
match chan_out.send(raw_sample) {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(err) => {util::thread_freeze(err_in, Box::new(err)); return}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,12 @@
|
||||||
|
mod cmds;
|
||||||
|
mod codecs;
|
||||||
|
|
||||||
use std::sync::{mpsc, Arc};
|
use std::sync::{mpsc, Arc};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use crate::util;
|
use crate::util;
|
||||||
|
use crate::decode::codecs::Decoder;
|
||||||
|
|
||||||
pub fn spawn(
|
pub fn spawn(
|
||||||
v: mpsc::Receiver<util::NALUPacket>,
|
v: mpsc::Receiver<util::NALUPacket>,
|
||||||
|
@ -19,15 +23,27 @@ pub fn spawn(
|
||||||
let (raw_v_in, raw_v_out) = mpsc::channel();
|
let (raw_v_in, raw_v_out) = mpsc::channel();
|
||||||
let (raw_a_in, raw_a_out) = mpsc::channel();
|
let (raw_a_in, raw_a_out) = mpsc::channel();
|
||||||
let (err_in, err_out) = mpsc::channel();
|
let (err_in, err_out) = mpsc::channel();
|
||||||
let metadata_handle = metadata.clone();
|
let (v_decoder, a_decoder) = cmds::spawn(metadata.clone())?;
|
||||||
|
spawn_threads(v, raw_v_in, v_decoder, a, raw_a_in, a_decoder, err_in);
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
&raw_v_in;
|
&raw_v_in;
|
||||||
&raw_a_in;
|
&raw_a_in;
|
||||||
&err_in;
|
&err_in;
|
||||||
&metadata_handle;
|
|
||||||
&v;
|
&v;
|
||||||
&a;
|
&a;
|
||||||
thread::park();
|
thread::park();
|
||||||
});
|
});
|
||||||
return Ok((raw_v_out, raw_a_out, err_out));
|
return Ok((raw_v_out, raw_a_out, err_out));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn spawn_threads(
|
||||||
|
v: mpsc::Receiver<util::NALUPacket>,
|
||||||
|
raw_v_in: mpsc::Sender<util::RawMedia>,
|
||||||
|
v_decoder: impl Decoder,
|
||||||
|
a: mpsc::Receiver<util::NALUPacket>,
|
||||||
|
raw_a_in: mpsc::Sender<util::RawMedia>,
|
||||||
|
a_decoder: impl Decoder,
|
||||||
|
err_in: mpsc::Sender<Box<dyn Error + Send + Sync>>
|
||||||
|
) {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue