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) if (!avipad->auds.format)
goto refuse_caps; goto refuse_caps;
avipad->parent.hdr.fcc_handler = avipad->auds.format;
gst_avi_mux_audsink_set_fields (avimux, avipad); gst_avi_mux_audsink_set_fields (avimux, avipad);
gst_object_unref (avimux); gst_object_unref (avimux);
@ -2069,6 +2070,9 @@ gst_avi_mux_do_one_buffer (GstAviMux * avimux)
if (!avipad->collect) if (!avipad->collect)
continue; continue;
if (!avipad->hdr.fcc_handler)
goto not_negotiated;
buffer = gst_collect_pads_peek (avimux->collect, avipad->collect); buffer = gst_collect_pads_peek (avimux->collect, avipad->collect);
if (!buffer) if (!buffer)
continue; continue;
@ -2097,6 +2101,14 @@ gst_avi_mux_do_one_buffer (GstAviMux * avimux)
gst_pad_push_event (avimux->srcpad, gst_event_new_eos ()); gst_pad_push_event (avimux->srcpad, gst_event_new_eos ());
return GST_FLOW_UNEXPECTED; 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 static GstFlowReturn