diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-06-08 21:55:33 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-06-08 21:55:33 +0200 |
commit | ca30ae12c5b7b8f8975e7bc70b2c33e8b06587e4 (patch) | |
tree | 32d9163e91485a7f2e8e7257a380827c9ea4b611 | |
parent | dfde3d497e7e315387697c7b13b612a99478e44f (diff) | |
download | ffmpeg-ca30ae12c5b7b8f8975e7bc70b2c33e8b06587e4.tar.gz |
swr: add all in one rematrixing function ptr
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libswresample/rematrix.c | 7 | ||||
-rw-r--r-- | libswresample/swresample_internal.h | 4 |
2 files changed, 11 insertions, 0 deletions
diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c index 872722ffe4..1b8e65a1f4 100644 --- a/libswresample/rematrix.c +++ b/libswresample/rematrix.c @@ -291,6 +291,8 @@ int swri_rematrix_init(SwrContext *s){ int nb_in = av_get_channel_layout_nb_channels(s->in_ch_layout); int nb_out = av_get_channel_layout_nb_channels(s->out_ch_layout); + s->mix_any_f = NULL; + if (!s->rematrix_custom) { int r = auto_matrix(s); if (r) @@ -346,6 +348,11 @@ void swri_rematrix_free(SwrContext *s){ int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy){ int out_i, in_i, i, j; + if(s->mix_any_f) { + s->mix_any_f(out->ch, in->ch, s->native_matrix, len); + return 0; + } + av_assert0(out->ch_count == av_get_channel_layout_nb_channels(s->out_ch_layout)); av_assert0(in ->ch_count == av_get_channel_layout_nb_channels(s-> in_ch_layout)); diff --git a/libswresample/swresample_internal.h b/libswresample/swresample_internal.h index b0e7423773..6675c99d13 100644 --- a/libswresample/swresample_internal.h +++ b/libswresample/swresample_internal.h @@ -26,6 +26,8 @@ typedef void (mix_1_1_func_type)(void *out, const void *in, void *coeffp, int index, int len); typedef void (mix_2_1_func_type)(void *out, const void *in1, const void *in2, void *coeffp, int index1, int index2, int len); +typedef void (mix_any_func_type)(void **out, const void **in1, void *coeffp, int len); + typedef struct AudioData{ uint8_t *ch[SWR_CH_MAX]; ///< samples buffer per channel uint8_t *data; ///< samples buffer @@ -98,6 +100,8 @@ struct SwrContext { mix_1_1_func_type *mix_1_1_f; mix_2_1_func_type *mix_2_1_f; + mix_any_func_type *mix_any_f; + /* TODO: callbacks for ASM optimizations */ }; |