diff --git a/src/codec/picture.rs b/src/codec/picture.rs index 020ed63..7e5b232 100644 --- a/src/codec/picture.rs +++ b/src/codec/picture.rs @@ -1,4 +1,5 @@ use std::mem; +use std::slice; use std::marker::PhantomData; use libc::{c_int, size_t}; @@ -79,7 +80,6 @@ impl<'a> Picture<'a> { } } - pub fn crop(&mut self, source: &Picture, top: usize, left: usize) -> Result<(), Error> { if self.format != source.format { return Err(Error::new(AVERROR_BUG)); @@ -92,6 +92,30 @@ impl<'a> Picture<'a> { } } } + + pub fn data(&self) -> Vec<&[u8]> { + let mut result = Vec::new(); + + unsafe { + for (i, length) in (*self.ptr).linesize.iter().take_while(|l| **l > 0).enumerate() { + result.push(slice::from_raw_parts((*self.ptr).data[i], *length as usize)) + } + } + + result + } + + pub fn data_mut(&mut self) -> Vec<&mut [u8]> { + let mut result = Vec::new(); + + unsafe { + for (i, length) in (*self.ptr).linesize.iter().take_while(|l| **l > 0).enumerate() { + result.push(slice::from_raw_parts_mut((*self.ptr).data[i], *length as usize)) + } + } + + result + } } impl<'a> Clone for Picture<'a> {