}
/// Return the length of frame in samples.
pub fn get_length(&self) -> usize { self.len }
+ /// Truncates buffer length if possible.
+ ///
+ /// In case when new length is larger than old length nothing is done.
+ pub fn truncate(&mut self, new_len: usize) {
+ self.len = self.len.min(new_len);
+ }
fn print_contents(&self, datatype: &str) {
println!("Audio buffer with {} data, stride {}, step {}", datatype, self.stride, self.step);
let data: Vec<i16> = vec![0; length];
let buf: NAAudioBuffer<i16> = NAAudioBuffer { data: NABufferRef::new(data), info: ainfo, offs, chmap, len: nsamples, stride, step };
Ok(NABufferType::AudioI16(buf))
+ } else if ainfo.format.get_bits() == 32 && ainfo.format.is_signed() {
+ let data: Vec<i32> = vec![0; length];
+ let buf: NAAudioBuffer<i32> = NAAudioBuffer { data: NABufferRef::new(data), info: ainfo, offs, chmap, len: nsamples, stride, step };
+ Ok(NABufferType::AudioI32(buf))
} else {
Err(AllocatorError::TooLargeDimensions)
}
}
}
}
- fn get_cur_ts(&self) -> u64 { self.pts.unwrap_or(self.dts.unwrap_or(0)) }
+ fn get_cur_ts(&self) -> u64 { self.pts.unwrap_or_else(|| self.dts.unwrap_or(0)) }
fn get_cur_millis(&self) -> u64 {
let ts = self.get_cur_ts();
Self::ts_to_time(ts, 1000, self.tb_num, self.tb_den)
None,
}
+impl Default for NATimePoint {
+ fn default() -> Self {
+ NATimePoint::None
+ }
+}
+
impl fmt::Display for NATimePoint {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
let ret = parts.next().unwrap().parse::<u64>();
if ret.is_err() { return Err(FormatParseError {}); }
let seconds = ret.unwrap();
- if seconds >= 60 { return Err(FormatParseError {}); }
+ if mins.is_some() && seconds >= 60 { return Err(FormatParseError {}); }
let millis = if let Some(val) = parts.next() {
let mut mval = 0;
let mut base = 0;