diff --git a/ChangeLog b/ChangeLog index 05de0d5be7..d2ad522fbc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-12-08 Wim Taymans + + Patch by: Sebastian Dröge + + * gst/audiofx/audiopanorama.c: (gst_audio_panorama_init), + (gst_audio_panorama_set_caps), (gst_audio_panorama_transform): + * gst/audiofx/audiopanorama.h: + Fix audiopanorame with float samples. Fixes #383726. + 2006-12-08 Jan Schmidt * sys/sunaudio/gstsunaudiosink.c: (gst_sunaudiosink_reset): diff --git a/gst/audiofx/audiopanorama.c b/gst/audiofx/audiopanorama.c index 6b9cd8c431..dec95502ea 100644 --- a/gst/audiofx/audiopanorama.c +++ b/gst/audiofx/audiopanorama.c @@ -168,6 +168,7 @@ gst_audio_panorama_init (GstAudioPanorama * filter, GstAudioPanoramaClass * klass) { filter->panorama = 0; + filter->width = 0; } static void @@ -253,7 +254,7 @@ gst_audio_panorama_set_caps (GstBaseTransform * base, GstCaps * incaps, GstAudioPanorama *filter = GST_AUDIO_PANORAMA (base); const GstStructure *structure; gboolean ret; - gint channels; + gint channels, width; const gchar *fmt; /*GST_INFO ("incaps are %" GST_PTR_FORMAT, incaps); */ @@ -263,6 +264,12 @@ gst_audio_panorama_set_caps (GstBaseTransform * base, GstCaps * incaps, if (!ret) goto no_channels; + ret = gst_structure_get_int (structure, "width", &width); + if (!ret) + goto no_width; + filter->width = width / 8; + + fmt = gst_structure_get_name (structure); GST_DEBUG ("try to process %s input with %d channels", fmt, channels); @@ -297,6 +304,9 @@ gst_audio_panorama_set_caps (GstBaseTransform * base, GstCaps * incaps, no_channels: GST_DEBUG ("no channels in caps"); return ret; +no_width: + GST_DEBUG ("no width in caps"); + return ret; } static void @@ -434,7 +444,7 @@ gst_audio_panorama_transform (GstBaseTransform * base, GstBuffer * inbuf, GstBuffer * outbuf) { GstAudioPanorama *filter = GST_AUDIO_PANORAMA (base); - guint num_samples = GST_BUFFER_SIZE (outbuf) / (2 * sizeof (gint16)); + guint num_samples = GST_BUFFER_SIZE (outbuf) / (2 * filter->width); if (!gst_buffer_is_writable (outbuf)) return GST_FLOW_OK; diff --git a/gst/audiofx/audiopanorama.h b/gst/audiofx/audiopanorama.h index 623e9a686f..eaa9927bb7 100644 --- a/gst/audiofx/audiopanorama.h +++ b/gst/audiofx/audiopanorama.h @@ -45,6 +45,7 @@ struct _GstAudioPanorama { /* < private > */ GstAudioPanoramaProcessFunc process; + gint width; }; struct _GstAudioPanoramaClass {