From: Paul Gofman <pgofman@codeweavers.com> --- dlls/mciavi32/mciavi.c | 2 ++ dlls/mciavi32/mmoutput.c | 17 +++++++++++------ dlls/mciavi32/private_mciavi.h | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/dlls/mciavi32/mciavi.c b/dlls/mciavi32/mciavi.c index 5706b60472b..cf0dbe54712 100644 --- a/dlls/mciavi32/mciavi.c +++ b/dlls/mciavi32/mciavi.c @@ -175,6 +175,8 @@ static void MCIAVI_CleanUp(WINE_MCIAVI* wma) free(wma->lpFileName); wma->lpFileName = NULL; + DrawDibClose(wma->hdd); + free(wma->lpVideoIndex); wma->lpVideoIndex = NULL; free(wma->lpAudioIndex); diff --git a/dlls/mciavi32/mmoutput.c b/dlls/mciavi32/mmoutput.c index 1a3945a60cd..b064d151b46 100644 --- a/dlls/mciavi32/mmoutput.c +++ b/dlls/mciavi32/mmoutput.c @@ -472,6 +472,14 @@ BOOL MCIAVI_OpenVideo(WINE_MCIAVI* wma) } paint_frame: + if (!(wma->hdd = DrawDibOpen())) + { + ERR("DrawDibOpen() failed.\n"); + free(wma->outdata); + wma->outdata = NULL; + return FALSE; + } + hDC = wma->hWndPaint ? GetDC(wma->hWndPaint) : 0; if (hDC) { @@ -631,12 +639,9 @@ double MCIAVI_PaintFrame(WINE_MCIAVI* wma, HDC hDC) pBitmapInfo = (LPBITMAPINFO)wma->inbih; } - StretchDIBits(hDC, - wma->dest.left, wma->dest.top, - wma->dest.right - wma->dest.left, wma->dest.bottom - wma->dest.top, - wma->source.left, wma->source.top, - wma->source.right - wma->source.left, wma->source.bottom - wma->source.top, - pBitmapData, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY); + DrawDibDraw(wma->hdd, hDC, wma->dest.left, wma->dest.top, wma->dest.right - wma->dest.left, wma->dest.bottom - wma->dest.top, + &pBitmapInfo->bmiHeader, pBitmapData, + wma->source.left, wma->source.top, wma->source.right - wma->source.left, wma->source.bottom - wma->source.top, 0); return (wma->ash_video.dwScale / (double)wma->ash_video.dwRate) * 1000000; } diff --git a/dlls/mciavi32/private_mciavi.h b/dlls/mciavi32/private_mciavi.h index 806804714a5..32c6189cdcc 100644 --- a/dlls/mciavi32/private_mciavi.h +++ b/dlls/mciavi32/private_mciavi.h @@ -84,6 +84,8 @@ typedef struct { /* data for the background mechanism */ CRITICAL_SECTION cs; HANDLE hStopEvent; + /* data for presentation */ + HDRAWDIB hdd; } WINE_MCIAVI; extern HINSTANCE MCIAVI_hInstance; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10560