emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master f9282e1 1/2: Don't parse GCB block by hand with giflib 5 or later


From: Stefan Kangas
Subject: master f9282e1 1/2: Don't parse GCB block by hand with giflib 5 or later
Date: Fri, 29 Oct 2021 11:44:40 -0400 (EDT)

branch: master
commit f9282e1d724f1cb2e239f946957fdf02aa15dcc5
Author: Stefan Kangas <stefan@marxist.se>
Commit: Stefan Kangas <stefan@marxist.se>

    Don't parse GCB block by hand with giflib 5 or later
    
    * src/image.c (gif_load): If GIFLIB_MAJOR > 5, use
    DGifSavedExtensionToGCB instead of parsing the Graphic Control
    Extension block by hand.
---
 src/image.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/image.c b/src/image.c
index 99533bb..cf0ea6a 100644
--- a/src/image.c
+++ b/src/image.c
@@ -8567,13 +8567,17 @@ gif_load (struct frame *f, struct image *img)
         char *, which invites problems with bytes >= 0x80.  */
       struct SavedImage *subimage = gif->SavedImages + j;
       unsigned char *raster = (unsigned char *) subimage->RasterBits;
-      int transparency_color_index = -1;
-      int disposal = 0;
       int subimg_width = subimage->ImageDesc.Width;
       int subimg_height = subimage->ImageDesc.Height;
       int subimg_top = subimage->ImageDesc.Top;
       int subimg_left = subimage->ImageDesc.Left;
 
+      /* From gif89a spec: 1 = "keep in place", 2 = "restore
+        to background".  Treat any other value like 2.  */
+      int disposal = 0;
+      int transparency_color_index = -1;
+
+#if GIFLIB_MAJOR < 5
       /* Find the Graphic Control Extension block for this sub-image.
         Extract the disposal method and transparency color.  */
       for (i = 0; i < subimage->ExtensionBlockCount; i++)
@@ -8584,13 +8588,17 @@ gif_load (struct frame *f, struct image *img)
              && extblock->ByteCount == 4
              && extblock->Bytes[0] & 1)
            {
-             /* From gif89a spec: 1 = "keep in place", 2 = "restore
-                to background".  Treat any other value like 2.  */
              disposal = (extblock->Bytes[0] >> 2) & 7;
              transparency_color_index = (unsigned char) extblock->Bytes[3];
              break;
            }
        }
+#else
+      GraphicsControlBlock gcb;
+      DGifSavedExtensionToGCB (gif, j, &gcb);
+      disposal = gcb.DisposalMode;
+      transparency_color_index = gcb.TransparentColor;
+#endif
 
       /* We can't "keep in place" the first subimage.  */
       if (j == 0)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]