gstreamer1.0: Fix QoS/lateness checking if subclass implements prepare/prepare_list vfuncs
In function gst_base_sink_chain_unlocked(), it should calculate jitter based on current media clock, rather than just passing 0. Or it will drop all the frames when rewind in slow speed, such as -2X. (From OE-Core rev: 68591de72e27a985242d6ff19fffb80f69869003) Signed-off-by: Yuqing Zhu <b54851@freescale.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
f051f10c0f
commit
59f822d8b5
|
@ -0,0 +1,70 @@
|
|||
From 6914566ed6a89c96973a578aa5ecd01ee68cdcfd Mon Sep 17 00:00:00 2001
|
||||
From: Jian <Jian.Li@freescale.com>
|
||||
Date: Thu, 14 May 2015 15:49:43 +0800
|
||||
Subject: [PATCH] basesink: Fix QoS/lateness checking if subclass implements
|
||||
prepare/prepare_list vfuncs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In basesink functions gst_base_sink_chain_unlocked(), below code is used to
|
||||
checking if buffer is late before doing prepare call to save some effort:
|
||||
if (syncable && do_sync)
|
||||
late =
|
||||
gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
|
||||
GST_CLOCK_EARLY, 0, FALSE);
|
||||
|
||||
if (G_UNLIKELY (late))
|
||||
goto dropped;
|
||||
|
||||
But this code has problem, it should calculate jitter based on current media
|
||||
clock, rather than just passing 0. I found it will drop all the frames when
|
||||
rewind in slow speed, such as -2X.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=749258
|
||||
|
||||
Upstream-Status: Backport [1.5.1]
|
||||
---
|
||||
libs/gst/base/gstbasesink.c | 26 ++++++++++++++++++++++----
|
||||
1 file changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
|
||||
index a505695..5fb2d6a 100644
|
||||
--- a/libs/gst/base/gstbasesink.c
|
||||
+++ b/libs/gst/base/gstbasesink.c
|
||||
@@ -3369,10 +3369,28 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
|
||||
if (G_UNLIKELY (stepped))
|
||||
goto dropped;
|
||||
|
||||
- if (syncable && do_sync)
|
||||
- late =
|
||||
- gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
|
||||
- GST_CLOCK_EARLY, 0, FALSE);
|
||||
+ if (syncable && do_sync) {
|
||||
+ GstClock *clock;
|
||||
+
|
||||
+ GST_OBJECT_LOCK (basesink);
|
||||
+ clock = GST_ELEMENT_CLOCK (basesink);
|
||||
+ if (clock && GST_STATE (basesink) == GST_STATE_PLAYING) {
|
||||
+ GstClockTime base_time;
|
||||
+ GstClockTime stime;
|
||||
+ GstClockTime now;
|
||||
+
|
||||
+ base_time = GST_ELEMENT_CAST (basesink)->base_time;
|
||||
+ stime = base_time + gst_base_sink_adjust_time (basesink, rstart);
|
||||
+ now = gst_clock_get_time (clock);
|
||||
+ GST_OBJECT_UNLOCK (basesink);
|
||||
+
|
||||
+ late =
|
||||
+ gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
|
||||
+ GST_CLOCK_EARLY, GST_CLOCK_DIFF (stime, now), FALSE);
|
||||
+ } else {
|
||||
+ GST_OBJECT_UNLOCK (basesink);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
if (G_UNLIKELY (late))
|
||||
goto dropped;
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -8,6 +8,7 @@ SRC_URI = " \
|
|||
file://0001-Fix-crash-with-gst-inspect.patch \
|
||||
file://0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch \
|
||||
file://inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch \
|
||||
file://0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "88a9289c64a4950ebb4f544980234289"
|
||||
SRC_URI[sha256sum] = "40801aa7f979024526258a0e94707ba42b8ab6f7d2206e56adbc4433155cb0ae"
|
||||
|
|
Loading…
Reference in New Issue