diff --git a/lib/media_player.c b/lib/media_player.c index 240ee7b55d64073b61b0593d628cc5bb5068c7be..6d7ba5bf07af693bfeb5fd5d18c34b7748f4e8b4 100644 --- a/lib/media_player.c +++ b/lib/media_player.c @@ -1128,7 +1128,7 @@ bool libvlc_video_set_output_callbacks(libvlc_media_player_t *mp, } else if ( engine == libvlc_video_engine_d3d11 ) { - var_SetString ( mp, "vout", "direct3d11" ); + var_SetString ( mp, "vout", "d3d11drawable" ); var_SetString ( mp, "dec-dev", "d3d11" ); } else if ( engine == libvlc_video_engine_d3d9 ) diff --git a/modules/video_output/win32/direct3d11.cpp b/modules/video_output/win32/direct3d11.cpp index 9791e00e4881c809eaee26218784d424d0b2337f..18e7a5323b1d0ccea6a90a848ab3193d7436074e 100644 --- a/modules/video_output/win32/direct3d11.cpp +++ b/modules/video_output/win32/direct3d11.cpp @@ -58,7 +58,9 @@ using Microsoft::WRL::ComPtr; -static int Open(vout_display_t *, +static int OpenDisplay(vout_display_t *, + video_format_t *, vlc_video_context *); +static int OpenDrawable(vout_display_t *, video_format_t *, vlc_video_context *); static void Close(vout_display_t *); @@ -98,7 +100,12 @@ vlc_module_begin () change_string_list(ppsz_hdr_mode, ppsz_hdr_mode_text) add_shortcut("direct3d11") - set_callback_display(Open, 300) + set_callback_display(OpenDisplay, 300) + + add_submodule() + set_callback_display(OpenDrawable, 0) + add_shortcut("d3d11drawable") + vlc_module_end () enum d3d11_upscale @@ -529,13 +536,9 @@ static const auto ops = []{ return ops; }(); -static int Open(vout_display_t *vd, +static int OpenGeneric(vout_display_t *vd, video_format_t *fmtp, vlc_video_context *context) { - if (vd->cfg->window->type != VLC_WINDOW_TYPE_HWND && - vd->cfg->window->type != VLC_WINDOW_TYPE_DCOMP) - return VLC_ENOTSUP; - vout_display_sys_t *sys = new (std::nothrow) vout_display_sys_t(); if (!sys) return VLC_ENOMEM; @@ -639,6 +642,27 @@ error: return VLC_EGENERIC; } +static int OpenDisplay(vout_display_t *vd, + video_format_t *fmtp, vlc_video_context *context) +{ + if (vd->cfg->window->type != VLC_WINDOW_TYPE_HWND && + vd->cfg->window->type != VLC_WINDOW_TYPE_DCOMP) + return VLC_ENOTSUP; + + return OpenGeneric(vd, fmtp, context); +} + +static int OpenDrawable(vout_display_t *vd, + video_format_t *fmtp, vlc_video_context *context) +{ + if (vd->cfg->window->type != VLC_WINDOW_TYPE_DUMMY) + return VLC_ENOTSUP; + + /* TODO: other checks for callback validity should be there. */ + + return OpenGeneric(vd, fmtp, context); +} + static void Close(vout_display_t *vd) { vout_display_sys_t *sys = static_cast<vout_display_sys_t *>(vd->sys);