Coverage Report

Created: 2026-07-16 07:45

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
1.55M
{
24
1.55M
  int nsymbols, len;
25
26
1.55M
  if (*htblptr == NULL)
27
426k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
1.12M
  else if (cinfo->is_decompressor)
29
142k
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
1.41M
  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
1.41M
  nsymbols = 0;
39
23.9M
  for (len = 1; len <= 16; len++)
40
22.5M
    nsymbols += bits[len];
41
1.41M
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
1.41M
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
1.41M
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
1.41M
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
1.41M
  (*htblptr)->sent_table = FALSE;
50
1.41M
}
jcparam.c:add_huff_table
Line
Count
Source
23
1.36M
{
24
1.36M
  int nsymbols, len;
25
26
1.36M
  if (*htblptr == NULL)
27
379k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
983k
  else if (cinfo->is_decompressor)
29
0
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
1.36M
  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
1.36M
  nsymbols = 0;
39
23.1M
  for (len = 1; len <= 16; len++)
40
21.8M
    nsymbols += bits[len];
41
1.36M
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
1.36M
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
1.36M
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
1.36M
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
1.36M
  (*htblptr)->sent_table = FALSE;
50
1.36M
}
jdhuff.c:add_huff_table
Line
Count
Source
23
189k
{
24
189k
  int nsymbols, len;
25
26
189k
  if (*htblptr == NULL)
27
47.4k
    *htblptr = jpeg_alloc_huff_table(cinfo);
28
142k
  else if (cinfo->is_decompressor)
29
142k
    return;
30
31
  /* Copy the number-of-symbols-of-each-code-length counts */
32
47.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
47.4k
  nsymbols = 0;
39
805k
  for (len = 1; len <= 16; len++)
40
758k
    nsymbols += bits[len];
41
47.4k
  if (nsymbols < 1 || nsymbols > 256)
42
0
    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
43
44
47.4k
  memcpy((*htblptr)->huffval, val, nsymbols * sizeof(UINT8));
45
47.4k
  memset(&((*htblptr)->huffval[nsymbols]), 0,
46
47.4k
         (256 - nsymbols) * sizeof(UINT8));
47
48
  /* Initialize sent_table FALSE so table will be written to JPEG file. */
49
47.4k
  (*htblptr)->sent_table = FALSE;
50
47.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
388k
{
58
388k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
388k
  static const UINT8 bits_dc_luminance[17] = {
61
388k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
388k
  };
63
388k
  static const UINT8 val_dc_luminance[] = {
64
388k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
388k
  };
66
67
388k
  static const UINT8 bits_dc_chrominance[17] = {
68
388k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
388k
  };
70
388k
  static const UINT8 val_dc_chrominance[] = {
71
388k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
388k
  };
73
74
388k
  static const UINT8 bits_ac_luminance[17] = {
75
388k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
388k
  };
77
388k
  static const UINT8 val_ac_luminance[] = {
78
388k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
388k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
388k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
388k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
388k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
388k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
388k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
388k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
388k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
388k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
388k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
388k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
388k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
388k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
388k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
388k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
388k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
388k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
388k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
388k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
388k
    0xf9, 0xfa
99
388k
  };
100
101
388k
  static const UINT8 bits_ac_chrominance[17] = {
102
388k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
388k
  };
104
388k
  static const UINT8 val_ac_chrominance[] = {
105
388k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
388k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
388k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
388k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
388k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
388k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
388k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
388k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
388k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
388k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
388k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
388k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
388k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
388k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
388k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
388k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
388k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
388k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
388k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
388k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
388k
    0xf9, 0xfa
126
388k
  };
127
128
388k
  if (cinfo->is_decompressor) {
129
47.3k
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
47.3k
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
340k
  } else {
132
340k
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
340k
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
340k
  }
135
136
388k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
388k
                 val_dc_luminance);
138
388k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
388k
                 val_ac_luminance);
140
388k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
388k
                 val_dc_chrominance);
142
388k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
388k
                 val_ac_chrominance);
144
388k
}
jcparam.c:std_huff_tables
Line
Count
Source
57
340k
{
58
340k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
340k
  static const UINT8 bits_dc_luminance[17] = {
61
340k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
340k
  };
63
340k
  static const UINT8 val_dc_luminance[] = {
64
340k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
340k
  };
66
67
340k
  static const UINT8 bits_dc_chrominance[17] = {
68
340k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
340k
  };
70
340k
  static const UINT8 val_dc_chrominance[] = {
71
340k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
340k
  };
73
74
340k
  static const UINT8 bits_ac_luminance[17] = {
75
340k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
340k
  };
77
340k
  static const UINT8 val_ac_luminance[] = {
78
340k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
340k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
340k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
340k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
340k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
340k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
340k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
340k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
340k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
340k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
340k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
340k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
340k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
340k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
340k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
340k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
340k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
340k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
340k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
340k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
340k
    0xf9, 0xfa
99
340k
  };
100
101
340k
  static const UINT8 bits_ac_chrominance[17] = {
102
340k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
340k
  };
104
340k
  static const UINT8 val_ac_chrominance[] = {
105
340k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
340k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
340k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
340k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
340k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
340k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
340k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
340k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
340k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
340k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
340k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
340k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
340k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
340k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
340k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
340k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
340k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
340k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
340k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
340k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
340k
    0xf9, 0xfa
126
340k
  };
127
128
340k
  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
340k
  } else {
132
340k
    dc_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->dc_huff_tbl_ptrs;
133
340k
    ac_huff_tbl_ptrs = ((j_compress_ptr)cinfo)->ac_huff_tbl_ptrs;
134
340k
  }
135
136
340k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
340k
                 val_dc_luminance);
138
340k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
340k
                 val_ac_luminance);
140
340k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
340k
                 val_dc_chrominance);
142
340k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
340k
                 val_ac_chrominance);
144
340k
}
jdhuff.c:std_huff_tables
Line
Count
Source
57
47.3k
{
58
47.3k
  JHUFF_TBL **dc_huff_tbl_ptrs, **ac_huff_tbl_ptrs;
59
60
47.3k
  static const UINT8 bits_dc_luminance[17] = {
61
47.3k
    /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0
62
47.3k
  };
63
47.3k
  static const UINT8 val_dc_luminance[] = {
64
47.3k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
65
47.3k
  };
66
67
47.3k
  static const UINT8 bits_dc_chrominance[17] = {
68
47.3k
    /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
69
47.3k
  };
70
47.3k
  static const UINT8 val_dc_chrominance[] = {
71
47.3k
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
72
47.3k
  };
73
74
47.3k
  static const UINT8 bits_ac_luminance[17] = {
75
47.3k
    /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d
76
47.3k
  };
77
47.3k
  static const UINT8 val_ac_luminance[] = {
78
47.3k
    0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
79
47.3k
    0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
80
47.3k
    0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
81
47.3k
    0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
82
47.3k
    0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
83
47.3k
    0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
84
47.3k
    0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
85
47.3k
    0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
86
47.3k
    0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
87
47.3k
    0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
88
47.3k
    0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
89
47.3k
    0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
90
47.3k
    0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
91
47.3k
    0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
92
47.3k
    0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
93
47.3k
    0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
94
47.3k
    0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
95
47.3k
    0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
96
47.3k
    0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
97
47.3k
    0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
98
47.3k
    0xf9, 0xfa
99
47.3k
  };
100
101
47.3k
  static const UINT8 bits_ac_chrominance[17] = {
102
47.3k
    /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77
103
47.3k
  };
104
47.3k
  static const UINT8 val_ac_chrominance[] = {
105
47.3k
    0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
106
47.3k
    0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
107
47.3k
    0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
108
47.3k
    0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
109
47.3k
    0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
110
47.3k
    0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
111
47.3k
    0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
112
47.3k
    0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
113
47.3k
    0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
114
47.3k
    0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
115
47.3k
    0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
116
47.3k
    0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
117
47.3k
    0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
118
47.3k
    0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
119
47.3k
    0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
120
47.3k
    0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
121
47.3k
    0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
122
47.3k
    0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
123
47.3k
    0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
124
47.3k
    0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
125
47.3k
    0xf9, 0xfa
126
47.3k
  };
127
128
47.3k
  if (cinfo->is_decompressor) {
129
47.3k
    dc_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->dc_huff_tbl_ptrs;
130
47.3k
    ac_huff_tbl_ptrs = ((j_decompress_ptr)cinfo)->ac_huff_tbl_ptrs;
131
47.3k
  } 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
47.3k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[0], bits_dc_luminance,
137
47.3k
                 val_dc_luminance);
138
47.3k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[0], bits_ac_luminance,
139
47.3k
                 val_ac_luminance);
140
47.3k
  add_huff_table(cinfo, &dc_huff_tbl_ptrs[1], bits_dc_chrominance,
141
47.3k
                 val_dc_chrominance);
142
47.3k
  add_huff_table(cinfo, &ac_huff_tbl_ptrs[1], bits_ac_chrominance,
143
47.3k
                 val_ac_chrominance);
144
47.3k
}