diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2023-06-14 19:00:07 +0200 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2023-06-14 19:00:07 +0200 |
commit | 37f130a74415deaf920b04209e1c334a8876c381 (patch) | |
tree | 2c38c61d66c7276dec2873f482c94b0e1bf34221 /videoplayer/src/audiodec.rs | |
parent | f8b39df7616777fbac588b4e7b1578ae5dba8ee0 (diff) | |
download | nihav-player-37f130a74415deaf920b04209e1c334a8876c381.tar.gz |
make video player use multi-threaded decoders if possible
Diffstat (limited to 'videoplayer/src/audiodec.rs')
-rw-r--r-- | videoplayer/src/audiodec.rs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/videoplayer/src/audiodec.rs b/videoplayer/src/audiodec.rs index 3045192..e9da970 100644 --- a/videoplayer/src/audiodec.rs +++ b/videoplayer/src/audiodec.rs @@ -12,7 +12,7 @@ use nihav_core::formats::*; use nihav_core::codecs::*; use nihav_core::soundcvt::*; -use super::{DecoderStuff, PktSendEvent}; +use super::{DecoderStuff, DecoderType, PktSendEvent}; static SKIP_ADECODING: AtomicBool = AtomicBool::new(false); static AUDIO_VOLUME: AtomicUsize = AtomicUsize::new(100); @@ -181,6 +181,7 @@ fn start_audio_decoding(asystem: &AudioSubsystem, ainfo: NAAudioInfo, mut audio_ } let adevice = ret.unwrap(); (Some(adevice), std::thread::Builder::new().name("acontrol".to_string()).spawn(move ||{ + let adec = if let DecoderType::Audio(ref mut dec) = audio_dec.dec { dec } else { panic!("not an audio decoder!"); }; let mut samplepos = 0usize; let dst_chmap = if dst_info.channels == 2 { NAChannelMap::from_str("L,R").unwrap() @@ -199,7 +200,7 @@ fn start_audio_decoding(asystem: &AudioSubsystem, ainfo: NAAudioInfo, mut audio_ std::thread::sleep(Duration::from_millis(100)); } if !SKIP_ADECODING.load(Ordering::Relaxed) { - if let Ok(frm) = audio_dec.dec.decode(&mut audio_dec.dsupp, &pkt) { + if let Ok(frm) = adec.decode(&mut audio_dec.dsupp, &pkt) { let buf = frm.get_buffer(); if let Some(pts) = frm.get_pts() { samplepos = NATimeInfo::ts_to_time(pts, u64::from(dst_info.sample_rate), frm.ts.tb_num, frm.ts.tb_den) as usize; @@ -223,8 +224,9 @@ fn start_audio_decoding(asystem: &AudioSubsystem, ainfo: NAAudioInfo, mut audio_ } } }, + Ok(PktSendEvent::GetFrames) => {}, Ok(PktSendEvent::Flush) => { - audio_dec.dec.flush(); + adec.flush(); let mut qdata = queue.lock().unwrap(); qdata.flush(); SKIP_ADECODING.store(false, Ordering::Relaxed); |