Browse code

swr: add triangular dither support

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2012/04/11 04:10:14
Showing 3 changed files
... ...
@@ -40,6 +40,11 @@ void swri_get_dither(void *dst, int len, unsigned seed, enum AVSampleFormat out_
40 40
 
41 41
         switch(method){
42 42
             case SWR_DITHER_RECTANGULAR: v= ((double)seed) / UINT_MAX - 0.5; break;
43
+            case SWR_DITHER_TRIANGULAR :
44
+                v = ((double)seed) / UINT_MAX;
45
+                seed = seed*1664525 + 1013904223;
46
+                v-= ((double)seed) / UINT_MAX;
47
+                break;
43 48
             default: av_assert0(0);
44 49
         }
45 50
 
... ...
@@ -55,6 +55,7 @@ static const AVOption options[]={
55 55
 {"res", "force resampling", 0, AV_OPT_TYPE_CONST, {.dbl=SWR_FLAG_RESAMPLE}, INT_MIN, INT_MAX, 0, "flags"},
56 56
 {"dither", "dither method"      , OFFSET(dither_method), AV_OPT_TYPE_INT, {.dbl=0}, 0, SWR_DITHER_NB-1, 0, "dither_method"},
57 57
 {"rectangular", "rectangular dither", 0, AV_OPT_TYPE_CONST, {.dbl=SWR_DITHER_RECTANGULAR}, INT_MIN, INT_MAX, 0, "dither_method"},
58
+{"triangular" , "triangular dither" , 0, AV_OPT_TYPE_CONST, {.dbl=SWR_DITHER_TRIANGULAR }, INT_MIN, INT_MAX, 0, "dither_method"},
58 59
 
59 60
 {0}
60 61
 };
... ...
@@ -48,6 +48,7 @@
48 48
 enum SwrDitherType {
49 49
     SWR_DITHER_NONE = 0,
50 50
     SWR_DITHER_RECTANGULAR,
51
+    SWR_DITHER_TRIANGULAR,
51 52
     SWR_DITHER_NB,              ///< not part of API/ABI
52 53
 };
53 54