Coverage Report

Created: 2026-09-01 07:36

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