playa_ffmpeg/software/resampling/
dither.rs

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