[vlc-devel] [PATCH] win32/drawable: process the WM_SIZE asynchronously

Thomas Guillem thomas at gllm.fr
Mon Mar 1 10:57:16 UTC 2021


I tested it, no more deadlock and better than my proposal.

LGTM.

On Mon, Feb 22, 2021, at 15:29, Steve Lhomme wrote:
> On 2021-02-22 14:20, Alexandre Janniaux wrote:
> > Hi,
> > 
> > How does resizing work with asynchronous posting? I had the
> > feeling that win32 API needed synchronous resizing to be able
> > to achieve smooth resizing, is it wrong or unrelated here?
> 
> Technically our underlying HWND is still there but possibly not matching 
> the parent. If it's too small the area may not be looking too good. If 
> it's too big it's clipped in the parent so no artefacts, just not 
> displayed at the right size. There is nothing in Windows that says our 
> HWND needs to fit exactly in its parent, so a lag here won't cause 
> troubles, just possibly some visual oddness.
> 
> In practice I have not seen such things. But on my system I can hardly 
> get the original reentrant issue anyway, so the resizing is applied 
> quickly.
> > Regards,
> > --
> > Alexandre Janniaux
> > Videolabs
> > 
> > On Mon, Feb 22, 2021 at 08:25:30AM +0100, Steve Lhomme wrote:
> >> The vout_window_ReportSize call may make changes in underlying HWND's which in
> >> turn might make reentrant calls to WinVoutEventProc, which might in turn call
> >> WM_SIZE in the same stack (when resizing quickly).
> >>
> >> vout_window_ReportSize() is not reentrant so we should avoid calling it in
> >> calls that might be reentrant (WM_SIZE in this case).
> >>
> >> We keep the latest WM_SIZE so when the asynchronous call is done, we already
> >> have the most up to date value.
> >> ---
> >>   modules/video_output/win32/drawable.c | 10 +++++++++-
> >>   1 file changed, 9 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/modules/video_output/win32/drawable.c b/modules/video_output/win32/drawable.c
> >> index 90106558848..c6f2f573a2f 100644
> >> --- a/modules/video_output/win32/drawable.c
> >> +++ b/modules/video_output/win32/drawable.c
> >> @@ -77,6 +77,8 @@ struct drawable_sys
> >>       HWND hWnd;
> >>       HWND embed_hwnd;
> >>       RECT rect_parent;
> >> +
> >> +    unsigned int width, height;
> >>   };
> >>
> >>   static LRESULT CALLBACK WinVoutEventProc(HWND hwnd, UINT message,
> >> @@ -131,7 +133,13 @@ static LRESULT CALLBACK WinVoutEventProc(HWND hwnd, UINT message,
> >>           return 0;
> >>
> >>       case WM_SIZE:
> >> -        vout_window_ReportSize(wnd, LOWORD(lParam), HIWORD(lParam));
> >> +        sys->width  = LOWORD(lParam);
> >> +        sys->height = HIWORD(lParam);
> >> +        PostMessage(hwnd, WM_USER, 0, lParam);
> >> +        return 0;
> >> +
> >> +    case WM_USER:
> >> +        vout_window_ReportSize(wnd, sys->width, sys->height);
> >>           return 0;
> >>
> >>       default:
> >> --
> >> 2.29.2
> >>
> >> _______________________________________________
> >> vlc-devel mailing list
> >> To unsubscribe or modify your subscription options:
> >> https://mailman.videolan.org/listinfo/vlc-devel
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> > 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list