/*
- * jdatasrc.c
+ * jdatasrc.cxx
*
* Copyright (C) 1994-1996, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software.
/* Expanded data source object for stdio input */
+extern "C" {
+ typedef boolean(*boolean_jpeg_decompress_struct)(jpeg_decompress_struct*);
+ typedef void(*void_jpeg_decompress_struct)(jpeg_decompress_struct*);
+ typedef void(*void_jpeg_decompress_struct_long)(jpeg_decompress_struct*,long);
+}
+
typedef struct {
struct jpeg_source_mgr pub; /* public fields */
- std::ifstream *infile; /* source stream */
+ std::istream *infile; /* source stream */
JOCTET * buffer; /* start of buffer */
boolean start_of_file; /* have we gotten any data yet? */
- //PixelReadConvert *pixels;
- gdcm::JPEGFragment *frag;
+
+ GDCM_NAME_SPACE::JPEGFragment *frag;
size_t bytes_read;
} my_source_mgr;
{
my_src_ptr src = (my_src_ptr) cinfo->src;
- //std::cerr << "Before comp:" << src->bytes_read << " / " << src->frag->Length << std::endl;
if( src->bytes_read == src->frag->GetLength() )
{
- //std::cerr << "Sweet finished this fragment" << std::endl;
+ // Start the I/O suspension simply by returning false here:
return FALSE;
}
size_t input_buf_size = INPUT_BUF_SIZE;
if( (src->bytes_read + INPUT_BUF_SIZE) > src->frag->GetLength() )
{
- //std::cerr << "Woula error:" << src->bytes_read << " / " << src->frag->Length << std::endl;
input_buf_size = src->frag->GetLength() - src->bytes_read;
- //std::cerr << "Ok only reading: " << input_buf_size << " / " << INPUT_BUF_SIZE << std::endl;
- }
+ }
- //std::cerr << "infile read:" << src->pub.bytes_in_buffer << std::endl;
src->infile->read( (char*)src->buffer, input_buf_size);
size_t nbytes = src->infile->gcount();
- //std::cerr << "input_buf_size=" << input_buf_size << " and nbytes=" << nbytes << std::endl;
if (nbytes <= 0) {
if (src->start_of_file) /* Treat empty input file as fatal error */
src->start_of_file = FALSE;
src->bytes_read += nbytes;
-
return TRUE;
- // otherwise cause a suspension return
- //std::cerr << "fill_input_buffer" << std::endl;
- //return FALSE;
}
METHODDEF(void)
skip_input_data (j_decompress_ptr cinfo, long num_bytes)
{
- //std::cerr << "skip_input_data:" << num_bytes << std::endl;
my_src_ptr src = (my_src_ptr) cinfo->src;
/* Just a dumb implementation for now. Could use fseek() except
*/
GLOBAL(void)
-jpeg_stdio_src (j_decompress_ptr cinfo, std::ifstream * infile, gdcm::JPEGFragment *frag, int flag)
+jpeg_stdio_src (j_decompress_ptr cinfo, std::istream * infile, GDCM_NAME_SPACE::JPEGFragment *frag, int flag)
{
my_src_ptr src;
}
src = (my_src_ptr) cinfo->src;
- src->pub.init_source = init_source;
- src->pub.fill_input_buffer = fill_input_buffer;
- src->pub.skip_input_data = skip_input_data;
+ src->pub.init_source = reinterpret_cast<void_jpeg_decompress_struct>(init_source);
+ src->pub.fill_input_buffer = reinterpret_cast<boolean_jpeg_decompress_struct>(fill_input_buffer);
+ src->pub.skip_input_data = reinterpret_cast<void_jpeg_decompress_struct_long>(skip_input_data);
src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
- src->pub.term_source = term_source;
+ src->pub.term_source = reinterpret_cast<void_jpeg_decompress_struct>(term_source);
src->infile = infile;
+ // Need to setup a new buffer, clean bytes_in_buffer and next_input_byte
if( flag )
{
- src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
- src->pub.next_input_byte = NULL; /* until buffer loaded */
- src->frag = frag;
- src->bytes_read = 0;
+ src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
+ src->pub.next_input_byte = NULL; /* until buffer loaded */
}
- else
- {
- //only upate the new fragment
- src->frag = frag;
+ //only upate the new fragment, valid for both 'flag' value
+ src->frag = frag;
src->bytes_read = 0;
- }
}