summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeungha Yang <seungha@centricular.com>2021-08-02 16:22:06 +0900
committerSeungha Yang <seungha@centricular.com>2021-08-02 18:27:46 +0900
commita096207f8531742bbe7c83771524fdbf596bcec1 (patch)
tree57efa8b059647fa1715f5a5fb4d205a794f008d5
parent185d8d1951607b4bb6448f126a4e5d2bd90403a8 (diff)
downloadgstreamer-plugins-bad-a096207f8531742bbe7c83771524fdbf596bcec1.tar.gz
d3d11videosink: Fix warning around GstVideoOverlay::expose()
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>
-rw-r--r--sys/d3d11/gstd3d11videosink.cpp13
-rw-r--r--sys/d3d11/gstd3d11window.cpp17
-rw-r--r--sys/d3d11/gstd3d11window.h3
3 files changed, 12 insertions, 21 deletions
diff --git a/sys/d3d11/gstd3d11videosink.cpp b/sys/d3d11/gstd3d11videosink.cpp
index 0a7615dbc..9dacfe7da 100644
--- a/sys/d3d11/gstd3d11videosink.cpp
+++ b/sys/d3d11/gstd3d11videosink.cpp
@@ -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);
}
}
diff --git a/sys/d3d11/gstd3d11window.cpp b/sys/d3d11/gstd3d11window.cpp
index 6087b8df4..177bd890c 100644
--- a/sys/d3d11/gstd3d11window.cpp
+++ b/sys/d3d11/gstd3d11window.cpp
@@ -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);
diff --git a/sys/d3d11/gstd3d11window.h b/sys/d3d11/gstd3d11window.h
index a03337edb..257f23bb4 100644
--- a/sys/d3d11/gstd3d11window.h
+++ b/sys/d3d11/gstd3d11window.h
@@ -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,