diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | gst/flv/gstflvdemux.c | 10 |
2 files changed, 19 insertions, 1 deletions
@@ -1,5 +1,15 @@ 2008-10-09 Sebastian Dröge <sebastian.droege@collabora.co.uk> + * gst/flv/gstflvdemux.c: (gst_flv_demux_chain): + Go out of the parse loop as soon as we get an error instead + of parsing until the GstAdapter is empty. + + Add some explanations about the header and tag size. + + Don't print synchronizing message if everything is fine. + +2008-10-09 Sebastian Dröge <sebastian.droege@collabora.co.uk> + * gst/flv/Makefile.am: * gst/flv/gstflvdemux.c: (plugin_init): * gst/flv/gstflvmux.c: (gst_flv_mux_base_init), diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c index 896d8bf1..e8b229ea 100644 --- a/gst/flv/gstflvdemux.c +++ b/gst/flv/gstflvdemux.c @@ -57,7 +57,9 @@ GST_DEBUG_CATEGORY (flvdemux_debug); GST_BOILERPLATE (GstFLVDemux, gst_flv_demux, GstElement, GST_TYPE_ELEMENT); +/* 9 bytes of header + 4 bytes of first previous tag size */ #define FLV_HEADER_SIZE 13 +/* 1 byte of tag type + 3 bytes of tag data size */ #define FLV_TAG_TYPE_SIZE 4 static void @@ -177,7 +179,7 @@ gst_flv_demux_chain (GstPad * pad, GstBuffer * buffer) demux->offset = 0; } - if (G_UNLIKELY (demux->offset == 0)) { + if (G_UNLIKELY (demux->offset == 0 && GST_BUFFER_OFFSET (buffer) != 0)) { GST_DEBUG_OBJECT (demux, "offset was zero, synchronizing with buffer's"); demux->offset = GST_BUFFER_OFFSET (buffer); } @@ -185,11 +187,17 @@ gst_flv_demux_chain (GstPad * pad, GstBuffer * buffer) gst_adapter_push (demux->adapter, buffer); parse: + if (G_UNLIKELY (ret != GST_FLOW_OK)) { + GST_DEBUG_OBJECT (demux, "got flow return %s", gst_flow_get_name (ret)); + goto beach; + } + if (G_UNLIKELY (demux->flushing)) { GST_DEBUG_OBJECT (demux, "we are now flushing, exiting parser loop"); ret = GST_FLOW_WRONG_STATE; goto beach; } + switch (demux->state) { case FLV_STATE_HEADER: { |