Coverage Report

Created: 2023-06-07 06:03

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