basesink: Fix QoS/lateness checking if subclass implements prepare/prepare_list vfuncs
authorJian <Jian.Li@freescale.com>
Thu, 14 May 2015 07:49:43 +0000 (15:49 +0800)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 14 May 2015 08:18:12 +0000 (11:18 +0300)
commit4f79c5e8da516c137d4c9b0175ccb0a2ab147a6b
tree23091f4622d0dc92ee64bf26a5735d34ad470e0c
parentaafce9bea1d291d26c4eceaee1e7baac295b6a03
basesink: Fix QoS/lateness checking if subclass implements prepare/prepare_list vfuncs

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
libs/gst/base/gstbasesink.c