core/frame: drop unneeded mut
[nihav.git] / nihav-core / src / frame.rs
index f596dc95ad2b1d02b684c6563be6bd0492a4e5ec..7a09be4c25dfb5076962e18675dd2106ad133226 100644 (file)
@@ -168,7 +168,7 @@ impl<T: Clone> NAVideoBuffer<T> {
     /// Returns the number of components in picture format.
     pub fn get_num_components(&self) -> usize { self.offs.len() }
     /// Creates a copy of current `NAVideoBuffer`.
-    pub fn copy_buffer(&mut self) -> Self {
+    pub fn copy_buffer(&self) -> Self {
         let mut data: Vec<T> = Vec::with_capacity(self.data.len());
         data.clone_from(self.data.as_ref());
         let mut offs: Vec<usize> = Vec::with_capacity(self.offs.len());
@@ -1357,7 +1357,7 @@ impl NAStream {
         self.tb_den = d;
     }
     /// Returns stream duration.
-    pub fn get_duration(&self) -> usize { self.num }
+    pub fn get_duration(&self) -> u64 { self.duration }
     /// Converts current instance into a reference-counted one.
     pub fn into_ref(self) -> NAStreamRef { Arc::new(self) }
 }
@@ -1444,6 +1444,37 @@ impl fmt::Display for NAPacket {
     }
 }
 
+/// Packet with a piece of data for a raw stream.
+pub struct NARawData {
+    stream:         NAStreamRef,
+    buffer:         NABufferRef<Vec<u8>>,
+}
+
+impl NARawData {
+    /// Constructs a new `NARawData` instance.
+    pub fn new(stream: NAStreamRef, vec: Vec<u8>) -> Self {
+        Self { stream, buffer: NABufferRef::new(vec) }
+    }
+    /// Constructs a new `NARawData` instance reusing a buffer reference.
+    pub fn new_from_refbuf(stream: NAStreamRef, buffer: NABufferRef<Vec<u8>>) -> Self {
+        Self { stream, buffer }
+    }
+    /// Returns information about the stream this data belongs to.
+    pub fn get_stream(&self) -> NAStreamRef { self.stream.clone() }
+    /// Returns a reference to packet data.
+    pub fn get_buffer(&self) -> NABufferRef<Vec<u8>> { self.buffer.clone() }
+    /// Assigns raw data to a new stream.
+    pub fn reassign(&mut self, stream: NAStreamRef) {
+        self.stream = stream;
+    }
+}
+
+impl fmt::Display for NARawData {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "[raw data for {} size {}]", self.stream, self.buffer.len())
+    }
+}
+
 #[cfg(test)]
 mod test {
     use super::*;