summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--gst/flv/gstflvdemux.c10
2 files changed, 19 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c87aea16..66aeadc6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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:
{