gstreamer/ext
Tim-Philipp Müller 95f6e0dbe4 souphttpsrc: fix possible data corruption after seeking
Consider a downstream element that may issue seeks in very short
succession (e.g. queue2), depending on the access pattern of
the downstream element (e.g. qtdemux with audio/video chunks
interleaved so that there's always a sizeable gap between the
current chunks for each stream). In this case, queue2 will maintain
two ranges, and even when it serves a chunk from memory, it will
switch ranges and make souphttpsrc seek to the end of the available
data for that range, assuming that that's where we'll want to
continue reading from next.

This may lead to the following seek request pattern:

 - source reading position A
 - seek to B
 - now reading position still A, requested_postion is B
 - streaming thread to be restarted to continue from B
 - seek to A, before streaming thread had time to do the seek
 - do_seek() now sees reading position == seek position and
   returns early.
 - however, requested position is still B from the earlier
   seek request
 - streaming thread starts up, sees that a seek to B is pending
   and requests data from B from the server, while the GstBaseSrc
   segment has of course been updated/reset to position A, which
   was the last seek request.
 - we will now send data for position B and pretend that's the
   data from position A (via the newsegment event, etc.)
 - this causes data corruption

Reproducible doing seek-emulated fast-forward/backward on 006648.
2012-05-16 08:31:15 +01:00
..
aalib Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
cairo collectpads2: rename to collectpads 2012-04-17 15:14:27 +02:00
dv video: Update for libgstvideo API changes 2012-04-19 12:20:59 +02:00
flac Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
gdk_pixbuf Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
jack Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
jpeg jpeg: Port to 0.11 again 2012-05-14 14:39:34 +02:00
libcaca Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
libmng Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
libpng Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
mikmod Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
pulse pulsesink: improve debug 2012-04-25 10:29:45 +02:00
raw1394 video: Update for libgstvideo API changes 2012-04-19 12:20:59 +02:00
shout2 shout2: update for ogg media type changes 2012-04-15 22:49:47 +01:00
soup souphttpsrc: fix possible data corruption after seeking 2012-05-16 08:31:15 +01:00
speex Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
taglib Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
wavpack Use new gst_element_class_set_static_metadata() 2012-04-10 00:51:41 +01:00
Makefile.am annodex: remove annodex plugin and CMML elements 2012-05-13 19:21:19 +01:00