24#include <core/exception.h>
25#include <fvutils/color/rgbyuv.h>
26#include <fvutils/readers/jpeg.h>
48 if ((infile = fopen(filename,
"rb")) == NULL) {
52 cinfo.err = jpeg_std_error(&jerr);
53 jpeg_create_decompress(&cinfo);
54 jpeg_stdio_src(&cinfo, infile);
56 jpeg_read_header(&cinfo,
true);
57 jpeg_calc_output_dimensions(&cinfo);
71 jpeg_destroy_decompress(&cinfo);
79 buffer = yuv422planar_buffer;
92 return cinfo.output_width;
102 return cinfo.output_height;
111 if (buffer == NULL) {
112 throw Exception(
"JpegReader::read: buffer == NULL");
115 jpeg_start_decompress(&cinfo);
116 row_stride = cinfo.output_width * cinfo.output_components;
118 row_buffer = (
unsigned char *)malloc(row_stride);
120 while (cinfo.output_scanline < cinfo.output_height) {
121 jpeg_read_scanlines(&cinfo, &row_buffer, 1);
122 convert_line_rgb_to_yuv422planar(
123 row_buffer, buffer, cinfo.output_width, cinfo.output_height, 0, cinfo.output_scanline - 1);
127 jpeg_finish_decompress(&cinfo);
Base class for exceptions in Fawkes.
virtual unsigned int pixel_width()
Get width of read image in pixels.
JpegReader(const char *filename)
Constructor.
virtual ~JpegReader()
Destructor.
virtual colorspace_t colorspace()
Get colorspace from the just read image.
virtual unsigned int pixel_height()
Get height of read image in pixels.
virtual void read()
Read data from file.
virtual void set_buffer(unsigned char *yuv422planar_buffer)
Set buffer that the read image should be written to.
Fawkes library namespace.