Merge "Cleanup around jpegdec"

This commit is contained in:
James Zern 2012-12-14 19:27:49 -08:00 committed by Gerrit Code Review
commit df7aa07605
2 changed files with 10 additions and 15 deletions

View File

@ -33,11 +33,14 @@
#include "webp/encode.h" #include "webp/encode.h"
#include "./jpegdec.h"
#include "./metadata.h" #include "./metadata.h"
#include "./pngdec.h"
#include "./stopwatch.h" #include "./stopwatch.h"
#include "./jpegdec.h"
#include "./pngdec.h"
#include "./tiffdec.h" #include "./tiffdec.h"
#ifndef WEBP_DLL #ifndef WEBP_DLL
#if defined(__cplusplus) || defined(c_plusplus) #if defined(__cplusplus) || defined(c_plusplus)
extern "C" { extern "C" {

View File

@ -30,18 +30,17 @@ struct my_error_mgr {
static void my_error_exit(j_common_ptr dinfo) { static void my_error_exit(j_common_ptr dinfo) {
struct my_error_mgr* myerr = (struct my_error_mgr*)dinfo->err; struct my_error_mgr* myerr = (struct my_error_mgr*)dinfo->err;
(*dinfo->err->output_message)(dinfo); dinfo->err->output_message(dinfo);
longjmp(myerr->setjmp_buffer, 1); longjmp(myerr->setjmp_buffer, 1);
} }
int ReadJPEG(FILE* in_file, WebPPicture* const pic) { int ReadJPEG(FILE* in_file, WebPPicture* const pic) {
int ok = 0; int ok = 0;
int stride, width, height; int stride, width, height;
uint8_t* rgb = NULL;
uint8_t* row_ptr = NULL;
struct jpeg_decompress_struct dinfo; struct jpeg_decompress_struct dinfo;
struct my_error_mgr jerr; struct my_error_mgr jerr;
JSAMPARRAY buffer; uint8_t* rgb = NULL;
JSAMPROW buffer[1];
dinfo.err = jpeg_std_error(&jerr.pub); dinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = my_error_exit; jerr.pub.error_exit = my_error_exit;
@ -74,20 +73,13 @@ int ReadJPEG(FILE* in_file, WebPPicture* const pic) {
if (rgb == NULL) { if (rgb == NULL) {
goto End; goto End;
} }
row_ptr = rgb; buffer[0] = (JSAMPLE*)rgb;
buffer = (*dinfo.mem->alloc_sarray)((j_common_ptr)&dinfo,
JPOOL_IMAGE, stride, 1);
if (buffer == NULL) {
goto End;
}
while (dinfo.output_scanline < dinfo.output_height) { while (dinfo.output_scanline < dinfo.output_height) {
if (jpeg_read_scanlines(&dinfo, buffer, 1) != 1) { if (jpeg_read_scanlines(&dinfo, buffer, 1) != 1) {
goto End; goto End;
} }
memcpy(row_ptr, buffer[0], stride); buffer[0] += stride;
row_ptr += stride;
} }
jpeg_finish_decompress(&dinfo); jpeg_finish_decompress(&dinfo);