aboutsummaryrefslogtreecommitdiff
path: root/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch')
-rw-r--r--lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch b/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch
new file mode 100644
index 0000000000..b826a613b0
--- /dev/null
+++ b/lib/ffmpeg/patches/0057-backport-swresample-Make-rematrix-maxvalue-user-settable.patch
@@ -0,0 +1,84 @@
+From e2b718464e92fcde3d21c6653c88ddec2ab21c3f Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Mon, 22 Jul 2013 03:23:54 +0200
+Subject: [PATCH] swresample: Make rematrix maxvalue user settable
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libswresample/rematrix.c | 13 +++++++++++--
+ libswresample/swresample.c | 1 +
+ libswresample/swresample_internal.h | 1 +
+ libswresample/version.h | 2 +-
+ 4 files changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c
+index 48aff3b..33e2966 100644
+--- a/libswresample/rematrix.c
++++ b/libswresample/rematrix.c
+@@ -120,6 +120,7 @@ av_cold static int auto_matrix(SwrContext *s)
+ double maxcoef=0;
+ char buf[128];
+ const int matrix_encoding = s->matrix_encoding;
++ float maxval;
+
+ in_ch_layout = clean_layout(s, s->in_ch_layout);
+ if(!sane_layout(in_ch_layout)){
+@@ -304,8 +305,16 @@ av_cold static int auto_matrix(SwrContext *s)
+ if(s->rematrix_volume < 0)
+ maxcoef = -s->rematrix_volume;
+
+- if(( av_get_packed_sample_fmt(s->out_sample_fmt) < AV_SAMPLE_FMT_FLT
+- || av_get_packed_sample_fmt(s->int_sample_fmt) < AV_SAMPLE_FMT_FLT) && maxcoef > 1.0){
++ if (s->rematrix_maxval > 0) {
++ maxval = s->rematrix_maxval;
++ } else if ( av_get_packed_sample_fmt(s->out_sample_fmt) < AV_SAMPLE_FMT_FLT
++ || av_get_packed_sample_fmt(s->int_sample_fmt) < AV_SAMPLE_FMT_FLT) {
++ maxval = 1.0;
++ } else
++ maxval = INT_MAX;
++
++ if(maxcoef > maxval){
++ maxcoef /= maxval;
+ for(i=0; i<SWR_CH_MAX; i++)
+ for(j=0; j<SWR_CH_MAX; j++){
+ s->matrix[i][j] /= maxcoef;
+diff --git a/libswresample/swresample.c b/libswresample/swresample.c
+index ba2afdb..cdfe5bf 100644
+--- a/libswresample/swresample.c
++++ b/libswresample/swresample.c
+@@ -68,6 +68,7 @@
+ {"lfe_mix_level" , "set LFE mix level" , OFFSET(lfe_mix_level ), AV_OPT_TYPE_FLOAT, {.dbl=0 }, -32 , 32 , PARAM},
+ {"rmvol" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM},
+ {"rematrix_volume" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM},
++{"rematrix_maxval" , "set rematrix maxval" , OFFSET(rematrix_maxval), AV_OPT_TYPE_FLOAT, {.dbl=0.0 }, 0 , 1000 , PARAM},
+
+ {"flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"},
+ {"swr_flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"},
+diff --git a/libswresample/swresample_internal.h b/libswresample/swresample_internal.h
+index 108f837..ab19f21 100644
+--- a/libswresample/swresample_internal.h
++++ b/libswresample/swresample_internal.h
+@@ -82,6 +82,7 @@ struct SwrContext {
+ float clev; ///< center mixing level
+ float lfe_mix_level; ///< LFE mixing level
+ float rematrix_volume; ///< rematrixing volume coefficient
++ float rematrix_maxval; ///< maximum value for rematrixing output
+ enum AVMatrixEncoding matrix_encoding; /**< matrixed stereo encoding */
+ const int *channel_map; ///< channel index (or -1 if muted channel) map
+ int used_ch_count; ///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count)
+diff --git a/libswresample/version.h b/libswresample/version.h
+index df9df48..8272b76 100644
+--- a/libswresample/version.h
++++ b/libswresample/version.h
+@@ -30,7 +30,7 @@
+
+ #define LIBSWRESAMPLE_VERSION_MAJOR 0
+ #define LIBSWRESAMPLE_VERSION_MINOR 17
+-#define LIBSWRESAMPLE_VERSION_MICRO 102
++#define LIBSWRESAMPLE_VERSION_MICRO 103
+
+ #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \
+ LIBSWRESAMPLE_VERSION_MINOR, \
+--
+1.8.4
+