vlc | branch: master | Steve Lhomme <[email protected]> | Thu Nov 21 10:05:17 2019 +0100| [f457637dea962c66e6b7b9302e9fd00530b343b5] | committer: Steve Lhomme
d3d9: add a d3d9_device_t in the decoder device > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f457637dea962c66e6b7b9302e9fd00530b343b5 --- modules/hw/d3d9/d3d9_device.c | 25 +++++++++++++------------ modules/video_chroma/d3d9_fmt.h | 1 + 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/modules/hw/d3d9/d3d9_device.c b/modules/hw/d3d9/d3d9_device.c index 89bbce3984..5bc8e2373d 100644 --- a/modules/hw/d3d9/d3d9_device.c +++ b/modules/hw/d3d9/d3d9_device.c @@ -50,6 +50,7 @@ static void D3D9CloseDecoderDevice(vlc_decoder_device *device) { d3d9_decoder_device *sys = device->sys; + D3D9_ReleaseDevice( &sys->dec_device.d3ddev ); D3D9_Destroy( &sys->dec_device.hd3d ); if ( sys->cleanupDeviceCb ) @@ -67,6 +68,7 @@ int D3D9OpenDecoderDevice(vlc_decoder_device *device, vout_window_t *wnd) if (unlikely(sys==NULL)) return VLC_ENOMEM; + int adapter; sys->cleanupDeviceCb = NULL; libvlc_video_direct3d_device_setup_cb setupDeviceCb = var_InheritAddress( device, "vout-cb-setup" ); if ( setupDeviceCb ) @@ -86,7 +88,7 @@ int D3D9OpenDecoderDevice(vlc_decoder_device *device, vout_window_t *wnd) } D3D9_CloneExternal( &sys->dec_device.hd3d, (IDirect3D9*) out.device_context ); - sys->dec_device.adapter = out.adapter; + adapter = out.adapter; } else { @@ -96,20 +98,19 @@ int D3D9OpenDecoderDevice(vlc_decoder_device *device, vout_window_t *wnd) msg_Err( device, "Direct3D9 could not be initialized" ); goto error; } - - d3d9_device_t tmp_d3ddev; /* find the best adapter to use, not based on the HWND used */ - HRESULT hr = D3D9_CreateDevice( device, &sys->dec_device.hd3d, -1, &tmp_d3ddev ); - if ( FAILED(hr) ) - { - D3D9_Destroy( &sys->dec_device.hd3d ); - goto error; - } - - sys->dec_device.adapter = tmp_d3ddev.adapterId; + adapter = -1; + } - D3D9_ReleaseDevice(&tmp_d3ddev); + HRESULT hr = D3D9_CreateDevice( device, &sys->dec_device.hd3d, adapter, &sys->dec_device.d3ddev ); + if ( FAILED(hr) ) + { + if ( sys->cleanupDeviceCb ) + sys->cleanupDeviceCb( sys->opaque ); + D3D9_Destroy( &sys->dec_device.hd3d ); + goto error; } + sys->dec_device.adapter = sys->dec_device.d3ddev.adapterId; device->ops = &d3d9_dev_ops; device->opaque = &sys->dec_device; diff --git a/modules/video_chroma/d3d9_fmt.h b/modules/video_chroma/d3d9_fmt.h index bfcec0993f..35edc37114 100644 --- a/modules/video_chroma/d3d9_fmt.h +++ b/modules/video_chroma/d3d9_fmt.h @@ -73,6 +73,7 @@ typedef struct typedef struct { d3d9_handle_t hd3d; + d3d9_device_t d3ddev; int adapter; } d3d9_decoder_device_t; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
