X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=sndplay%2Fsrc%2Fmain.rs;h=39ee76dee8edfd164ec99079d929e6a7d71dc301;hb=89f532457d906fb7b5d2798ab341872a88aafaf7;hp=43f8fca879895f016df669541c16c4d15ced5986;hpb=36ac48e5c692d34bce560528426634c0d75c5c8b;p=nihav-player.git diff --git a/sndplay/src/main.rs b/sndplay/src/main.rs index 43f8fca..39ee76d 100644 --- a/sndplay/src/main.rs +++ b/sndplay/src/main.rs @@ -2,7 +2,6 @@ extern crate libc; extern crate sdl2_sys; extern crate nihav_core; extern crate nihav_registry; -extern crate nihav_allstuff; use std::fs::File; use std::io::prelude::*; @@ -17,8 +16,8 @@ use nihav_core::codecs::*; use nihav_core::demuxers::*; use nihav_core::soundcvt::*; use nihav_registry::detect; -use nihav_allstuff::*; +mod allreg; mod command; use command::*; @@ -86,6 +85,12 @@ impl AudioDevice { } } +impl Drop for AudioDevice { + fn drop(&mut self) { + unsafe { sdl2_sys::SDL_CloseAudioDevice(self.device_id); } + } +} + struct Decoder<'a> { demuxer: Demuxer<'a>, decoder: Box, @@ -142,6 +147,9 @@ impl<'a> Decoder<'a> { match self.decoder.decode(&mut self.dsupp, &pkt) { Ok(frm) => { let buf = frm.get_buffer(); + if let NABufferType::None = buf { + return false; + } if let Some(pts) = frm.ts.get_pts() { self.samplepos = NATimeInfo::ts_to_time(pts, u64::from(self.arate), frm.ts.tb_num, frm.ts.tb_den); } @@ -208,9 +216,9 @@ fn format_time(ms: u64) -> String { impl Player { fn new() -> Self { let mut dmx_reg = RegisteredDemuxers::new(); - nihav_register_all_demuxers(&mut dmx_reg); + allreg::register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - nihav_register_all_decoders(&mut dec_reg); + allreg::register_all_decoders(&mut dec_reg); unsafe { if sdl2_sys::SDL_Init(sdl2_sys::SDL_INIT_AUDIO) != 0 { @@ -303,7 +311,7 @@ impl Player { let ch = ainfo.channels; println!("Playing {} [{}Hz {}ch]", name, arate, ch); - let ret = AudioDevice::open(arate, ch.max(2)); + let ret = AudioDevice::open(arate, ch.min(2)); if ret.is_none() { println!("cannot open output"); return;