d3d11window: Don't hold backbuffer interface

We don't need to hold it
This commit is contained in:
Seungha Yang 2019-12-18 20:36:32 +09:00
parent 32d618c677
commit 1424de0a4a
2 changed files with 9 additions and 15 deletions

View file

@ -230,11 +230,6 @@ static void
gst_d3d11_window_release_resources (GstD3D11Device * device, gst_d3d11_window_release_resources (GstD3D11Device * device,
GstD3D11Window * window) GstD3D11Window * window)
{ {
if (window->backbuffer) {
ID3D11Texture2D_Release (window->backbuffer);
window->backbuffer = NULL;
}
if (window->rtv) { if (window->rtv) {
ID3D11RenderTargetView_Release (window->rtv); ID3D11RenderTargetView_Release (window->rtv);
window->rtv = NULL; window->rtv = NULL;
@ -535,17 +530,13 @@ gst_d3d11_window_on_resize (GstD3D11Device * device, GstD3D11Window * window)
guint width, height; guint width, height;
D3D11_TEXTURE2D_DESC desc; D3D11_TEXTURE2D_DESC desc;
DXGI_SWAP_CHAIN_DESC swap_desc; DXGI_SWAP_CHAIN_DESC swap_desc;
ID3D11Texture2D *backbuffer;
if (!window->swap_chain) if (!window->swap_chain)
return; return;
d3d11_dev = gst_d3d11_device_get_device_handle (device); d3d11_dev = gst_d3d11_device_get_device_handle (device);
if (window->backbuffer) {
ID3D11Texture2D_Release (window->backbuffer);
window->backbuffer = NULL;
}
if (window->rtv) { if (window->rtv) {
ID3D11RenderTargetView_Release (window->rtv); ID3D11RenderTargetView_Release (window->rtv);
window->rtv = NULL; window->rtv = NULL;
@ -561,14 +552,14 @@ gst_d3d11_window_on_resize (GstD3D11Device * device, GstD3D11Window * window)
} }
hr = IDXGISwapChain_GetBuffer (window->swap_chain, hr = IDXGISwapChain_GetBuffer (window->swap_chain,
0, &IID_ID3D11Texture2D, (void **) &window->backbuffer); 0, &IID_ID3D11Texture2D, (void **) &backbuffer);
if (!gst_d3d11_result (hr)) { if (!gst_d3d11_result (hr)) {
GST_ERROR_OBJECT (window, GST_ERROR_OBJECT (window,
"Cannot get backbuffer from swapchain, hr: 0x%x", (guint) hr); "Cannot get backbuffer from swapchain, hr: 0x%x", (guint) hr);
return; return;
} }
ID3D11Texture2D_GetDesc (window->backbuffer, &desc); ID3D11Texture2D_GetDesc (backbuffer, &desc);
window->surface_width = desc.Width; window->surface_width = desc.Width;
window->surface_height = desc.Height; window->surface_height = desc.Height;
@ -605,11 +596,12 @@ gst_d3d11_window_on_resize (GstD3D11Device * device, GstD3D11Window * window)
window->render_rect.w, window->render_rect.h); window->render_rect.w, window->render_rect.h);
hr = ID3D11Device_CreateRenderTargetView (d3d11_dev, hr = ID3D11Device_CreateRenderTargetView (d3d11_dev,
(ID3D11Resource *) window->backbuffer, NULL, &window->rtv); (ID3D11Resource *) backbuffer, NULL, &window->rtv);
if (!gst_d3d11_result (hr)) { if (!gst_d3d11_result (hr)) {
GST_ERROR_OBJECT (window, "Cannot create render target view, hr: 0x%x", GST_ERROR_OBJECT (window, "Cannot create render target view, hr: 0x%x",
(guint) hr); (guint) hr);
return;
goto done;
} }
if (window->cached_buffer) { if (window->cached_buffer) {
@ -622,6 +614,9 @@ gst_d3d11_window_on_resize (GstD3D11Device * device, GstD3D11Window * window)
_present_on_device_thread (window->device, &present_data); _present_on_device_thread (window->device, &present_data);
} }
done:
ID3D11Texture2D_Release (backbuffer);
} }
static void static void

View file

@ -96,7 +96,6 @@ struct _GstD3D11Window
HDC device_handle; HDC device_handle;
IDXGISwapChain *swap_chain; IDXGISwapChain *swap_chain;
ID3D11Texture2D *backbuffer;
ID3D11RenderTargetView *rtv; ID3D11RenderTargetView *rtv;
DXGI_FORMAT format; DXGI_FORMAT format;