[gstreamer-bugs] [Bug 576381] New: [basesink] QoS: emergency rendering not always done
GStreamer (bugzilla.gnome.org)
bugzilla-daemon at bugzilla.gnome.org
Mon Mar 23 04:06:49 PDT 2009
If you have any questions why you received this email, please see the text at
the end of this email. Replies to this email are NOT read, please see the text
at the end of this email. You can add comments to this bug at:
http://bugzilla.gnome.org/show_bug.cgi?id=576381
GStreamer | gstreamer (core) | Ver: git
Summary: [basesink] QoS: emergency rendering not always done
Product: GStreamer
Version: git
Platform: Other
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gstreamer (core)
AssignedTo: gstreamer-bugs at lists.sourceforge.net
ReportedBy: t.i.m at zen.co.uk
QAContact: gstreamer-bugs at lists.sourceforge.net
GNOME version: Unspecified
GNOME milestone: Unspecified
Consider a situation where a video decoder is very very slow, *much* slower
than the desired framerate. The decoder supports QoS, yet still only the very
first frame is ever rendered; no 'emergency renderings' are done, because all
buffers but the very first are late and the code in gst_base_sink_is_too_late()
goes like this:
/* !!emergency!!, if we did not receive anything valid for more than a
* second, render it anyway so the user sees something */
if (priv->last_in_time && start - priv->last_in_time > GST_SECOND) {
late = FALSE;
GST_DEBUG_OBJECT (basesink,
"**emergency** last buffer at %" GST_TIME_FORMAT " > GST_SECOND",
GST_TIME_ARGS (priv->last_in_time));
}
The problem is the priv->last_in_time != 0 check here. priv->last_in_time is
updated whenever a frame/buffer is actually rendered (normal or emergency), so
if only the very first frame with a timestamp of 0 ever got rendered, no
emergency renderings will be done ever again, unless a buffer actually arrives
in time, which would set last_in_time to something non-0.
I think this should be:
/* !!emergency!!, if we did not receive anything valid for more than a
* second, render it anyway so the user sees something */
- if (priv->last_in_time && start - priv->last_in_time > GST_SECOND) {
+ if (priv->last_in_time != -1 && start - priv->last_in_time > GST_SECOND) {
instead (or maybe the last_in_time check should just be dropped at all?).
I will attach two logs that demonstrate the problem.
--
See http://bugzilla.gnome.org/page.cgi?id=email.html for more info about why you received
this email, why you can't respond via email, how to stop receiving
emails (or reduce the number you receive), and how to contact someone
if you are having problems with the system.
You can add comments to this bug at http://bugzilla.gnome.org/show_bug.cgi?id=576381.
More information about the Gstreamer-bugs
mailing list