Skip to main content

ffmpeg_the_third/software/resampling/
dither.rs

1use crate::ffi::*;
2#[cfg(feature = "serialize")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Eq, PartialEq, Copy, Clone, Debug)]
6#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
7pub enum Dither {
8    None,
9    Rectangular,
10    Triangular,
11    TriangularHighPass,
12
13    NoiseShapingLipshitz,
14    NoiseShapingFWeighted,
15    NoiseShapingModifiedEWeighted,
16    NoiseShapingImprovedEWeighted,
17    NoiseShapingShibata,
18    NoiseShapingLowShibata,
19    NoiseShapingHighShibata,
20}
21
22impl From<SwrDitherType> for Dither {
23    fn from(value: SwrDitherType) -> Dither {
24        use SwrDitherType as AV;
25
26        match value {
27            AV::NONE => Dither::None,
28            AV::RECTANGULAR => Dither::Rectangular,
29            AV::TRIANGULAR => Dither::Triangular,
30            AV::TRIANGULAR_HIGHPASS => Dither::TriangularHighPass,
31
32            AV::NS => Dither::None,
33            AV::NS_LIPSHITZ => Dither::NoiseShapingLipshitz,
34            AV::NS_F_WEIGHTED => Dither::NoiseShapingFWeighted,
35            AV::NS_MODIFIED_E_WEIGHTED => Dither::NoiseShapingModifiedEWeighted,
36            AV::NS_IMPROVED_E_WEIGHTED => Dither::NoiseShapingImprovedEWeighted,
37            AV::NS_SHIBATA => Dither::NoiseShapingShibata,
38            AV::NS_LOW_SHIBATA => Dither::NoiseShapingLowShibata,
39            AV::NS_HIGH_SHIBATA => Dither::NoiseShapingHighShibata,
40
41            AV::NB => unreachable!(),
42
43            _ => unimplemented!(),
44        }
45    }
46}
47
48impl From<Dither> for SwrDitherType {
49    fn from(value: Dither) -> SwrDitherType {
50        use SwrDitherType as AV;
51
52        match value {
53            Dither::None => AV::NONE,
54            Dither::Rectangular => AV::RECTANGULAR,
55            Dither::Triangular => AV::TRIANGULAR,
56            Dither::TriangularHighPass => AV::TRIANGULAR_HIGHPASS,
57
58            Dither::NoiseShapingLipshitz => AV::NS_LIPSHITZ,
59            Dither::NoiseShapingFWeighted => AV::NS_F_WEIGHTED,
60            Dither::NoiseShapingModifiedEWeighted => AV::NS_MODIFIED_E_WEIGHTED,
61            Dither::NoiseShapingImprovedEWeighted => AV::NS_IMPROVED_E_WEIGHTED,
62            Dither::NoiseShapingShibata => AV::NS_SHIBATA,
63            Dither::NoiseShapingLowShibata => AV::NS_LOW_SHIBATA,
64            Dither::NoiseShapingHighShibata => AV::NS_HIGH_SHIBATA,
65        }
66    }
67}