avimux: check that pads have been negotiated

Also set fcc_handler field in audio stream header.

Fixes #618351.
This commit is contained in:
Mark Nauwelaerts 2010-05-11 12:06:10 +02:00
parent e934f637b6
commit 5ae7119d11

View file

@ -934,6 +934,7 @@ gst_avi_mux_audsink_set_caps (GstPad * pad, GstCaps * vscaps)
if (!avipad->auds.format)
goto refuse_caps;
avipad->parent.hdr.fcc_handler = avipad->auds.format;
gst_avi_mux_audsink_set_fields (avimux, avipad);
gst_object_unref (avimux);
@ -2069,6 +2070,9 @@ gst_avi_mux_do_one_buffer (GstAviMux * avimux)
if (!avipad->collect)
continue;
if (!avipad->hdr.fcc_handler)
goto not_negotiated;
buffer = gst_collect_pads_peek (avimux->collect, avipad->collect);
if (!buffer)
continue;
@ -2097,6 +2101,14 @@ gst_avi_mux_do_one_buffer (GstAviMux * avimux)
gst_pad_push_event (avimux->srcpad, gst_event_new_eos ());
return GST_FLOW_UNEXPECTED;
}
/* ERRORS */
not_negotiated:
{
GST_ELEMENT_ERROR (avimux, CORE, NEGOTIATION, (NULL),
("pad %s not negotiated", GST_PAD_NAME (avipad->collect->pad)));
return GST_FLOW_NOT_NEGOTIATED;
}
}
static GstFlowReturn