1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use std::ptr; use super::Context; use ffi::*; use {Error, Frame}; pub struct Source<'a> { ctx: &'a mut Context<'a>, } impl<'a> Source<'a> { pub unsafe fn wrap<'b>(ctx: &'b mut Context<'b>) -> Source<'b> { Source { ctx } } } impl<'a> Source<'a> { pub fn failed_requests(&self) -> usize { unsafe { av_buffersrc_get_nb_failed_requests(self.ctx.as_ptr() as *mut _) as usize } } pub fn add(&mut self, frame: &Frame) -> Result<(), Error> { unsafe { match av_buffersrc_add_frame(self.ctx.as_mut_ptr(), frame.as_ptr() as *mut _) { 0 => Ok(()), e => Err(Error::from(e)), } } } pub fn flush(&mut self) -> Result<(), Error> { unsafe { self.add(&Frame::wrap(ptr::null_mut())) } } pub fn close(&mut self, pts: i64) -> Result<(), Error> { unsafe { match av_buffersrc_close(self.ctx.as_mut_ptr(), pts, 0) { 0 => Ok(()), e => Err(Error::from(e)), } } } }