wavenc: Send CAPS event after the pad was activated
authorSebastian Dröge <sebastian@centricular.com>
Thu, 2 Oct 2014 07:10:11 +0000 (10:10 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 2 Oct 2014 07:10:11 +0000 (10:10 +0300)
Otherwise the CAPS event will be dropped and we never configure any caps at
all, leading to weird behaviour in many situations. Especially header
rewriting is not going to work if a capsfilter is after wavenc.

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

gst/wavenc/gstwavenc.c

index 44fc4b6..e56cec0 100644 (file)
@@ -157,8 +157,6 @@ gst_wavenc_init (GstWavEnc * wavenc)
 
   wavenc->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
   gst_pad_use_fixed_caps (wavenc->srcpad);
-  gst_pad_set_caps (wavenc->srcpad,
-      gst_static_pad_template_get_caps (&src_factory));
   gst_element_add_pad (GST_ELEMENT (wavenc), wavenc->srcpad);
 }
 
@@ -358,7 +356,10 @@ gst_wavenc_push_header (GstWavEnc * wavenc)
 
   /* seek to beginning of file */
   gst_segment_init (&segment, GST_FORMAT_BYTES);
-  gst_pad_push_event (wavenc->srcpad, gst_event_new_segment (&segment));
+  if (!gst_pad_push_event (wavenc->srcpad, gst_event_new_segment (&segment))) {
+    GST_WARNING_OBJECT (wavenc, "Seek to the beginning failed");
+    return GST_FLOW_ERROR;
+  }
 
   GST_DEBUG_OBJECT (wavenc, "writing header, meta_size=%u, audio_size=%u",
       wavenc->meta_length, wavenc->audio_length);
@@ -960,6 +961,9 @@ gst_wavenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
   }
 
   if (G_UNLIKELY (!wavenc->sent_header)) {
+    gst_pad_set_caps (wavenc->srcpad,
+        gst_static_pad_template_get_caps (&src_factory));
+
     /* starting a file, means we have to finish it properly */
     wavenc->finished_properly = FALSE;