]> granicus.if.org Git - imagemagick/blobdiff - coders/djvu.c
(no commit message)
[imagemagick] / coders / djvu.c
index 6e3cf7db8edb302eb747d083bfcb121fff1622c0..5d8cb66dcbe5f4f9616ae7cb3a2bf7886fb009f8 100644 (file)
@@ -17,7 +17,7 @@
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2009 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  %
@@ -43,6 +43,7 @@
 #include "magick/blob.h"
 #include "magick/blob-private.h"
 #include "magick/cache.h"
+#include "magick/colormap.h"
 #include "magick/constitute.h"
 #include "magick/exception.h"
 #include "magick/exception-private.h"
@@ -162,14 +163,14 @@ pump_data(Image *image, LoadContext* lc)
 static ddjvu_message_t*
 pump_data_until_message(LoadContext *lc,Image *image) /* ddjvu_context_t *context, type ddjvu_document_type_t */
 {
-        unsigned long blocksize = BLOCKSIZE;
+        size_t blocksize = BLOCKSIZE;
         unsigned char data[BLOCKSIZE];
-        unsigned long size;
+        size_t size;
         ddjvu_message_t *message;
 
         /* i might check for a condition! */
         while (!(message = ddjvu_message_peek(lc->context))
-               && (size = (unsigned long) ReadBlob(image,(size_t) blocksize,data)) == blocksize) {
+               && (size = (size_t) ReadBlob(image,(size_t) blocksize,data)) == blocksize) {
                 ddjvu_stream_write(lc->document, lc->streamid, (char *) data, size);
         }
         if (message)
@@ -380,6 +381,7 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                                     format,
                                     stride, /* ?? */
                                     (char*)q);
+        (void) ret;
         ddjvu_format_release(format);
 
 
@@ -389,9 +391,9 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                 printf("%s: expanding BITONAL page/image\n", __FUNCTION__);
 #endif
                 register IndexPacket *indexes;
-                unsigned long bit, byte;
+                size_t bit, byte;
 
-                for (y=0; y < (long) image->rows; y++)
+                for (y=0; y < (ssize_t) image->rows; y++)
                         {
                                 PixelPacket * o = QueueAuthenticPixels(image,0,y,image->columns,1,&image->exception);
                                 if (o == (PixelPacket *) NULL)
@@ -401,11 +403,11 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                                 byte=0;
 
                                 /* fixme:  the non-aligned, last =<7 bits ! that's ok!!!*/
-                                for (x= 0; x < (long) image->columns; x++)
+                                for (x= 0; x < (ssize_t) image->columns; x++)
                                         {
-                                                if (bit == 0) byte= (unsigned long) q[(y * stride) + (x / 8)];
+                                                if (bit == 0) byte= (size_t) q[(y * stride) + (x / 8)];
 
-                                                indexes[x]=(IndexPacket) (((byte & 0x01) != 0) ? 0x00 : 0x01);
+                                                SetIndexPixelComponent(indexes+x,(IndexPacket) (((byte & 0x01) != 0) ? 0x00 : 0x01));
                                                 bit++;
                                                 if (bit == 8)
                                                         bit=0;
@@ -414,13 +416,14 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                                 if (SyncAuthenticPixels(image,&image->exception) == MagickFalse)
                                         break;
                         }
-                SyncImage(image);
+                if (!image->ping)
+                  SyncImage(image);
         } else {
 #if DEBUG
                 printf("%s: expanding PHOTO page/image\n", __FUNCTION__);
 #endif
                 /* now transfer line-wise: */
-                long i;
+                ssize_t i;
 #if 0
                 /* old: */
                 char* r;
@@ -428,19 +431,21 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
                 register PixelPacket *r;
 #endif
 
-                for (i = 0;i< (long) lc->image->rows; i++)
+                for (i = 0;i< (ssize_t) lc->image->rows; i++)
                         {
 #if DEBUG
                                if (i % 1000 == 0) printf("%d\n",i);
 #endif
                                r = QueueAuthenticPixels(lc->image,0,i,lc->image->columns,1,&image->exception);
+                               if (r == (PixelPacket *) NULL)
+                                 break;
 
-                                ImportQuantumPixels(lc->image,
+                               ImportQuantumPixels(lc->image,
                                                     (CacheView *) NULL,
                                                     quantum_info,
                                                     RGBQuantum, /*GrayQuantum*/
                                                     q+i*stride,&image->exception);
-                                SyncAuthenticPixels(lc->image,&image->exception);
+                              SyncAuthenticPixels(lc->image,&image->exception);
                         }
         }
         q=(unsigned char *) RelinquishMagickMemory(q);
@@ -449,6 +454,7 @@ get_page_image(LoadContext *lc, ddjvu_page_t *page, int x, int y, int w, int h,
 
 #if defined(MAGICKCORE_DJVU_DELEGATE)
 
+#if 0
 static int
 get_page_line(LoadContext *lc, int row, QuantumInfo* quantum_info)
 {
@@ -515,6 +521,7 @@ get_page_line(LoadContext *lc, int row, QuantumInfo* quantum_info)
         return ret;
 }
 #endif
+#endif
 
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -575,6 +582,7 @@ static Image *ReadOneDJVUImage(LoadContext* lc,const int pagenum,
         /* register PixelPacket *q; */
 
         logging=LogMagickEvent(CoderEvent,GetMagickModule(), "  enter ReadOneDJVUImage()");
+        (void) logging;
 
 #if DEBUG
         printf("====  Loading the page %d\n", pagenum);
@@ -624,7 +632,7 @@ static Image *ReadOneDJVUImage(LoadContext* lc,const int pagenum,
               image->y_resolution=image->x_resolution;
             info.width*=image->x_resolution/info.dpi;
             info.height*=image->y_resolution/info.dpi;
-            info.dpi=(long) MagickMax(image->x_resolution,image->y_resolution);
+            info.dpi=(ssize_t) MagickMax(image->x_resolution,image->y_resolution);
           }
         type = ddjvu_page_get_type(lc->page);
 
@@ -634,8 +642,8 @@ static Image *ReadOneDJVUImage(LoadContext* lc,const int pagenum,
         /* mmc:  set  image->depth  */
         /* mmc:  This from the type */
 
-        image->columns=(unsigned long) info.width;
-        image->rows=(unsigned long) info.height;
+        image->columns=(size_t) info.width;
+        image->rows=(size_t) info.height;
 
         /* mmc: bitonal should be palettized, and compressed! */
         if (type == DDJVU_PAGETYPE_BITONAL){
@@ -656,7 +664,8 @@ static Image *ReadOneDJVUImage(LoadContext* lc,const int pagenum,
                 /* is this useful? */
         }
 #if DEBUG
-        printf("now filling %ld x %ld\n", image->columns,image->rows);
+        printf("now filling %.20g x %.20g\n",(double) image->columns,(double)
+          image->rows);
 #endif
 
 
@@ -681,10 +690,12 @@ static Image *ReadOneDJVUImage(LoadContext* lc,const int pagenum,
 
 
 #if DEBUG
-        printf("END: finished filling %ld x %ld\n", image->columns,image->rows);
+        printf("END: finished filling %.20g x %.20g\n",(double) image->columns,
+          (double) image->rows);
 #endif
 
-        SyncImage(image);
+        if (!image->ping)
+          SyncImage(image);
         quantum_info=DestroyQuantumInfo(quantum_info);
         /* indexes=GetAuthenticIndexQueue(image); */
         /* mmc: ??? Convert PNM pixels to runlength-encoded MIFF packets. */
@@ -753,7 +764,7 @@ static Image *ReadDJVUImage(const ImageInfo *image_info,
   MagickBooleanType
     status;
 
-  register long
+  register ssize_t
     i;
 
   /*
@@ -771,6 +782,7 @@ static Image *ReadDJVUImage(const ImageInfo *image_info,
 
 
   logging = LogMagickEvent(CoderEvent,GetMagickModule(),"enter ReadDJVUImage()");
+  (void) logging;
 
   image = AcquireImage(image_info); /* mmc: ?? */
 
@@ -811,7 +823,7 @@ static Image *ReadDJVUImage(const ImageInfo *image_info,
   ddjvu_cache_set_size(lc->context, 1); /* right? */
   use_cache = 0;
   /* document: here we don't have a filename, but, for the sake of generality, a FILE* ! */
-  url="http://maruska.dyndns.org/fake.djvu";
+  url="http://www.imagemagick.org/fake.djvu";
   lc->document = ddjvu_document_create(lc->context, url, use_cache); /* don't cache */
   ddjvu_document_set_user_data(lc->document, lc);
 
@@ -855,11 +867,12 @@ static Image *ReadDJVUImage(const ImageInfo *image_info,
   i=0;
   if (image_info->number_scenes != 0)
     i=image_info->scene;
-  for ( ; i < (long) lc->pages; i++)
+  for ( ; i < (ssize_t) lc->pages; i++)
   {
     image=ReadOneDJVUImage(lc,i,image_info,exception);
     if (image == (Image *) NULL)
       break;
+    image->scene=i;
     AppendImageToList(&images,CloneImageList(image,exception));
     if (image_info->number_scenes != 0)
       if (image->scene >= (image_info->scene+image_info->number_scenes-1))
@@ -913,10 +926,10 @@ static Image *ReadDJVUImage(const ImageInfo *image_info,
 %
 %  The format of the RegisterDJVUImage method is:
 %
-%      unsigned long RegisterDJVUImage(void)
+%      size_t RegisterDJVUImage(void)
 %
 */
-ModuleExport unsigned long RegisterDJVUImage(void)
+ModuleExport size_t RegisterDJVUImage(void)
 {
   char
     version[MaxTextExtent];