vaapipostproc: fix heuristic for detecting discontinuity.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Thu, 7 Aug 2014 12:57:26 +0000 (14:57 +0200)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Thu, 21 Aug 2014 07:38:18 +0000 (09:38 +0200)
In order to make the discontinuity detection code useful, we need to
detect the lost frames in the history as early as the previous frame.
This is because some VA implementations only support one reference
frame for advanced deinterlacing.

In practice, turn the condition for detecting new frame that is beyond
the previous frame from field_duration*2 to field_duration*3, i.e.
nothing received for the past frame and a half because of possible
rounding errors when calculating the field-duration either in this
element (vaapipostproc), or from the upstream element (parser element).

This is a regression introduced with commit faefd62.

https://bugzilla.gnome.org/show_bug.cgi?id=734135

gst/vaapi/gstvaapipostproc.c

index e692f54a340c6f62a04b34c9a4dde52e48c12c7a..56646b057e1ebbcd57d26b0e4fbc615ab89c95bc 100644 (file)
@@ -525,7 +525,7 @@ gst_vaapipostproc_process_vpp(GstBaseTransform *trans, GstBuffer *inbuf,
         if (prev_buf && (prev_pts = GST_BUFFER_TIMESTAMP(prev_buf)) != pts) {
             const GstClockTimeDiff pts_diff = GST_CLOCK_DIFF(prev_pts, pts);
             if (pts_diff < 0 || (postproc->field_duration > 0 &&
-                    pts_diff > postproc->field_duration * 2))
+                    pts_diff >= postproc->field_duration * 3 - 1))
                 ds_reset(ds);
         }
     }