From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: Image metadata Date: Wed, 31 Mar 2010 01:38:36 +0300 Organization: JURTA Message-ID: <87tyrx77v3.fsf@mail.jurta.org> References: <87lje9xs4w.fsf@mail.jurta.org> <873a0d1j46.fsf@mail.jurta.org> <87vdd9rwia.fsf@mail.jurta.org> <87bpf0dmbn.fsf@mail.jurta.org> <874ojxhpqg.fsf_-_@mail.jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: dough.gmane.org 1269989087 24181 80.91.229.12 (30 Mar 2010 22:44:47 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 30 Mar 2010 22:44:47 +0000 (UTC) Cc: joakim@verona.se, Emacs development discussions To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Mar 31 00:44:43 2010 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1NwkAs-0005zy-7S for ged-emacs-devel@m.gmane.org; Wed, 31 Mar 2010 00:44:42 +0200 Original-Received: from localhost ([127.0.0.1]:36913 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NwkAr-0008Qq-K8 for ged-emacs-devel@m.gmane.org; Tue, 30 Mar 2010 18:44:41 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NwkAl-0008QL-Fy for emacs-devel@gnu.org; Tue, 30 Mar 2010 18:44:35 -0400 Original-Received: from [140.186.70.92] (port=48294 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NwkAj-0008Q5-3r for emacs-devel@gnu.org; Tue, 30 Mar 2010 18:44:35 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NwkAh-00027z-1J for emacs-devel@gnu.org; Tue, 30 Mar 2010 18:44:32 -0400 Original-Received: from smtp-out1.starman.ee ([85.253.0.3]:39837 helo=mx1.starman.ee) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NwkAg-00027n-Mj for emacs-devel@gnu.org; Tue, 30 Mar 2010 18:44:30 -0400 X-Virus-Scanned: by Amavisd-New at mx1.starman.ee Original-Received: from mail.starman.ee (82.131.68.10.cable.starman.ee [82.131.68.10]) by mx1.starman.ee (Postfix) with ESMTP id DEE833F40A6; Wed, 31 Mar 2010 01:44:24 +0300 (EEST) In-Reply-To: (Stefan Monnier's message of "Tue, 30 Mar 2010 16:36:18 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (x86_64-pc-linux-gnu) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:122941 Archived-At: >> 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 "^A^@^@" >> 249 "^D^M^@\377" >> ) > >> `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/