Commit cc6e1026 authored by Sebastian Dröge's avatar Sebastian Dröge
Browse files

goom: Initialize the goom struct only once we know width/height and recreate it if those change

Fixes crash when the width and/or height is changing.

https://bugzilla.gnome.org/show_bug.cgi?id=762765
parent d01e390c
...@@ -50,9 +50,6 @@ ...@@ -50,9 +50,6 @@
GST_DEBUG_CATEGORY (goom_debug); GST_DEBUG_CATEGORY (goom_debug);
#define GST_CAT_DEFAULT goom_debug #define GST_CAT_DEFAULT goom_debug
#define DEFAULT_WIDTH 320
#define DEFAULT_HEIGHT 240
/* signals and args */ /* signals and args */
enum enum
{ {
...@@ -129,11 +126,9 @@ gst_goom_class_init (GstGoomClass * klass) ...@@ -129,11 +126,9 @@ gst_goom_class_init (GstGoomClass * klass)
static void static void
gst_goom_init (GstGoom * goom) gst_goom_init (GstGoom * goom)
{ {
goom->width = DEFAULT_WIDTH; goom->width = -1;
goom->height = DEFAULT_HEIGHT; goom->height = -1;
goom->channels = 0; goom->channels = 0;
goom->plugin = goom_init (goom->width, goom->height);
} }
static void static void
...@@ -152,8 +147,15 @@ gst_goom_setup (GstAudioVisualizer * base) ...@@ -152,8 +147,15 @@ gst_goom_setup (GstAudioVisualizer * base)
{ {
GstGoom *goom = GST_GOOM (base); GstGoom *goom = GST_GOOM (base);
goom->width = GST_VIDEO_INFO_WIDTH (&base->vinfo); if (!goom->plugin ||
goom->height = GST_VIDEO_INFO_HEIGHT (&base->vinfo); goom->width != GST_VIDEO_INFO_WIDTH (&base->vinfo) ||
goom->height != GST_VIDEO_INFO_HEIGHT (&base->vinfo)) {
goom->width = GST_VIDEO_INFO_WIDTH (&base->vinfo);
goom->height = GST_VIDEO_INFO_HEIGHT (&base->vinfo);
if (goom->plugin)
goom_close (goom->plugin);
goom->plugin = goom_init (goom->width, goom->height);
}
return TRUE; return TRUE;
} }
...@@ -168,6 +170,9 @@ gst_goom_render (GstAudioVisualizer * base, GstBuffer * audio, ...@@ -168,6 +170,9 @@ gst_goom_render (GstAudioVisualizer * base, GstBuffer * audio,
gint16 *adata; gint16 *adata;
gint i; gint i;
if (!goom->plugin)
return FALSE;
/* get next GOOM_SAMPLES, we have at least this amount of samples */ /* get next GOOM_SAMPLES, we have at least this amount of samples */
gst_buffer_map (audio, &amap, GST_MAP_READ); gst_buffer_map (audio, &amap, GST_MAP_READ);
adata = (gint16 *) amap.data; adata = (gint16 *) amap.data;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment