windowscodecs: Create global metadata blocks in the GIF decoder.

This commit is contained in:
Dmitry Timoshkov 2012-09-18 12:57:19 +09:00 committed by Alexandre Julliard
parent 629e7f44cb
commit 88faba8e1a
2 changed files with 14 additions and 2 deletions

View File

@ -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;

View File

@ -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 */