libvisual: fix improper video frame clear operation
authorGreg Rutz <greg@gsr-tek.com>
Tue, 12 Mar 2013 03:55:28 +0000 (21:55 -0600)
committerTim-Philipp Müller <tim@centricular.net>
Wed, 13 Mar 2013 00:51:55 +0000 (00:51 +0000)
The current code is memsetting the GstVideoFrame.data address to 0s (which
causes a segfault). This member is actually an array of data buffers (one for
each plane).  This fix iterates over each data plane to clear them all.

https://bugzilla.gnome.org/show_bug.cgi?id=695655

ext/libvisual/gstaudiovisualizer.c

index 1ce76d2..29c45d7 100644 (file)
@@ -1126,7 +1126,11 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
       gst_video_frame_copy (&outframe, &scope->tempframe);
     } else {
       /* gst_video_frame_clear() or is output frame already cleared */
-      memset (outframe.data, 0, scope->vinfo.size);
+      gint i;
+
+      for (i = 0; i < scope->vinfo.finfo->n_planes; i++) {
+        memset (outframe.data[i], 0, outframe.map[i].size);
+      }
     }
 
     gst_buffer_replace_all_memory (inbuf,