]> granicus.if.org Git - imagemagick/commitdiff
Enable reading EXR image file from stdin
authorCristy <urban-warrior@imagemagick.org>
Wed, 7 Aug 2019 12:59:07 +0000 (08:59 -0400)
committerCristy <urban-warrior@imagemagick.org>
Wed, 7 Aug 2019 12:59:07 +0000 (08:59 -0400)
ChangeLog
coders/exr.c

index ec0f8c9c9234053478904b5aff265985d5b05fa3..6d824ce5665b9fdddf00e9c1e93e14ce1f683b02 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-08-07  7.0.8-60 Cristy  <quetzlzacatenango@image...>
+  * Release ImageMagick version 7.0.8-60, GIT revision 15986:c3de0e7:20190804.
+
+2019-08-07  7.0.8-60 Cristy  <quetzlzacatenango@image...>
+  * Enable reading EXR image file from stdin.
+
 2019-08-04  7.0.8-59 Cristy  <quetzlzacatenango@image...>
   * Release ImageMagick version 7.0.8-59, GIT revision 15986:c3de0e7:20190804.
 
index 08908bf7ff72f3bcf78225d3a3c6e7f2a4945300..ff712808cf8d03032b2b4ec5bd05b75be327b8f3 100644 (file)
 /*
   Typedef declaractions.
 */
-typedef struct _ExrWindow
+typedef struct _EXRWindowInfo
 {
   int
     max_x,
     max_y,
     min_x,
     min_y;
-} ExrWindow;
-
+} EXRWindowInfo;
+\f
 /*
   Forward declarations.
 */
@@ -147,16 +147,13 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
   const ImfHeader
     *hdr_info;
 
-  ExrWindow
+  EXRWindowInfo
     data_window,
     display_window;
 
   Image
     *image;
 
-  ImageInfo
-    *read_info;
-
   ImfInputFile
     *file;
 
@@ -166,14 +163,13 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
   MagickBooleanType
     status;
 
-  register ssize_t
-    x;
-
   register Quantum
     *q;
 
+  size_t
+    columns;
+
   ssize_t
-    columns,
     y;
 
   /*
@@ -193,37 +189,25 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
-  read_info=CloneImageInfo(image_info);
-  if (IsPathAccessible(read_info->filename) == MagickFalse)
-    {
-      (void) AcquireUniqueFilename(read_info->filename);
-      (void) ImageToFile(image,read_info->filename,exception);
-    }
-  file=ImfOpenInputFile(read_info->filename);
+  file=ImfOpenInputFile(image->filename);
   if (file == (ImfInputFile *) NULL)
     {
       ThrowFileException(exception,BlobError,"UnableToOpenBlob",
         ImfErrorMessage());
-      if (LocaleCompare(image_info->filename,read_info->filename) != 0)
-        (void) RelinquishUniqueFileResource(read_info->filename);
-      read_info=DestroyImageInfo(read_info);
       image=DestroyImageList(image);
       return((Image *) NULL);
     }
   hdr_info=ImfInputHeader(file);
   ImfHeaderDisplayWindow(hdr_info,&display_window.min_x,&display_window.min_y,
     &display_window.max_x,&display_window.max_y);
-  image->columns=display_window.max_x-display_window.min_x+1UL;
-  image->rows=display_window.max_y-display_window.min_y+1UL;
+  image->columns=(size_t) (display_window.max_x-display_window.min_x+1UL);
+  image->rows=(size_t) (display_window.max_y-display_window.min_y+1UL);
   image->alpha_trait=BlendPixelTrait;
-  SetImageColorspace(image,RGBColorspace,exception);
+  (void) SetImageColorspace(image,RGBColorspace,exception);
   image->gamma=1.0;
   if (image_info->ping != MagickFalse)
     {
       (void) ImfCloseInputFile(file);
-      if (LocaleCompare(image_info->filename,read_info->filename) != 0)
-        (void) RelinquishUniqueFileResource(read_info->filename);
-      read_info=DestroyImageInfo(read_info);
       (void) CloseBlob(image);
       return(GetFirstImageInList(image));
     }
@@ -232,7 +216,7 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
     return(DestroyImageList(image));
   ImfHeaderDataWindow(hdr_info,&data_window.min_x,&data_window.min_y,
     &data_window.max_x,&data_window.max_y);
-  columns=(ssize_t) data_window.max_x-data_window.min_x+1UL;
+  columns=(size_t) (data_window.max_x-data_window.min_x+1UL);
   if ((display_window.min_x > data_window.max_x) ||
       (display_window.min_x+(int) image->columns <= data_window.min_x))
     scanline=(ImfRgba *) NULL;
@@ -242,9 +226,6 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
       if (scanline == (ImfRgba *) NULL)
         {
           (void) ImfCloseInputFile(file);
-          if (LocaleCompare(image_info->filename,read_info->filename) != 0)
-            (void) RelinquishUniqueFileResource(read_info->filename);
-          read_info=DestroyImageInfo(read_info);
           image=DestroyImageList(image);
           ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
         }
@@ -254,10 +235,13 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
     int
       yy;
 
+    register ssize_t
+      x;
+
     q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
     if (q == (Quantum *) NULL)
       break;
-    yy=display_window.min_y+y;
+    yy=(int) (display_window.min_y+y);
     if ((yy < data_window.min_y) || (yy > data_window.max_y) ||
         (scanline == (ImfRgba *) NULL))
       {
@@ -270,7 +254,7 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
           break;
         continue;
       }
-    memset(scanline,0,columns*sizeof(*scanline));
+    (void) memset(scanline,0,columns*sizeof(*scanline));
     ImfInputSetFrameBuffer(file,scanline-data_window.min_x-columns*yy,1,
       columns);
     ImfInputReadPixels(file,yy,yy);
@@ -279,7 +263,7 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
       int
         xx;
 
-      xx=display_window.min_x+((int) x-data_window.min_x);
+      xx=(int) (display_window.min_x+x-data_window.min_x);
       if ((xx < 0) || (display_window.min_x+(int) x > data_window.max_x))
         SetPixelViaPixelInfo(image,&image->background_color,q);
       else
@@ -300,9 +284,6 @@ static Image *ReadEXRImage(const ImageInfo *image_info,ExceptionInfo *exception)
   }
   scanline=(ImfRgba *) RelinquishMagickMemory(scanline);
   (void) ImfCloseInputFile(file);
-  if (LocaleCompare(image_info->filename,read_info->filename) != 0)
-    (void) RelinquishUniqueFileResource(read_info->filename);
-  read_info=DestroyImageInfo(read_info);
   (void) CloseBlob(image);
   return(GetFirstImageInList(image));
 }
@@ -342,6 +323,7 @@ ModuleExport size_t RegisterEXRImage(void)
   entry->encoder=(EncodeImageHandler *) WriteEXRImage;
 #endif
   entry->magick=(IsImageFormatHandler *) IsEXR;
+  entry->flags|=CoderDecoderSeekableStreamFlag;
   entry->flags^=CoderAdjoinFlag;
   entry->flags^=CoderBlobSupportFlag;
   (void) RegisterMagickInfo(entry);