vlc | branch: master | Steve Lhomme <[email protected]> | Thu Nov 15 11:39:07 2018 +0100| [c59315fdce976a266bf4c18b4b4c2b328a53502a] | committer: Steve Lhomme
d3d9: add a way to create d3d9_handle_t and d3d9_device_t from external resources > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c59315fdce976a266bf4c18b4b4c2b328a53502a --- modules/video_chroma/d3d9_fmt.c | 26 ++++++++++++++++++++++++++ modules/video_chroma/d3d9_fmt.h | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/modules/video_chroma/d3d9_fmt.c b/modules/video_chroma/d3d9_fmt.c index 553479e2e8..7ba9c108f9 100644 --- a/modules/video_chroma/d3d9_fmt.c +++ b/modules/video_chroma/d3d9_fmt.c @@ -130,6 +130,21 @@ HRESULT D3D9_CreateDevice(vlc_object_t *o, d3d9_handle_t *hd3d, HWND hwnd, return hr; } +HRESULT D3D9_CreateDeviceExternal(IDirect3DDevice9 *dev, d3d9_handle_t *hd3d, HWND hwnd, + const video_format_t *source, d3d9_device_t *out) +{ + + out->dev = dev; + out->owner = false; + out->hwnd = hwnd; + if (D3D9_FillPresentationParameters(hd3d, source, out)) + { + return E_FAIL; + } + IDirect3DDevice9_AddRef(out->dev); + return S_OK; +} + void D3D9_ReleaseDevice(d3d9_device_t *d3d_dev) { if (d3d_dev->dev) @@ -249,3 +264,14 @@ error: D3D9_Destroy( hd3d ); return VLC_EGENERIC; } + +#undef D3D9_CreateExternal +int D3D9_CreateExternal(vlc_object_t *o, d3d9_handle_t *hd3d, IDirect3DDevice9 *d3d9dev) +{ + HRESULT hr = IDirect3DDevice9_GetDirect3D(d3d9dev, &hd3d->obj); + if (FAILED(hr)) + return VLC_EGENERIC; + hd3d->hdll = NULL; + hd3d->use_ex = false; /* we don't care */ + return VLC_SUCCESS; +} diff --git a/modules/video_chroma/d3d9_fmt.h b/modules/video_chroma/d3d9_fmt.h index 36336d4156..36231b27e5 100644 --- a/modules/video_chroma/d3d9_fmt.h +++ b/modules/video_chroma/d3d9_fmt.h @@ -94,10 +94,14 @@ static inline void ReleasePictureSys(picture_sys_t *p_sys) HRESULT D3D9_CreateDevice(vlc_object_t *, d3d9_handle_t *, HWND, const video_format_t *, d3d9_device_t *out); #define D3D9_CreateDevice(a,b,c,d,e) D3D9_CreateDevice( VLC_OBJECT(a), b, c, d, e ) +HRESULT D3D9_CreateDeviceExternal(IDirect3DDevice9 *, d3d9_handle_t *, HWND, + const video_format_t *, d3d9_device_t *out); void D3D9_ReleaseDevice(d3d9_device_t *); int D3D9_Create(vlc_object_t *, d3d9_handle_t *); #define D3D9_Create(a,b) D3D9_Create( VLC_OBJECT(a), b ) +int D3D9_CreateExternal(vlc_object_t *, d3d9_handle_t *, IDirect3DDevice9 *); +#define D3D9_CreateExternal(a,b,c) D3D9_CreateExternal( VLC_OBJECT(a), b, c ) void D3D9_Destroy(d3d9_handle_t *); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
