codec/packet: add data access and constructor

This commit is contained in:
meh 2015-09-22 02:44:37 +02:00
parent 2ca44d08d4
commit 1fc224fbae

View File

@ -6,6 +6,7 @@ pub use self::flag::Flags;
use std::marker::PhantomData;
use std::mem;
use std::slice;
use libc::c_int;
use ffi::*;
@ -47,6 +48,15 @@ impl Packet {
}
}
pub fn copy(data: &[u8]) -> Self {
use std::io::Write;
let mut packet = Packet::new(data.len());
packet.data_mut().unwrap().write(data).unwrap();
packet
}
pub fn shrink(&mut self, size: usize) {
unsafe {
av_shrink_packet(&mut self.0, size as c_int);
@ -123,6 +133,28 @@ impl Packet {
SideDataIter::new(&self.0)
}
pub fn data(&self) -> Option<&[u8]> {
unsafe {
if self.0.data.is_null() {
None
}
else {
Some(slice::from_raw_parts(self.0.data, self.0.size as usize))
}
}
}
pub fn data_mut(&mut self) -> Option<&mut [u8]> {
unsafe {
if self.0.data.is_null() {
None
}
else {
Some(slice::from_raw_parts_mut(self.0.data, self.0.size as usize))
}
}
}
pub fn read(&mut self, format: &mut format::context::Input) -> Result<(), Error> {
unsafe {
match av_read_frame(format.as_mut_ptr(), self.as_mut_ptr()) {