Skip to main content

ffmpeg_next/software/scaling/
filter.rs

1use super::Vector;
2use ffi::*;
3
4pub struct Filter {
5    ptr: *mut SwsFilter,
6}
7
8impl Filter {
9    pub unsafe fn as_ptr(&self) -> *const SwsFilter {
10        self.ptr as *const _
11    }
12
13    pub unsafe fn as_mut_ptr(&mut self) -> *mut SwsFilter {
14        self.ptr
15    }
16}
17
18impl Filter {
19    pub fn get(
20        luma_g_blur: f32,
21        chroma_g_blur: f32,
22        luma_sharpen: f32,
23        chroma_sharpen: f32,
24        chroma_h_shift: f32,
25        chroma_v_shift: f32,
26    ) -> Self {
27        unsafe {
28            Filter {
29                ptr: sws_getDefaultFilter(
30                    luma_g_blur,
31                    chroma_g_blur,
32                    luma_sharpen,
33                    chroma_sharpen,
34                    chroma_h_shift,
35                    chroma_v_shift,
36                    0,
37                ),
38            }
39        }
40    }
41
42    pub fn new() -> Self {
43        Self::get(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
44    }
45
46    pub fn luma_horizontal(&self) -> Vector<'_> {
47        unsafe { Vector::wrap((*self.as_ptr()).lumH) }
48    }
49
50    pub fn luma_horizontal_mut(&mut self) -> Vector<'_> {
51        unsafe { Vector::wrap((*self.as_mut_ptr()).lumH) }
52    }
53
54    pub fn luma_vertical(&self) -> Vector<'_> {
55        unsafe { Vector::wrap((*self.as_ptr()).lumV) }
56    }
57
58    pub fn luma_vertical_mut(&mut self) -> Vector<'_> {
59        unsafe { Vector::wrap((*self.as_mut_ptr()).lumV) }
60    }
61
62    pub fn chroma_horizontal(&self) -> Vector<'_> {
63        unsafe { Vector::wrap((*self.as_ptr()).lumV) }
64    }
65
66    pub fn chroma_horizontal_mut(&mut self) -> Vector<'_> {
67        unsafe { Vector::wrap((*self.as_mut_ptr()).lumV) }
68    }
69
70    pub fn chroma_vertical(&self) -> Vector<'_> {
71        unsafe { Vector::wrap((*self.as_ptr()).lumV) }
72    }
73
74    pub fn chroma_vertical_mut(&mut self) -> Vector<'_> {
75        unsafe { Vector::wrap((*self.as_mut_ptr()).lumV) }
76    }
77}
78
79impl Default for Filter {
80    fn default() -> Self {
81        Self::new()
82    }
83}
84
85impl Drop for Filter {
86    fn drop(&mut self) {
87        unsafe {
88            sws_freeFilter(self.as_mut_ptr());
89        }
90    }
91}