Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
imageio_jpeg.c File Reference
#include "common/exif.h"
#include "common/imageio.h"
#include "common/imageio_jpeg.h"
#include "develop/imageop.h"
#include <setjmp.h>
+ Include dependency graph for imageio_jpeg.c:

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_mgrdt_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
 

Macro Definition Documentation

◆ EXIF_MARKER

#define EXIF_MARKER   (JPEG_APP0 + 1) /* JPEG marker code for Exif */

◆ ICC_MARKER

#define ICC_MARKER   (JPEG_APP0 + 2) /* JPEG marker code for ICC */

◆ ICC_OVERHEAD_LEN

#define ICC_OVERHEAD_LEN   14 /* size of non-profile data in APP2 */

◆ MAX_BYTES_IN_MARKER

#define MAX_BYTES_IN_MARKER   65533 /* maximum data len of a JPEG marker */

◆ MAX_DATA_BYTES_IN_MARKER

#define MAX_DATA_BYTES_IN_MARKER   (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN)

◆ MAX_SEQ_NO

#define MAX_SEQ_NO   255 /* sufficient since marker numbers are bytes */

Typedef Documentation

◆ dt_imageio_jpeg_error_ptr

Function Documentation

◆ decompress_plain()

static int decompress_plain ( dt_imageio_jpeg_t jpg,
uint8_t *  out 
)
static

◆ dt_imageio_jpeg_compress()

int dt_imageio_jpeg_compress ( const uint8_t *  in,
uint8_t *  out,
const int  width,
const int  height,
const int  quality 
)

◆ dt_imageio_jpeg_decompress()

int dt_imageio_jpeg_decompress ( dt_imageio_jpeg_t jpg,
uint8_t *  out 
)

◆ dt_imageio_jpeg_decompress_header()

◆ dt_imageio_jpeg_empty_output_buffer()

static boolean dt_imageio_jpeg_empty_output_buffer ( j_compress_ptr  cinfo)
static

References FALSE.

Referenced by dt_imageio_jpeg_compress().

◆ dt_imageio_jpeg_error_exit()

◆ dt_imageio_jpeg_fill_input_buffer()

static boolean dt_imageio_jpeg_fill_input_buffer ( j_decompress_ptr  cinfo)
static

◆ dt_imageio_jpeg_init_destination()

static void dt_imageio_jpeg_init_destination ( j_compress_ptr  cinfo)
static

◆ dt_imageio_jpeg_init_source()

static void dt_imageio_jpeg_init_source ( j_decompress_ptr  cinfo)
static

◆ dt_imageio_jpeg_read()

int dt_imageio_jpeg_read ( dt_imageio_jpeg_t jpg,
uint8_t *  out 
)

◆ dt_imageio_jpeg_read_color_space()

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().

◆ dt_imageio_jpeg_read_header()

int dt_imageio_jpeg_read_header ( const char *  filename,
dt_imageio_jpeg_t jpg 
)

◆ dt_imageio_jpeg_read_profile()

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().

◆ dt_imageio_jpeg_skip_input_data()

static void dt_imageio_jpeg_skip_input_data ( j_decompress_ptr  cinfo,
long  num_bytes 
)
static

◆ dt_imageio_jpeg_term_destination()

static void dt_imageio_jpeg_term_destination ( j_compress_ptr  cinfo)
static

◆ dt_imageio_jpeg_term_source()

static void dt_imageio_jpeg_term_source ( j_decompress_ptr  cinfo)
static

◆ dt_imageio_jpeg_write()

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().

◆ dt_imageio_jpeg_write_with_icc_profile()

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 
)

◆ dt_imageio_open_jpeg()

◆ marker_is_icc()

static boolean marker_is_icc ( jpeg_saved_marker_ptr  marker)
static

References ICC_MARKER, and ICC_OVERHEAD_LEN.

Referenced by read_icc_profile().

◆ read_icc_profile()

static boolean read_icc_profile ( j_decompress_ptr  dinfo,
JOCTET **  icc_data_ptr,
unsigned int *  icc_data_len 
)
static

◆ read_plain()

static int read_plain ( dt_imageio_jpeg_t jpg,
uint8_t *  out 
)
static

◆ setup_read_exif()

static void setup_read_exif ( j_decompress_ptr  cinfo)
static

◆ setup_read_icc_profile()

static void setup_read_icc_profile ( j_decompress_ptr  cinfo)
static

◆ write_icc_profile()

static void write_icc_profile ( j_compress_ptr  cinfo,
const JOCTET *  icc_data_ptr,
unsigned int  icc_data_len 
)
static

Variable Documentation

◆ dt_imageio_jpeg_error_mgr