Michael Müller : avifil32: Correctly handle compressed frames when desired format is specified.

Alexandre Julliard julliard at winehq.org
Mon Nov 25 09:12:21 CST 2019


Module: wine
Branch: stable
Commit: 0135e8848373eae87e87677b91a980e9c5d799a3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0135e8848373eae87e87677b91a980e9c5d799a3

Author: Michael Müller <michael at fds-team.de>
Date:   Thu May  2 02:43:03 2019 +0200

avifil32: Correctly handle compressed frames when desired format is specified.

From: Michael Müller <michael at fds-team.de>
Signed-off-by: Vijay Kiran Kamuju <infyquest at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit da0f196c9348a80f04461d708b26db0f108dead6)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/avifil32/getframe.c | 102 +++++++++++++++++++++++------------------------
 1 file changed, 50 insertions(+), 52 deletions(-)

diff --git a/dlls/avifil32/getframe.c b/dlls/avifil32/getframe.c
index be4a2a9abf..2e6156806d 100644
--- a/dlls/avifil32/getframe.c
+++ b/dlls/avifil32/getframe.c
@@ -405,8 +405,6 @@ static HRESULT WINAPI IGetFrame_fnSetFormat(IGetFrame *iface,
 	   lpbi->biSize + lpbi->biClrUsed * sizeof(RGBQUAD));
     if (lpbi->biBitCount <= 8)
       ICDecompressGetPalette(This->hic, This->lpInFormat, This->lpOutFormat);
-
-    return AVIERR_OK;
   } else {
     if (bBestDisplay) {
       ICGetDisplayFormat(This->hic, This->lpInFormat,
@@ -416,64 +414,64 @@ static HRESULT WINAPI IGetFrame_fnSetFormat(IGetFrame *iface,
       AVIFILE_CloseCompressor(This);
       return AVIERR_NOCOMPRESSOR;
     }
+  }
 
-    /* check output format */
-    if (This->lpOutFormat->biClrUsed == 0 &&
-	This->lpOutFormat->biBitCount <= 8)
-      This->lpOutFormat->biClrUsed = 1u << This->lpOutFormat->biBitCount;
-    if (This->lpOutFormat->biSizeImage == 0 &&
-	This->lpOutFormat->biCompression == BI_RGB) {
-      This->lpOutFormat->biSizeImage =
-	DIBWIDTHBYTES(*This->lpOutFormat) * This->lpOutFormat->biHeight;
-    }
+  /* check output format */
+  if (This->lpOutFormat->biClrUsed == 0 &&
+      This->lpOutFormat->biBitCount <= 8)
+    This->lpOutFormat->biClrUsed = 1u << This->lpOutFormat->biBitCount;
+  if (This->lpOutFormat->biSizeImage == 0 &&
+      This->lpOutFormat->biCompression == BI_RGB) {
+    This->lpOutFormat->biSizeImage =
+      DIBWIDTHBYTES(*This->lpOutFormat) * This->lpOutFormat->biHeight;
+  }
 
-    if (lpBits == NULL) {
-      DWORD size = This->lpOutFormat->biClrUsed * sizeof(RGBQUAD);
+  if (lpBits == NULL) {
+    DWORD size = This->lpOutFormat->biClrUsed * sizeof(RGBQUAD);
 
-      size += This->lpOutFormat->biSize + This->lpOutFormat->biSizeImage;
-      This->lpOutFormat = HeapReAlloc(GetProcessHeap(), 0, This->lpOutFormat, size);
-      if (This->lpOutFormat == NULL) {
-	AVIFILE_CloseCompressor(This);
-	return AVIERR_MEMORY;
-      }
-      This->lpOutBuffer = DIBPTR(This->lpOutFormat);
-    } else
-      This->lpOutBuffer = lpBits;
-
-    /* for user size was irrelevant */
-    if (dx == -1)
-      dx = This->lpOutFormat->biWidth;
-    if (dy == -1)
-      dy = This->lpOutFormat->biHeight;
-
-    /* need to resize? */
-    if (x != 0 || y != 0) {
-      if (dy == This->lpOutFormat->biHeight &&
-	  dx == This->lpOutFormat->biWidth)
-	This->bResize = FALSE;
-      else
-	This->bResize = TRUE;
+    size += This->lpOutFormat->biSize + This->lpOutFormat->biSizeImage;
+    This->lpOutFormat = HeapReAlloc(GetProcessHeap(), 0, This->lpOutFormat, size);
+    if (This->lpOutFormat == NULL) {
+      AVIFILE_CloseCompressor(This);
+      return AVIERR_MEMORY;
     }
+    This->lpOutBuffer = DIBPTR(This->lpOutFormat);
+  } else
+    This->lpOutBuffer = lpBits;
+
+  /* for user size was irrelevant */
+  if (dx == -1)
+    dx = This->lpOutFormat->biWidth;
+  if (dy == -1)
+    dy = This->lpOutFormat->biHeight;
+
+  /* need to resize? */
+  if (x != 0 || y != 0) {
+    if (dy == This->lpOutFormat->biHeight &&
+        dx == This->lpOutFormat->biWidth)
+      This->bResize = FALSE;
+    else
+      This->bResize = TRUE;
+  }
 
-    if (This->bResize) {
-      This->x  = x;
-      This->y  = y;
-      This->dx = dx;
-      This->dy = dy;
-
-      if (ICDecompressExBegin(This->hic,0,This->lpInFormat,This->lpInBuffer,0,
-			      0,This->lpInFormat->biWidth,
-			      This->lpInFormat->biHeight,This->lpOutFormat,
-			      This->lpOutBuffer, x, y, dx, dy) == ICERR_OK)
-	return AVIERR_OK;
-    } else if (ICDecompressBegin(This->hic, This->lpInFormat,
-				 This->lpOutFormat) == ICERR_OK)
+  if (This->bResize) {
+    This->x  = x;
+    This->y  = y;
+    This->dx = dx;
+    This->dy = dy;
+
+    if (ICDecompressExBegin(This->hic,0,This->lpInFormat,This->lpInBuffer,0,
+                            0,This->lpInFormat->biWidth,
+                            This->lpInFormat->biHeight,This->lpOutFormat,
+                            This->lpOutBuffer, x, y, dx, dy) == ICERR_OK)
       return AVIERR_OK;
+  } else if (ICDecompressBegin(This->hic, This->lpInFormat,
+                               This->lpOutFormat) == ICERR_OK)
+    return AVIERR_OK;
 
-    AVIFILE_CloseCompressor(This);
+  AVIFILE_CloseCompressor(This);
 
-    return AVIERR_COMPRESSOR;
-  }
+  return AVIERR_COMPRESSOR;
 }
 
 static const struct IGetFrameVtbl igetframeVtbl = {




More information about the wine-cvs mailing list