ffmpeg_rs/filter/context/
context.rs

1use std::marker::PhantomData;
2
3use super::{Sink, Source};
4use ffi::*;
5use libc::c_void;
6use {format, option, ChannelLayout};
7
8pub struct Context<'a> {
9    ptr: *mut AVFilterContext,
10
11    _marker: PhantomData<&'a ()>,
12}
13
14impl<'a> Context<'a> {
15    pub unsafe fn wrap(ptr: *mut AVFilterContext) -> Self {
16        Context {
17            ptr,
18            _marker: PhantomData,
19        }
20    }
21
22    pub unsafe fn as_ptr(&self) -> *const AVFilterContext {
23        self.ptr as *const _
24    }
25
26    pub unsafe fn as_mut_ptr(&mut self) -> *mut AVFilterContext {
27        self.ptr
28    }
29}
30
31impl<'a> Context<'a> {
32    pub fn source(&'a mut self) -> Source<'a> {
33        unsafe { Source::wrap(self) }
34    }
35
36    pub fn sink(&'a mut self) -> Sink<'a> {
37        unsafe { Sink::wrap(self) }
38    }
39
40    pub fn set_pixel_format(&mut self, value: format::Pixel) {
41        let _ = option::Settable::set::<AVPixelFormat>(self, "pix_fmts", &value.into());
42    }
43
44    pub fn set_sample_format(&mut self, value: format::Sample) {
45        let _ = option::Settable::set::<AVSampleFormat>(self, "sample_fmts", &value.into());
46    }
47
48    pub fn set_sample_rate(&mut self, value: u32) {
49        let _ = option::Settable::set(self, "sample_rates", &i64::from(value));
50    }
51
52    pub fn set_channel_layout(&mut self, value: ChannelLayout) {
53        let _ = option::Settable::set(self, "channel_layouts", &value.bits());
54    }
55}
56
57unsafe impl<'a> option::Target for Context<'a> {
58    fn as_ptr(&self) -> *const c_void {
59        self.ptr as *const _
60    }
61
62    fn as_mut_ptr(&mut self) -> *mut c_void {
63        self.ptr as *mut _
64    }
65}
66
67impl<'a> option::Settable for Context<'a> {}