[FFmpeg-cvslog] swr: support a seperate output sample bits.
Michael Niedermayer
git at videolan.org
Sun Feb 24 20:37:28 CET 2013
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun Feb 24 19:05:54 2013 +0100| [8b3affda87e45165bd7d968a8cad82fe700f60b7] | committer: Michael Niedermayer
swr: support a seperate output sample bits.
This avoids user apps having to mangle dither scale. for pcm24
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8b3affda87e45165bd7d968a8cad82fe700f60b7
---
libswresample/dither.c | 3 +++
libswresample/swresample.c | 1 +
libswresample/swresample_internal.h | 1 +
3 files changed, 5 insertions(+)
diff --git a/libswresample/dither.c b/libswresample/dither.c
index d70505c..d0193dd 100644
--- a/libswresample/dither.c
+++ b/libswresample/dither.c
@@ -94,6 +94,9 @@ int swri_dither_init(SwrContext *s, enum AVSampleFormat out_fmt, enum AVSampleFo
scale *= s->dither.scale;
+ if (out_fmt == AV_SAMPLE_FMT_S32 && s->dither.output_sample_bits)
+ scale *= 1<<(32-s->dither.output_sample_bits);
+
s->dither.ns_pos = 0;
s->dither.noise_scale= scale;
s->dither.ns_scale = scale;
diff --git a/libswresample/swresample.c b/libswresample/swresample.c
index f69e36e..f85f88f 100644
--- a/libswresample/swresample.c
+++ b/libswresample/swresample.c
@@ -127,6 +127,7 @@ static const AVOption options[]={
{ "kaiser_beta" , "set swr Kaiser Window Beta" , OFFSET(kaiser_beta) , AV_OPT_TYPE_INT , {.i64=9 }, 2 , 16 , PARAM },
+{ "output_sample_bits" , "" , OFFSET(dither.output_sample_bits) , AV_OPT_TYPE_INT , {.i64=0 }, 0 , 64 , 0 },
{0}
};
diff --git a/libswresample/swresample_internal.h b/libswresample/swresample_internal.h
index 3f80904..17b85d5 100644
--- a/libswresample/swresample_internal.h
+++ b/libswresample/swresample_internal.h
@@ -63,6 +63,7 @@ struct DitherContext {
float ns_errors[SWR_CH_MAX][2*NS_TAPS];
AudioData noise; ///< noise used for dithering
AudioData temp; ///< temporary storage when writing into the input buffer isnt possible
+ int output_sample_bits; ///< the number of used output bits, needed to scale dither correctly
};
struct SwrContext {
More information about the ffmpeg-cvslog
mailing list