Coverage Report

Created: 2026-01-09 06:35

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libjpeg-turbo.3.0.x/jstdhuff.c
Line
Count
Source
1
/*
2
 * jstdhuff.c
3
 *
4
 * This file was part of the Independent JPEG Group's software:
5
 * Copyright (C) 1991-1998, Thomas G. Lane.
6
 * libjpeg-turbo Modifications:
7
 * Copyright (C) 2013, 2022, 2024, D. R. Commander.
8
 * For conditions of distribution and use, see the accompanying README.ijg
9
 * file.
10
 *
11
 * This file contains routines to set the default Huffman tables, if they are
12
 * not already set.
13
 */
14
15
/*
16
 * Huffman table setup routines
17
 */
18
19
LOCAL(void)
20
add_huff_table(j_common_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits,
21
               const UINT8 *val)
22
/* Define a Huffman table */
23
982k
{
24
982k
  int nsymbols, len;
25
26
982k
  if (*htblptr == NULL)
27
166k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
815k
  else if (cinfo->is_decompressor)
29
68.4k
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
913k
  memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits));
33
34
  /* Validate the counts.  We do this here mainly so we can copy the right
35
   * number of symbols from the val[] array, without risking marching off
36
   * the end of memory.  jchuff.c will do a more thorough test later.
37
   */
38
913k
  nsymbols = 0;
39
15.5M
  for (len = 1; len <= 16; len++)
40
14.6M
    nsymbols += bits[len];
41
913k
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
913k
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
913k
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
913k
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
913k
  (*htblptr)->sent_table = FALSE;
50
913k
}
jcparam.c:add_huff_table
Line
Count
Source
23
873k
{
24
873k
  int nsymbols, len;
25
26
873k
  if (*htblptr == NULL)
27
126k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
747k
  else if (cinfo->is_decompressor)
29
0
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
873k
  memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits));
33
34
  /* Validate the counts.  We do this here mainly so we can copy the right
35
   * number of symbols from the val[] array, without risking marching off
36
   * the end of memory.  jchuff.c will do a more thorough test later.
37
   */
38
873k
  nsymbols = 0;
39
14.8M
  for (len = 1; len <= 16; len++)
40
13.9M
    nsymbols += bits[len];
41
873k
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
873k
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
873k
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
873k
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
873k
  (*htblptr)->sent_table = FALSE;
50
873k
}
jdhuff.c:add_huff_table
Line
Count
Source
23
108k
{
24
108k
  int nsymbols, len;
25
26
108k
  if (*htblptr == NULL)
27
40.4k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
68.4k
  else if (cinfo->is_decompressor)
29
68.4k
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
40.4k
  memcpy((*htblptr)->bits, bits, sizeof((*htblptr)->bits));
33
34
  /* Validate the counts.  We do this here mainly so we can copy the right
35
   * number of symbols from the val[] array, without risking marching off
36
   * the end of memory.  jchuff.c will do a more thorough test later.
37
   */
38
40.4k
  nsymbols = 0;
39
688k
  for (len = 1; len <= 16; len++)
40
647k
    nsymbols += bits[len];
41
40.4k
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
40.4k
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
40.4k
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
40.4k
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
40.4k
  (*htblptr)->sent_table = FALSE;
50
40.4k
}
51
52
53
LOCAL(void)
54
std_huff_tables(j_common_ptr cinfo)
55
/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
56
/* IMPORTANT: these are only valid for 8-bit data precision! */
57
245k
{
58
245k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
245k
  static const UINT8 bits_dc_luminance[17] = {
61
245k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
245k
  };
63
245k
  static const UINT8 val_dc_luminance[] = {
64
245k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
245k
  };
66
67
245k
  static const UINT8 bits_dc_chrominance[17] = {
68
245k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
245k
  };
70
245k
  static const UINT8 val_dc_chrominance[] = {
71
245k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
245k
  };
73
74
245k
  static const UINT8 bits_ac_luminance[17] = {
75
245k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
245k
  };
77
245k
  static const UINT8 val_ac_luminance[] = {
78
245k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
245k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
245k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
245k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
245k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
245k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
245k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
245k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
245k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
245k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
245k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
245k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
245k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
245k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
245k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
245k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
245k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
245k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
245k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
245k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
245k
    0xf9, 0xfa
99
245k
  };
100
101
245k
  static const UINT8 bits_ac_chrominance[17] = {
102
245k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
245k
  };
104
245k
  static const UINT8 val_ac_chrominance[] = {
105
245k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
245k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
245k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
245k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
245k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
245k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
245k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
245k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
245k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
245k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
245k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
245k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
245k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
245k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
245k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
245k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
245k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
245k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
245k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
245k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
245k
    0xf9, 0xfa
126
245k
  };
127
128
245k
  if (cinfo->is_decompressor) {
129
27.2k
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
27.2k
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
218k
  } else {
132
218k
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
218k
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
218k
  }
135
136
245k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
245k
                 val_dc_luminance);
138
245k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
245k
                 val_ac_luminance);
140
245k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
245k
                 val_dc_chrominance);
142
245k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
245k
                 val_ac_chrominance);
144
245k
}
jcparam.c:std_huff_tables
Line
Count
Source
57
218k
{
58
218k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
218k
  static const UINT8 bits_dc_luminance[17] = {
61
218k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
218k
  };
63
218k
  static const UINT8 val_dc_luminance[] = {
64
218k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
218k
  };
66
67
218k
  static const UINT8 bits_dc_chrominance[17] = {
68
218k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
218k
  };
70
218k
  static const UINT8 val_dc_chrominance[] = {
71
218k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
218k
  };
73
74
218k
  static const UINT8 bits_ac_luminance[17] = {
75
218k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
218k
  };
77
218k
  static const UINT8 val_ac_luminance[] = {
78
218k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
218k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
218k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
218k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
218k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
218k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
218k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
218k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
218k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
218k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
218k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
218k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
218k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
218k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
218k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
218k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
218k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
218k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
218k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
218k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
218k
    0xf9, 0xfa
99
218k
  };
100
101
218k
  static const UINT8 bits_ac_chrominance[17] = {
102
218k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
218k
  };
104
218k
  static const UINT8 val_ac_chrominance[] = {
105
218k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
218k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
218k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
218k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
218k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
218k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
218k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
218k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
218k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
218k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
218k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
218k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
218k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
218k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
218k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
218k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
218k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
218k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
218k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
218k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
218k
    0xf9, 0xfa
126
218k
  };
127
128
218k
  if (cinfo->is_decompressor) {
129
0
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
0
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
218k
  } else {
132
218k
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
218k
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
218k
  }
135
136
218k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
218k
                 val_dc_luminance);
138
218k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
218k
                 val_ac_luminance);
140
218k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
218k
                 val_dc_chrominance);
142
218k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
218k
                 val_ac_chrominance);
144
218k
}
jdhuff.c:std_huff_tables
Line
Count
Source
57
27.2k
{
58
27.2k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
27.2k
  static const UINT8 bits_dc_luminance[17] = {
61
27.2k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
27.2k
  };
63
27.2k
  static const UINT8 val_dc_luminance[] = {
64
27.2k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
27.2k
  };
66
67
27.2k
  static const UINT8 bits_dc_chrominance[17] = {
68
27.2k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
27.2k
  };
70
27.2k
  static const UINT8 val_dc_chrominance[] = {
71
27.2k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
27.2k
  };
73
74
27.2k
  static const UINT8 bits_ac_luminance[17] = {
75
27.2k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
27.2k
  };
77
27.2k
  static const UINT8 val_ac_luminance[] = {
78
27.2k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
27.2k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
27.2k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
27.2k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
27.2k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
27.2k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
27.2k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
27.2k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
27.2k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
27.2k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
27.2k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
27.2k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
27.2k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
27.2k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
27.2k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
27.2k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
27.2k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
27.2k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
27.2k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
27.2k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
27.2k
    0xf9, 0xfa
99
27.2k
  };
100
101
27.2k
  static const UINT8 bits_ac_chrominance[17] = {
102
27.2k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
27.2k
  };
104
27.2k
  static const UINT8 val_ac_chrominance[] = {
105
27.2k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
27.2k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
27.2k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
27.2k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
27.2k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
27.2k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
27.2k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
27.2k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
27.2k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
27.2k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
27.2k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
27.2k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
27.2k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
27.2k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
27.2k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
27.2k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
27.2k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
27.2k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
27.2k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
27.2k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
27.2k
    0xf9, 0xfa
126
27.2k
  };
127
128
27.2k
  if (cinfo->is_decompressor) {
129
27.2k
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
27.2k
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
27.2k
  } else {
132
0
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
0
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
0
  }
135
136
27.2k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
27.2k
                 val_dc_luminance);
138
27.2k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
27.2k
                 val_ac_luminance);
140
27.2k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
27.2k
                 val_dc_chrominance);
142
27.2k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
27.2k
                 val_ac_chrominance);
144
27.2k
}