ffmpeg_next/filter/context/
context.rs

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