| /* |
| * 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 */ |