diff --git a/sys/d3d11/gstd3d11videosink.c b/sys/d3d11/gstd3d11videosink.c index 2cf4611de6..3ada96fe96 100644 --- a/sys/d3d11/gstd3d11videosink.c +++ b/sys/d3d11/gstd3d11videosink.c @@ -740,6 +740,8 @@ gst_d3d11_video_sink_upload_frame (GstD3D11VideoSink * self, GstBuffer * inbuf, gboolean ret; gint i; + GST_LOG_OBJECT (self, "Copy to fallback buffer"); + if (!gst_video_frame_map (&in_frame, &self->info, inbuf, GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF)) goto invalid_buffer; @@ -846,6 +848,18 @@ gst_d3d11_video_sink_show_frame (GstVideoSink * sink, GstBuffer * buf) return GST_FLOW_ERROR; } + for (i = 0; i < gst_buffer_n_memory (render_buf); i++) { + GstD3D11Memory *dmem; + + dmem = (GstD3D11Memory *) gst_buffer_peek_memory (render_buf, i); + if (!gst_d3d11_memory_ensure_shader_resource_view (dmem)) { + GST_ERROR_OBJECT (self, "fallback shader resource view is unavailable"); + gst_buffer_unref (render_buf); + + return GST_FLOW_ERROR; + } + } + if (!gst_d3d11_video_sink_upload_frame (self, buf, render_buf)) { GST_ERROR_OBJECT (self, "cannot upload frame"); gst_buffer_unref (render_buf);