From e3aaff400a98e7fd9d8f3040c0def6f1d9dd42a4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 13 Jun 2015 11:40:14 +0200 Subject: [PATCH] decklinkvideosink: Remove late frame-dropping workaround for basesink bug This was fixed by https://bugzilla.gnome.org/show_bug.cgi?id=749258 in basesink, and is not necessary to duplicate here anymore. --- sys/decklink/gstdecklinkvideosink.cpp | 43 ----------------------------------- sys/decklink/gstdecklinkvideosink.h | 1 - 2 files changed, 44 deletions(-) diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp index b7a132d..9a7c6d4 100644 --- a/sys/decklink/gstdecklinkvideosink.cpp +++ b/sys/decklink/gstdecklinkvideosink.cpp @@ -417,7 +417,6 @@ gst_decklink_video_sink_prepare (GstBaseSink * bsink, GstBuffer * buffer) GstClockTime timestamp, duration; GstClockTime running_time, running_time_duration; gint i; - GstClock *clock; GST_DEBUG_OBJECT (self, "Preparing buffer %p", buffer); @@ -440,47 +439,6 @@ gst_decklink_video_sink_prepare (GstBaseSink * bsink, GstBuffer * buffer) gst_segment_to_running_time (&GST_BASE_SINK_CAST (self)->segment, GST_FORMAT_TIME, timestamp + duration) - running_time; - // FIXME: https://bugzilla.gnome.org/show_bug.cgi?id=742916 - // We need to drop late buffers here immediately instead of - // potentially overflowing the internal queue of the hardware - clock = gst_element_get_clock (GST_ELEMENT_CAST (self)); - if (clock) { - GstClockTime clock_running_time, base_time, clock_time, latency, - max_lateness; - - base_time = gst_element_get_base_time (GST_ELEMENT_CAST (self)); - clock_time = gst_clock_get_time (clock); - if (base_time != GST_CLOCK_TIME_NONE && clock_time != GST_CLOCK_TIME_NONE) { - clock_running_time = clock_time - base_time; - latency = gst_base_sink_get_latency (GST_BASE_SINK_CAST (self)); - max_lateness = gst_base_sink_get_max_lateness (GST_BASE_SINK_CAST (self)); - - if (clock_running_time > - running_time + running_time_duration + latency + max_lateness) { - GST_DEBUG_OBJECT (self, - "Late buffer: %" GST_TIME_FORMAT " > %" GST_TIME_FORMAT, - GST_TIME_ARGS (clock_running_time), - GST_TIME_ARGS (running_time + running_time_duration)); - - if (self->last_render_time == GST_CLOCK_TIME_NONE - || (self->last_render_time < clock_running_time - && clock_running_time - self->last_render_time >= GST_SECOND)) { - GST_DEBUG_OBJECT (self, - "Rendering frame nonetheless because we had none for more than 1s"); - running_time = clock_running_time; - running_time_duration = 0; - } else { - GST_WARNING_OBJECT (self, "Dropping frame"); - gst_object_unref (clock); - return GST_FLOW_OK; - } - } - } - - gst_object_unref (clock); - } - self->last_render_time = running_time; - ret = self->output->output->CreateVideoFrame (self->info.width, self->info.height, self->info.stride[0], bmdFormat8BitYUV, bmdFrameFlagDefault, &frame); @@ -691,7 +649,6 @@ gst_decklink_video_sink_change_state (GstElement * element, gst_element_post_message (element, gst_message_new_clock_provide (GST_OBJECT_CAST (element), self->output->clock, TRUE)); - self->last_render_time = GST_CLOCK_TIME_NONE; break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{ GstClock *clock, *audio_clock; diff --git a/sys/decklink/gstdecklinkvideosink.h b/sys/decklink/gstdecklinkvideosink.h index 04d5c97..16b2fbb 100644 --- a/sys/decklink/gstdecklinkvideosink.h +++ b/sys/decklink/gstdecklinkvideosink.h @@ -56,7 +56,6 @@ struct _GstDecklinkVideoSink GstClockTime internal_base_time; GstClockTime external_base_time; - GstClockTime last_render_time; GstDecklinkOutput *output; }; -- 2.7.4