Blender V5.0
format_jpeg.cc File Reference
#include <algorithm>
#include <csetjmp>
#include <cstdio>
#include "MEM_guardedalloc.h"
#include "BLI_fileops.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_utildefines.h"
#include "BKE_idprop.hh"
#include "DNA_ID.h"
#include "IMB_colormanagement.hh"
#include "IMB_filetype.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "IMB_metadata.hh"
#include "CLG_log.h"
#include <cstring>
#include <jerror.h>
#include <jpeglib.h>

Go to the source code of this file.

Classes

struct  my_error_mgr
struct  my_source_mgr
struct  NeoGeo_Word

Macros

#define MAKESTMT(stuff)
#define INPUT_VARS(cinfo)
#define INPUT_SYNC(cinfo)
#define INPUT_RELOAD(cinfo)
#define MAKE_BYTE_AVAIL(cinfo, action)
#define INPUT_BYTE(cinfo, V, action)
#define INPUT_2BYTES(cinfo, V, action)
#define JPEG_MARKER_MSB   (0xFF)
#define JPEG_MARKER_SOI   (0xD8)
#define JPEG_MARKER_APP1   (0xE1)
#define JPEG_APP1_MAX   (1 << 16)

Typedefs

using my_error_ptr = my_error_mgr *
using my_src_ptr = my_source_mgr *

Functions

static void jpeg_error (j_common_ptr cinfo) ATTR_NORETURN
static void init_source (j_decompress_ptr cinfo)
static boolean fill_input_buffer (j_decompress_ptr cinfo)
static void skip_input_data (j_decompress_ptr cinfo, long num_bytes)
static void term_source (j_decompress_ptr cinfo)
static void memory_source (j_decompress_ptr cinfo, const uchar *buffer, size_t size)
static boolean handle_app1 (j_decompress_ptr cinfo)
static ImBufibJpegImageFromCinfo (jpeg_decompress_struct *cinfo, int flags, int max_size, size_t *r_width, size_t *r_height)
bool imb_is_a_jpeg (const uchar *mem, const size_t size)
 BLI_STATIC_ASSERT (sizeof(NeoGeo_Word)==4, "Must be 4 bytes")
ImBufimb_load_jpeg (const uchar *buffer, size_t size, int flags, ImFileColorSpace &)
ImBufimb_thumbnail_jpeg (const char *filepath, const int flags, const size_t max_thumb_size, ImFileColorSpace &r_colorspace, size_t *r_width, size_t *r_height)
static void write_jpeg (jpeg_compress_struct *cinfo, ImBuf *ibuf)
static int init_jpeg (FILE *outfile, jpeg_compress_struct *cinfo, ImBuf *ibuf)
static bool save_stdjpeg (const char *filepath, ImBuf *ibuf)
bool imb_savejpeg (ImBuf *ibuf, const char *filepath, int flags)

Variables

static CLG_LogRef LOG = {"image.jpeg"}
static const uchar jpeg_default_quality = 75
static uchar ibuf_quality

Macro Definition Documentation

◆ INPUT_2BYTES

#define INPUT_2BYTES ( cinfo,
V,
action )
Value:
MAKESTMT(MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--; \
V = uint(GETJOCTET(*next_input_byte++)) << 8; \
MAKE_BYTE_AVAIL(cinfo, action); \
bytes_in_buffer--; \
V += GETJOCTET(*next_input_byte++);)
unsigned int uint
#define MAKESTMT(stuff)
#define MAKE_BYTE_AVAIL(cinfo, action)
CCL_NAMESPACE_BEGIN struct Window V

Definition at line 206 of file format_jpeg.cc.

Referenced by handle_app1().

◆ INPUT_BYTE

#define INPUT_BYTE ( cinfo,
V,
action )
Value:
MAKESTMT(MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--; V = GETJOCTET(*next_input_byte++);)

Definition at line 200 of file format_jpeg.cc.

Referenced by handle_app1().

◆ INPUT_RELOAD

#define INPUT_RELOAD ( cinfo)
Value:
(next_input_byte = datasrc->next_input_byte, bytes_in_buffer = datasrc->bytes_in_buffer)

Definition at line 181 of file format_jpeg.cc.

◆ INPUT_SYNC

#define INPUT_SYNC ( cinfo)
Value:
(datasrc->next_input_byte = next_input_byte, datasrc->bytes_in_buffer = bytes_in_buffer)

Definition at line 177 of file format_jpeg.cc.

Referenced by handle_app1().

◆ INPUT_VARS

#define INPUT_VARS ( cinfo)
Value:
jpeg_source_mgr *datasrc = (cinfo)->src; \
const JOCTET *next_input_byte = datasrc->next_input_byte; \
size_t bytes_in_buffer = datasrc->bytes_in_buffer

Definition at line 171 of file format_jpeg.cc.

Referenced by handle_app1().

◆ JPEG_APP1_MAX

#define JPEG_APP1_MAX   (1 << 16)

Definition at line 483 of file format_jpeg.cc.

Referenced by imb_thumbnail_jpeg().

◆ JPEG_MARKER_APP1

#define JPEG_MARKER_APP1   (0xE1)

Definition at line 482 of file format_jpeg.cc.

Referenced by imb_thumbnail_jpeg().

◆ JPEG_MARKER_MSB

#define JPEG_MARKER_MSB   (0xFF)

Definition at line 480 of file format_jpeg.cc.

Referenced by imb_thumbnail_jpeg().

◆ JPEG_MARKER_SOI

#define JPEG_MARKER_SOI   (0xD8)

Definition at line 481 of file format_jpeg.cc.

Referenced by imb_thumbnail_jpeg().

◆ MAKE_BYTE_AVAIL

#define MAKE_BYTE_AVAIL ( cinfo,
action )
Value:
if (bytes_in_buffer == 0) { \
if (!(*datasrc->fill_input_buffer)(cinfo)) { \
action; \
} \
INPUT_RELOAD(cinfo); \
} \
(void)0

Definition at line 188 of file format_jpeg.cc.

◆ MAKESTMT

#define MAKESTMT ( stuff)
Value:
do { \
stuff \
} while (0)

Definition at line 166 of file format_jpeg.cc.

Typedef Documentation

◆ my_error_ptr

Definition at line 73 of file format_jpeg.cc.

◆ my_src_ptr

Definition at line 101 of file format_jpeg.cc.

Function Documentation

◆ BLI_STATIC_ASSERT()

BLI_STATIC_ASSERT ( sizeof(NeoGeo_Word) = =4,
"Must be 4 bytes"  )

◆ fill_input_buffer()

boolean fill_input_buffer ( j_decompress_ptr cinfo)
static

Definition at line 108 of file format_jpeg.cc.

References my_source_mgr::pub, and my_source_mgr::terminal.

Referenced by memory_source().

◆ handle_app1()

boolean handle_app1 ( j_decompress_ptr cinfo)
static

◆ ibJpegImageFromCinfo()

◆ imb_is_a_jpeg()

bool imb_is_a_jpeg ( const uchar * mem,
const size_t size )

Definition at line 54 of file format_jpeg.cc.

References magic(), and size().

Referenced by imb_load_jpeg().

◆ imb_load_jpeg()

ImBuf * imb_load_jpeg ( const uchar * buffer,
size_t size,
int flags,
ImFileColorSpace & r_colorspace )

◆ imb_savejpeg()

bool imb_savejpeg ( ImBuf * ibuf,
const char * filepath,
int flags )

Definition at line 762 of file format_jpeg.cc.

References ImBuf::flags, and save_stdjpeg().

◆ imb_thumbnail_jpeg()

ImBuf * imb_thumbnail_jpeg ( const char * filepath,
const int flags,
const size_t max_thumb_size,
ImFileColorSpace & r_colorspace,
size_t * r_width,
size_t * r_height )

◆ init_jpeg()

int init_jpeg ( FILE * outfile,
jpeg_compress_struct * cinfo,
ImBuf * ibuf )
static

◆ init_source()

void init_source ( j_decompress_ptr cinfo)
static

Definition at line 103 of file format_jpeg.cc.

Referenced by memory_source().

◆ jpeg_error()

void jpeg_error ( j_common_ptr cinfo)
static

Definition at line 75 of file format_jpeg.cc.

References my_error_mgr::setjmp_buffer.

Referenced by imb_load_jpeg(), imb_thumbnail_jpeg(), and save_stdjpeg().

◆ memory_source()

void memory_source ( j_decompress_ptr cinfo,
const uchar * buffer,
size_t size )
static

◆ save_stdjpeg()

bool save_stdjpeg ( const char * filepath,
ImBuf * ibuf )
static

◆ skip_input_data()

void skip_input_data ( j_decompress_ptr cinfo,
long num_bytes )
static

Definition at line 124 of file format_jpeg.cc.

References my_source_mgr::pub.

Referenced by memory_source().

◆ term_source()

void term_source ( j_decompress_ptr cinfo)
static

Definition at line 138 of file format_jpeg.cc.

Referenced by memory_source().

◆ write_jpeg()

Variable Documentation

◆ ibuf_quality

uchar ibuf_quality
static

Definition at line 52 of file format_jpeg.cc.

Referenced by handle_app1(), and ibJpegImageFromCinfo().

◆ jpeg_default_quality

const uchar jpeg_default_quality = 75
static

Definition at line 51 of file format_jpeg.cc.

Referenced by ibJpegImageFromCinfo(), and init_jpeg().

◆ LOG

CLG_LogRef LOG = {"image.jpeg"}
static

Definition at line 38 of file format_jpeg.cc.