15 # include <vcl_msvc_warnings.h> 17 #include <vxl_config.h> 19 #define trace if (true) { } else std::cerr 47 jpeg_create_decompress(&
jobj);
51 #if defined(VXL_ADDRESS_BITS) && VXL_ADDRESS_BITS == 32 52 jobj.mem->max_memory_to_use = 300 * 1024 * 1024;
53 #elif defined(VXL_ADDRESS_BITS) && VXL_ADDRESS_BITS == 64 54 jobj.mem->max_memory_to_use = 1024 * 1024 * 1024;
68 jpeg_read_header(&
jobj, TRUE);
74 jpeg_start_decompress(&
jobj);
77 jpeg_abort_decompress(&
jobj);
85 if (
valid && line ==
jobj.output_scanline-1)
89 trace <<
"...aborting\n";
91 jpeg_abort_decompress(&
jobj);
99 trace <<
"...restarting\n";
105 jpeg_read_header(&
jobj, TRUE);
108 jpeg_start_decompress(&
jobj);
117 trace <<
"...allocate buffer\n";
118 unsigned row_size =
jobj.output_width *
jobj.output_components;
119 biffer =
new JSAMPLE[row_size];
124 JSAMPLE *buffer[1] = {
biffer };
126 JSAMPARRAY buffer = &
biffer;
130 while (
jobj.output_scanline <= line) {
131 if (jpeg_read_scanlines(&
jobj, buffer, 1) != 1) {
132 jpeg_abort_decompress(&
jobj);
140 if (
jobj.output_scanline >=
jobj.image_height) {
141 trace <<
"...reached end\n";
142 jpeg_finish_decompress(&
jobj);
155 (*
jobj.mem->free_pool) ((j_common_ptr) &
jobj, JPOOL_IMAGE);
158 jpeg_destroy_decompress(&
jobj);
Stream interface for VIL image loaders.
~vil_jpeg_decompressor()
NB.
STATIC void vil_jpeg_stream_src_set(j_decompress_ptr cinfo, vil_stream *vs)
vil_jpeg_decompressor(vil_stream *s)
using jpeg decompressor objects :.
JSAMPLE const * read_scanline(unsigned line)
Do not delete the return value.
Stream interface for VIL image loaders.
STATIC void vil_jpeg_stream_src_rewind(j_decompress_ptr cinfo, vil_stream *vs)
void ref()
up/down the reference count.
struct jpeg_decompress_struct jobj
struct jpeg_error_mgr jerr