codec/packet: add data access and constructor
This commit is contained in:
@ -6,6 +6,7 @@ pub use self::flag::Flags;
|
|||||||
|
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
use std::slice;
|
||||||
|
|
||||||
use libc::c_int;
|
use libc::c_int;
|
||||||
use ffi::*;
|
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) {
|
pub fn shrink(&mut self, size: usize) {
|
||||||
unsafe {
|
unsafe {
|
||||||
av_shrink_packet(&mut self.0, size as c_int);
|
av_shrink_packet(&mut self.0, size as c_int);
|
||||||
@ -123,6 +133,28 @@ impl Packet {
|
|||||||
SideDataIter::new(&self.0)
|
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> {
|
pub fn read(&mut self, format: &mut format::context::Input) -> Result<(), Error> {
|
||||||
unsafe {
|
unsafe {
|
||||||
match av_read_frame(format.as_mut_ptr(), self.as_mut_ptr()) {
|
match av_read_frame(format.as_mut_ptr(), self.as_mut_ptr()) {
|
||||||
|
Reference in New Issue
Block a user