Skip to main content

ffmpeg_next/software/resampling/
dither.rs

1use crate::ffi::SwrDitherType::*;
2use crate::ffi::*;
3
4#[derive(Eq, PartialEq, Copy, Clone, Debug)]
5pub enum Dither {
6    None,
7    Rectangular,
8    Triangular,
9    TriangularHighPass,
10
11    NoiseShapingLipshitz,
12    NoiseShapingFWeighted,
13    NoiseShapingModifiedEWeighted,
14    NoiseShapingImprovedEWeighted,
15    NoiseShapingShibata,
16    NoiseShapingLowShibata,
17    NoiseShapingHighShibata,
18}
19
20impl From<SwrDitherType> for Dither {
21    fn from(value: SwrDitherType) -> Dither {
22        match value {
23            SWR_DITHER_NONE => Dither::None,
24            SWR_DITHER_RECTANGULAR => Dither::Rectangular,
25            SWR_DITHER_TRIANGULAR => Dither::Triangular,
26            SWR_DITHER_TRIANGULAR_HIGHPASS => Dither::TriangularHighPass,
27
28            SWR_DITHER_NS => Dither::None,
29            SWR_DITHER_NS_LIPSHITZ => Dither::NoiseShapingLipshitz,
30            SWR_DITHER_NS_F_WEIGHTED => Dither::NoiseShapingFWeighted,
31            SWR_DITHER_NS_MODIFIED_E_WEIGHTED => Dither::NoiseShapingModifiedEWeighted,
32            SWR_DITHER_NS_IMPROVED_E_WEIGHTED => Dither::NoiseShapingImprovedEWeighted,
33            SWR_DITHER_NS_SHIBATA => Dither::NoiseShapingShibata,
34            SWR_DITHER_NS_LOW_SHIBATA => Dither::NoiseShapingLowShibata,
35            SWR_DITHER_NS_HIGH_SHIBATA => Dither::NoiseShapingHighShibata,
36            SWR_DITHER_NB => Dither::None,
37
38            #[cfg(feature = "non-exhaustive-enums")]
39            _ => unimplemented!(),
40        }
41    }
42}
43
44impl From<Dither> for SwrDitherType {
45    fn from(value: Dither) -> SwrDitherType {
46        match value {
47            Dither::None => SWR_DITHER_NONE,
48            Dither::Rectangular => SWR_DITHER_RECTANGULAR,
49            Dither::Triangular => SWR_DITHER_TRIANGULAR,
50            Dither::TriangularHighPass => SWR_DITHER_TRIANGULAR_HIGHPASS,
51
52            Dither::NoiseShapingLipshitz => SWR_DITHER_NS_LIPSHITZ,
53            Dither::NoiseShapingFWeighted => SWR_DITHER_NS_F_WEIGHTED,
54            Dither::NoiseShapingModifiedEWeighted => SWR_DITHER_NS_MODIFIED_E_WEIGHTED,
55            Dither::NoiseShapingImprovedEWeighted => SWR_DITHER_NS_IMPROVED_E_WEIGHTED,
56            Dither::NoiseShapingShibata => SWR_DITHER_NS_SHIBATA,
57            Dither::NoiseShapingLowShibata => SWR_DITHER_NS_LOW_SHIBATA,
58            Dither::NoiseShapingHighShibata => SWR_DITHER_NS_HIGH_SHIBATA,
59        }
60    }
61}