Source Code (Use browser search to find items of interest.)

Class Index

kdelibs'kimgio_jpeg_destination_mgr (./kdelibs/kimgio/jpeg.cpp:77)

struct kimgio_jpeg_destination_mgr : public jpeg_destination_mgr {
    // Nothing dynamic - cannot rely on destruction over longjump
    QImageIO* iio;
    JOCTET buffer[OUTPUT_BUFFER_SIZE];

public:
    kimgio_jpeg_destination_mgr(QImageIO* iio)
    {
	jpeg_destination_mgr::init_destination = init_destination;
	jpeg_destination_mgr::empty_output_buffer = empty_output_buffer;
	jpeg_destination_mgr::term_destination = term_destination;
	this->iio = iio;
	next_output_byte = buffer;
	free_in_buffer = OUTPUT_BUFFER_SIZE;
    }

    static void init_destination(j_compress_ptr)
    {
    }

    static void exit_on_error(j_compress_ptr cinfo, QIODevice* dev)
    {
	if (dev->status() == IO_Ok) {
	    return;
        } else {
	    // cinfo->err->msg_code = JERR_FILE_WRITE; 
	    (*cinfo->err->error_exit)((j_common_ptr)cinfo);
	}
    }

    static boolean empty_output_buffer(j_compress_ptr cinfo)
    {
	kimgio_jpeg_destination_mgr* dest = (kimgio_jpeg_destination_mgr*)cinfo->dest;
	QIODevice* dev = dest->iio->ioDevice();

	if ( dev->writeBlock( (char*)dest->buffer, OUTPUT_BUFFER_SIZE ) != OUTPUT_BUFFER_SIZE )
	    exit_on_error(cinfo, dev);

	dest->next_output_byte = dest->buffer;
	dest->free_in_buffer = OUTPUT_BUFFER_SIZE;

	return TRUE;
    }

    static void term_destination(j_compress_ptr cinfo)
    {
	kimgio_jpeg_destination_mgr* dest = (kimgio_jpeg_destination_mgr*)cinfo->dest;
	QIODevice* dev = dest->iio->ioDevice();
	int n = OUTPUT_BUFFER_SIZE - dest->free_in_buffer; 

	if ( dev->writeBlock( (char*)dest->buffer, n ) != n )
	    exit_on_error(cinfo, dev);

	dev->flush();

	exit_on_error(cinfo, dev);
    }
};




kdelibs'kimgio_jpeg_destination_mgr::term_destination() (./kdelibs/kimgio/jpeg.cpp:121)

    static void term_destination(j_compress_ptr cinfo)
    {
	kimgio_jpeg_destination_mgr* dest = (kimgio_jpeg_destination_mgr*)cinfo->dest;
	QIODevice* dev = dest->iio->ioDevice();
	int n = OUTPUT_BUFFER_SIZE - dest->free_in_buffer; 

	if ( dev->writeBlock( (char*)dest->buffer, n ) != n )
	    exit_on_error(cinfo, dev);

	dev->flush();

	exit_on_error(cinfo, dev);
    }
};