]> granicus.if.org Git - imagemagick/blobdiff - coders/mpeg.c
(no commit message)
[imagemagick] / coders / mpeg.c
index 8bd75ee36e01e9d22ce7ce093240162c72557198..99e34be381e52efe629894017c6d71a7014baa23 100644 (file)
@@ -17,7 +17,7 @@
 %                                 July 1999                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
 /*
   Include declarations.
 */
-#include "magick/studio.h"
-#include "magick/blob.h"
-#include "magick/blob-private.h"
-#include "magick/constitute.h"
-#include "magick/delegate.h"
-#include "magick/exception.h"
-#include "magick/exception-private.h"
-#include "magick/geometry.h"
-#include "magick/image.h"
-#include "magick/image-private.h"
-#include "magick/layer.h"
-#include "magick/list.h"
-#include "magick/log.h"
-#include "magick/magick.h"
-#include "magick/memory_.h"
-#include "magick/resource_.h"
-#include "magick/quantum-private.h"
-#include "magick/static.h"
-#include "magick/string_.h"
-#include "magick/module.h"
-#include "magick/transform.h"
-#include "magick/utility.h"
+#include "MagickCore/studio.h"
+#include "MagickCore/blob.h"
+#include "MagickCore/blob-private.h"
+#include "MagickCore/constitute.h"
+#include "MagickCore/delegate.h"
+#include "MagickCore/exception.h"
+#include "MagickCore/exception-private.h"
+#include "MagickCore/geometry.h"
+#include "MagickCore/image.h"
+#include "MagickCore/image-private.h"
+#include "MagickCore/layer.h"
+#include "MagickCore/list.h"
+#include "MagickCore/log.h"
+#include "MagickCore/magick.h"
+#include "MagickCore/memory_.h"
+#include "MagickCore/resource_.h"
+#include "MagickCore/quantum-private.h"
+#include "MagickCore/static.h"
+#include "MagickCore/string_.h"
+#include "MagickCore/module.h"
+#include "MagickCore/transform.h"
+#include "MagickCore/utility.h"
+#include "MagickCore/utility-private.h"
 \f
 /*
   Forward declarations.
 */
 static MagickBooleanType
-  WriteMPEGImage(const ImageInfo *image_info,Image *image);
+  WriteMPEGImage(const ImageInfo *,Image *,ExceptionInfo *);
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -83,7 +84,7 @@ static MagickBooleanType
 %
 %  The format of the IsAVI method is:
 %
-%      unsigned long IsAVI(const unsigned char *magick,const size_t length)
+%      size_t IsAVI(const unsigned char *magick,const size_t length)
 %
 %  A description of each parameter follows:
 %
@@ -187,7 +188,7 @@ static Image *ReadMPEGImage(const ImageInfo *image_info,
       image_info->filename);
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
-  image=AcquireImage(image_info);
+  image=AcquireImage(image_info,exception);
   status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
   if (status == MagickFalse)
     {
@@ -200,10 +201,10 @@ static Image *ReadMPEGImage(const ImageInfo *image_info,
     Convert MPEG to PAM with delegate.
   */
   read_info=CloneImageInfo(image_info);
-  image=AcquireImage(image_info);
+  image=AcquireImage(image_info,exception);
   (void) InvokeDelegate(read_info,image,"mpeg:decode",(char *) NULL,exception);
   image=DestroyImage(image);
-  (void) FormatMagickString(read_info->filename,MaxTextExtent,"%s.%s",
+  (void) FormatLocaleString(read_info->filename,MaxTextExtent,"%s.%s",
     read_info->unique,ReadMPEGIntermediateFormat);
   images=ReadImage(read_info,exception);
   (void) RelinquishUniqueFileResource(read_info->filename);
@@ -231,10 +232,10 @@ static Image *ReadMPEGImage(const ImageInfo *image_info,
 %
 %  The format of the RegisterMPEGImage method is:
 %
-%      unsigned long RegisterMPEGImage(void)
+%      size_t RegisterMPEGImage(void)
 %
 */
-ModuleExport unsigned long RegisterMPEGImage(void)
+ModuleExport size_t RegisterMPEGImage(void)
 {
   MagickInfo
     *entry;
@@ -354,7 +355,7 @@ ModuleExport void UnregisterMPEGImage(void)
 %  The format of the WriteMPEGImage method is:
 %
 %      MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
-%        Image *image)
+%        Image *image,ExceptionInfo *exception)
 %
 %  A description of each parameter follows.
 %
@@ -362,6 +363,8 @@ ModuleExport void UnregisterMPEGImage(void)
 %
 %    o image:  The image.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 
 static inline double MagickMax(const double x,const double y)
@@ -415,10 +418,10 @@ static MagickBooleanType CopyDelegateFile(const char *source,
   /*
     Copy source file to destination.
   */
-  destination_file=open(destination,O_WRONLY | O_BINARY | O_CREAT,S_MODE);
+  destination_file=open_utf8(destination,O_WRONLY | O_BINARY | O_CREAT,S_MODE);
   if (destination_file == -1)
     return(MagickFalse);
-  source_file=open(source,O_RDONLY | O_BINARY);
+  source_file=open_utf8(source,O_RDONLY | O_BINARY,0);
   if (source_file == -1)
     {
       (void) close(destination_file);
@@ -453,7 +456,7 @@ static MagickBooleanType CopyDelegateFile(const char *source,
 }
 
 static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
-  Image *image)
+  Image *image,ExceptionInfo *exception)
 {
 #define WriteMPEGIntermediateFormat "jpg"
 
@@ -479,19 +482,17 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
   register Image
     *p;
 
-  register long
+  register ssize_t
     i;
 
   size_t
-    length;
+    count,
+    length,
+    scene;
 
   unsigned char
     *blob;
 
-  unsigned long
-    count,
-    scene;
-
   /*
     Open output image file.
   */
@@ -501,20 +502,22 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
   assert(image->signature == MagickSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+  assert(exception != (ExceptionInfo *) NULL);
+  assert(exception->signature == MagickSignature);
+  status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
   (void) CloseBlob(image);
   /*
     Write intermediate files.
   */
-  coalesce_image=CoalesceImages(image,&image->exception);
+  coalesce_image=CoalesceImages(image,exception);
   if (coalesce_image == (Image *) NULL)
     return(MagickFalse);
   file=AcquireUniqueFileResource(basename);
   if (file != -1)
     file=close(file)-1;
-  (void) FormatMagickString(coalesce_image->filename,MaxTextExtent,"%s",
+  (void) FormatLocaleString(coalesce_image->filename,MaxTextExtent,"%s",
     basename);
   count=0;
   write_info=CloneImageInfo(image_info);
@@ -527,7 +530,7 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
     length=0;
     scene=p->scene;
     delay=100.0*p->delay/MagickMax(1.0*p->ticks_per_second,1.0);
-    for (i=0; i < (long) MagickMax((1.0*delay+1.0)/3.0,1.0); i++)
+    for (i=0; i < (ssize_t) MagickMax((1.0*delay+1.0)/3.0,1.0); i++)
     {
       p->scene=count;
       count++;
@@ -539,30 +542,31 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
           Image
             *frame;
 
-          (void) FormatMagickString(p->filename,MaxTextExtent,"%s%lu.%s",
-            basename,p->scene,WriteMPEGIntermediateFormat);
-          (void) FormatMagickString(filename,MaxTextExtent,"%s%lu.%s",
-            basename,p->scene,WriteMPEGIntermediateFormat);
-          (void) FormatMagickString(previous_image,MaxTextExtent,
-            "%s%lu.%s",basename,p->scene,WriteMPEGIntermediateFormat);
-          frame=CloneImage(p,0,0,MagickTrue,&p->exception);
+          (void) FormatLocaleString(p->filename,MaxTextExtent,"%s%.20g.%s",
+            basename,(double) p->scene,WriteMPEGIntermediateFormat);
+          (void) FormatLocaleString(filename,MaxTextExtent,"%s%.20g.%s",
+            basename,(double) p->scene,WriteMPEGIntermediateFormat);
+          (void) FormatLocaleString(previous_image,MaxTextExtent,
+            "%s%.20g.%s",basename,(double) p->scene,
+            WriteMPEGIntermediateFormat);
+          frame=CloneImage(p,0,0,MagickTrue,exception);
           if (frame == (Image *) NULL)
             break;
-          status=WriteImage(write_info,frame);
+          status=WriteImage(write_info,frame,exception);
           frame=DestroyImage(frame);
           break;
         }
         case 1:
         {
           blob=(unsigned char *) FileToBlob(previous_image,~0UL,&length,
-            &image->exception);
+            exception);
         }
         default:
         {
-          (void) FormatMagickString(filename,MaxTextExtent,"%s%lu.%s",
-            basename,p->scene,WriteMPEGIntermediateFormat);
+          (void) FormatLocaleString(filename,MaxTextExtent,"%s%.20g.%s",
+            basename,(double) p->scene,WriteMPEGIntermediateFormat);
           if (length > 0)
-            status=BlobToFile(filename,blob,length,&image->exception);
+            status=BlobToFile(filename,blob,length,exception);
           break;
         }
       }
@@ -570,14 +574,13 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
         {
           if (status != MagickFalse)
             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-              "%lu. Wrote %s file for scene %lu:",i,WriteMPEGIntermediateFormat,
-              p->scene);
+              "%.20g. Wrote %s file for scene %.20g:",(double) i,
+              WriteMPEGIntermediateFormat,(double) p->scene);
           else
             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-              "%lu. Failed to write %s file for scene %lu:",i,
-              WriteMPEGIntermediateFormat,p->scene);
-          (void) LogMagickEvent(CoderEvent,GetMagickModule(),"%s",
-            filename);
+              "%.20g. Failed to write %s file for scene %.20g:",(double) i,
+              WriteMPEGIntermediateFormat,(double) p->scene);
+          (void) LogMagickEvent(CoderEvent,GetMagickModule(),"%s",filename);
         }
     }
     p->scene=scene;
@@ -596,8 +599,8 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
   if (*coalesce_image->magick == '\0')
     (void) CopyMagickString(coalesce_image->magick,image->magick,MaxTextExtent);
   status=InvokeDelegate(write_info,coalesce_image,(char *) NULL,"mpeg:encode",
-    &image->exception);
-  (void) FormatMagickString(write_info->filename,MaxTextExtent,"%s.%s",
+    exception);
+  (void) FormatLocaleString(write_info->filename,MaxTextExtent,"%s.%s",
     write_info->unique,coalesce_image->magick);
   status=CopyDelegateFile(write_info->filename,image->filename);
   (void) RelinquishUniqueFileResource(write_info->filename);
@@ -609,10 +612,10 @@ static MagickBooleanType WriteMPEGImage(const ImageInfo *image_info,
   for (p=coalesce_image; p != (Image *) NULL; p=GetNextImageInList(p))
   {
     delay=100.0*p->delay/MagickMax(1.0*p->ticks_per_second,1.0);
-    for (i=0; i < (long) MagickMax((1.0*delay+1.0)/3.0,1.0); i++)
+    for (i=0; i < (ssize_t) MagickMax((1.0*delay+1.0)/3.0,1.0); i++)
     {
-      (void) FormatMagickString(p->filename,MaxTextExtent,"%s%lu.%s",
-        basename,count++,WriteMPEGIntermediateFormat);
+      (void) FormatLocaleString(p->filename,MaxTextExtent,"%s%.20g.%s",
+        basename,(double) count++,WriteMPEGIntermediateFormat);
       (void) RelinquishUniqueFileResource(p->filename);
     }
     (void) CopyMagickString(p->filename,image_info->filename,MaxTextExtent);