struct ImBuf *IMB_loadifffile(int file, int flags) { struct ImBuf *ibuf; int size, *mem; double time_start, time_file, time_mem, time_all; if (file == -1) return (0); time_start= PIL_check_seconds_timer(); size = BLI_filesize(file); #if defined(AMIGA) || defined(__BeOS) || defined(WIN32) mem= (int *)malloc(size); if (mem==0) { printf("Out of mem\n"); return (0); } if (read(file, mem, size)!=size){ printf("Read Error\n"); free(mem); return (0); } time_file= PIL_check_seconds_timer(); ibuf = IMB_ibImageFromMemory(mem, size, flags); time_mem= PIL_check_seconds_timer(); free(mem); /* for jpeg read */ lseek(file, 0L, SEEK_SET); time_all= PIL_check_seconds_timer(); printf("readimage: %f %f %f\n", time_all-time_start, time_file-time_start, time_mem-time_file); #else mem= (int *)mmap(0,size,PROT_READ,MAP_SHARED,file,0); if (mem==(int *)-1){ printf("Couldn't get mapping\n"); return (0); } ibuf = IMB_ibImageFromMemory(mem, size, flags); if (munmap( (void *) mem, size)){ printf("Couldn't unmap file.\n"); } #endif return(ibuf); }