From: <sl...@ke...> - 2009-06-10 11:29:49
|
Module: gst-plugins-good Branch: master Commit: f297e37b5e8c8acacefa401a1b0ff7d3889dece7 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=f297e37b5e8c8acacefa401a1b0ff7d3889dece7 Author: Sebastian Dröge <seb...@co...> Date: Wed Jun 10 09:56:11 2009 +0200 deinterlace: Fix QoS calculations The diff is a signed integer, not an unsigned one of course. In modes other than GST_DEINTERLACE_ALL every frame has twice the duration of the field duration. --- gst/deinterlace/gstdeinterlace.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gst/deinterlace/gstdeinterlace.c b/gst/deinterlace/gstdeinterlace.c index b8c2fa2..54eab67 100644 --- a/gst/deinterlace/gstdeinterlace.c +++ b/gst/deinterlace/gstdeinterlace.c @@ -395,7 +395,7 @@ static const GstQueryType *gst_deinterlace_src_query_types (GstPad * pad); static void gst_deinterlace_reset (GstDeinterlace * self); static void gst_deinterlace_update_qos (GstDeinterlace * self, - gdouble proportion, GstClockTime diff, GstClockTime time); + gdouble proportion, GstClockTimeDiff diff, GstClockTime time); static void gst_deinterlace_reset_qos (GstDeinterlace * self); static void gst_deinterlace_read_qos (GstDeinterlace * self, gdouble * proportion, GstClockTime * time); @@ -938,13 +938,16 @@ gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer) static void gst_deinterlace_update_qos (GstDeinterlace * self, gdouble proportion, - GstClockTime diff, GstClockTime timestamp) + GstClockTimeDiff diff, GstClockTime timestamp) { GST_OBJECT_LOCK (self); self->proportion = proportion; if (G_LIKELY (timestamp != GST_CLOCK_TIME_NONE)) { if (G_UNLIKELY (diff > 0)) - self->earliest_time = timestamp + 2 * diff + self->field_duration; + self->earliest_time = + timestamp + 2 * diff + ((self->fields == + GST_DEINTERLACE_ALL) ? self->field_duration : 2 * + self->field_duration); else self->earliest_time = timestamp + diff; } else { |