From 53dc1b96e27dd4bfd475c80cd92588a2398dd8ed Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 17 Apr 2023 23:06:54 +0900 Subject: [PATCH] d3d11compositor: Reconfigure resource only when output caps is changed GstD3D11Converter setup is heavy operation since it requires shader compile, GPU resource allocation, some math, mutex, etc. We can avoid it if negotiated caps is not changed. Part-of: --- .../gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp index dfb3f50395..04c15a0afc 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp @@ -320,6 +320,7 @@ struct _GstD3D11Compositor GstD3D11Device *device; GstBuffer *fallback_buf; + GstCaps *negotiated_caps; GstD3D11CompositorQuad *checker_background; /* black/white/transparent */ @@ -1293,6 +1294,7 @@ gst_d3d11_compositor_stop (GstAggregator * agg) g_clear_pointer (&self->checker_background, gst_d3d11_compositor_quad_free); gst_clear_object (&self->device); + gst_clear_caps (&self->negotiated_caps); return GST_AGGREGATOR_CLASS (parent_class)->stop (agg); } @@ -1658,6 +1660,11 @@ gst_d3d11_compositor_negotiated_src_caps (GstAggregator * agg, GstCaps * caps) return FALSE; } + if (self->negotiated_caps && gst_caps_is_equal (self->negotiated_caps, caps)) { + GST_DEBUG_OBJECT (self, "Negotiated caps is not changed"); + goto done; + } + features = gst_caps_get_features (caps, 0); if (features && gst_caps_features_contains (features, @@ -1714,6 +1721,9 @@ gst_d3d11_compositor_negotiated_src_caps (GstAggregator * agg, GstCaps * caps) gst_object_unref (pool); } + gst_caps_replace (&self->negotiated_caps, caps); + +done: return GST_AGGREGATOR_CLASS (parent_class)->negotiated_src_caps (agg, caps); }