d3d11videosink: Fix warning around GstVideoOverlay::expose()
authorSeungha Yang <seungha@centricular.com>
Mon, 2 Aug 2021 07:22:06 +0000 (16:22 +0900)
committerSeungha Yang <seungha@centricular.com>
Mon, 2 Aug 2021 09:27:46 +0000 (18:27 +0900)
When expose() is called, d3d11videosink needs to redraw using
cached buffer, so gst_d3d11_window_render() should allow null buffer.

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

sys/d3d11/gstd3d11videosink.cpp
sys/d3d11/gstd3d11window.cpp
sys/d3d11/gstd3d11window.h

index 0a7615d..9dacfe7 100644 (file)
@@ -1094,7 +1094,6 @@ gst_d3d11_video_sink_show_frame (GstVideoSink * sink, GstBuffer * buf)
 {
   GstD3D11VideoSink *self = GST_D3D11_VIDEO_SINK (sink);
   GstFlowReturn ret = GST_FLOW_OK;
-  GstVideoRectangle rect = { 0, };
   GstBuffer *fallback_buf = NULL;
   ID3D11Device *device_handle =
       gst_d3d11_device_get_device_handle (self->device);
@@ -1162,10 +1161,6 @@ gst_d3d11_video_sink_show_frame (GstVideoSink * sink, GstBuffer * buf)
 
   gst_d3d11_window_show (self->window);
 
-  /* FIXME: add support crop meta */
-  rect.w = self->video_width;
-  rect.h = self->video_height;
-
   if (self->draw_on_shared_texture) {
     g_rec_mutex_lock (&self->draw_lock);
     self->current_buffer = fallback_buf ? fallback_buf : buf;
@@ -1183,7 +1178,7 @@ gst_d3d11_video_sink_show_frame (GstVideoSink * sink, GstBuffer * buf)
     g_rec_mutex_unlock (&self->draw_lock);
   } else {
     ret = gst_d3d11_window_render (self->window,
-        fallback_buf ? fallback_buf : buf, &rect);
+        fallback_buf ? fallback_buf : buf);
   }
 
   gst_clear_buffer (&fallback_buf);
@@ -1248,11 +1243,7 @@ gst_d3d11_video_sink_expose (GstVideoOverlay * overlay)
   GstD3D11VideoSink *self = GST_D3D11_VIDEO_SINK (overlay);
 
   if (self->window && self->window->swap_chain) {
-    GstVideoRectangle rect = { 0, };
-    rect.w = GST_VIDEO_SINK_WIDTH (self);
-    rect.h = GST_VIDEO_SINK_HEIGHT (self);
-
-    gst_d3d11_window_render (self->window, NULL, &rect);
+    gst_d3d11_window_render (self->window, NULL);
   }
 }
 
index 6087b8d..177bd89 100644 (file)
@@ -953,24 +953,25 @@ gst_d3d111_window_present (GstD3D11Window * self, GstBuffer * buffer,
 }
 
 GstFlowReturn
-gst_d3d11_window_render (GstD3D11Window * window, GstBuffer * buffer,
-    GstVideoRectangle * rect)
+gst_d3d11_window_render (GstD3D11Window * window, GstBuffer * buffer)
 {
   GstMemory *mem;
   GstFlowReturn ret;
 
   g_return_val_if_fail (GST_IS_D3D11_WINDOW (window), GST_FLOW_ERROR);
-  g_return_val_if_fail (rect != NULL, GST_FLOW_ERROR);
 
-  mem = gst_buffer_peek_memory (buffer, 0);
-  if (!gst_is_d3d11_memory (mem)) {
-    GST_ERROR_OBJECT (window, "Invalid buffer");
+  if (buffer) {
+    mem = gst_buffer_peek_memory (buffer, 0);
+    if (!gst_is_d3d11_memory (mem)) {
+      GST_ERROR_OBJECT (window, "Invalid buffer");
 
-    return GST_FLOW_ERROR;
+      return GST_FLOW_ERROR;
+    }
   }
 
   gst_d3d11_device_lock (window->device);
-  gst_buffer_replace (&window->cached_buffer, buffer);
+  if (buffer)
+    gst_buffer_replace (&window->cached_buffer, buffer);
 
   ret = gst_d3d111_window_present (window, window->cached_buffer,
       window->pov, window->rtv);
index a03337e..257f23b 100644 (file)
@@ -187,8 +187,7 @@ gboolean      gst_d3d11_window_prepare              (GstD3D11Window * window,
                                                      GError ** error);
 
 GstFlowReturn gst_d3d11_window_render               (GstD3D11Window * window,
-                                                     GstBuffer * buffer,
-                                                     GstVideoRectangle * src_rect);
+                                                     GstBuffer * buffer);
 
 GstFlowReturn gst_d3d11_window_render_on_shared_handle (GstD3D11Window * window,
                                                         GstBuffer * buffer,