Coverage Report

Created: 2026-04-12 06:05

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