After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 328279 - [decodebin] timeout issue when pre-rolling
[decodebin] timeout issue when pre-rolling
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal normal
: 0.10.3
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2006-01-23 10:10 UTC by Edward Hervey
Modified: 2006-01-23 15:08 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Patch to use probes in decodebin in order to solve stated issue (3.95 KB, patch)
2006-01-23 10:11 UTC, Edward Hervey
none Details | Review

Description Edward Hervey 2006-01-23 10:10:32 UTC
Decodebin currently uses a fakesink and GstPadBlockCallbacks on raw pads to establish asynchronous state change from NULL/READY to PAUSED (i.e. prerolling).

The problem is that if the demuxer contained within decodebin goes to EOS while prerolling, decodebin won't know about it and will hang in READY->PAUSED.

The hang is because fakesink is only removed when all raw src pads have outputted one buffer (using the GstPadBlockCallbacks), but doesn't handle the case when you have EOS.

The provided patch solves this issue by replacing the blocking pad callbacks with pad data probes, and removing fakesink if every pad has outputted a buffer or an EOS event has come through that pad.
Comment 1 Edward Hervey 2006-01-23 10:11:23 UTC
Created attachment 57922 [details] [review]
Patch to use probes in decodebin in order to solve stated issue
Comment 2 Wim Taymans 2006-01-23 10:20:59 UTC
patch looks good, can't see any obvious problems with it.
Comment 3 Jan Schmidt 2006-01-23 12:00:44 UTC
AOL
Comment 4 Edward Hervey 2006-01-23 15:08:20 UTC
2006-01-23  Edward Hervey  <edward@fluendo.com>

	* gst/playback/gstdecodebin.c: (gst_decode_bin_init),
	(free_pad_probes), (remove_fakesink), (pad_probe),
	(close_pad_link), (gst_decode_bin_change_state):
	Replace GstPadBlockCallback with pad probes that detect
	first buffer AND eos before removing fakesink.
	Fixes hang with demuxers doing EOS while pre-rolling.
	Solves #328279