Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.1
| @@ -120,6 +120,7 @@ av_cold static int auto_matrix(SwrContext *s) | |||||
| double maxcoef=0; | double maxcoef=0; | ||||
| char buf[128]; | char buf[128]; | ||||
| const int matrix_encoding = s->matrix_encoding; | const int matrix_encoding = s->matrix_encoding; | ||||
| float maxval; | |||||
| in_ch_layout = clean_layout(s, s->in_ch_layout); | in_ch_layout = clean_layout(s, s->in_ch_layout); | ||||
| if(!sane_layout(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) | if(s->rematrix_volume < 0) | ||||
| maxcoef = -s->rematrix_volume; | 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(i=0; i<SWR_CH_MAX; i++) | ||||
| for(j=0; j<SWR_CH_MAX; j++){ | for(j=0; j<SWR_CH_MAX; j++){ | ||||
| s->matrix[i][j] /= maxcoef; | s->matrix[i][j] /= maxcoef; | ||||
| @@ -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}, | {"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}, | {"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_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"}, | {"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"}, | {"swr_flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"}, | ||||
| @@ -82,6 +82,7 @@ struct SwrContext { | |||||
| float clev; ///< center mixing level | float clev; ///< center mixing level | ||||
| float lfe_mix_level; ///< LFE mixing level | float lfe_mix_level; ///< LFE mixing level | ||||
| float rematrix_volume; ///< rematrixing volume coefficient | float rematrix_volume; ///< rematrixing volume coefficient | ||||
| float rematrix_maxval; ///< maximum value for rematrixing output | |||||
| enum AVMatrixEncoding matrix_encoding; /**< matrixed stereo encoding */ | enum AVMatrixEncoding matrix_encoding; /**< matrixed stereo encoding */ | ||||
| const int *channel_map; ///< channel index (or -1 if muted channel) map | 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) | int used_ch_count; ///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count) | ||||
| @@ -30,7 +30,7 @@ | |||||
| #define LIBSWRESAMPLE_VERSION_MAJOR 0 | #define LIBSWRESAMPLE_VERSION_MAJOR 0 | ||||
| #define LIBSWRESAMPLE_VERSION_MINOR 17 | #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, \ | #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ | ||||
| LIBSWRESAMPLE_VERSION_MINOR, \ | LIBSWRESAMPLE_VERSION_MINOR, \ | ||||