emacs-devel
[Top][All Lists]
Advanced

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

Re: Image metadata


From: Juri Linkov
Subject: Re: Image metadata
Date: Wed, 31 Mar 2010 01:38:36 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (x86_64-pc-linux-gnu)

>> The problem is that one part of the current `image-extension-data'
>> is metadata, and another part is extension data.  For instance, in
>
>>   (count 44
>>    255 "NETSCAPE2.0"
>>      0 "address@hidden@"
>>    249 "address@hidden"
>>   )
>
>> `count 44' is metadata, and the rest (with non-descriptive numeric keys)
>> is extension data.
>
> Not knowing what is "extension data", I don't know if I agree.

>From the API's point of view, "extension data" is just raw data fetched
from the `ExtensionBlocks' slot of the GIF metadata.  So really it's not
important what it is as long as slot names basically coincide in the GIF
structure and in its Lisp image metadata.

I believe this patch cleans up the naming mess:

=== modified file 'lisp/image.el'
--- lisp/image.el       2010-03-11 20:01:33 +0000
+++ lisp/image.el       2010-03-30 22:28:18 +0000
@@ -681,8 +681,9 @@ (defun image-animated-p (image)
 shall be displayed."
   (cond
    ((eq (plist-get (cdr image) :type) 'gif)
-    (let* ((extdata (image-extension-data image))
-          (images (plist-get extdata 'count))
+    (let* ((metadata (image-metadata image))
+          (images (plist-get metadata 'count))
+          (extdata (plist-get metadata 'extension-data))
           (anim (plist-get extdata #xF9)))
       (and (integerp images) (> images 1)
           (stringp anim) (>= (length anim) 4)

=== modified file 'src/image.c'
--- src/image.c 2010-01-24 23:03:13 +0000
+++ src/image.c 2010-03-30 22:31:57 +0000
@@ -604,7 +604,7 @@ (at your option) any later version.
 extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile;
 extern Lisp_Object QCdata, QCtype;
 extern Lisp_Object Qcenter;
-Lisp_Object QCascent, QCmargin, QCrelief, Qcount;
+Lisp_Object QCascent, QCmargin, QCrelief, Qcount, Qextension_data;
 Lisp_Object QCconversion, QCcolor_symbols, QCheuristic_mask;
 Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask;
 
@@ -1011,8 +1011,8 @@ (at your option) any later version.
   return mask;
 }
 
-DEFUN ("image-extension-data", Fimage_extension_data, Simage_extension_data, 
1, 2, 0,
-       doc: /* Return extension data for image SPEC.
+DEFUN ("image-metadata", Fimage_metadata, Simage_metadata, 1, 2, 0,
+       doc: /* Return metadata for image SPEC.
 FRAME is the frame on which the image will be displayed.  FRAME nil
 or omitted means use the selected frame.  */)
      (spec, frame)
@@ -7169,7 +7169,7 @@ (at your option) any later version.
      struct frame *f;
      struct image *img;
 {
-  /* IMG->data.ptr_val may contain extension data.  */
+  /* IMG->data.ptr_val may contain metadata with extension data.  */
   img->data.lisp_val = Qnil;
   x_clear_image (f, img);
 }
@@ -7488,8 +7488,8 @@ (at your option) any later version.
          }
     }
 
-  /* Save GIF image extension data for `image-extension-data'.
-     Format is (count IMAGES FUNCTION "BYTES" ...).  */
+  /* Save GIF image extension data for `image-metadata'.
+     Format is (count IMAGES extension-data (FUNCTION "BYTES" ...)).  */
   img->data.lisp_val = Qnil;
   if (gif->SavedImages[ino].ExtensionBlockCount > 0)
     {
@@ -7499,7 +7499,9 @@ (at your option) any later version.
        img->data.lisp_val = Fcons (make_unibyte_string (ext->Bytes, 
ext->ByteCount),
                                    Fcons (make_number (ext->Function),
                                           img->data.lisp_val));
-      img->data.lisp_val = Fnreverse (img->data.lisp_val);
+      img->data.lisp_val = Fcons (Qextension_data,
+                                 Fcons (Fnreverse (img->data.lisp_val),
+                                        Qnil));
     }
   if (gif->ImageCount > 1)
     img->data.lisp_val = Fcons (Qcount,
@@ -8403,6 +8405,8 @@ (at your option) any later version.
 
   Qcount = intern_c_string ("count");
   staticpro (&Qcount);
+  Qextension_data = intern_c_string ("extension-data");
+  staticpro (&Qextension_data);
 
   QCascent = intern_c_string (":ascent");
   staticpro (&QCascent);
@@ -8498,7 +8502,7 @@ (at your option) any later version.
   defsubr (&Simage_refresh);
   defsubr (&Simage_size);
   defsubr (&Simage_mask_p);
-  defsubr (&Simage_extension_data);
+  defsubr (&Simage_metadata);
 
 #if GLYPH_DEBUG
   defsubr (&Simagep);

-- 
Juri Linkov
http://www.jurta.org/emacs/




reply via email to

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