[FFmpeg-cvslog] swr: add all in one rematrixing function ptr

Michael Niedermayer git at videolan.org
Fri Jun 8 22:05:10 CEST 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Jun  8 21:55:33 2012 +0200| [ca30ae12c5b7b8f8975e7bc70b2c33e8b06587e4] | committer: Michael Niedermayer

swr: add all in one rematrixing function ptr

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

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

 libswresample/rematrix.c            |    7 +++++++
 libswresample/swresample_internal.h |    4 ++++
 2 files changed, 11 insertions(+)

diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c
index 872722f..1b8e65a 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 b0e7423..6675c99 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 */
 };
 



More information about the ffmpeg-cvslog mailing list