summaryrefslogtreecommitdiffstats
path: root/gst/flv
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-10-09 09:48:46 +0000
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-05-12 21:20:54 +0200
commit1905b18a65fa3f2be5f68a05c902b8cd28d3182d (patch)
tree438a3057076a6f35aaf652f704f1afdaf8ec060c /gst/flv
parentfc2adbb9a8c370e0d7a0f242df8cf7fc3d67e4cb (diff)
[MOVED FROM BAD 23/57] gst/flv/gstflvdemux.c: Go out of the parse loop as soon as we get an error instead of parsing until the GstAdapter is...
Original commit message from CVS: * 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.
Diffstat (limited to 'gst/flv')
-rw-r--r--gst/flv/gstflvdemux.c10
1 files changed, 9 insertions, 1 deletions
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:
{