ffmpeg_next/software/resampling/
dither.rs1use 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}