Le septidi 7 fructidor, an CCXIII, Matthias Clasen a écrit : > That sounds wrong. Can you post your benchmark ? It was somewhat overloaded with irrelevant stuff: I have rewritten it from scratch with the bare minimum. Here is it. It may be built with: gcc -Wall -W -std=c99 -D_XOPEN_SOURCE=600 -g -o pixbuf_load_vs_loader \ `pkg-config --cflags --libs gdk-pixbuf-xlib-2.0` pixbuf_load_vs_loader.c and must be called with the path to an image. With some more tests, I can see that not all images show the problem. As far as I can see, the problematic images are the interlaced ones. Here are two images that have the problem: http://img.hebus.com/2000/03/13/20000313022947_49629.jpg http://www.dragonmount.com/WoT_Products/Images/comic_cover_rel01.jpg (respectively, about 9.3 vs 1.5 and 7.0 vs 1.5 seconds)
#include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <gdk-pixbuf/gdk-pixbuf.h> void print_time(void) { struct timeval tv; gettimeofday(&tv, NULL); printf("Now is %d.%6.6d\n", (int)tv.tv_sec, (int)tv.tv_usec); } void show_pixbuf(GdkPixbuf *p) { printf("Loaded %dx%d\n", gdk_pixbuf_get_width(p), gdk_pixbuf_get_height(p)); } void load_plain(const char *filename) { GdkPixbuf *p; if((p = gdk_pixbuf_new_from_file(filename, NULL)) == NULL) g_error("Unable to load %s", filename); show_pixbuf(p); gdk_pixbuf_unref(p); } void load_loader(const char *filename) { GdkPixbufLoader *loader; GdkPixbuf *p; FILE *file; guchar buf[65536]; size_t l; loader = gdk_pixbuf_loader_new(); if((file = fopen(filename, "r")) == NULL) { perror("filename"); exit(1); } while((l = fread(buf, 1, sizeof(buf), file)) > 0) { if(!gdk_pixbuf_loader_write(loader, buf, l, NULL)) g_error("Unable to write"); printf("Written %d\n", l); } if(!gdk_pixbuf_loader_close(loader, NULL)) g_error("Unable to close"); p = gdk_pixbuf_loader_get_pixbuf(loader); show_pixbuf(p); gdk_pixbuf_unref(p); } int main(int argc, char **argv) { if(argc != 2) exit(1); g_type_init(); print_time(); load_plain(argv[1]); print_time(); load_loader(argv[1]); print_time(); return(0); }
Attachment:
signature.asc
Description: Digital signature