diff options
author | Carl Eugen Hoyos <ceffmpeg@gmail.com> | 2017-10-28 22:52:02 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <ceffmpeg@gmail.com> | 2017-11-01 01:04:43 +0100 |
commit | ff994c2aaa0a9bbe49cfcdb175f1f6782f7856ed (patch) | |
tree | db01ad9a269f7a6d0b48910169e018c1474cfb9b /libswresample | |
parent | 7a02b364b68c0bf7f065f5c217fae458f0efdb8d (diff) | |
download | ffmpeg-ff994c2aaa0a9bbe49cfcdb175f1f6782f7856ed.tar.gz |
lswr/rematrix: Support s32p.
Fixes ticket #6785.
Diffstat (limited to 'libswresample')
-rw-r--r-- | libswresample/rematrix.c | 19 | ||||
-rw-r--r-- | libswresample/version.h | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c index 66a43c16c1..9fcfff1318 100644 --- a/libswresample/rematrix.c +++ b/libswresample/rematrix.c @@ -445,14 +445,23 @@ av_cold int swri_rematrix_init(SwrContext *s){ s->mix_2_1_f = (mix_2_1_func_type*)sum2_double; s->mix_any_f = (mix_any_func_type*)get_mix_any_func_double(s); }else if(s->midbuf.fmt == AV_SAMPLE_FMT_S32P){ - // Only for dithering currently -// s->native_matrix = av_calloc(nb_in * nb_out, sizeof(double)); s->native_one = av_mallocz(sizeof(int)); if (!s->native_one) return AVERROR(ENOMEM); -// for (i = 0; i < nb_out; i++) -// for (j = 0; j < nb_in; j++) -// ((double*)s->native_matrix)[i * nb_in + j] = s->matrix[i][j]; + s->native_matrix = av_calloc(nb_in * nb_out, sizeof(int)); + if (!s->native_matrix) { + av_freep(&s->native_one); + return AVERROR(ENOMEM); + } + for (i = 0; i < nb_out; i++) { + double rem = 0; + + for (j = 0; j < nb_in; j++) { + double target = s->matrix[i][j] * 32768 + rem; + ((int*)s->native_matrix)[i * nb_in + j] = lrintf(target); + rem += target - ((int*)s->native_matrix)[i * nb_in + j]; + } + } *((int*)s->native_one) = 32768; s->mix_1_1_f = (mix_1_1_func_type*)copy_s32; s->mix_2_1_f = (mix_2_1_func_type*)sum2_s32; diff --git a/libswresample/version.h b/libswresample/version.h index 54dfd71e42..2640b10675 100644 --- a/libswresample/version.h +++ b/libswresample/version.h @@ -30,7 +30,7 @@ #define LIBSWRESAMPLE_VERSION_MAJOR 3 #define LIBSWRESAMPLE_VERSION_MINOR 0 -#define LIBSWRESAMPLE_VERSION_MICRO 100 +#define LIBSWRESAMPLE_VERSION_MICRO 101 #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ LIBSWRESAMPLE_VERSION_MINOR, \ |