Commit d0606472 authored by Laurent Aimar's avatar Laurent Aimar

Fixed overlay update in directx vout.

IDirectDrawSurface2_UpdateOverlay may fails, in which case vlc should simply
retry later.
parent 63f6d064
...@@ -126,6 +126,7 @@ struct vout_display_sys_t ...@@ -126,6 +126,7 @@ struct vout_display_sys_t
bool use_wallpaper; /* show as desktop wallpaper ? */ bool use_wallpaper; /* show as desktop wallpaper ? */
bool use_overlay; /* Are we using an overlay surface */ bool use_overlay; /* Are we using an overlay surface */
bool restore_overlay;
/* DDraw capabilities */ /* DDraw capabilities */
bool can_blit_fourcc; bool can_blit_fourcc;
......
...@@ -193,6 +193,7 @@ static int Open(vlc_object_t *object) ...@@ -193,6 +193,7 @@ static int Open(vlc_object_t *object)
sys->use_wallpaper = var_CreateGetBool(vd, "video-wallpaper"); sys->use_wallpaper = var_CreateGetBool(vd, "video-wallpaper");
/* FIXME */ /* FIXME */
sys->use_overlay = false;//var_CreateGetBool(vd, "overlay"); /* FIXME */ sys->use_overlay = false;//var_CreateGetBool(vd, "overlay"); /* FIXME */
sys->restore_overlay = false;
var_Create(vd, "directx-device", VLC_VAR_STRING | VLC_VAR_DOINHERIT); var_Create(vd, "directx-device", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
/* Initialisation */ /* Initialisation */
...@@ -285,6 +286,8 @@ static void Display(vout_display_t *vd, picture_t *picture) ...@@ -285,6 +286,8 @@ static void Display(vout_display_t *vd, picture_t *picture)
DirectXUpdateOverlay(vd, NULL); DirectXUpdateOverlay(vd, NULL);
} }
} }
if (sys->restore_overlay)
DirectXUpdateOverlay(vd, NULL);
/* */ /* */
DirectXUnlock(picture); DirectXUnlock(picture);
...@@ -379,6 +382,10 @@ static void Manage(vout_display_t *vd) ...@@ -379,6 +382,10 @@ static void Manage(vout_display_t *vd)
if (ch_wallpaper) if (ch_wallpaper)
WallpaperChange(vd, wallpaper_requested); WallpaperChange(vd, wallpaper_requested);
/* */
if (sys->restore_overlay)
DirectXUpdateOverlay(vd, NULL);
} }
/* */ /* */
...@@ -1355,6 +1362,8 @@ static int DirectXUpdateOverlay(vout_display_t *vd, LPDIRECTDRAWSURFACE2 surface ...@@ -1355,6 +1362,8 @@ static int DirectXUpdateOverlay(vout_display_t *vd, LPDIRECTDRAWSURFACE2 surface
HRESULT hr = IDirectDrawSurface2_UpdateOverlay(surface, HRESULT hr = IDirectDrawSurface2_UpdateOverlay(surface,
&src, sys->display, &dst, &src, sys->display, &dst,
DDOVER_SHOW | DDOVER_KEYDESTOVERRIDE, &ddofx); DDOVER_SHOW | DDOVER_KEYDESTOVERRIDE, &ddofx);
sys->restore_overlay = hr != DD_OK;
if (hr != DD_OK) { if (hr != DD_OK) {
msg_Warn(vd, "DirectDrawUpdateOverlay cannot move/resize overlay"); msg_Warn(vd, "DirectDrawUpdateOverlay cannot move/resize overlay");
return VLC_EGENERIC; return VLC_EGENERIC;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment