Coverage Report

Created: 2024-08-27 12:18

/src/libjpeg-turbo.main/jlossls.h
Line
Count
Source
1
/*
2
 * jlossls.h
3
 *
4
 * This file was part of the Independent JPEG Group's software:
5
 * Copyright (C) 1998, Thomas G. Lane.
6
 * Lossless JPEG Modifications:
7
 * Copyright (C) 1999, Ken Murchison.
8
 * libjpeg-turbo Modifications:
9
 * Copyright (C) 2022, D. R. Commander.
10
 * For conditions of distribution and use, see the accompanying README.ijg
11
 * file.
12
 *
13
 * This include file contains common declarations for the lossless JPEG
14
 * codec modules.
15
 */
16
17
#ifndef JLOSSLS_H
18
#define JLOSSLS_H
19
20
#if defined(C_LOSSLESS_SUPPORTED) || defined(D_LOSSLESS_SUPPORTED)
21
22
#define JPEG_INTERNALS
23
#include "jpeglib.h"
24
#include "jsamplecomp.h"
25
26
27
#define ALLOC_DARRAY(pool_id, diffsperrow, numrows) \
28
161k
  (JDIFFARRAY)(*cinfo->mem->alloc_sarray) \
29
161k
    ((j_common_ptr)cinfo, pool_id, \
30
161k
     (diffsperrow) * sizeof(JDIFF) / sizeof(_JSAMPLE), numrows)
31
32
33
/*
34
 * Table H.1: Predictors for lossless coding.
35
 */
36
37
1.08G
#define PREDICTOR1  Ra
38
27.7M
#define PREDICTOR2  Rb
39
#define PREDICTOR3  Rc
40
#define PREDICTOR4  (int)((JLONG)Ra + (JLONG)Rb - (JLONG)Rc)
41
#define PREDICTOR5  (int)((JLONG)Ra + RIGHT_SHIFT((JLONG)Rb - (JLONG)Rc, 1))
42
#define PREDICTOR6  (int)((JLONG)Rb + RIGHT_SHIFT((JLONG)Ra - (JLONG)Rc, 1))
43
#define PREDICTOR7  (int)RIGHT_SHIFT((JLONG)Ra + (JLONG)Rb, 1)
44
45
#endif
46
47
48
#ifdef C_LOSSLESS_SUPPORTED
49
50
typedef void (*predict_difference_method_ptr) (j_compress_ptr cinfo, int ci,
51
                                               _JSAMPROW input_buf,
52
                                               _JSAMPROW prev_row,
53
                                               JDIFFROW diff_buf,
54
                                               JDIMENSION width);
55
56
/* Lossless compressor */
57
typedef struct {
58
  struct jpeg_forward_dct pub;  /* public fields */
59
60
  /* It is useful to allow each component to have a separate diff method. */
61
  predict_difference_method_ptr predict_difference[MAX_COMPONENTS];
62
63
  /* MCU rows left in the restart interval for each component */
64
  unsigned int restart_rows_to_go[MAX_COMPONENTS];
65
66
  /* Sample scaling */
67
  void (*scaler_scale) (j_compress_ptr cinfo, _JSAMPROW input_buf,
68
                        _JSAMPROW output_buf, JDIMENSION width);
69
} jpeg_lossless_compressor;
70
71
typedef jpeg_lossless_compressor *lossless_comp_ptr;
72
73
#endif /* C_LOSSLESS_SUPPORTED */
74
75
76
#ifdef D_LOSSLESS_SUPPORTED
77
78
typedef void (*predict_undifference_method_ptr) (j_decompress_ptr cinfo,
79
                                                 int comp_index,
80
                                                 JDIFFROW diff_buf,
81
                                                 JDIFFROW prev_row,
82
                                                 JDIFFROW undiff_buf,
83
                                                 JDIMENSION width);
84
85
/* Lossless decompressor */
86
typedef struct {
87
  struct jpeg_inverse_dct pub;  /* public fields */
88
89
  /* It is useful to allow each component to have a separate undiff method. */
90
  predict_undifference_method_ptr predict_undifference[MAX_COMPONENTS];
91
92
  /* Sample scaling */
93
  void (*scaler_scale) (j_decompress_ptr cinfo, JDIFFROW diff_buf,
94
                        _JSAMPROW output_buf, JDIMENSION width);
95
} jpeg_lossless_decompressor;
96
97
typedef jpeg_lossless_decompressor *lossless_decomp_ptr;
98
99
#endif /* D_LOSSLESS_SUPPORTED */
100
101
#endif /* JLOSSLS_H */