]> Pileus Git - ~andy/gtk/blobdiff - gdk-pixbuf/io-jpeg.c
[quartz] Delete the typedef of GdkDevicePrivate
[~andy/gtk] / gdk-pixbuf / io-jpeg.c
index cf8c9ed19506d2500c9b79e207e22779969c5140..cc1db97e6d0fab5978a2994adf4afeaefaa66f9c 100644 (file)
@@ -468,7 +468,6 @@ gdk_pixbuf__jpeg_image_load (FILE *f, GError **error)
        cinfo.err = jpeg_std_error (&jerr.pub);
        jerr.pub.error_exit = fatal_error_handler;
         jerr.pub.output_message = output_message_handler;
-
         jerr.error = error;
         
        if (sigsetjmp (jerr.setjmp_buffer, 1)) {
@@ -657,6 +656,13 @@ gdk_pixbuf__jpeg_image_begin_load (GdkPixbufModuleSizeFunc size_func,
        context->src_initialized = FALSE;
        context->in_output = FALSE;
 
+        /* From jpeglib.h: "NB: you must set up the error-manager
+         * BEFORE calling jpeg_create_xxx". */
+       context->cinfo.err = jpeg_std_error (&context->jerr.pub);
+       context->jerr.pub.error_exit = fatal_error_handler;
+        context->jerr.pub.output_message = output_message_handler;
+        context->jerr.error = error;
+
        /* create libjpeg structures */
        jpeg_create_decompress (&context->cinfo);
 
@@ -669,14 +675,7 @@ gdk_pixbuf__jpeg_image_begin_load (GdkPixbufModuleSizeFunc size_func,
                return NULL;
        }
        memset (context->cinfo.src, 0, sizeof (my_source_mgr));
-       
-       src = (my_src_ptr) context->cinfo.src;
 
-       context->cinfo.err = jpeg_std_error (&context->jerr.pub);
-       context->jerr.pub.error_exit = fatal_error_handler;
-        context->jerr.pub.output_message = output_message_handler;
-        context->jerr.error = error;
-        
        src = (my_src_ptr) context->cinfo.src;
        src->pub.init_source = init_source;
        src->pub.fill_input_buffer = fill_input_buffer;
@@ -922,6 +921,7 @@ gdk_pixbuf__jpeg_image_load_increment (gpointer data,
                                }
                        }
                        
+                       cinfo->scale_num = 1;
                        for (cinfo->scale_denom = 2; cinfo->scale_denom <= 8; cinfo->scale_denom *= 2) {
                                jpeg_calc_output_dimensions (cinfo);
                                if (cinfo->output_width < width || cinfo->output_height < height) {
@@ -1047,7 +1047,7 @@ to_callback_do_write (j_compress_ptr cinfo, gsize length)
        ToFunctionDestinationManager *destmgr;
 
        destmgr = (ToFunctionDestinationManager*) cinfo->dest;
-        if (!destmgr->save_func (destmgr->buffer,
+        if (!destmgr->save_func ((gchar *)destmgr->buffer,
                                 length,
                                 destmgr->error,
                                 destmgr->user_data)) {
@@ -1190,11 +1190,11 @@ real_save_jpeg (GdkPixbuf          *pixbuf,
        }
 
        /* set up error handling */
+       cinfo.err = jpeg_std_error (&(jerr.pub));
        jerr.pub.error_exit = fatal_error_handler;
        jerr.pub.output_message = output_message_handler;
        jerr.error = error;
        
-       cinfo.err = jpeg_std_error (&(jerr.pub));
        if (sigsetjmp (jerr.setjmp_buffer, 1)) {
                jpeg_destroy_compress (&cinfo);
                g_free (buf);