![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/exif.h"
#include "common/imageio.h"
#include "common/imageio_jpeg.h"
#include "develop/imageop.h"
#include <setjmp.h>
Data Structures | |
struct | dt_imageio_jpeg_error_mgr |
Macros | |
#define | EXIF_MARKER (JPEG_APP0 + 1) /* JPEG marker code for Exif */ |
#define | ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */ |
#define | ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */ |
#define | MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */ |
#define | MAX_DATA_BYTES_IN_MARKER (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN) |
#define | MAX_SEQ_NO 255 /* sufficient since marker numbers are bytes */ |
Typedefs | |
typedef struct dt_imageio_jpeg_error_mgr * | dt_imageio_jpeg_error_ptr |
Functions | |
static void | dt_imageio_jpeg_error_exit (j_common_ptr cinfo) |
static void | dt_imageio_jpeg_init_destination (j_compress_ptr cinfo) |
static boolean | dt_imageio_jpeg_empty_output_buffer (j_compress_ptr cinfo) |
static void | dt_imageio_jpeg_term_destination (j_compress_ptr cinfo) |
static void | dt_imageio_jpeg_init_source (j_decompress_ptr cinfo) |
static boolean | dt_imageio_jpeg_fill_input_buffer (j_decompress_ptr cinfo) |
static void | dt_imageio_jpeg_skip_input_data (j_decompress_ptr cinfo, long num_bytes) |
static void | dt_imageio_jpeg_term_source (j_decompress_ptr cinfo) |
static void | setup_read_icc_profile (j_decompress_ptr cinfo) |
static void | setup_read_exif (j_decompress_ptr cinfo) |
int | dt_imageio_jpeg_decompress_header (const void *in, size_t length, dt_imageio_jpeg_t *jpg) |
static int | decompress_plain (dt_imageio_jpeg_t *jpg, uint8_t *out) |
int | dt_imageio_jpeg_decompress (dt_imageio_jpeg_t *jpg, uint8_t *out) |
int | dt_imageio_jpeg_compress (const uint8_t *in, uint8_t *out, const int width, const int height, const int quality) |
static void | write_icc_profile (j_compress_ptr cinfo, const JOCTET *icc_data_ptr, unsigned int icc_data_len) |
static boolean | marker_is_icc (jpeg_saved_marker_ptr marker) |
static boolean | read_icc_profile (j_decompress_ptr dinfo, JOCTET **icc_data_ptr, unsigned int *icc_data_len) |
int | dt_imageio_jpeg_write_with_icc_profile (const char *filename, const uint8_t *in, const int width, const int height, const int quality, const void *exif, int exif_len, int32_t imgid) |
int | dt_imageio_jpeg_write (const char *filename, const uint8_t *in, const int width, const int height, const int quality, const void *exif, int exif_len) |
int | dt_imageio_jpeg_read_header (const char *filename, dt_imageio_jpeg_t *jpg) |
static int | read_plain (dt_imageio_jpeg_t *jpg, uint8_t *out) |
int | dt_imageio_jpeg_read (dt_imageio_jpeg_t *jpg, uint8_t *out) |
int | dt_imageio_jpeg_read_profile (dt_imageio_jpeg_t *jpg, uint8_t **out) |
dt_colorspaces_color_profile_type_t | dt_imageio_jpeg_read_color_space (dt_imageio_jpeg_t *jpg) |
dt_imageio_retval_t | dt_imageio_open_jpeg (dt_image_t *img, const char *filename, dt_mipmap_buffer_t *mbuf) |
Variables | |
struct dt_imageio_jpeg_error_mgr | dt_imageio_jpeg_error_mgr |
#define EXIF_MARKER (JPEG_APP0 + 1) /* JPEG marker code for Exif */ |
#define ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */ |
#define ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */ |
#define MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */ |
#define MAX_DATA_BYTES_IN_MARKER (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN) |
#define MAX_SEQ_NO 255 /* sufficient since marker numbers are bytes */ |
typedef struct dt_imageio_jpeg_error_mgr* dt_imageio_jpeg_error_ptr |
|
static |
References dt_imageio_jpeg_t::dinfo, dt_alloc_align, dt_free_align, and dt_imageio_jpeg_t::width.
Referenced by dt_imageio_jpeg_decompress().
int dt_imageio_jpeg_compress | ( | const uint8_t * | in, |
uint8_t * | out, | ||
const int | width, | ||
const int | height, | ||
const int | quality | ||
) |
References dt_imageio_jpeg_t::dest, dt_alloc_align, dt_free_align, dt_imageio_jpeg_empty_output_buffer(), dt_imageio_jpeg_error_exit(), dt_imageio_jpeg_init_destination(), dt_imageio_jpeg_term_destination(), height, dt_imageio_jpeg_error_mgr::pub, dt_imageio_jpeg_error_mgr::setjmp_buffer, TRUE, and width.
int dt_imageio_jpeg_decompress | ( | dt_imageio_jpeg_t * | jpg, |
uint8_t * | out | ||
) |
reads the whole image to the out buffer, which has to be large enough.
References decompress_plain(), dt_imageio_jpeg_t::dinfo, dt_imageio_jpeg_error_exit(), dt_imageio_jpeg_error_mgr::pub, dt_imageio_jpeg_error_mgr::setjmp_buffer, and void().
Referenced by dt_imageio_large_thumbnail(), and dt_mipmap_cache_allocate_dynamic().
int dt_imageio_jpeg_decompress_header | ( | const void * | in, |
size_t | length, | ||
dt_imageio_jpeg_t * | jpg | ||
) |
reads the header and fills width/height in jpg struct.
References dt_imageio_jpeg_t::dinfo, dt_imageio_jpeg_error_exit(), dt_imageio_jpeg_fill_input_buffer(), dt_imageio_jpeg_init_source(), dt_imageio_jpeg_skip_input_data(), dt_imageio_jpeg_term_source(), dt_imageio_jpeg_t::height, dt_imageio_jpeg_error_mgr::pub, dt_imageio_jpeg_error_mgr::setjmp_buffer, setup_read_exif(), setup_read_icc_profile(), dt_imageio_jpeg_t::src, TRUE, and dt_imageio_jpeg_t::width.
Referenced by dt_imageio_large_thumbnail(), and dt_mipmap_cache_allocate_dynamic().
|
static |
References FALSE.
Referenced by dt_imageio_jpeg_compress().
|
static |
|
static |
Referenced by dt_imageio_jpeg_decompress_header().
|
static |
Referenced by dt_imageio_jpeg_compress().
|
static |
Referenced by dt_imageio_jpeg_decompress_header().
int dt_imageio_jpeg_read | ( | dt_imageio_jpeg_t * | jpg, |
uint8_t * | out | ||
) |
reads the jpeg to the (sufficiently allocated) buffer, closes file.
References dt_imageio_jpeg_t::dinfo, dt_imageio_jpeg_error_exit(), dt_imageio_jpeg_t::f, dt_imageio_jpeg_error_mgr::pub, read_plain(), dt_imageio_jpeg_error_mgr::setjmp_buffer, and void().
Referenced by _load_jpg(), and dt_imageio_open_jpeg().
dt_colorspaces_color_profile_type_t dt_imageio_jpeg_read_color_space | ( | dt_imageio_jpeg_t * | jpg | ) |
return the color space of the image, this only distinguishs between sRGB, AdobeRGB and unknown. used for mipmaps
References dt_imageio_jpeg_t::dinfo, DT_COLORSPACE_DISPLAY, dt_exif_get_color_space(), and EXIF_MARKER.
Referenced by _load_jpg(), and dt_mipmap_cache_allocate_dynamic().
int dt_imageio_jpeg_read_header | ( | const char * | filename, |
dt_imageio_jpeg_t * | jpg | ||
) |
read jpeg header from file, leave file descriptor open until jpeg_read is called.
References dt_imageio_jpeg_t::dinfo, dt_imageio_jpeg_error_exit(), dt_imageio_jpeg_t::f, dt_imageio_jpeg_t::height, dt_imageio_jpeg_error_mgr::pub, dt_imageio_jpeg_error_mgr::setjmp_buffer, setup_read_exif(), setup_read_icc_profile(), TRUE, and dt_imageio_jpeg_t::width.
Referenced by _load_jpg(), dt_image_find_best_color_profile(), and dt_imageio_open_jpeg().
int dt_imageio_jpeg_read_profile | ( | dt_imageio_jpeg_t * | jpg, |
uint8_t ** | out | ||
) |
reads the color profile attached to the jpeg, closes file.
References dt_imageio_jpeg_t::dinfo, dt_imageio_jpeg_t::f, and read_icc_profile().
Referenced by dt_image_find_best_color_profile().
|
static |
Referenced by dt_imageio_jpeg_decompress_header().
|
static |
Referenced by dt_imageio_jpeg_compress().
|
static |
Referenced by dt_imageio_jpeg_decompress_header().
int dt_imageio_jpeg_write | ( | const char * | filename, |
const uint8_t * | in, | ||
const int | width, | ||
const int | height, | ||
const int | quality, | ||
const void * | exif, | ||
int | exif_len | ||
) |
write jpeg to file, with exif if not NULL.
References dt_imageio_jpeg_write_with_icc_profile(), height, and width.
Referenced by dt_mipmap_cache_deallocate_dynamic().
int dt_imageio_jpeg_write_with_icc_profile | ( | const char * | filename, |
const uint8_t * | in, | ||
const int | width, | ||
const int | height, | ||
const int | quality, | ||
const void * | exif, | ||
int | exif_len, | ||
int32_t | imgid | ||
) |
this will collect the images icc profile (or the global export override) and append it during write.
References dt_imageio_jpeg_t::cinfo, dt_alloc_align, DT_COLORSPACE_NONE, dt_colorspaces_get_output_profile(), dt_free_align, dt_imageio_jpeg_error_exit(), f(), height, dt_colorspaces_color_profile_t::profile, dt_imageio_jpeg_error_mgr::pub, dt_imageio_jpeg_error_mgr::setjmp_buffer, TRUE, type, width, and write_icc_profile().
Referenced by dt_imageio_jpeg_write().
dt_imageio_retval_t dt_imageio_open_jpeg | ( | dt_image_t * | img, |
const char * | filename, | ||
dt_mipmap_buffer_t * | buf | ||
) |
utility function to read and open jpeg from imagio.c
References dt_image_t::buf_dsc, dt_iop_buffer_dsc_t::channels, dt_iop_buffer_dsc_t::cst, dt_iop_buffer_dsc_t::datatype, dt_alloc_align, dt_exif_read(), dt_free_align, DT_IMAGE_LDR, DT_IMAGEIO_CACHE_FULL, DT_IMAGEIO_FILE_CORRUPTED, dt_imageio_flip_buffers_ui8_to_float(), dt_imageio_jpeg_read(), dt_imageio_jpeg_read_header(), DT_IMAGEIO_OK, dt_mipmap_cache_alloc(), dt_image_t::exif_inited, dt_iop_buffer_dsc_t::filters, dt_image_t::flags, dt_image_t::height, dt_imageio_jpeg_t::height, IOP_CS_RGB, dt_image_t::loader, LOADER_JPEG, TYPE_FLOAT, void(), dt_image_t::width, and dt_imageio_jpeg_t::width.
Referenced by dt_imageio_open_raster().
|
static |
References ICC_MARKER, and ICC_OVERHEAD_LEN.
Referenced by read_icc_profile().
|
static |
References FALSE, ICC_OVERHEAD_LEN, marker_is_icc(), MAX_SEQ_NO, and TRUE.
Referenced by dt_imageio_jpeg_read_profile().
|
static |
References dt_imageio_jpeg_t::dinfo, dt_alloc_align, dt_free_align, dt_imageio_jpeg_t::f, and dt_imageio_jpeg_t::width.
Referenced by dt_imageio_jpeg_read().
|
static |
References EXIF_MARKER.
Referenced by dt_imageio_jpeg_decompress_header(), and dt_imageio_jpeg_read_header().
|
static |
References ICC_MARKER.
Referenced by dt_imageio_jpeg_decompress_header(), and dt_imageio_jpeg_read_header().
|
static |
References ICC_MARKER, ICC_OVERHEAD_LEN, and MAX_DATA_BYTES_IN_MARKER.
Referenced by dt_imageio_jpeg_write_with_icc_profile().