Mercurial > libavcodec.hg
annotate bitstream.c @ 12266:48d6738904a9 libavcodec
Fix SPLATB_REG mess. Used to be a if/elseif/elseif/elseif spaghetti, so this
splits it into small optimization-specific macros which are selected for each
DSP function. The advantage of this approach is that the sse4 functions now
use the ssse3 codepath also without needing an explicit sse4 codepath.
author | rbultje |
---|---|
date | Sat, 24 Jul 2010 19:33:05 +0000 |
parents | b9354f343d2d |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * Common bit i/o utils | |
8629
04423b2f6e0b
cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents:
8596
diff
changeset
|
3 * Copyright (c) 2000, 2001 Fabrice Bellard |
1739
07a484280a82
copyright year update of the files i touched and remembered, things look annoyingly unmaintained otherwise
michael
parents:
1660
diff
changeset
|
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> |
11547 | 5 * Copyright (c) 2010 Loren Merritt |
0 | 6 * |
5214 | 7 * alternative bitstream reader & writer by Michael Niedermayer <michaelni@gmx.at> |
8 * | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
9 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
10 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
11 * FFmpeg is free software; you can redistribute it and/or |
429 | 12 * modify it under the terms of the GNU Lesser General Public |
13 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
14 * version 2.1 of the License, or (at your option) any later version. |
0 | 15 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
16 * FFmpeg is distributed in the hope that it will be useful, |
0 | 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
19 * Lesser General Public License for more details. | |
0 | 20 * |
429 | 21 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
22 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 24 */ |
1106 | 25 |
26 /** | |
11644
7dd2a45249a9
Remove explicit filename from Doxygen @file commands.
diego
parents:
11548
diff
changeset
|
27 * @file |
2398
582e635cfa08
common.c -> bitstream.c (and the single non bitstream func -> utils.c)
michael
parents:
2370
diff
changeset
|
28 * bitstream api. |
1106 | 29 */ |
2967 | 30 |
524 | 31 #include "avcodec.h" |
9428 | 32 #include "get_bits.h" |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
9405
diff
changeset
|
33 #include "put_bits.h" |
1037 | 34 |
7146
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
35 const uint8_t ff_log2_run[32]={ |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
36 0, 0, 0, 0, 1, 1, 1, 1, |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
37 2, 2, 2, 2, 3, 3, 3, 3, |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
38 4, 4, 5, 5, 6, 6, 7, 7, |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
39 8, 9,10,11,12,13,14,15 |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
40 }; |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
41 |
0 | 42 void align_put_bits(PutBitContext *s) |
43 { | |
234
5fc0c3af3fe4
alternative bitstream writer (disabled by default, uncomment #define ALT_BISTREAM_WRITER in common.h if u want to try it)
michaelni
parents:
219
diff
changeset
|
44 #ifdef ALT_BITSTREAM_WRITER |
5fc0c3af3fe4
alternative bitstream writer (disabled by default, uncomment #define ALT_BISTREAM_WRITER in common.h if u want to try it)
michaelni
parents:
219
diff
changeset
|
45 put_bits(s,( - s->index) & 7,0); |
5fc0c3af3fe4
alternative bitstream writer (disabled by default, uncomment #define ALT_BISTREAM_WRITER in common.h if u want to try it)
michaelni
parents:
219
diff
changeset
|
46 #else |
238
99a9f903f0e3
optimized the normal bitstream writer, its faster than the alternative one on p3 now ... lets hope its at least not slower on p4 & k7
michaelni
parents:
234
diff
changeset
|
47 put_bits(s,s->bit_left & 7,0); |
234
5fc0c3af3fe4
alternative bitstream writer (disabled by default, uncomment #define ALT_BISTREAM_WRITER in common.h if u want to try it)
michaelni
parents:
219
diff
changeset
|
48 #endif |
0 | 49 } |
50 | |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
51 void ff_put_string(PutBitContext *pb, const char *string, int terminate_string) |
358 | 52 { |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
53 while(*string){ |
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
54 put_bits(pb, 8, *string); |
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
55 string++; |
358 | 56 } |
9405
9fc81340a5a8
Rename the 'put_zero' parameter of ff_put_string() to
stefano
parents:
9218
diff
changeset
|
57 if(terminate_string) |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
58 put_bits(pb, 8, 0); |
358 | 59 } |
60 | |
6325 | 61 void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length) |
5229 | 62 { |
63 int words= length>>4; | |
64 int bits= length&15; | |
65 int i; | |
66 | |
67 if(length==0) return; | |
68 | |
8596
68e959302527
replace all occurrence of ENABLE_ by the corresponding CONFIG_, HAVE_ or ARCH_
aurel
parents:
7146
diff
changeset
|
69 if(CONFIG_SMALL || words < 16 || put_bits_count(pb)&7){ |
9905 | 70 for(i=0; i<words; i++) put_bits(pb, 16, AV_RB16(src + 2*i)); |
5229 | 71 }else{ |
72 for(i=0; put_bits_count(pb)&31; i++) | |
73 put_bits(pb, 8, src[i]); | |
74 flush_put_bits(pb); | |
9431 | 75 memcpy(put_bits_ptr(pb), src+i, 2*words-i); |
5229 | 76 skip_put_bytes(pb, 2*words-i); |
77 } | |
78 | |
9905 | 79 put_bits(pb, bits, AV_RB16(src + 2*words)>>(16-bits)); |
5229 | 80 } |
81 | |
0 | 82 /* VLC decoding */ |
83 | |
84 //#define DEBUG_VLC | |
85 | |
86 #define GET_DATA(v, table, i, wrap, size) \ | |
87 {\ | |
1064 | 88 const uint8_t *ptr = (const uint8_t *)table + i * wrap;\ |
0 | 89 switch(size) {\ |
90 case 1:\ | |
1064 | 91 v = *(const uint8_t *)ptr;\ |
0 | 92 break;\ |
93 case 2:\ | |
1064 | 94 v = *(const uint16_t *)ptr;\ |
0 | 95 break;\ |
96 default:\ | |
1064 | 97 v = *(const uint32_t *)ptr;\ |
0 | 98 break;\ |
99 }\ | |
100 } | |
101 | |
102 | |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
103 static int alloc_table(VLC *vlc, int size, int use_static) |
0 | 104 { |
105 int index; | |
106 index = vlc->table_size; | |
107 vlc->table_size += size; | |
108 if (vlc->table_size > vlc->table_allocated) { | |
10268
05190dd593c9
Remove a piece of code left-over from the removed alloc'd static vlc table code.
reimar
parents:
10263
diff
changeset
|
109 if(use_static) |
6935
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
110 abort(); //cant do anything, init_vlc() is used with too little memory |
0 | 111 vlc->table_allocated += (1 << vlc->bits); |
10269 | 112 vlc->table = av_realloc(vlc->table, |
113 sizeof(VLC_TYPE) * 2 * vlc->table_allocated); | |
520
19a5e2a81e1a
new bitstream reader API (old get_bits() based one is emulated and will still be supported in the future cuz its simpler)
michaelni
parents:
497
diff
changeset
|
114 if (!vlc->table) |
0 | 115 return -1; |
116 } | |
117 return index; | |
118 } | |
119 | |
11547 | 120 static av_always_inline uint32_t bitswap_32(uint32_t x) { |
121 return av_reverse[x&0xFF]<<24 | |
122 | av_reverse[(x>>8)&0xFF]<<16 | |
123 | av_reverse[(x>>16)&0xFF]<<8 | |
124 | av_reverse[x>>24]; | |
125 } | |
126 | |
127 typedef struct { | |
128 uint8_t bits; | |
129 uint16_t symbol; | |
130 /** codeword, with the first bit-to-be-read in the msb | |
131 * (even if intended for a little-endian bitstream reader) */ | |
132 uint32_t code; | |
133 } VLCcode; | |
134 | |
135 static int compare_vlcspec(const void *a, const void *b) | |
0 | 136 { |
11547 | 137 const VLCcode *sa=a, *sb=b; |
138 return (sa->code >> 1) - (sb->code >> 1); | |
139 } | |
140 | |
141 /** | |
142 * Build VLC decoding tables suitable for use with get_vlc(). | |
143 * | |
144 * @param vlc the context to be initted | |
145 * | |
146 * @param table_nb_bits max length of vlc codes to store directly in this table | |
147 * (Longer codes are delegated to subtables.) | |
148 * | |
149 * @param nb_codes number of elements in codes[] | |
150 * | |
151 * @param codes descriptions of the vlc codes | |
152 * These must be ordered such that codes going into the same subtable are contiguous. | |
153 * Sorting by VLCcode.code is sufficient, though not necessary. | |
154 */ | |
155 static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, | |
156 VLCcode *codes, int flags) | |
157 { | |
158 int table_size, table_index, index, code_prefix, symbol, subtable_bits; | |
159 int i, j, k, n, nb, inc; | |
1064 | 160 uint32_t code; |
520
19a5e2a81e1a
new bitstream reader API (old get_bits() based one is emulated and will still be supported in the future cuz its simpler)
michaelni
parents:
497
diff
changeset
|
161 VLC_TYPE (*table)[2]; |
0 | 162 |
163 table_size = 1 << table_nb_bits; | |
10263
fd9dfd5aa5e9
Completely remove INIT_VLC_USE_STATIC, it is deprecated since ages and
reimar
parents:
9905
diff
changeset
|
164 table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); |
0 | 165 #ifdef DEBUG_VLC |
11547 | 166 av_log(NULL,AV_LOG_DEBUG,"new table index=%d size=%d\n", |
167 table_index, table_size); | |
0 | 168 #endif |
169 if (table_index < 0) | |
170 return -1; | |
520
19a5e2a81e1a
new bitstream reader API (old get_bits() based one is emulated and will still be supported in the future cuz its simpler)
michaelni
parents:
497
diff
changeset
|
171 table = &vlc->table[table_index]; |
0 | 172 |
11548 | 173 for (i = 0; i < table_size; i++) { |
520
19a5e2a81e1a
new bitstream reader API (old get_bits() based one is emulated and will still be supported in the future cuz its simpler)
michaelni
parents:
497
diff
changeset
|
174 table[i][1] = 0; //bits |
19a5e2a81e1a
new bitstream reader API (old get_bits() based one is emulated and will still be supported in the future cuz its simpler)
michaelni
parents:
497
diff
changeset
|
175 table[i][0] = -1; //codes |
0 | 176 } |
177 | |
178 /* first pass: map codes and compute auxillary table sizes */ | |
11548 | 179 for (i = 0; i < nb_codes; i++) { |
11547 | 180 n = codes[i].bits; |
181 code = codes[i].code; | |
182 symbol = codes[i].symbol; | |
0 | 183 #if defined(DEBUG_VLC) && 0 |
5013
c7904664624c
printf --> av_log, patch by Denis Fortin, fortin nerim net
diego
parents:
4889
diff
changeset
|
184 av_log(NULL,AV_LOG_DEBUG,"i=%d n=%d code=0x%x\n", i, n, code); |
0 | 185 #endif |
11548 | 186 if (n <= table_nb_bits) { |
187 /* no need to add another table */ | |
188 j = code >> (32 - table_nb_bits); | |
189 nb = 1 << (table_nb_bits - n); | |
190 inc = 1; | |
191 if (flags & INIT_VLC_LE) { | |
192 j = bitswap_32(code); | |
193 inc = 1 << n; | |
194 } | |
195 for (k = 0; k < nb; k++) { | |
0 | 196 #ifdef DEBUG_VLC |
11548 | 197 av_log(NULL, AV_LOG_DEBUG, "%4x: code=%d n=%d\n", |
198 j, i, n); | |
0 | 199 #endif |
11548 | 200 if (table[j][1] /*bits*/ != 0) { |
201 av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); | |
202 return -1; | |
203 } | |
204 table[j][1] = n; //bits | |
205 table[j][0] = symbol; | |
206 j += inc; | |
207 } | |
208 } else { | |
209 /* fill auxiliary table recursively */ | |
210 n -= table_nb_bits; | |
211 code_prefix = code >> (32 - table_nb_bits); | |
212 subtable_bits = n; | |
213 codes[i].bits = n; | |
214 codes[i].code = code << table_nb_bits; | |
215 for (k = i+1; k < nb_codes; k++) { | |
216 n = codes[k].bits - table_nb_bits; | |
217 if (n <= 0) | |
218 break; | |
219 code = codes[k].code; | |
220 if (code >> (32 - table_nb_bits) != code_prefix) | |
221 break; | |
222 codes[k].bits = n; | |
223 codes[k].code = code << table_nb_bits; | |
224 subtable_bits = FFMAX(subtable_bits, n); | |
225 } | |
226 subtable_bits = FFMIN(subtable_bits, table_nb_bits); | |
227 j = (flags & INIT_VLC_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix; | |
228 table[j][1] = -subtable_bits; | |
11233 | 229 #ifdef DEBUG_VLC |
11548 | 230 av_log(NULL,AV_LOG_DEBUG,"%4x: n=%d (subtable)\n", |
231 j, codes[i].bits + table_nb_bits); | |
11233 | 232 #endif |
11548 | 233 index = build_table(vlc, subtable_bits, k-i, codes+i, flags); |
234 if (index < 0) | |
235 return -1; | |
236 /* note: realloc has been done, so reload tables */ | |
237 table = &vlc->table[table_index]; | |
238 table[j][0] = index; //code | |
239 i = k-1; | |
240 } | |
0 | 241 } |
242 return table_index; | |
243 } | |
244 | |
245 | |
24 | 246 /* Build VLC decoding tables suitable for use with get_vlc(). |
247 | |
248 'nb_bits' set thee decoding table size (2^nb_bits) entries. The | |
249 bigger it is, the faster is the decoding. But it should not be too | |
250 big to save memory and L1 cache. '9' is a good compromise. | |
2967 | 251 |
24 | 252 'nb_codes' : number of vlcs codes |
253 | |
254 'bits' : table which gives the size (in bits) of each vlc code. | |
255 | |
256 'codes' : table which gives the bit pattern of of each vlc code. | |
257 | |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
258 'symbols' : table which gives the values to be returned from get_vlc(). |
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
259 |
24 | 260 'xxx_wrap' : give the number of bytes between each entry of the |
261 'bits' or 'codes' tables. | |
262 | |
263 'xxx_size' : gives the number of bytes of each entry of the 'bits' | |
264 or 'codes' tables. | |
265 | |
266 'wrap' and 'size' allows to use any memory configuration and types | |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
267 (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables. |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
268 |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
269 'use_static' should be set to 1 for tables, which should be freed |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
270 with av_free_static(), 0 if free_vlc() will be used. |
24 | 271 */ |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
272 int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, |
0 | 273 const void *bits, int bits_wrap, int bits_size, |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
274 const void *codes, int codes_wrap, int codes_size, |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
275 const void *symbols, int symbols_wrap, int symbols_size, |
4685 | 276 int flags) |
0 | 277 { |
11713 | 278 VLCcode *buf; |
279 int i, j, ret; | |
11547 | 280 |
0 | 281 vlc->bits = nb_bits; |
6935
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
282 if(flags & INIT_VLC_USE_NEW_STATIC){ |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
283 if(vlc->table_size && vlc->table_size == vlc->table_allocated){ |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
284 return 0; |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
285 }else if(vlc->table_size){ |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
286 abort(); // fatal error, we are called on a partially initialized table |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
287 } |
10263
fd9dfd5aa5e9
Completely remove INIT_VLC_USE_STATIC, it is deprecated since ages and
reimar
parents:
9905
diff
changeset
|
288 }else { |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
289 vlc->table = NULL; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
290 vlc->table_allocated = 0; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
291 vlc->table_size = 0; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
292 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
293 |
0 | 294 #ifdef DEBUG_VLC |
5013
c7904664624c
printf --> av_log, patch by Denis Fortin, fortin nerim net
diego
parents:
4889
diff
changeset
|
295 av_log(NULL,AV_LOG_DEBUG,"build table nb_codes=%d\n", nb_codes); |
0 | 296 #endif |
297 | |
11713 | 298 buf = av_malloc((nb_codes+1)*sizeof(VLCcode)); |
299 | |
11547 | 300 assert(symbols_size <= 2 || !symbols); |
301 j = 0; | |
302 #define COPY(condition)\ | |
303 for (i = 0; i < nb_codes; i++) {\ | |
304 GET_DATA(buf[j].bits, bits, i, bits_wrap, bits_size);\ | |
305 if (!(condition))\ | |
306 continue;\ | |
307 GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size);\ | |
308 if (flags & INIT_VLC_LE)\ | |
309 buf[j].code = bitswap_32(buf[j].code);\ | |
310 else\ | |
311 buf[j].code <<= 32 - buf[j].bits;\ | |
312 if (symbols)\ | |
313 GET_DATA(buf[j].symbol, symbols, i, symbols_wrap, symbols_size)\ | |
314 else\ | |
315 buf[j].symbol = i;\ | |
316 j++;\ | |
317 } | |
318 COPY(buf[j].bits > nb_bits); | |
319 // qsort is the slowest part of init_vlc, and could probably be improved or avoided | |
320 qsort(buf, j, sizeof(VLCcode), compare_vlcspec); | |
321 COPY(buf[j].bits && buf[j].bits <= nb_bits); | |
322 nb_codes = j; | |
323 | |
11713 | 324 ret = build_table(vlc, nb_bits, nb_codes, buf, flags); |
325 | |
326 av_free(buf); | |
327 if (ret < 0) { | |
5206 | 328 av_freep(&vlc->table); |
0 | 329 return -1; |
330 } | |
6935
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
331 if((flags & INIT_VLC_USE_NEW_STATIC) && vlc->table_size != vlc->table_allocated) |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
332 av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); |
0 | 333 return 0; |
334 } | |
335 | |
336 | |
337 void free_vlc(VLC *vlc) | |
338 { | |
5206 | 339 av_freep(&vlc->table); |
0 | 340 } |
341 |