mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
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
This commit is contained in:
parent
d01e390c82
commit
cc6e102643
1 changed files with 14 additions and 9 deletions
|
@ -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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Loading…
Reference in a new issue