gst/qtdemux/qtdemux.c: Don't post BUFFERING messages in streaming mode if the stream headers are behind the movie dat...

Original commit message from CVS:
* gst/qtdemux/qtdemux.c: (gst_qtdemux_post_progress),
(gst_qtdemux_chain):
Don't post BUFFERING messages in streaming mode if the stream
headers are behind the movie data; instead, post "progress" element
messages as a temporary solution. Apps might get confused and do
silly things to the pipeline state if they see buffering messages
from different sources and don't realize they come from different
sources (#387160).
This commit is contained in:
Tim-Philipp Müller 2006-12-18 17:11:49 +00:00
parent 0cd3a072c1
commit 2f353d7379

View file

@ -1678,15 +1678,13 @@ next_entry_size (GstQTDemux * demux)
} }
static void static void
gst_qtdemux_post_buffering (GstQTDemux * demux, gint num, gint denom) gst_qtdemux_post_progress (GstQTDemux * demux, gint num, gint denom)
{ {
gint perc = (gint) ((gdouble) num * 100.0 / (gdouble) denom); gint perc = (gint) ((gdouble) num * 100.0 / (gdouble) denom);
gst_element_post_message (GST_ELEMENT_CAST (demux), gst_element_post_message (GST_ELEMENT_CAST (demux),
gst_message_new_custom (GST_MESSAGE_BUFFERING, gst_message_new_element (GST_OBJECT_CAST (demux),
GST_OBJECT_CAST (demux), gst_structure_new ("progress", "percent", G_TYPE_INT, perc, NULL)));
gst_structure_new ("GstMessageBuffering",
"buffer-percent", G_TYPE_INT, perc, NULL)));
} }
/* FIXME, unverified after edit list updates */ /* FIXME, unverified after edit list updates */
@ -1801,7 +1799,7 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
demux->offset += demux->neededbytes; demux->offset += demux->neededbytes;
demux->neededbytes = 16; demux->neededbytes = 16;
demux->state = QTDEMUX_STATE_INITIAL; demux->state = QTDEMUX_STATE_INITIAL;
gst_qtdemux_post_buffering (demux, 1, 1); gst_qtdemux_post_progress (demux, 1, 1);
break; break;
} }
@ -1895,7 +1893,7 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
/* when buffering movie data, at least show user something is happening */ /* when buffering movie data, at least show user something is happening */
if (ret == GST_FLOW_OK && demux->state == QTDEMUX_STATE_BUFFER_MDAT && if (ret == GST_FLOW_OK && demux->state == QTDEMUX_STATE_BUFFER_MDAT &&
gst_adapter_available (demux->adapter) <= demux->neededbytes) { gst_adapter_available (demux->adapter) <= demux->neededbytes) {
gst_qtdemux_post_buffering (demux, gst_adapter_available (demux->adapter), gst_qtdemux_post_progress (demux, gst_adapter_available (demux->adapter),
demux->neededbytes); demux->neededbytes);
} }