I have a problem using the jpeg_read_icc_profile() functionality.
I have a JPEG that I categorically know contains a valid ICC profile (I wrote it there myself using libjpeg-turbo, and both GIMP and djpeg -icc can extract it with no issue, and I can also see the details using exiftool). However when I write a function that tries to extract it as part of a jpeg reading routine, the call fails.
Here's the relevant part of my code:
```
int readjpg(const char* name, fits *fit){
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE *f = g_fopen(name, "rb");
if (f == NULL) {
siril_log_color_message(_("Sorry but Siril cannot open the file: %s.\n"), "red", name);
return OPEN_IMAGE_ERROR;
}
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, f);
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
// Check for an ICC profile
JOCTET *EmbedBuffer = NULL;
unsigned int EmbedLen;
#if LIBJPEG_TURBO_VERSION_NUMBER >= 2000000
if (jpeg_read_icc_profile(&cinfo, &EmbedBuffer, &EmbedLen)) {
printf("Read ICC profile from JPEG\n");
}
#endif
(... the code goes on to read the scanlines ...)
```
But jpeg_read_icc_profile() returns FALSE. The image data itself decodes and displays fine, but I'm beating my head against a brick wall trying to understand why the ICC decoding doesn't work.
In case it matters the code I'm using to write the ICC profile is:
```
jpeg_write_icc_profile(&cinfo, (const JOCTET*) EmbedBuffer, EmbedLen);
```
(I'm recasting a cmsUInt8Number* buffer to JOCTET*)
But I think this is fine: as I said, other programs including libjpeg-turbo's own utilities can decode the profile fine.
Any help gratefully received,
Adrian.