From d2d2a12aac839953507b2582281361abd0f15074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 5 Nov 2024 14:23:05 +0200 Subject: [PATCH] timecodestamper: Don't fail the latency query in LTC mode if we have no framerate Only in LTC mode we introduce additional latency that is depending on only on a property and not on the framerate, so waiting for the framerate is not necessary. In all other modes no latency is introduced at all and the latency query can simply be proxied. Part-of: --- .../gst/timecode/gsttimecodestamper.c | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst/timecode/gsttimecodestamper.c b/subprojects/gst-plugins-bad/gst/timecode/gsttimecodestamper.c index 6de15b3ccc..d247a380b3 100644 --- a/subprojects/gst-plugins-bad/gst/timecode/gsttimecodestamper.c +++ b/subprojects/gst-plugins-bad/gst/timecode/gsttimecodestamper.c @@ -1037,31 +1037,27 @@ gst_timecodestamper_query (GstBaseTransform * trans, res = gst_pad_query_default (GST_BASE_TRANSFORM_SRC_PAD (trans), GST_OBJECT_CAST (trans), query); + if (!res) + return FALSE; + + gst_query_parse_latency (query, &live, &min_latency, &max_latency); g_mutex_lock (&timecodestamper->mutex); - if (res && timecodestamper->fps_n && timecodestamper->fps_d) { - gst_query_parse_latency (query, &live, &min_latency, &max_latency); - if (live && timecodestamper->ltcpad) { - /* Introduce additional LTC for waiting for LTC timecodes. The - * LTC library introduces some as well as the encoding of the LTC - * signal. */ - latency = timecodestamper->ltc_extra_latency; - min_latency += latency; - if (max_latency != GST_CLOCK_TIME_NONE) - max_latency += latency; - timecodestamper->latency = min_latency; - GST_DEBUG_OBJECT (timecodestamper, - "Reporting latency min %" GST_TIME_FORMAT " max %" GST_TIME_FORMAT - " ours %" GST_TIME_FORMAT, GST_TIME_ARGS (min_latency), - GST_TIME_ARGS (max_latency), GST_TIME_ARGS (latency)); - gst_query_set_latency (query, live, min_latency, max_latency); - } else { - timecodestamper->latency = 0; - } - } else if (res) { - GST_ERROR_OBJECT (timecodestamper, - "Need a known, non-variable framerate to answer LATENCY query"); - res = FALSE; - timecodestamper->latency = GST_CLOCK_TIME_NONE; + if (live && timecodestamper->ltcpad) { + /* Introduce additional LTC for waiting for LTC timecodes. The + * LTC library introduces some as well as the encoding of the LTC + * signal. */ + latency = timecodestamper->ltc_extra_latency; + min_latency += latency; + if (max_latency != GST_CLOCK_TIME_NONE) + max_latency += latency; + timecodestamper->latency = min_latency; + GST_DEBUG_OBJECT (timecodestamper, + "Reporting latency min %" GST_TIME_FORMAT " max %" GST_TIME_FORMAT + " ours %" GST_TIME_FORMAT, GST_TIME_ARGS (min_latency), + GST_TIME_ARGS (max_latency), GST_TIME_ARGS (latency)); + gst_query_set_latency (query, live, min_latency, max_latency); + } else { + timecodestamper->latency = 0; } g_mutex_unlock (&timecodestamper->mutex);