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);
}
+ if buf.get_audio_length() == 0 {
+ return false;
+ }
let out_buf = convert_audio_frame(&buf, &self.dst_info, &self.dst_chmap).unwrap();
match out_buf {
NABufferType::AudioI16(abuf) => {
fn seek(&mut self, time: u64) -> bool {
let ret = self.demuxer.seek(NATimePoint::Milliseconds(time));
if ret.is_err() { println!(" seek error\n"); }
+ self.decoder.flush();
ret.is_ok()
}
}
}
let (dsupp, decoder) = dec.unwrap();
- let ainfo = ainfo.unwrap().get_properties().get_audio_info().unwrap();
- let arate = if ainfo.sample_rate > 0 { ainfo.sample_rate } else { 44100 };
+ let info = ainfo.unwrap();
+ let ainfo = info.get_properties().get_audio_info().unwrap();
+ let sbr_hack = info.get_name() == "aac" && ainfo.sample_rate < 32000;
+ let arate = if ainfo.sample_rate > 0 {
+ if !sbr_hack {
+ ainfo.sample_rate
+ } else {
+ ainfo.sample_rate * 2
+ }
+ } else { 44100 };
let ch = ainfo.channels;
println!("Playing {} [{}Hz {}ch]", name, arate, ch);
}
}
std::io::stdout().flush().unwrap();
- if device.size() < underfill_limit && !self.paused && refill_limit < (1 << 20) {
+ if device.size() < underfill_limit && !self.paused && (refill_limit < (1 << 20)) & !eof {
if full_ms > 5000 {
println!("underrun!");
}