1use super::Context;
2use ffi::*;
3use libc::c_int;
4use {Error, Frame};
5
6pub struct Sink<'a> {
7 ctx: &'a mut Context<'a>,
8}
9
10impl<'a> Sink<'a> {
11 pub unsafe fn wrap<'b>(ctx: &'b mut Context<'b>) -> Sink<'b> {
12 Sink { ctx }
13 }
14}
15
16impl<'a> Sink<'a> {
17 pub fn frame(&mut self, frame: &mut Frame) -> Result<(), Error> {
18 unsafe {
19 match av_buffersink_get_frame(self.ctx.as_mut_ptr(), frame.as_mut_ptr()) {
20 n if n >= 0 => Ok(()),
21 e => Err(Error::from(e)),
22 }
23 }
24 }
25
26 pub fn samples(&mut self, frame: &mut Frame, samples: usize) -> Result<(), Error> {
27 unsafe {
28 match av_buffersink_get_samples(
29 self.ctx.as_mut_ptr(),
30 frame.as_mut_ptr(),
31 samples as c_int,
32 ) {
33 n if n >= 0 => Ok(()),
34 e => Err(Error::from(e)),
35 }
36 }
37 }
38
39 pub fn set_frame_size(&mut self, value: u32) {
40 unsafe {
41 av_buffersink_set_frame_size(self.ctx.as_mut_ptr(), value);
42 }
43 }
44}
45