ffmpeg_the_third/software/resampling/
dither.rs

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