[FFmpeg-cvslog] swresample: Make rematrix maxvalue user settable

Michael Niedermayer git at videolan.org
Mon Jul 22 03:32:32 CEST 2013


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Mon Jul 22 03:23:54 2013 +0200| [e2b718464e92fcde3d21c6653c88ddec2ab21c3f] | committer: Michael Niedermayer

swresample: Make rematrix maxvalue user settable

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

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e2b718464e92fcde3d21c6653c88ddec2ab21c3f
---

 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 @@ static const AVOption options[]={
 {"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, \



More information about the ffmpeg-cvslog mailing list