diff --git a/ChangeLog b/ChangeLog index 647b853dce..69c23900ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-09-26 Wim Taymans + + * gst/qtdemux/gstrtpxqtdepay.c: (gst_rtp_xqt_depay_process), + (gst_rtp_xqt_depay_change_state): + * gst/qtdemux/gstrtpxqtdepay.h: + Fail if we don't know the quicktime format. + 2007-09-26 Tim-Philipp Müller * ext/flac/gstflacenc.c: diff --git a/gst/qtdemux/gstrtpxqtdepay.c b/gst/qtdemux/gstrtpxqtdepay.c index 0a147ef496..4cd9257f40 100644 --- a/gst/qtdemux/gstrtpxqtdepay.c +++ b/gst/qtdemux/gstrtpxqtdepay.c @@ -282,6 +282,7 @@ gst_rtp_xqt_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf) /* discont, clear adapter and try to find a new packet start */ gst_adapter_clear (rtpxqtdepay->adapter); rtpxqtdepay->need_resync = TRUE; + GST_DEBUG_OBJECT (rtpxqtdepay, "we need resync"); } m = gst_rtp_buffer_get_marker (buf); @@ -435,7 +436,9 @@ gst_rtp_xqt_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf) switch (tlv_type) { case TLV_sd: /* Session description */ - gst_rtp_quicktime_parse_sd (rtpxqtdepay, payload, tlv_len); + if (!gst_rtp_quicktime_parse_sd (rtpxqtdepay, payload, tlv_len)) + goto unknown_format; + rtpxqtdepay->have_sd = TRUE; break; case TLV_qt: case TLV_ti: @@ -665,6 +668,12 @@ wrong_length: ("Wrong payload length."), (NULL)); return NULL; } +unknown_format: + { + GST_ELEMENT_WARNING (rtpxqtdepay, STREAM, DECODE, + ("Unknown payload format."), (NULL)); + return NULL; + } } static void @@ -710,7 +719,8 @@ gst_rtp_xqt_depay_change_state (GstElement * element, GstStateChange transition) gst_adapter_clear (rtpxqtdepay->adapter); rtpxqtdepay->previous_id = -1; rtpxqtdepay->current_id = -1; - rtpxqtdepay->need_resync = FALSE; + rtpxqtdepay->need_resync = TRUE; + rtpxqtdepay->have_sd = FALSE; break; default: break; diff --git a/gst/qtdemux/gstrtpxqtdepay.h b/gst/qtdemux/gstrtpxqtdepay.h index 23cf6eea5c..4b8a6df8b3 100644 --- a/gst/qtdemux/gstrtpxqtdepay.h +++ b/gst/qtdemux/gstrtpxqtdepay.h @@ -49,6 +49,7 @@ struct _GstRtpXQTDepay gboolean need_resync; guint16 previous_id; guint16 current_id; + gboolean have_sd; }; struct _GstRtpXQTDepayClass