summaryrefslogtreecommitdiffstats
path: root/videoplayer/src/audiodec.rs
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2023-06-14 19:00:07 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2023-06-14 19:00:07 +0200
commit37f130a74415deaf920b04209e1c334a8876c381 (patch)
tree2c38c61d66c7276dec2873f482c94b0e1bf34221 /videoplayer/src/audiodec.rs
parentf8b39df7616777fbac588b4e7b1578ae5dba8ee0 (diff)
downloadnihav-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.rs8
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);