static void convertImage(FILE * const ofP, struct cmdlineInfo const cmdline, struct jpeg_decompress_struct * const cinfoP) { int format; /* The type of output file, PGM or PPM. Value is either PPM_TYPE or PGM_TYPE, which conveniently also pass as format values PPM_FORMAT and PGM_FORMAT. */ xelval maxval; /* The maximum value of a sample (color component), both in the input and the output. */ enum colorspace color_space; /* The color space of the pixels coming out of the JPEG decompressor */ beginJpegInput(cinfoP, cmdline.verbose, cmdline.dct_method, cmdline.max_memory_to_use, cmdline.nosmooth); set_color_spaces(cinfoP->jpeg_color_space, &format, &cinfoP->out_color_space); maxval = pm_bitstomaxval(cinfoP->data_precision); if (cmdline.verbose) tellDetails(*cinfoP, maxval, format); /* Calculate output image dimensions so we can allocate space */ jpeg_calc_output_dimensions(cinfoP); /* Start decompressor */ jpeg_start_decompress(cinfoP); if (ofP) /* Write pnm output header */ pnm_writepnminit(ofP, cinfoP->output_width, cinfoP->output_height, maxval, format, FALSE); pnmbuffer = pnm_allocrow(cinfoP->output_width); color_space = computeColorSpace(cinfoP, cmdline.inklevel); convertRaster(cinfoP, color_space, ofP, format, maxval); if (cmdline.comments) print_comments(*cinfoP); if (cmdline.dumpexif) dump_exif(*cinfoP); if (cmdline.exif_filespec) save_exif(*cinfoP, cmdline.exif_filespec); pnm_freerow(pnmbuffer); /* Finish decompression and release decompressor memory. */ jpeg_finish_decompress(cinfoP); }
static void convertImage(FILE * const ofP, struct cmdlineInfo const cmdline, struct jpeg_decompress_struct * const cinfoP) { int output_type; /* The type of output file, PGM or PPM. Value is either PPM_TYPE or PGM_TYPE, which conveniently also pass as format values PPM_FORMAT and PGM_FORMAT. */ JSAMPROW jpegbuffer; /* Input buffer. Filled by jpeg_scanlines() */ unsigned int maxval; /* The maximum value of a sample (color component), both in the input and the output. */ enum colorspace color_space; /* The color space of the pixels coming out of the JPEG decompressor */ beginJpegInput(cinfoP, cmdline.verbose, cmdline.dct_method, cmdline.max_memory_to_use, cmdline.nosmooth); set_color_spaces(cinfoP->jpeg_color_space, &output_type, &cinfoP->out_color_space); maxval = (1 << cinfoP->data_precision) - 1; if (cmdline.verbose) tellDetails(*cinfoP, maxval, output_type); /* Calculate output image dimensions so we can allocate space */ jpeg_calc_output_dimensions(cinfoP); overflow2(cinfoP->output_width, cinfoP->output_components); jpegbuffer = ((*cinfoP->mem->alloc_sarray) ((j_common_ptr) cinfoP, JPOOL_IMAGE, cinfoP->output_width * cinfoP->output_components, (JDIMENSION) 1) )[0]; /* Start decompressor */ jpeg_start_decompress(cinfoP); if (ofP) /* Write pnm output header */ pnm_writepnminit(ofP, cinfoP->output_width, cinfoP->output_height, maxval, output_type, FALSE); pnmbuffer = pnm_allocrow(cinfoP->output_width); color_space = computeColorSpace(cinfoP, cmdline.inklevel); /* Process data */ while (cinfoP->output_scanline < cinfoP->output_height) { jpeg_read_scanlines(cinfoP, &jpegbuffer, 1); if (ofP) copy_pixel_row(jpegbuffer, cinfoP->output_width, cinfoP->out_color_components, color_space, maxval, ofP, output_type); } if (cmdline.comments) print_comments(*cinfoP); if (cmdline.dumpexif) dump_exif(*cinfoP); if (cmdline.exif_filespec) save_exif(*cinfoP, cmdline.exif_filespec); pnm_freerow(pnmbuffer); /* Finish decompression and release decompressor memory. */ jpeg_finish_decompress(cinfoP); }