FFmpeg: libavcodec/cfhddata.c Source File

FFmpeg
cfhddata.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Kieran Kunhya
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "stdint.h"
22 #include "cfhd.h"
23 
24 /* some special codewords, not sure what they all mean */
25  #define TABLE_9_BAND_END1 0x1C7859Eh
26  #define TABLE_9_BAND_END_LEN1 25
27  #define TABLE_9_BAND_END2 0x38F0B3Fh
28  #define TABLE_9_BAND_END_LEN2 26
29  #define TABLE_9_BAND_END3 0x38F0B3Eh
30  #define TABLE_9_BAND_END_LEN3 26
31 
32  static const uint8_t table_9_vlc_len[NB_VLC_TABLE_9] = {
33  1, 2, 4, 5, 5, 5, 6, 6,
34  6, 7, 7, 8, 8, 8, 8, 9,
35  9, 9, 9, 9, 10, 10, 11, 11,
36  11, 11, 12, 12, 12, 12, 13, 13,
37  13, 14, 14, 14, 14, 14, 14, 15,
38  15, 15, 15, 16, 16, 16, 16, 17,
39  17, 17, 17, 17, 18, 18, 18, 19,
40  19, 19, 20, 20, 20, 20, 20, 22,
41  23, 23, 23, 23, 24, 24, 24, 25,
42  26, 26,
43 };
44 
45  static const uint32_t table_9_vlc_bits[NB_VLC_TABLE_9] = {
46  0, 0x2, 0xc, 0x1a, 0x1d, 0x1e, 0x39, 0x3e,
47  0x37, 0x7e, 0x6c, 0xe2, 0xfe, 0xdb, 0xe0, 0x1c3,
48  0x1c6, 0x1ff, 0x1fe, 0x1b5, 0x369, 0x385, 0x71d, 0x6d0,
49  0x708, 0x71f, 0xe3d, 0xe39, 0xe13, 0xe12, 0x1c71, 0x1b45,
50  0x1b47, 0x3689, 0x38f2, 0x38e1, 0x38e0, 0x38f1, 0x3688, 0x6d1b,
51  0x71e0, 0x6d19, 0x71e7, 0xe3cd, 0xda35, 0xda30, 0xe3c3, 0x1b469,
52  0x1b462, 0x1c798, 0x1b463, 0x1c799, 0x38f08, 0x38f09, 0x38f0a, 0x6d1a0,
53  0x6d1a3, 0x6d1a1, 0xda345, 0xda344, 0xe3c2d, 0xe3c2f, 0xe3c2e, 0x38f0b2,
54  0x71e160, 0x71e162, 0x71e166, 0x71e161, 0xe3c2ce, 0xe3c2c6, 0xe3c2c7, 0x1C7859E,
55  0x38F0B3F, 0x38F0B3E,
56 };
57 
58  static const uint16_t table_9_vlc_run[NB_VLC_TABLE_9] = {
59  1, 1, 1, 1, 12, 1, 32, 160,
60  1, 1, 1, 320, 1, 1, 80, 120,
61  1, 1, 100, 1, 1, 1, 1, 1,
62  1, 1, 1, 1, 1, 1, 1, 1,
63  1, 1, 1, 1, 1, 1, 1, 1,
64  1, 1, 1, 1, 1, 1, 1, 1,
65  1, 1, 1, 1, 1, 1, 1, 1,
66  1, 1, 1, 1, 1, 1, 1, 1,
67  1, 1, 1, 1, 1, 1, 1, 1,
68  1, 1
69 };
70 
71  static const uint8_t table_9_vlc_level[NB_VLC_TABLE_9] = {
72  0, 1, 2, 3, 0, 4, 0, 0,
73  5, 7, 6, 0, 9, 8, 0, 0,
74  11, 12, 0, 10, 13, 14, 17, 15,
75  16, 18, 22, 21, 20, 19, 25, 23,
76  24, 27, 31, 29, 28, 30, 26, 33,
77  34, 32, 35, 39, 37, 36, 38, 42,
78  40, 43, 41, 44, 45, 46, 47, 48,
79  50, 49, 52, 51, 53, 55, 54, 56,
80  57, 59, 60, 58, 61, 62, 63, 64,
81  64, 64,
82 };
83 
84  static const uint32_t table_18_vlc_bits[NB_VLC_TABLE_18] = {
85  0, 0x2, 0x7, 0x19, 0x30, 0x36, 0x6f, 0x63,
86  0x69, 0x6b, 0xd1, 0xd4, 0xdc, 0x189, 0x18a, 0x1a0,
87  0x1ab, 0x377, 0x310, 0x316, 0x343, 0x354, 0x375, 0x623,
88  0x684, 0x685, 0x6ab, 0x6ec, 0xddb, 0xc5c, 0xc5e, 0xc44,
89  0xd55, 0xdd1, 0xdd3, 0x1bb5, 0x188b, 0x18bb, 0x18bf, 0x1aa8,
90  0x1ba0, 0x1ba5, 0x1ba4, 0x3115, 0x3175, 0x317d, 0x3553, 0x3768,
91  0x6e87, 0x6ed3, 0x62e8, 0x62f8, 0x6228, 0x6aa4, 0x6e85, 0xc453,
92  0xc5d3, 0xc5f3, 0xdda4, 0xdd08, 0xdd0c, 0x1bb4b, 0x1bb4a, 0x18ba5,
93  0x18be5, 0x1aa95, 0x1aa97, 0x188a4, 0x1ba13, 0x31748, 0x317c8, 0x35528,
94  0x3552c, 0x37424, 0x37434, 0x37436, 0x62294, 0x62e92, 0x62f92, 0x6aa52,
95  0x6aa5a, 0x6e86a, 0x6e86e, 0x6e84a, 0xc452a, 0xc5d27, 0xc5f26, 0xd54a6,
96  0xd54b6, 0xdd096, 0xdd0d6, 0xdd0de, 0x188a56, 0x18ba4d, 0x18be4e, 0x18be4f,
97  0x1aa96e, 0x1ba12e, 0x1ba12f, 0x1ba1af, 0x1ba1bf, 0x37435d, 0x37437d, 0x317498,
98  0x35529c, 0x35529d, 0x3552de, 0x3552df, 0x62e933, 0x62295d, 0x6aa53d, 0x6aa53f,
99  0x6aa53e, 0x6e86b9, 0x6e86f8, 0xd54a79, 0xc5d265, 0xc452b8, 0xdd0d71, 0xd54a78,
100  0xdd0d70, 0xdd0df2, 0xdd0df3, 0x188a5f6, 0x188a5f5, 0x188a5f4, 0x188a5f3, 0x188a5f2,
101  0x188a5f1, 0x188a5f0, 0x188a5ef, 0x188a5ee, 0x188a5ed, 0x188a5aa, 0x188a5e3, 0x188a5df,
102  0x188a589, 0x188a5dd, 0x188a578, 0x188a5e0, 0x188a588, 0x188a5d6, 0x188a5db, 0x188a5e1,
103  0x188a587, 0x188a59a, 0x188a5c4, 0x188a5ec, 0x188a586, 0x188a573, 0x188a59c, 0x188a5c8,
104  0x188a5fb, 0x188a5a1, 0x188a5eb, 0x188a5a8, 0x188a584, 0x188a5d2, 0x188a599, 0x188a598,
105  0x188a583, 0x18ba4c9, 0x188a5d0, 0x188a594, 0x188a582, 0x188a5cb, 0x188a5d8, 0x188a5e7,
106  0x188a581, 0x188a5ea, 0x188a5a9, 0x188a5a6, 0x188a580, 0x188a5a0, 0x188a59d, 0x188a5c3,
107  0x188a57f, 0x188a5c0, 0x188a5de, 0x188a5d4, 0x188a57e, 0x188a5c2, 0x188a592, 0x188a5cd,
108  0x188a57d, 0x188a5a3, 0x188a5e8, 0x188a5a2, 0x188a57c, 0x188a58e, 0x188a5b3, 0x188a5b2,
109  0x188a5b1, 0x188a5b0, 0x188a5af, 0x188a5ae, 0x188a5ad, 0x188a5ac, 0x188a5ab, 0x188a5da,
110  0x188a5e4, 0x188a5e5, 0x188a5d9, 0x188a5b5, 0x188a5bc, 0x188a5bd, 0x188a5e9, 0x188a5cc,
111  0x188a585, 0x188a5d3, 0x188a5e2, 0x188a595, 0x188a596, 0x188a5b8, 0x188a590, 0x188a5c9,
112  0x188a5a4, 0x188a5e6, 0x188a5a5, 0x188a5ce, 0x188a5bf, 0x188a572, 0x188a59b, 0x188a5be,
113  0x188a5c7, 0x188a5ca, 0x188a5d5, 0x188a57b, 0x188a58d, 0x188a58c, 0x188a58b, 0x188a58a,
114  0x18ba4c8, 0x188a5c5, 0x188a5fa, 0x188a5bb, 0x188a5c1, 0x188a5cf, 0x188a5b9, 0x188a5b6,
115  0x188a597, 0x188a5fe, 0x188a5d7, 0x188a5ba, 0x188a591, 0x188a5c6, 0x188a5dc, 0x188a57a,
116  0x188a59f, 0x188a5f9, 0x188a5b4, 0x188a5a7, 0x188a58f, 0x188a5fd, 0x188a5b7, 0x188a593,
117  0x188a59e, 0x188a5f8, 0x188a5ff, 0x188a5fc, 0x188a579, 0x188a5f7, 0x3114ba2, 0x3114ba3,
118 };
119 
120  static const uint8_t table_18_vlc_len[NB_VLC_TABLE_18] = {
121  1, 2, 3, 5, 6, 6, 7, 7,
122  7, 7, 8, 8, 8, 9, 9, 9,
123  9, 10, 10, 10, 10, 10, 10, 11,
124  11, 11, 11, 11, 12, 12, 12, 12,
125  12, 12, 12, 13, 13, 13, 13, 13,
126  13, 13, 13, 14, 14, 14, 14, 14,
127  15, 15, 15, 15, 15, 15, 15, 16,
128  16, 16, 16, 16, 16, 17, 17, 17,
129  17, 17, 17, 17, 17, 18, 18, 18,
130  18, 18, 18, 18, 19, 19, 19, 19,
131  19, 19, 19, 19, 20, 20, 20, 20,
132  20, 20, 20, 20, 21, 21, 21, 21,
133  21, 21, 21, 21, 21, 22, 22, 22,
134  22, 22, 22, 22, 23, 23, 23, 23,
135  23, 23, 23, 24, 24, 24, 24, 24,
136  24, 24, 24, 25, 25, 25, 25, 25,
137  25, 25, 25, 25, 25, 25, 25, 25,
138  25, 25, 25, 25, 25, 25, 25, 25,
139  25, 25, 25, 25, 25, 25, 25, 25,
140  25, 25, 25, 25, 25, 25, 25, 25,
141  25, 25, 25, 25, 25, 25, 25, 25,
142  25, 25, 25, 25, 25, 25, 25, 25,
143  25, 25, 25, 25, 25, 25, 25, 25,
144  25, 25, 25, 25, 25, 25, 25, 25,
145  25, 25, 25, 25, 25, 25, 25, 25,
146  25, 25, 25, 25, 25, 25, 25, 25,
147  25, 25, 25, 25, 25, 25, 25, 25,
148  25, 25, 25, 25, 25, 25, 25, 25,
149  25, 25, 25, 25, 25, 25, 25, 25,
150  25, 25, 25, 25, 25, 25, 25, 25,
151  25, 25, 25, 25, 25, 25, 25, 25,
152  25, 25, 25, 25, 25, 25, 25, 25,
153  25, 25, 25, 25, 25, 25, 26, 26,
154 };
155 
156  static const uint16_t table_18_vlc_run[NB_VLC_TABLE_18] = {
157  1, 1, 1, 1, 1, 1, 1, 1,
158  12, 1, 20, 1, 1, 1, 32, 1,
159  1, 1, 1, 1, 60, 1, 1, 1,
160  1, 100, 1, 1, 1, 1, 1, 1,
161  1, 1, 1, 1, 1, 1, 180, 1,
162  1, 320, 1, 1, 1, 1, 1, 1,
163  1, 1, 1, 1, 1, 1, 1, 1,
164  1, 1, 1, 1, 1, 1, 1, 1,
165  1, 1, 1, 1, 1, 1, 1, 1,
166  1, 1, 1, 1, 1, 1, 1, 1,
167  1, 1, 1, 1, 1, 1, 1, 1,
168  1, 1, 1, 1, 1, 1, 1, 1,
169  1, 1, 1, 1, 1, 1, 1, 1,
170  1, 1, 1, 1, 1, 1, 1, 1,
171  1, 1, 1, 1, 1, 1, 1, 1,
172  1, 1, 1, 1, 1, 1, 1, 1,
173  1, 1, 1, 1, 1, 1, 1, 1,
174  1, 1, 1, 1, 1, 1, 1, 1,
175  1, 1, 1, 1, 1, 1, 1, 1,
176  1, 1, 1, 1, 1, 1, 1, 1,
177  1, 1, 1, 1, 1, 1, 1, 1,
178  1, 1, 1, 1, 1, 1, 1, 1,
179  1, 1, 1, 1, 1, 1, 1, 1,
180  1, 1, 1, 1, 1, 1, 1, 1,
181  1, 1, 1, 1, 1, 1, 1, 1,
182  1, 1, 1, 1, 1, 1, 1, 1,
183  1, 1, 1, 1, 1, 1, 1, 1,
184  1, 1, 1, 1, 1, 1, 1, 1,
185  1, 1, 1, 1, 1, 1, 1, 1,
186  1, 1, 1, 1, 1, 1, 1, 1,
187  1, 1, 1, 1, 1, 1, 1, 1,
188  1, 1, 1, 1, 1, 1, 1, 1,
189  1, 1, 1, 1, 1, 1, 1, 2,
190 };
191 
192  static const uint8_t table_18_vlc_level[NB_VLC_TABLE_18] = {
193  0, 1, 2, 3, 4, 5, 8, 6,
194  0, 7, 0, 9, 10, 11, 0, 12,
195  13, 18, 14, 15, 0, 16, 17, 19,
196  20, 0, 21, 22, 29, 24, 25, 23,
197  26, 27, 28, 35, 30, 31, 0, 32,
198  33, 0, 34, 36, 37, 38, 39, 40,
199  46, 47, 42, 43, 41, 44, 45, 48,
200  49, 50, 53, 51, 52, 61, 60, 55,
201  56, 57, 58, 54, 59, 62, 63, 64,
202  65, 66, 67, 68, 69, 70, 71, 72,
203  73, 75, 76, 74, 77, 78, 79, 80,
204  81, 82, 83, 84, 85, 86, 87, 88,
205  89, 90, 91, 92, 93, 99, 100, 94,
206  95, 96, 97, 98, 102, 101, 103, 105,
207  104, 106, 107, 111, 109, 108, 113, 110,
208  112, 114, 115, 225, 189, 188, 203, 202,
209  197, 207, 169, 223, 159, 235, 152, 192,
210  179, 201, 172, 149, 178, 120, 219, 150,
211  127, 211, 125, 158, 247, 238, 163, 228,
212  183, 217, 168, 122, 128, 249, 187, 186,
213  136, 181, 255, 230, 135, 233, 222, 145,
214  134, 167, 248, 209, 243, 216, 164, 140,
215  157, 239, 191, 251, 156, 139, 242, 133,
216  162, 213, 165, 212, 227, 198, 236, 234,
217  117, 215, 124, 123, 254, 253, 148, 218,
218  146, 147, 224, 143, 184, 185, 166, 132,
219  129, 250, 151, 119, 193, 176, 245, 229,
220  206, 144, 208, 137, 241, 237, 190, 240,
221  131, 232, 252, 171, 205, 204, 118, 214,
222  180, 126, 182, 175, 141, 138, 177, 153,
223  194, 160, 121, 174, 246, 130, 200, 170,
224  221, 196, 142, 210, 199, 155, 154, 244,
225  220, 195, 161, 231, 173, 226, 116, 255,
226 };
227 
228  av_cold int ff_cfhd_init_vlcs(CFHDContext *s)
229 {
230  int i, j, ret = 0;
231  uint32_t new_cfhd_vlc_bits[NB_VLC_TABLE_18 * 2];
232  uint8_t new_cfhd_vlc_len[NB_VLC_TABLE_18 * 2];
233  uint16_t new_cfhd_vlc_run[NB_VLC_TABLE_18 * 2];
234  int16_t new_cfhd_vlc_level[NB_VLC_TABLE_18 * 2];
235 
236  /** Similar to dv.c, generate signed VLC tables **/
237 
238  /* Table 9 */
239  for (i = 0, j = 0; i < NB_VLC_TABLE_9; i++, j++) {
240  new_cfhd_vlc_bits[j] = table_9_vlc_bits[i];
241  new_cfhd_vlc_len[j] = table_9_vlc_len[i];
242  new_cfhd_vlc_run[j] = table_9_vlc_run[i];
243  new_cfhd_vlc_level[j] = table_9_vlc_level[i];
244 
245  /* Don't include the zero level nor escape bits */
246  if (table_9_vlc_level[i] &&
247  new_cfhd_vlc_bits[j] != table_9_vlc_bits[NB_VLC_TABLE_9-1]) {
248  new_cfhd_vlc_bits[j] <<= 1;
249  new_cfhd_vlc_len[j]++;
250  j++;
251  new_cfhd_vlc_bits[j] = (table_9_vlc_bits[i] << 1) | 1;
252  new_cfhd_vlc_len[j] = table_9_vlc_len[i] + 1;
253  new_cfhd_vlc_run[j] = table_9_vlc_run[i];
254  new_cfhd_vlc_level[j] = -table_9_vlc_level[i];
255  }
256  }
257 
258  ret = init_vlc(&s->vlc_9, VLC_BITS, j, new_cfhd_vlc_len,
259  1, 1, new_cfhd_vlc_bits, 4, 4, 0);
260  if (ret < 0)
261  return ret;
262  for (i = 0; i < s->vlc_9.table_size; i++) {
263  int code = s->vlc_9.table[i][0];
264  int len = s->vlc_9.table[i][1];
265  int level, run;
266 
267  if (len < 0) { // more bits needed
268  run = 0;
269  level = code;
270  } else {
271  run = new_cfhd_vlc_run[code];
272  level = new_cfhd_vlc_level[code];
273  }
274  s->table_9_rl_vlc[i].len = len;
275  s->table_9_rl_vlc[i].level = level;
276  s->table_9_rl_vlc[i].run = run;
277  }
278 
279  /* Table 18 */
280  for (i = 0, j = 0; i < NB_VLC_TABLE_18; i++, j++) {
281  new_cfhd_vlc_bits[j] = table_18_vlc_bits[i];
282  new_cfhd_vlc_len[j] = table_18_vlc_len[i];
283  new_cfhd_vlc_run[j] = table_18_vlc_run[i];
284  new_cfhd_vlc_level[j] = table_18_vlc_level[i];
285 
286  /* Don't include the zero level nor escape bits */
287  if (table_18_vlc_level[i] &&
288  new_cfhd_vlc_bits[j] != table_18_vlc_bits[NB_VLC_TABLE_18-1]) {
289  new_cfhd_vlc_bits[j] <<= 1;
290  new_cfhd_vlc_len[j]++;
291  j++;
292  new_cfhd_vlc_bits[j] = (table_18_vlc_bits[i] << 1) | 1;
293  new_cfhd_vlc_len[j] = table_18_vlc_len[i] + 1;
294  new_cfhd_vlc_run[j] = table_18_vlc_run[i];
295  new_cfhd_vlc_level[j] = -table_18_vlc_level[i];
296  }
297  }
298 
299  ret = init_vlc(&s->vlc_18, VLC_BITS, j, new_cfhd_vlc_len,
300  1, 1, new_cfhd_vlc_bits, 4, 4, 0);
301  if (ret < 0)
302  return ret;
303  av_assert0(s->vlc_18.table_size == 4572);
304 
305  for (i = 0; i < s->vlc_18.table_size; i++) {
306  int code = s->vlc_18.table[i][0];
307  int len = s->vlc_18.table[i][1];
308  int level, run;
309 
310  if (len < 0) { // more bits needed
311  run = 0;
312  level = code;
313  } else {
314  run = new_cfhd_vlc_run[code];
315  level = new_cfhd_vlc_level[code];
316  }
317  s->table_18_rl_vlc[i].len = len;
318  s->table_18_rl_vlc[i].level = level;
319  s->table_18_rl_vlc[i].run = run;
320  }
321 
322  return ret;
323 }
VLC::table_size
int table_size
Definition: get_bits.h:66
s
const char * s
Definition: avisynth_c.h:631
CFHDContext::vlc_18
VLC vlc_18
Definition: cfhd.h:78
VLC_BITS
#define VLC_BITS
Definition: asvdec.c:37
run
uint8_t run
Definition: svq3.c:149
CFHDContext
Definition: cfhd.h:71
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
ff_cfhd_init_vlcs
av_cold int ff_cfhd_init_vlcs(CFHDContext *s)
Definition: cfhddata.c:228
uint8_t
uint8_t
Definition: audio_convert.c:194
av_cold
#define av_cold
Definition: attributes.h:82
table_18_vlc_bits
static const uint32_t table_18_vlc_bits[NB_VLC_TABLE_18]
Definition: cfhddata.c:84
table_18_vlc_level
static const uint8_t table_18_vlc_level[NB_VLC_TABLE_18]
Definition: cfhddata.c:192
table_18_vlc_run
static const uint16_t table_18_vlc_run[NB_VLC_TABLE_18]
Definition: cfhddata.c:156
CFHD_RL_VLC_ELEM::len
int8_t len
Definition: cfhd.h:37
CFHDContext::table_18_rl_vlc
CFHD_RL_VLC_ELEM table_18_rl_vlc[4572]
Definition: cfhd.h:77
CFHDContext::table_9_rl_vlc
CFHD_RL_VLC_ELEM table_9_rl_vlc[2088]
Definition: cfhd.h:74
table_9_vlc_len
static const uint8_t table_9_vlc_len[NB_VLC_TABLE_9]
Definition: cfhddata.c:32
table_9_vlc_bits
static const uint32_t table_9_vlc_bits[NB_VLC_TABLE_9]
Definition: cfhddata.c:45
CFHDContext::vlc_9
VLC vlc_9
Definition: cfhd.h:75
table_18_vlc_len
static const uint8_t table_18_vlc_len[NB_VLC_TABLE_18]
Definition: cfhddata.c:120
CFHD_RL_VLC_ELEM::run
uint16_t run
Definition: cfhd.h:38
table_9_vlc_level
static const uint8_t table_9_vlc_level[NB_VLC_TABLE_9]
Definition: cfhddata.c:71
init_vlc
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
Definition: get_bits.h:465
NB_VLC_TABLE_18
#define NB_VLC_TABLE_18
Definition: cfhd.h:33
table_9_vlc_run
static const uint16_t table_9_vlc_run[NB_VLC_TABLE_9]
Definition: cfhddata.c:58
level
uint8_t level
Definition: svq3.c:150
NB_VLC_TABLE_9
#define NB_VLC_TABLE_9
Definition: cfhd.h:32
len
int len
Definition: vorbis_enc_data.h:452
VLC::table
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65
CFHD_RL_VLC_ELEM::level
int16_t level
Definition: cfhd.h:36

Generated on Mon Feb 15 2016 15:20:37 for FFmpeg by   doxygen 1.8.6

AltStyle によって変換されたページ (->オリジナル) /