diff options
author | Seungha Yang <seungha@centricular.com> | 2021-08-02 16:22:06 +0900 |
---|---|---|
committer | Seungha Yang <seungha@centricular.com> | 2021-08-02 18:27:46 +0900 |
commit | a096207f8531742bbe7c83771524fdbf596bcec1 (patch) | |
tree | 57efa8b059647fa1715f5a5fb4d205a794f008d5 | |
parent | 185d8d1951607b4bb6448f126a4e5d2bd90403a8 (diff) | |
download | gstreamer-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.cpp | 13 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11window.cpp | 17 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11window.h | 3 |
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, |