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