audiofilter: configure info after calling vmethod
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 6 Feb 2012 12:22:14 +0000 (13:22 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 6 Feb 2012 12:23:26 +0000 (13:23 +0100)
First call the vmethod and then configure the audioinfo in the baseclass. This
allows subclasses to know about the old format.

gst-libs/gst/audio/gstaudiofilter.c
gst-libs/gst/audio/gstaudiofilter.h

index 8eba036..cc8c9e5 100644 (file)
@@ -119,17 +119,24 @@ gst_audio_filter_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
 {
   GstAudioFilterClass *klass;
   GstAudioFilter *filter = GST_AUDIO_FILTER (btrans);
+  GstAudioInfo info;
   gboolean ret = TRUE;
 
   GST_LOG_OBJECT (filter, "caps: %" GST_PTR_FORMAT, incaps);
+  GST_LOG_OBJECT (filter, "info: %d", GST_AUDIO_FILTER_RATE (filter));
 
-  if (!gst_audio_info_from_caps (&filter->info, incaps))
+  if (!gst_audio_info_from_caps (&info, incaps))
     goto invalid_format;
 
-  klass = GST_AUDIO_FILTER_CLASS_CAST (G_OBJECT_GET_CLASS (filter));
+  klass = GST_AUDIO_FILTER_GET_CLASS (filter);
 
   if (klass->setup)
-    ret = klass->setup (filter, &filter->info);
+    ret = klass->setup (filter, &info);
+
+  if (ret) {
+    filter->info = info;
+    GST_LOG_OBJECT (filter, "configured caps: %" GST_PTR_FORMAT, incaps);
+  }
 
   return ret;
 
index dfa75e1..63f8297 100644 (file)
@@ -40,6 +40,8 @@ typedef struct _GstAudioFilterClass GstAudioFilterClass;
   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass))
 #define GST_AUDIO_FILTER_CLASS_CAST(klass) \
   ((GstAudioFilterClass *) (klass))
+#define GST_AUDIO_FILTER_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass))
 #define GST_IS_AUDIO_FILTER(obj) \
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_FILTER))
 #define GST_IS_AUDIO_FILTER_CLASS(klass) \