diff options
author | Patrick Williams <patrick@stwcx.xyz> | 2015-09-15 22:41:29 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2015-09-15 22:41:29 +0300 |
commit | 21f9b84b4b729fbd7acbd465e7a3f726e4d20f91 (patch) | |
tree | eb2d091d427ca0813b445509d59cc8e27e8ad25f /yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch | |
parent | 101cef31e2bf54c678501155cd2106251acbd076 (diff) | |
parent | c124f4f2e04dca16a428a76c89677328bc7bf908 (diff) | |
download | openbmc-21f9b84b4b729fbd7acbd465e7a3f726e4d20f91.tar.xz |
Merge commit 'c124f4f2e04dca16a428a76c89677328bc7bf908' as 'yocto-poky'
Diffstat (limited to 'yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch')
-rw-r--r-- | yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch new file mode 100644 index 000000000..1505cbefc --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch @@ -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 + |