summaryrefslogtreecommitdiffstats
path: root/meta/recipes-multimedia/gstreamer/gstreamer1.0
diff options
context:
space:
mode:
authorYuqing Zhu <b54851@freescale.com>2015-08-21 22:29:54 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-09-12 22:48:31 +0100
commit59f822d8b5dc7fb8c593eaaf16021521033c0414 (patch)
treec70a7641a3d7604562c45c507611b048be90eebb /meta/recipes-multimedia/gstreamer/gstreamer1.0
parentf051f10c0fb95f2fdbe15974f6c8ed38c38b0d2b (diff)
downloadpoky-59f822d8b5dc7fb8c593eaaf16021521033c0414.tar.gz
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>
Diffstat (limited to 'meta/recipes-multimedia/gstreamer/gstreamer1.0')
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch
new file mode 100644
index 0000000000..b6edda1cf7
--- /dev/null
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch
@@ -0,0 +1,70 @@
1From 6914566ed6a89c96973a578aa5ecd01ee68cdcfd Mon Sep 17 00:00:00 2001
2From: Jian <Jian.Li@freescale.com>
3Date: Thu, 14 May 2015 15:49:43 +0800
4Subject: [PATCH] basesink: Fix QoS/lateness checking if subclass implements
5 prepare/prepare_list vfuncs
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10In basesink functions gst_base_sink_chain_unlocked(), below code is used to
11checking if buffer is late before doing prepare call to save some effort:
12 if (syncable && do_sync)
13 late =
14 gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
15 GST_CLOCK_EARLY, 0, FALSE);
16
17 if (G_UNLIKELY (late))
18 goto dropped;
19
20But this code has problem, it should calculate jitter based on current media
21clock, rather than just passing 0. I found it will drop all the frames when
22rewind in slow speed, such as -2X.
23
24https://bugzilla.gnome.org/show_bug.cgi?id=749258
25
26Upstream-Status: Backport [1.5.1]
27---
28 libs/gst/base/gstbasesink.c | 26 ++++++++++++++++++++++----
29 1 file changed, 22 insertions(+), 4 deletions(-)
30
31diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
32index a505695..5fb2d6a 100644
33--- a/libs/gst/base/gstbasesink.c
34+++ b/libs/gst/base/gstbasesink.c
35@@ -3369,10 +3369,28 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
36 if (G_UNLIKELY (stepped))
37 goto dropped;
38
39- if (syncable && do_sync)
40- late =
41- gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
42- GST_CLOCK_EARLY, 0, FALSE);
43+ if (syncable && do_sync) {
44+ GstClock *clock;
45+
46+ GST_OBJECT_LOCK (basesink);
47+ clock = GST_ELEMENT_CLOCK (basesink);
48+ if (clock && GST_STATE (basesink) == GST_STATE_PLAYING) {
49+ GstClockTime base_time;
50+ GstClockTime stime;
51+ GstClockTime now;
52+
53+ base_time = GST_ELEMENT_CAST (basesink)->base_time;
54+ stime = base_time + gst_base_sink_adjust_time (basesink, rstart);
55+ now = gst_clock_get_time (clock);
56+ GST_OBJECT_UNLOCK (basesink);
57+
58+ late =
59+ gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
60+ GST_CLOCK_EARLY, GST_CLOCK_DIFF (stime, now), FALSE);
61+ } else {
62+ GST_OBJECT_UNLOCK (basesink);
63+ }
64+ }
65
66 if (G_UNLIKELY (late))
67 goto dropped;
68--
691.7.9.5
70