windowscodecs: Create global metadata blocks in the GIF decoder.
This commit is contained in:
parent
629e7f44cb
commit
88faba8e1a
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue