wavenc: Send CAPS event after the pad was activated

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
This commit is contained in:
Sebastian Dröge 2014-10-02 10:10:11 +03:00
parent 374552a720
commit 7729f4ce81

View file

@ -157,8 +157,6 @@ gst_wavenc_init (GstWavEnc * wavenc)
wavenc->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); wavenc->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
gst_pad_use_fixed_caps (wavenc->srcpad); 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); gst_element_add_pad (GST_ELEMENT (wavenc), wavenc->srcpad);
} }
@ -358,7 +356,10 @@ gst_wavenc_push_header (GstWavEnc * wavenc)
/* seek to beginning of file */ /* seek to beginning of file */
gst_segment_init (&segment, GST_FORMAT_BYTES); 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", GST_DEBUG_OBJECT (wavenc, "writing header, meta_size=%u, audio_size=%u",
wavenc->meta_length, wavenc->audio_length); 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)) { 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 */ /* starting a file, means we have to finish it properly */
wavenc->finished_properly = FALSE; wavenc->finished_properly = FALSE;