101 lines
3.2 KiB
C
101 lines
3.2 KiB
C
/*
|
|
* jlossls.h
|
|
*
|
|
* This file was part of the Independent JPEG Group's software:
|
|
* Copyright (C) 1998, Thomas G. Lane.
|
|
* Lossless JPEG Modifications:
|
|
* Copyright (C) 1999, Ken Murchison.
|
|
* libjpeg-turbo Modifications:
|
|
* Copyright (C) 2022, D. R. Commander.
|
|
* For conditions of distribution and use, see the accompanying README.ijg
|
|
* file.
|
|
*
|
|
* This include file contains common declarations for the lossless JPEG
|
|
* codec modules.
|
|
*/
|
|
|
|
#ifndef JLOSSLS_H
|
|
#define JLOSSLS_H
|
|
|
|
#if defined(C_LOSSLESS_SUPPORTED) || defined(D_LOSSLESS_SUPPORTED)
|
|
|
|
#define JPEG_INTERNALS
|
|
#include "jpeglib.h"
|
|
#include "jsamplecomp.h"
|
|
|
|
|
|
#define ALLOC_DARRAY(pool_id, diffsperrow, numrows) \
|
|
(JDIFFARRAY)(*cinfo->mem->alloc_sarray) \
|
|
((j_common_ptr)cinfo, pool_id, \
|
|
(diffsperrow) * sizeof(JDIFF) / sizeof(_JSAMPLE), numrows)
|
|
|
|
|
|
/*
|
|
* Table H.1: Predictors for lossless coding.
|
|
*/
|
|
|
|
#define PREDICTOR1 Ra
|
|
#define PREDICTOR2 Rb
|
|
#define PREDICTOR3 Rc
|
|
#define PREDICTOR4 (int)((JLONG)Ra + (JLONG)Rb - (JLONG)Rc)
|
|
#define PREDICTOR5 (int)((JLONG)Ra + RIGHT_SHIFT((JLONG)Rb - (JLONG)Rc, 1))
|
|
#define PREDICTOR6 (int)((JLONG)Rb + RIGHT_SHIFT((JLONG)Ra - (JLONG)Rc, 1))
|
|
#define PREDICTOR7 (int)RIGHT_SHIFT((JLONG)Ra + (JLONG)Rb, 1)
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef C_LOSSLESS_SUPPORTED
|
|
|
|
typedef void (*predict_difference_method_ptr) (j_compress_ptr cinfo, int ci,
|
|
_JSAMPROW input_buf,
|
|
_JSAMPROW prev_row,
|
|
JDIFFROW diff_buf,
|
|
JDIMENSION width);
|
|
|
|
/* Lossless compressor */
|
|
typedef struct {
|
|
struct jpeg_forward_dct pub; /* public fields */
|
|
|
|
/* It is useful to allow each component to have a separate diff method. */
|
|
predict_difference_method_ptr predict_difference[MAX_COMPONENTS];
|
|
|
|
/* MCU rows left in the restart interval for each component */
|
|
unsigned int restart_rows_to_go[MAX_COMPONENTS];
|
|
|
|
/* Sample scaling */
|
|
void (*scaler_scale) (j_compress_ptr cinfo, _JSAMPROW input_buf,
|
|
_JSAMPROW output_buf, JDIMENSION width);
|
|
} jpeg_lossless_compressor;
|
|
|
|
typedef jpeg_lossless_compressor *lossless_comp_ptr;
|
|
|
|
#endif /* C_LOSSLESS_SUPPORTED */
|
|
|
|
|
|
#ifdef D_LOSSLESS_SUPPORTED
|
|
|
|
typedef void (*predict_undifference_method_ptr) (j_decompress_ptr cinfo,
|
|
int comp_index,
|
|
JDIFFROW diff_buf,
|
|
JDIFFROW prev_row,
|
|
JDIFFROW undiff_buf,
|
|
JDIMENSION width);
|
|
|
|
/* Lossless decompressor */
|
|
typedef struct {
|
|
struct jpeg_inverse_dct pub; /* public fields */
|
|
|
|
/* It is useful to allow each component to have a separate undiff method. */
|
|
predict_undifference_method_ptr predict_undifference[MAX_COMPONENTS];
|
|
|
|
/* Sample scaling */
|
|
void (*scaler_scale) (j_decompress_ptr cinfo, JDIFFROW diff_buf,
|
|
_JSAMPROW output_buf, JDIMENSION width);
|
|
} jpeg_lossless_decompressor;
|
|
|
|
typedef jpeg_lossless_decompressor *lossless_decomp_ptr;
|
|
|
|
#endif /* D_LOSSLESS_SUPPORTED */
|
|
|
|
#endif /* JLOSSLS_H */
|