src->bytes_in_buffer = 0;
}
-int fill_input_buffer(j_decompress_ptr jpeg)
+boolean fill_input_buffer(j_decompress_ptr jpeg)
{
SourceManager *src = reinterpret_cast<SourceManager *>(jpeg->src);
src->next_input_byte = src->buffer;
src->bytes_in_buffer = src->io->read(reinterpret_cast<char *>(src->buffer), sizeof(src->buffer));
- return true;
+ return TRUE;
}
void skip_input_data(j_decompress_ptr jpeg, long count)
}
else
{
- src->io->seek(count, Msp::IO::S_CUR);
+ src->io->seek(count-src->bytes_in_buffer, Msp::IO::S_CUR);
src->bytes_in_buffer = 0;
}
}
};
-ImageLoader::Register<JpegLoader> JpegLoader::reg;
-
JpegLoader::JpegLoader(IO::Seekable &io):
priv(new Private)
{
priv->err_mgr.error_exit = &error_exit;
priv->err_mgr.emit_message = &emit_message;
+ if(setjmp(priv->err_mgr.jmp))
+ throw runtime_error("error creating jpeg decompressor: "+priv->err_mgr.message);
+
jpeg_create_decompress(&priv->jpeg);
priv->jpeg.src = &priv->src_mgr;
if(setjmp(priv->err_mgr.jmp))
throw bad_image_data(priv->err_mgr.message);
- jpeg_read_header(&priv->jpeg, true);
+ jpeg_read_header(&priv->jpeg, TRUE);
priv->jpeg.out_color_space = JCS_RGB;
jpeg_start_decompress(&priv->jpeg);