Dmitry Timoshkov : windowscodecs: Store GIF frame extensions in a dedicated Extensions structure.
Alexandre Julliard
julliard at winehq.org
Tue Sep 18 14:04:28 CDT 2012
Module: wine
Branch: master
Commit: 629e7f44cbc9e7987c82b2321ea48b81e7e53852
URL: http://source.winehq.org/git/wine.git/?a=commit;h=629e7f44cbc9e7987c82b2321ea48b81e7e53852
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Tue Sep 18 12:56:34 2012 +0900
windowscodecs: Store GIF frame extensions in a dedicated Extensions structure.
---
dlls/windowscodecs/gifformat.c | 12 ++++++------
dlls/windowscodecs/ungif.c | 30 +++++++++++++++---------------
dlls/windowscodecs/ungif.h | 24 ++++++++++++++----------
3 files changed, 35 insertions(+), 31 deletions(-)
diff --git a/dlls/windowscodecs/gifformat.c b/dlls/windowscodecs/gifformat.c
index 06047e7..05bf2db 100644
--- a/dlls/windowscodecs/gifformat.c
+++ b/dlls/windowscodecs/gifformat.c
@@ -699,8 +699,8 @@ static HRESULT WINAPI GifFrameDecode_CopyPalette(IWICBitmapFrameDecode *iface,
}
/* look for the transparent color extension */
- for (i = 0; i < This->frame->ExtensionBlockCount; ++i) {
- eb = This->frame->ExtensionBlocks + i;
+ for (i = 0; i < This->frame->Extensions.ExtensionBlockCount; ++i) {
+ eb = This->frame->Extensions.ExtensionBlocks + i;
if (eb->Function == 0xF9 && eb->ByteCount == 4) {
if ((eb->Bytes[0] & 1) == 1) {
trans = (unsigned char)eb->Bytes[3];
@@ -854,11 +854,11 @@ static const void *get_GCE_data(GifFrameDecode *This)
{
int i;
- for (i = 0; i < This->frame->ExtensionBlockCount; i++)
+ for (i = 0; i < This->frame->Extensions.ExtensionBlockCount; i++)
{
- if (This->frame->ExtensionBlocks[i].Function == GRAPHICS_EXT_FUNC_CODE &&
- This->frame->ExtensionBlocks[i].ByteCount == 4)
- return This->frame->ExtensionBlocks[i].Bytes;
+ if (This->frame->Extensions.ExtensionBlocks[i].Function == GRAPHICS_EXT_FUNC_CODE &&
+ This->frame->Extensions.ExtensionBlocks[i].ByteCount == 4)
+ return This->frame->Extensions.ExtensionBlocks[i].Bytes;
}
return NULL;
}
diff --git a/dlls/windowscodecs/ungif.c b/dlls/windowscodecs/ungif.c
index 0efe065..97038d9 100644
--- a/dlls/windowscodecs/ungif.c
+++ b/dlls/windowscodecs/ungif.c
@@ -191,7 +191,7 @@ FreeMapObject(ColorMapObject * Object) {
}
static int
-AddExtensionBlock(SavedImage * New,
+AddExtensionBlock(Extensions *New,
int Len,
const unsigned char ExtData[]) {
@@ -223,18 +223,18 @@ AddExtensionBlock(SavedImage * New,
}
static void
-FreeExtension(SavedImage * Image)
+FreeExtension(Extensions *Extensions)
{
ExtensionBlock *ep;
- if ((Image == NULL) || (Image->ExtensionBlocks == NULL)) {
+ if ((Extensions == NULL) || (Extensions->ExtensionBlocks == NULL)) {
return;
}
- for (ep = Image->ExtensionBlocks;
- ep < (Image->ExtensionBlocks + Image->ExtensionBlockCount); ep++)
+ for (ep = Extensions->ExtensionBlocks;
+ ep < (Extensions->ExtensionBlocks + Extensions->ExtensionBlockCount); ep++)
ungif_free(ep->Bytes);
- ungif_free(Image->ExtensionBlocks);
- Image->ExtensionBlocks = NULL;
+ ungif_free(Extensions->ExtensionBlocks);
+ Extensions->ExtensionBlocks = NULL;
}
/******************************************************************************
@@ -258,8 +258,8 @@ FreeSavedImages(GifFileType * GifFile) {
ungif_free(sp->RasterBits);
- if (sp->ExtensionBlocks)
- FreeExtension(sp);
+ if (sp->Extensions.ExtensionBlocks)
+ FreeExtension(&sp->Extensions);
}
ungif_free(GifFile->SavedImages);
GifFile->SavedImages=NULL;
@@ -424,8 +424,8 @@ DGifGetImageDesc(GifFileType * GifFile) {
sp->ImageDesc.ColorMap->SortFlag = GifFile->Image.ColorMap->SortFlag;
}
sp->RasterBits = NULL;
- sp->ExtensionBlockCount = 0;
- sp->ExtensionBlocks = NULL;
+ sp->Extensions.ExtensionBlockCount = 0;
+ sp->Extensions.ExtensionBlocks = NULL;
GifFile->ImageCount++;
@@ -845,7 +845,7 @@ DGifSlurp(GifFileType * GifFile) {
GifRecordType RecordType;
SavedImage *sp;
GifByteType *ExtData;
- SavedImage temp_save;
+ Extensions temp_save;
temp_save.ExtensionBlocks = NULL;
temp_save.ExtensionBlockCount = 0;
@@ -870,8 +870,8 @@ DGifSlurp(GifFileType * GifFile) {
GIF_ERROR)
return (GIF_ERROR);
if (temp_save.ExtensionBlocks) {
- sp->ExtensionBlocks = temp_save.ExtensionBlocks;
- sp->ExtensionBlockCount = temp_save.ExtensionBlockCount;
+ sp->Extensions.ExtensionBlocks = temp_save.ExtensionBlocks;
+ sp->Extensions.ExtensionBlockCount = temp_save.ExtensionBlockCount;
temp_save.ExtensionBlocks = NULL;
temp_save.ExtensionBlockCount = 0;
@@ -879,7 +879,7 @@ DGifSlurp(GifFileType * GifFile) {
/* FIXME: The following is wrong. It is left in only for
* backwards compatibility. Someday it should go away. Use
* the sp->ExtensionBlocks->Function variable instead. */
- sp->Function = sp->ExtensionBlocks[0].Function;
+ sp->Extensions.Function = sp->Extensions.ExtensionBlocks[0].Function;
}
break;
diff --git a/dlls/windowscodecs/ungif.h b/dlls/windowscodecs/ungif.h
index 5e377d2..6c9f418 100644
--- a/dlls/windowscodecs/ungif.h
+++ b/dlls/windowscodecs/ungif.h
@@ -98,6 +98,19 @@ typedef struct GifImageDesc {
ColorMapObject *ColorMap; /* The local color map */
} GifImageDesc;
+/* This is the in-core version of an extension record */
+typedef struct {
+ int Function; /* Holds the type of the Extension block. */
+ int ByteCount;
+ char *Bytes;
+} ExtensionBlock;
+
+typedef struct {
+ int Function; /* DEPRECATED: Use ExtensionBlocks[x].Function instead */
+ int ExtensionBlockCount;
+ ExtensionBlock *ExtensionBlocks;
+} Extensions;
+
typedef struct GifFileType {
GifWord SWidth, SHeight, /* Screen dimensions. */
SColorResolution, /* How many colors can we generate? */
@@ -152,20 +165,11 @@ int DGifCloseFile(GifFileType * GifFile) DECLSPEC_HIDDEN;
* Support for the in-core structures allocation (slurp mode).
*****************************************************************************/
-/* This is the in-core version of an extension record */
-typedef struct {
- int ByteCount;
- char *Bytes;
- int Function; /* Holds the type of the Extension block. */
-} ExtensionBlock;
-
/* This holds an image header, its unpacked raster bits, and extensions */
typedef struct SavedImage {
GifImageDesc ImageDesc;
unsigned char *RasterBits;
- int Function; /* DEPRECATED: Use ExtensionBlocks[x].Function instead */
- int ExtensionBlockCount;
- ExtensionBlock *ExtensionBlocks;
+ Extensions Extensions;
} SavedImage;
#endif /* _UNGIF_H_ */
More information about the wine-cvs
mailing list