util/frame/video: refactor data() and data_mut()

This commit is contained in:
meh 2015-10-26 14:44:06 +01:00
parent e9a9ad5720
commit 8298586d9f

View File

@ -267,32 +267,26 @@ impl Video {
} }
} }
pub fn data(&self) -> Vec<&[u8]> { pub fn data(&self, index: usize) -> &[u8] {
let mut result = Vec::new(); if index >= self.planes() {
panic!("out of bounds");
unsafe {
for (i, length) in (*self.as_ptr()).linesize.iter().take_while(|l| **l > 0).enumerate() {
result.push(slice::from_raw_parts(
(*self.as_ptr()).data[i],
*length as usize * self.height() as usize));
}
} }
result unsafe {
slice::from_raw_parts((*self.as_ptr()).data[index],
(*self.as_ptr()).linesize[index] as usize * self.height() as usize)
}
} }
pub fn data_mut(&mut self) -> Vec<&mut [u8]> { pub fn data_mut(&mut self, index: usize) -> &mut [u8] {
let mut result = Vec::new(); if index >= self.planes() {
panic!("out of bounds");
unsafe {
for (i, length) in (*self.as_ptr()).linesize.iter().take_while(|l| **l > 0).enumerate() {
result.push(slice::from_raw_parts_mut(
(*self.as_mut_ptr()).data[i],
*length as usize * self.height() as usize));
}
} }
result unsafe {
slice::from_raw_parts_mut((*self.as_mut_ptr()).data[index],
(*self.as_ptr()).linesize[index] as usize * self.height() as usize)
}
} }
} }