X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fjpeg%2Fjpegloader.cpp;h=f61f651d5db13104c6ec6e54c397d5d10929d3fc;hb=2ebdf45974a0a7649b3488f9da4b8cf90a1db584;hp=9aadcb9e8daa849c922d6a5269df4dc34eae9ffc;hpb=56500afb28872f4050d42d536628daa1df5ab6a5;p=libs%2Fgui.git diff --git a/source/graphics/jpeg/jpegloader.cpp b/source/graphics/jpeg/jpegloader.cpp index 9aadcb9..f61f651 100644 --- a/source/graphics/jpeg/jpegloader.cpp +++ b/source/graphics/jpeg/jpegloader.cpp @@ -40,12 +40,12 @@ void init_source(j_decompress_ptr jpeg) 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(jpeg->src); src->next_input_byte = src->buffer; src->bytes_in_buffer = src->io->read(reinterpret_cast(src->buffer), sizeof(src->buffer)); - return true; + return TRUE; } void skip_input_data(j_decompress_ptr jpeg, long count) @@ -84,8 +84,6 @@ struct JpegLoader::Private }; -ImageLoader::Register JpegLoader::reg; - JpegLoader::JpegLoader(IO::Seekable &io): priv(new Private) { @@ -93,6 +91,9 @@ JpegLoader::JpegLoader(IO::Seekable &io): 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; @@ -112,18 +113,18 @@ JpegLoader::~JpegLoader() bool JpegLoader::detect(const string &sig) { - static const char jpeg_sig[] = "\xFF\xD8\xFF"; + static const char jpeg_sig[] = { '\xFF', '\xD8', '\xFF' }; if(sig.size()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); @@ -132,14 +133,14 @@ void JpegLoader::load(Image::Data &data) data.stride = priv->jpeg.output_width*priv->jpeg.output_components; data.fmt = RGB; - data.data = new char[data.stride*data.height]; + data.pixels = new char[data.stride*data.height]; JSAMPROW rows[8]; while(priv->jpeg.output_scanlinejpeg.output_scanline; unsigned count = min(y, 8U); for(unsigned i=0; i(data.data+(y-i-1)*data.stride); + rows[i] = reinterpret_cast(data.pixels+(y-i-1)*data.stride); jpeg_read_scanlines(&priv->jpeg, rows, count); }