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),
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
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);
}
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:
{