gst/audioconvert/gstchannelmix.c: more overwriting protection due to modifying channe...
authorBenjamin Otte <otte@gnome.org>
Sun, 28 Nov 2004 20:41:23 +0000 (20:41 +0000)
committerBenjamin Otte <otte@gnome.org>
Sun, 28 Nov 2004 20:41:23 +0000 (20:41 +0000)
Original commit message from CVS:
* gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
more overwriting protection due to modifying channels one by one
instead of all at once

ChangeLog
gst/audioconvert/gstchannelmix.c

index 070ab4a..fd51dec 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-28  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
+         more overwriting protection due to modifying channels one by one
+         instead of all at once
+
 2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
 
        * gst/audioconvert/gstchannelmix.c:
index f78acf2..774ffff 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 #include <math.h>
+#include <string.h>
 #include <gst/audio/multichannel.h>
 
 #include "gstchannelmix.h"
@@ -532,6 +533,7 @@ gst_audio_convert_mix (GstAudioConvert * this,
 {
   gint in, out, n;
   gint64 res;
+  gint32 tmp[this->srccaps.channels];
   gboolean backwards = this->srccaps.channels > this->sinkcaps.channels;
 
   /* FIXME: use liboil here? */
@@ -550,9 +552,9 @@ gst_audio_convert_mix (GstAudioConvert * this,
         res = G_MININT32;
       else if (res > G_MAXINT32)
         res = G_MAXINT32;
-
-      /* store */
-      out_data[n * this->srccaps.channels + out] = res;
+      tmp[out] = res;
     }
+    memcpy (&out_data[n * this->srccaps.channels], tmp,
+        sizeof (gint32) * this->srccaps.channels);
   }
 }