d3d11compositor: Reuse converter on alpha update
authorSeungha Yang <seungha@centricular.com>
Fri, 21 May 2021 11:02:53 +0000 (20:02 +0900)
committerSeungha Yang <seungha@centricular.com>
Fri, 28 May 2021 12:44:12 +0000 (21:44 +0900)
... instead of creating converter object

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2276>

sys/d3d11/gstd3d11compositor.cpp

index 6463ec1..d5de8d1 100644 (file)
@@ -1199,7 +1199,7 @@ gst_d3d11_compositor_pad_setup_converter (GstVideoAggregatorPad * pad,
   guint zorder = 0;
 #endif
 
-  if (!cpad->convert || cpad->alpha_updated || self->reconfigured) {
+  if (!cpad->convert || self->reconfigured) {
     GstStructure *config;
 
     if (cpad->convert)
@@ -1214,13 +1214,23 @@ gst_d3d11_compositor_pad_setup_converter (GstVideoAggregatorPad * pad,
     cpad->convert =
         gst_d3d11_converter_new (self->device, &pad->info, &vagg->info, config);
 
-    cpad->alpha_updated = FALSE;
     if (!cpad->convert) {
       GST_ERROR_OBJECT (pad, "Couldn't create converter");
       return FALSE;
     }
 
     is_first = TRUE;
+  } else if (cpad->alpha_updated) {
+    GstStructure *config;
+
+    config = gst_structure_new_empty ("config");
+    if (cpad->alpha <= 1.0) {
+      gst_structure_set (config, GST_D3D11_CONVERTER_OPT_ALPHA_VALUE,
+          G_TYPE_DOUBLE, cpad->alpha, nullptr);
+    }
+
+    gst_d3d11_converter_update_config (cpad->convert, config);
+    cpad->alpha_updated = FALSE;
   }
 
   if (!cpad->blend || cpad->blend_desc_updated) {