X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=videoplayer%2Fsrc%2Faudiodec.rs;h=e9da970ad577d3a3c518c8f100134cff23286b2a;hb=8686f9f650974a6065f93df178a76f8d24814ca7;hp=304519294c487b805397e62e752c5dcc1d0c8d1b;hpb=b5053bfc25fb327776886269e615c2e5dd63fa08;p=nihav-player.git 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);