[2/9] windowscodecs: Create global metadata blocks in the GIF decoder.
Dmitry Timoshkov
dmitry at baikal.ru
Mon Sep 17 22:57:19 CDT 2012
---
dlls/windowscodecs/ungif.c | 15 +++++++++++++--
dlls/windowscodecs/ungif.h | 1 +
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/windowscodecs/ungif.c b/dlls/windowscodecs/ungif.c
index 97038d9..66310cb 100644
--- a/dlls/windowscodecs/ungif.c
+++ b/dlls/windowscodecs/ungif.c
@@ -884,13 +884,21 @@ DGifSlurp(GifFileType * GifFile) {
break;
case EXTENSION_RECORD_TYPE:
- if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) ==
+ {
+ Extensions *Extensions;
+
+ if (GifFile->ImageCount)
+ Extensions = &temp_save;
+ else
+ Extensions = &GifFile->Extensions;
+
+ if (DGifGetExtension(GifFile, &Extensions->Function, &ExtData) ==
GIF_ERROR)
return (GIF_ERROR);
while (ExtData != NULL) {
/* Create an extension block with our data */
- if (AddExtensionBlock(&temp_save, ExtData[0], &ExtData[1])
+ if (AddExtensionBlock(Extensions, ExtData[0], &ExtData[1])
== GIF_ERROR)
return (GIF_ERROR);
@@ -899,6 +907,7 @@ DGifSlurp(GifFileType * GifFile) {
temp_save.Function = 0;
}
break;
+ }
case TERMINATE_RECORD_TYPE:
break;
@@ -1003,6 +1012,8 @@ DGifCloseFile(GifFileType * GifFile) {
GifFile->SavedImages = NULL;
}
+ FreeExtension(&GifFile->Extensions);
+
ungif_free(GifFile);
return GIF_OK;
diff --git a/dlls/windowscodecs/ungif.h b/dlls/windowscodecs/ungif.h
index 6c9f418..6caa600 100644
--- a/dlls/windowscodecs/ungif.h
+++ b/dlls/windowscodecs/ungif.h
@@ -117,6 +117,7 @@ typedef struct GifFileType {
SBackGroundColor, /* I hope you understand this one... */
SAspectRatio; /* Pixel aspect ratio, in 1/64 units, starting at 1:4. */
ColorMapObject *SColorMap; /* NULL if not exists. */
+ Extensions Extensions;
int ImageCount; /* Number of current image */
GifImageDesc Image; /* Block describing current image */
struct SavedImage *SavedImages; /* Use this to accumulate file state */
--
1.7.11.6
More information about the wine-patches
mailing list