changeset 70431:7c25b386a4c3

(Qduration) [MAC_OS]: New variable. (syms_of_image) [MAC_OS]: Intern and staticpro it. [MAC_OS] (gif_load): Save image extension data in img->data.lisp_val. [MAC_OSX] (image_load_quartz2d): Use cfstring_create_with_utf8_cstring instead of cfstring_create_with_string.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 06 May 2006 06:52:24 +0000
parents a4ddaa03010e
children 12baf8c4ffbb
files src/image.c
diffstat 1 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/image.c	Sat May 06 06:51:00 2006 +0000
+++ b/src/image.c	Sat May 06 06:52:24 2006 +0000
@@ -2628,7 +2628,7 @@
 	  UNGCPRO;
 	  return 0;
 	}
-      path = cfstring_create_with_string (file);
+      path = cfstring_create_with_utf8_cstring (SDATA (file));
       url = CFURLCreateWithFileSystemPath (NULL, path,
 					   kCFURLPOSIXPathStyle, 0);
       CFRelease (path);
@@ -7899,6 +7899,8 @@
 #else  /* !HAVE_GIF */
 
 #ifdef MAC_OS
+static Lisp_Object Qduration;
+
 static int
 gif_load (f, img)
      struct frame *f;
@@ -7920,7 +7922,8 @@
   RGBColor bg_color;
   int width, height;
   XImagePtr ximg;
-  TimeValue time;
+  TimeScale time_scale;
+  TimeValue time, duration;
   int ino;
   CGrafPtr old_port;
   GDHandle old_gdh;
@@ -8028,6 +8031,7 @@
 		   image, img->spec);
       goto error;
     }
+  time_scale = GetMediaTimeScale (media);
 
   specified_bg = image_spec_value (img->spec, QCbackground, NULL);
   if (!STRINGP (specified_bg) ||
@@ -8053,7 +8057,7 @@
   SetGWorld (old_port, old_gdh);
   SetMovieActive (movie, 1);
   SetMovieGWorld (movie, ximg, NULL);
-  SampleNumToMediaTime (media, ino + 1, &time, NULL);
+  SampleNumToMediaTime (media, ino + 1, &time, &duration);
   SetMovieTimeValue (movie, time);
   MoviesTask (movie, 0L);
   DisposeTrackMedia (media);
@@ -8061,6 +8065,12 @@
   DisposeMovie (movie);
   if (dh)
     DisposeHandle (dh);
+
+  /* Save GIF image extension data for `image-extension-data'.
+     Format is (count IMAGES duration DURATION).  */
+  img->data.lisp_val = list4 (Qcount, make_number (nsamples), Qduration,
+			      make_float ((double)duration / time_scale));
+
   /* Maybe fill in the background field while we have ximg handy. */
   if (NILP (image_spec_value (img->spec, QCbackground, NULL)))
     IMAGE_BACKGROUND (img, f, ximg);
@@ -8616,6 +8626,11 @@
   ADD_IMAGE_TYPE(Qgif);
 #endif
 
+#ifdef MAC_OS
+  Qduration = intern ("duration");
+  staticpro (&Qduration);
+#endif
+
 #if defined (HAVE_PNG) || defined (MAC_OS)
   Qpng = intern ("png");
   staticpro (&Qpng);