]> git.nihav.org Git - nihav.git/blobdiff - nihav-core/src/frame.rs
avi demuxer: sample size is already in bits
[nihav.git] / nihav-core / src / frame.rs
index d51d226816394c8488d42f88e5d84b29f6998fa3..697013c442a99d653004bcc4a593f1feb8ab1753 100644 (file)
@@ -8,10 +8,10 @@ pub use crate::refs::*;
 #[allow(dead_code)]
 #[derive(Clone,Copy,PartialEq)]
 pub struct NAAudioInfo {
-    sample_rate: u32,
-    channels:    u8,
-    format:      NASoniton,
-    block_len:   usize,
+    pub sample_rate: u32,
+    pub channels:    u8,
+    pub format:      NASoniton,
+    pub block_len:   usize,
 }
 
 impl NAAudioInfo {
@@ -158,7 +158,7 @@ impl<T: Clone> NAAudioBuffer<T> {
     }
     pub fn get_stride(&self) -> usize { self.stride }
     pub fn get_info(&self) -> NAAudioInfo { self.info }
-    pub fn get_chmap(&self) -> NAChannelMap { self.chmap.clone() }
+    pub fn get_chmap(&self) -> &NAChannelMap { &self.chmap }
     pub fn get_data(&self) -> &Vec<T> { self.data.as_ref() }
     pub fn get_data_mut(&mut self) -> Option<&mut Vec<T>> { self.data.as_mut() }
     pub fn copy_buffer(&mut self) -> Self {
@@ -166,7 +166,7 @@ impl<T: Clone> NAAudioBuffer<T> {
         data.clone_from(self.data.as_ref());
         let mut offs: Vec<usize> = Vec::with_capacity(self.offs.len());
         offs.clone_from(&self.offs);
-        NAAudioBuffer { info: self.info, data: NABufferRef::new(data), offs, chmap: self.get_chmap(), len: self.len, stride: self.stride }
+        NAAudioBuffer { info: self.info, data: NABufferRef::new(data), offs, chmap: self.get_chmap().clone(), len: self.len, stride: self.stride }
     }
     pub fn get_length(&self) -> usize { self.len }
 }
@@ -235,6 +235,46 @@ impl NABufferType {
             _ => None,
         }
     }
+    pub fn get_audio_info(&self) -> Option<NAAudioInfo> {
+        match *self {
+            NABufferType::AudioU8(ref ab)     => Some(ab.get_info()),
+            NABufferType::AudioI16(ref ab)    => Some(ab.get_info()),
+            NABufferType::AudioI32(ref ab)    => Some(ab.get_info()),
+            NABufferType::AudioF32(ref ab)    => Some(ab.get_info()),
+            NABufferType::AudioPacked(ref ab) => Some(ab.get_info()),
+            _ => None,
+        }
+    }
+    pub fn get_chmap(&self) -> Option<&NAChannelMap> {
+        match *self {
+            NABufferType::AudioU8(ref ab)     => Some(ab.get_chmap()),
+            NABufferType::AudioI16(ref ab)    => Some(ab.get_chmap()),
+            NABufferType::AudioI32(ref ab)    => Some(ab.get_chmap()),
+            NABufferType::AudioF32(ref ab)    => Some(ab.get_chmap()),
+            NABufferType::AudioPacked(ref ab) => Some(ab.get_chmap()),
+            _ => None,
+        }
+    }
+    pub fn get_audio_length(&self) -> usize {
+        match *self {
+            NABufferType::AudioU8(ref ab)     => ab.get_length(),
+            NABufferType::AudioI16(ref ab)    => ab.get_length(),
+            NABufferType::AudioI32(ref ab)    => ab.get_length(),
+            NABufferType::AudioF32(ref ab)    => ab.get_length(),
+            NABufferType::AudioPacked(ref ab) => ab.get_length(),
+            _ => 0,
+        }
+    }
+    pub fn get_audio_stride(&self) -> usize {
+        match *self {
+            NABufferType::AudioU8(ref ab)     => ab.get_stride(),
+            NABufferType::AudioI16(ref ab)    => ab.get_stride(),
+            NABufferType::AudioI32(ref ab)    => ab.get_stride(),
+            NABufferType::AudioF32(ref ab)    => ab.get_stride(),
+            NABufferType::AudioPacked(ref ab) => ab.get_stride(),
+            _ => 0,
+        }
+    }
     pub fn get_abuf_u8(&self) -> Option<NAAudioBuffer<u8>> {
         match *self {
             NABufferType::AudioU8(ref ab) => Some(ab.clone()),