From a95c4e673e3e25e889dd81df9388e1034d18456c Mon Sep 17 00:00:00 2001 From: dcommander Date: Mon, 25 Apr 2011 22:41:14 +0000 Subject: Eliminate excessive I/O overhead when reading BMP files in cjpeg git-svn-id: https://libjpeg-turbo.svn.sourceforge.net/svnroot/libjpeg-turbo@592 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- branches/1.1.x/ChangeLog.txt | 3 +++ branches/1.1.x/rdbmp.c | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/branches/1.1.x/ChangeLog.txt b/branches/1.1.x/ChangeLog.txt index 1f9928a..160b554 100644 --- a/branches/1.1.x/ChangeLog.txt +++ b/branches/1.1.x/ChangeLog.txt @@ -27,6 +27,9 @@ enabled. This specifically caused the jpegoptim program to fail if it was linked against a version of libjpeg-turbo that was built with libjpeg v7 or v8 emulation. +[6] Eliminated excessive I/O overhead that occurred when reading BMP files in +cjpeg. + 1.1.0 ===== diff --git a/branches/1.1.x/rdbmp.c b/branches/1.1.x/rdbmp.c index fd773d4..be32e43 100644 --- a/branches/1.1.x/rdbmp.c +++ b/branches/1.1.x/rdbmp.c @@ -3,6 +3,7 @@ * * Copyright (C) 1994-1996, Thomas G. Lane. * Modified 2009-2010 by Guido Vollbeding. + * Modified 2011 by Siarhei Siamashka. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -220,10 +221,9 @@ preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) { bmp_source_ptr source = (bmp_source_ptr) sinfo; register FILE *infile = source->pub.input_file; - register int c; register JSAMPROW out_ptr; JSAMPARRAY image_ptr; - JDIMENSION row, col; + JDIMENSION row; cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; /* Read the data into a virtual array in input-file row order. */ @@ -237,11 +237,11 @@ preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) ((j_common_ptr) cinfo, source->whole_image, row, (JDIMENSION) 1, TRUE); out_ptr = image_ptr[0]; - for (col = source->row_width; col > 0; col--) { - /* inline copy of read_byte() for speed */ - if ((c = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_INPUT_EOF); - *out_ptr++ = (JSAMPLE) c; + if (fread(out_ptr, 1, source->row_width, infile) != source->row_width) { + if (feof(infile)) + ERREXIT(cinfo, JERR_INPUT_EOF); + else + ERREXIT(cinfo, JERR_FILE_READ); } } if (progress != NULL) -- cgit v1.2.3