24 #include <core/exception.h> 25 #include <fvutils/color/rgbyuv.h> 26 #include <fvutils/readers/jpeg.h> 33 namespace firevision {
43 JpegReader::JpegReader(
const char *filename)
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);
69 JpegReader::~JpegReader()
71 jpeg_destroy_decompress(&cinfo);
77 JpegReader::set_buffer(
unsigned char *yuv422planar_buffer)
79 buffer = yuv422planar_buffer;
83 JpegReader::colorspace()
89 JpegReader::pixel_width()
92 return cinfo.output_width;
99 JpegReader::pixel_height()
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);
Fawkes library namespace.
Base class for exceptions in Fawkes.