forked from mirrors/gstreamer-rs
gstreamer: add MemoryRef::dump()
This commit is contained in:
parent
a418dcbe05
commit
c298577139
3 changed files with 58 additions and 0 deletions
|
@ -28,6 +28,7 @@ serde = { version = "1.0", optional = true }
|
||||||
serde_bytes = { version = "0.11", optional = true }
|
serde_bytes = { version = "0.11", optional = true }
|
||||||
serde_derive = { version = "1.0", optional = true }
|
serde_derive = { version = "1.0", optional = true }
|
||||||
paste = { version = "0.1" }
|
paste = { version = "0.1" }
|
||||||
|
pretty-hex = "0.1"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
rustdoc-stripper = { version = "0.1", optional = true }
|
rustdoc-stripper = { version = "0.1", optional = true }
|
||||||
|
|
|
@ -36,6 +36,8 @@ extern crate futures_core;
|
||||||
|
|
||||||
extern crate muldiv;
|
extern crate muldiv;
|
||||||
|
|
||||||
|
extern crate pretty_hex;
|
||||||
|
|
||||||
#[cfg(feature = "ser_de")]
|
#[cfg(feature = "ser_de")]
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
#[cfg(feature = "ser_de")]
|
#[cfg(feature = "ser_de")]
|
||||||
|
|
|
@ -308,6 +308,10 @@ impl MemoryRef {
|
||||||
assert!(offset + (size as isize) < (self.get_maxsize() as isize));
|
assert!(offset + (size as isize) < (self.get_maxsize() as isize));
|
||||||
unsafe { gst_sys::gst_memory_resize(self.as_mut_ptr(), offset, size) }
|
unsafe { gst_sys::gst_memory_resize(self.as_mut_ptr(), offset, size) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dump(&self, size: Option<usize>) -> Dump {
|
||||||
|
Dump { memory: self, size }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T> MemoryMap<'a, T> {
|
impl<'a, T> MemoryMap<'a, T> {
|
||||||
|
@ -466,3 +470,54 @@ impl<T> Eq for MappedMemory<T> {}
|
||||||
|
|
||||||
unsafe impl<T> Send for MappedMemory<T> {}
|
unsafe impl<T> Send for MappedMemory<T> {}
|
||||||
unsafe impl<T> Sync for MappedMemory<T> {}
|
unsafe impl<T> Sync for MappedMemory<T> {}
|
||||||
|
|
||||||
|
pub struct Dump<'a> {
|
||||||
|
memory: &'a MemoryRef,
|
||||||
|
size: Option<usize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Dump<'a> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter, debug: bool) -> fmt::Result {
|
||||||
|
use pretty_hex::*;
|
||||||
|
|
||||||
|
let map = self.memory.map_readable().expect("Failed to map memory");
|
||||||
|
let data = map.as_slice();
|
||||||
|
let size = self.size.unwrap_or_else(|| self.memory.get_size());
|
||||||
|
let data = &data[0..size];
|
||||||
|
|
||||||
|
if debug {
|
||||||
|
write!(f, "{:?}", data.hex_dump())
|
||||||
|
} else {
|
||||||
|
write!(f, "{}", data.hex_dump())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Display for Dump<'a> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
self.fmt(f, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Debug for Dump<'a> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
self.fmt(f, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
#[test]
|
||||||
|
fn test_dump() {
|
||||||
|
::init().unwrap();
|
||||||
|
|
||||||
|
let mem = ::Memory::from_slice(vec![1, 2, 3, 4]);
|
||||||
|
println!("{}", mem.dump(Some(mem.get_size())));
|
||||||
|
|
||||||
|
let mem = ::Memory::from_slice(vec![1, 2, 3, 4]);
|
||||||
|
println!("{:?}", mem.dump(Some(2)));
|
||||||
|
|
||||||
|
let mem = ::Memory::from_slice(vec![0; 64]);
|
||||||
|
dbg!(mem.dump(None));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue