diff --git a/subprojects/gst-plugins-bad/ext/wpe/gstwpevideosrc.cpp b/subprojects/gst-plugins-bad/ext/wpe/gstwpevideosrc.cpp index d129b9fabc..dec53b402d 100644 --- a/subprojects/gst-plugins-bad/ext/wpe/gstwpevideosrc.cpp +++ b/subprojects/gst-plugins-bad/ext/wpe/gstwpevideosrc.cpp @@ -797,6 +797,42 @@ gst_wpe_video_src_event (GstBaseSrc * base_src, GstEvent * event) return ret; } +static gboolean +gst_wpe_video_src_query (GstBaseSrc * base_src, GstQuery * query) +{ + GstWpeVideoSrc *src = GST_WPE_VIDEO_SRC (base_src); + GstGLBaseSrc *gl_src = GST_GL_BASE_SRC (base_src); + gboolean ret = FALSE; + + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_LATENCY:{ + GST_OBJECT_LOCK (src); + if (gl_src->out_info.fps_n > 0) { + GstClockTime latency; + + latency = gst_util_uint64_scale (GST_SECOND, gl_src->out_info.fps_d, + gl_src->out_info.fps_n); + GST_OBJECT_UNLOCK (src); + gst_query_set_latency (query, + gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency, + GST_CLOCK_TIME_NONE); + GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT, + GST_TIME_ARGS (latency)); + ret = TRUE; + } else { + GST_OBJECT_UNLOCK (src); + } + + break; + } + default: + ret = GST_CALL_PARENT_WITH_DEFAULT (GST_BASE_SRC_CLASS, query, + (base_src, query), FALSE); + break; + } + return ret; +} + static void gst_wpe_video_src_init (GstWpeVideoSrc * src) { @@ -859,6 +895,7 @@ gst_wpe_video_src_class_init (GstWpeVideoSrcClass * klass) GST_DEBUG_FUNCPTR (gst_wpe_video_src_decide_allocation); base_src_class->stop = GST_DEBUG_FUNCPTR (gst_wpe_video_src_stop); base_src_class->event = GST_DEBUG_FUNCPTR (gst_wpe_video_src_event); + base_src_class->query = GST_DEBUG_FUNCPTR (gst_wpe_video_src_query); gl_base_src_class->supported_gl_api = static_cast < GstGLAPI >