forked from mirrors/gstreamer-rs
Implement std::io::Read on Adapter
Patch based on the one from Thibault Saunier for gst-plugin-rs's Adapter
This commit is contained in:
parent
95204c2294
commit
2f7ee30aa1
1 changed files with 26 additions and 0 deletions
|
@ -10,6 +10,7 @@ use ffi;
|
||||||
use glib::translate::*;
|
use glib::translate::*;
|
||||||
use gst;
|
use gst;
|
||||||
use Adapter;
|
use Adapter;
|
||||||
|
use std::io;
|
||||||
|
|
||||||
impl Adapter {
|
impl Adapter {
|
||||||
pub fn copy(&self, offset: usize, dest: &mut [u8]) {
|
pub fn copy(&self, offset: usize, dest: &mut [u8]) {
|
||||||
|
@ -30,3 +31,28 @@ impl Adapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl io::Read for Adapter {
|
||||||
|
fn read(&mut self, buf: &mut [u8]) -> Result<usize, io::Error> {
|
||||||
|
let mut len = self.available();
|
||||||
|
|
||||||
|
if len == 0 {
|
||||||
|
return Err(io::Error::new(
|
||||||
|
io::ErrorKind::WouldBlock,
|
||||||
|
format!(
|
||||||
|
"Missing data: requesting {} but only got {}.",
|
||||||
|
buf.len(),
|
||||||
|
len
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf.len() < len {
|
||||||
|
len = buf.len();
|
||||||
|
}
|
||||||
|
|
||||||
|
self.copy(0, &mut buf[0..len]);
|
||||||
|
self.flush(len);
|
||||||
|
Ok(len)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue