X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=videoplayer%2Fsrc%2Faudiodec.rs;h=e9da970ad577d3a3c518c8f100134cff23286b2a;hb=8686f9f650974a6065f93df178a76f8d24814ca7;hp=dcc564931cb3bf539789582e61dc7a07e4074128;hpb=69b93cb5370e2ba672d8bd7ac5717038c0bf3d47;p=nihav-player.git diff --git a/videoplayer/src/audiodec.rs b/videoplayer/src/audiodec.rs index dcc5649..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); @@ -343,7 +345,7 @@ impl AudioControl { pub fn flush(&mut self) { self.pause(); - self.aqueue.truncate(0); + self.aqueue.clear(); SKIP_ADECODING.store(true, Ordering::Release); CURRENT_TIME_SET.store(false, Ordering::Release); let _ = self.apsend.send(PktSendEvent::Flush);