static void DxDestroySurfaces(vlc_va_t *va) { directx_sys_t *dx_sys = &va->sys->dx_sys; if (dx_sys->surface_count) { ID3D11Resource *p_texture; ID3D11VideoDecoderOutputView_GetResource( (ID3D11VideoDecoderOutputView*) dx_sys->hw_surface[0], &p_texture ); ID3D11Resource_Release(p_texture); ID3D11Resource_Release(p_texture); } }
static void gl_free(void) { capture_free(); if (data.using_shtex) { if (data.gl_dxobj) jimglDXUnregisterObjectNV(data.gl_device, data.gl_dxobj); if (data.gl_device) jimglDXCloseDeviceNV(data.gl_device); if (data.texture) glDeleteTextures(1, &data.texture); if (data.d3d11_tex) ID3D11Resource_Release(data.d3d11_tex); if (data.d3d11_context) ID3D11DeviceContext_Release(data.d3d11_context); if (data.d3d11_device) ID3D11Device_Release(data.d3d11_device); if (data.dxgi_swap) IDXGISwapChain_Release(data.dxgi_swap); if (data.hwnd) DestroyWindow(data.hwnd); } else { for (size_t i = 0; i < NUM_BUFFERS; i++) { if (data.pbos[i]) { if (data.texture_mapped[i]) { glBindBuffer(GL_PIXEL_PACK_BUFFER, data.pbos[i]); glUnmapBuffer(GL_PIXEL_PACK_BUFFER); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } glDeleteBuffers(1, &data.pbos[i]); } if (data.textures[i]) glDeleteTextures(1, &data.textures[i]); } } if (data.fbo) glDeleteFramebuffers(1, &data.fbo); gl_error("gl_free", "GL error occurred on free"); memset(&data, 0, sizeof(data)); hlog("------------------ gl capture freed ------------------"); }