Mercurial > libavcodec.hg
annotate bitstream.c @ 11352:6e0af2cfdcfe libavcodec
Do MC and IDCT in coding (hilbert) order
This increases the slice size to 64 pixels, due to having to decode an
entire chroma superblock row per slice.
This can be up to 6% slower depending on clip and CPU, but is necessary
for future optimizations that gain significantly more than was lost.
author | conrad |
---|---|
date | Wed, 03 Mar 2010 23:27:40 +0000 |
parents | 2d49996fe7d1 |
children | aba20ba60384 |
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> |
0 | 5 * |
5214 | 6 * alternative bitstream reader & writer by Michael Niedermayer <michaelni@gmx.at> |
7 * | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
8 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
9 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
10 * FFmpeg is free software; you can redistribute it and/or |
429 | 11 * modify it under the terms of the GNU Lesser General Public |
12 * 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
|
13 * version 2.1 of the License, or (at your option) any later version. |
0 | 14 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3648
diff
changeset
|
15 * FFmpeg is distributed in the hope that it will be useful, |
0 | 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
18 * Lesser General Public License for more details. | |
0 | 19 * |
429 | 20 * 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
|
21 * 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
|
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 23 */ |
1106 | 24 |
25 /** | |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8629
diff
changeset
|
26 * @file libavcodec/bitstream.c |
2398
582e635cfa08
common.c -> bitstream.c (and the single non bitstream func -> utils.c)
michael
parents:
2370
diff
changeset
|
27 * bitstream api. |
1106 | 28 */ |
2967 | 29 |
524 | 30 #include "avcodec.h" |
9428 | 31 #include "get_bits.h" |
9411
4cb7c65fc775
Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents:
9405
diff
changeset
|
32 #include "put_bits.h" |
1037 | 33 |
7146
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
34 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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 }; |
d3a1ac3e227b
move ff_log2_run to bitstream.c and reuse in ffv1.c
stefang
parents:
6945
diff
changeset
|
40 |
0 | 41 void align_put_bits(PutBitContext *s) |
42 { | |
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
|
43 #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
|
44 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
|
45 #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
|
46 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
|
47 #endif |
0 | 48 } |
49 | |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
50 void ff_put_string(PutBitContext *pb, const char *string, int terminate_string) |
358 | 51 { |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
52 while(*string){ |
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
53 put_bits(pb, 8, *string); |
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
54 string++; |
358 | 55 } |
9405
9fc81340a5a8
Rename the 'put_zero' parameter of ff_put_string() to
stefano
parents:
9218
diff
changeset
|
56 if(terminate_string) |
10599
f2a8cba717b0
Use more consistent / meaningful parameter names for the
stefano
parents:
10270
diff
changeset
|
57 put_bits(pb, 8, 0); |
358 | 58 } |
59 | |
6325 | 60 void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length) |
5229 | 61 { |
62 int words= length>>4; | |
63 int bits= length&15; | |
64 int i; | |
65 | |
66 if(length==0) return; | |
67 | |
8596
68e959302527
replace all occurrence of ENABLE_ by the corresponding CONFIG_, HAVE_ or ARCH_
aurel
parents:
7146
diff
changeset
|
68 if(CONFIG_SMALL || words < 16 || put_bits_count(pb)&7){ |
9905 | 69 for(i=0; i<words; i++) put_bits(pb, 16, AV_RB16(src + 2*i)); |
5229 | 70 }else{ |
71 for(i=0; put_bits_count(pb)&31; i++) | |
72 put_bits(pb, 8, src[i]); | |
73 flush_put_bits(pb); | |
9431 | 74 memcpy(put_bits_ptr(pb), src+i, 2*words-i); |
5229 | 75 skip_put_bytes(pb, 2*words-i); |
76 } | |
77 | |
9905 | 78 put_bits(pb, bits, AV_RB16(src + 2*words)>>(16-bits)); |
5229 | 79 } |
80 | |
0 | 81 /* VLC decoding */ |
82 | |
83 //#define DEBUG_VLC | |
84 | |
85 #define GET_DATA(v, table, i, wrap, size) \ | |
86 {\ | |
1064 | 87 const uint8_t *ptr = (const uint8_t *)table + i * wrap;\ |
0 | 88 switch(size) {\ |
89 case 1:\ | |
1064 | 90 v = *(const uint8_t *)ptr;\ |
0 | 91 break;\ |
92 case 2:\ | |
1064 | 93 v = *(const uint16_t *)ptr;\ |
0 | 94 break;\ |
95 default:\ | |
1064 | 96 v = *(const uint32_t *)ptr;\ |
0 | 97 break;\ |
98 }\ | |
99 } | |
100 | |
101 | |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
102 static int alloc_table(VLC *vlc, int size, int use_static) |
0 | 103 { |
104 int index; | |
105 index = vlc->table_size; | |
106 vlc->table_size += size; | |
107 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
|
108 if(use_static) |
6935
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
109 abort(); //cant do anything, init_vlc() is used with too little memory |
0 | 110 vlc->table_allocated += (1 << vlc->bits); |
10269 | 111 vlc->table = av_realloc(vlc->table, |
112 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
|
113 if (!vlc->table) |
0 | 114 return -1; |
115 } | |
116 return index; | |
117 } | |
118 | |
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
|
119 static int build_table(VLC *vlc, int table_nb_bits, |
0 | 120 int nb_codes, |
121 const void *bits, int bits_wrap, int bits_size, | |
122 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
|
123 const void *symbols, int symbols_wrap, int symbols_size, |
2663
b33be8b00488
LE bitstream reader based upon a patch by (Balatoni Denes <dbalatoni programozo hu)
michael
parents:
2398
diff
changeset
|
124 uint32_t code_prefix, int n_prefix, int flags) |
0 | 125 { |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
126 int i, j, k, n, table_size, table_index, nb, n1, index, code_prefix2, symbol; |
1064 | 127 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
|
128 VLC_TYPE (*table)[2]; |
0 | 129 |
130 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
|
131 table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); |
0 | 132 #ifdef DEBUG_VLC |
5013
c7904664624c
printf --> av_log, patch by Denis Fortin, fortin nerim net
diego
parents:
4889
diff
changeset
|
133 av_log(NULL,AV_LOG_DEBUG,"new table index=%d size=%d code_prefix=%x n=%d\n", |
0 | 134 table_index, table_size, code_prefix, n_prefix); |
135 #endif | |
136 if (table_index < 0) | |
137 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
|
138 table = &vlc->table[table_index]; |
0 | 139 |
140 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
|
141 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
|
142 table[i][0] = -1; //codes |
0 | 143 } |
144 | |
145 /* first pass: map codes and compute auxillary table sizes */ | |
146 for(i=0;i<nb_codes;i++) { | |
147 GET_DATA(n, bits, i, bits_wrap, bits_size); | |
148 GET_DATA(code, codes, i, codes_wrap, codes_size); | |
149 /* we accept tables with holes */ | |
150 if (n <= 0) | |
151 continue; | |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
152 if (!symbols) |
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
153 symbol = i; |
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
154 else |
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
155 GET_DATA(symbol, symbols, i, symbols_wrap, symbols_size); |
0 | 156 #if defined(DEBUG_VLC) && 0 |
5013
c7904664624c
printf --> av_log, patch by Denis Fortin, fortin nerim net
diego
parents:
4889
diff
changeset
|
157 av_log(NULL,AV_LOG_DEBUG,"i=%d n=%d code=0x%x\n", i, n, code); |
0 | 158 #endif |
159 /* if code matches the prefix, it is in the table */ | |
160 n -= n_prefix; | |
11232 | 161 if (n > 0) { |
11233 | 162 if(flags & INIT_VLC_LE) |
163 code_prefix2= code & (n_prefix>=32 ? 0xffffffff : (1 << n_prefix)-1); | |
164 else | |
165 code_prefix2= code >> n; | |
166 if (code_prefix2 == code_prefix) { | |
167 if (n <= table_nb_bits) { | |
168 /* no need to add another table */ | |
169 j = (code << (table_nb_bits - n)) & (table_size - 1); | |
170 nb = 1 << (table_nb_bits - n); | |
171 for(k=0;k<nb;k++) { | |
172 if(flags & INIT_VLC_LE) | |
173 j = (code >> n_prefix) + (k<<n); | |
0 | 174 #ifdef DEBUG_VLC |
11233 | 175 av_log(NULL, AV_LOG_DEBUG, "%4x: code=%d n=%d\n", |
176 j, i, n); | |
0 | 177 #endif |
11233 | 178 if (table[j][1] /*bits*/ != 0) { |
179 av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); | |
180 return -1; | |
181 } | |
182 table[j][1] = n; //bits | |
183 table[j][0] = symbol; | |
184 j++; | |
0 | 185 } |
11233 | 186 } else { |
187 n -= table_nb_bits; | |
188 j = (code >> ((flags & INIT_VLC_LE) ? n_prefix : n)) & ((1 << table_nb_bits) - 1); | |
189 #ifdef DEBUG_VLC | |
190 av_log(NULL,AV_LOG_DEBUG,"%4x: n=%d (subtable)\n", | |
191 j, n); | |
192 #endif | |
193 /* compute table size */ | |
194 n1 = -table[j][1]; //bits | |
195 if (n > n1) | |
196 n1 = n; | |
197 table[j][1] = -n1; //bits | |
0 | 198 } |
199 } | |
200 } | |
201 } | |
202 | |
203 /* second pass : fill auxillary tables recursively */ | |
204 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
|
205 n = table[i][1]; //bits |
0 | 206 if (n < 0) { |
207 n = -n; | |
208 if (n > table_nb_bits) { | |
209 n = table_nb_bits; | |
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
|
210 table[i][1] = -n; //bits |
0 | 211 } |
212 index = build_table(vlc, n, nb_codes, | |
213 bits, bits_wrap, bits_size, | |
214 codes, codes_wrap, 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
|
215 symbols, symbols_wrap, symbols_size, |
2663
b33be8b00488
LE bitstream reader based upon a patch by (Balatoni Denes <dbalatoni programozo hu)
michael
parents:
2398
diff
changeset
|
216 (flags & INIT_VLC_LE) ? (code_prefix | (i << n_prefix)) : ((code_prefix << table_nb_bits) | i), |
b33be8b00488
LE bitstream reader based upon a patch by (Balatoni Denes <dbalatoni programozo hu)
michael
parents:
2398
diff
changeset
|
217 n_prefix + table_nb_bits, flags); |
0 | 218 if (index < 0) |
219 return -1; | |
220 /* note: realloc has been done, so reload tables */ | |
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
|
221 table = &vlc->table[table_index]; |
535 | 222 table[i][0] = index; //code |
0 | 223 } |
224 } | |
225 return table_index; | |
226 } | |
227 | |
228 | |
24 | 229 /* Build VLC decoding tables suitable for use with get_vlc(). |
230 | |
231 'nb_bits' set thee decoding table size (2^nb_bits) entries. The | |
232 bigger it is, the faster is the decoding. But it should not be too | |
233 big to save memory and L1 cache. '9' is a good compromise. | |
2967 | 234 |
24 | 235 'nb_codes' : number of vlcs codes |
236 | |
237 'bits' : table which gives the size (in bits) of each vlc code. | |
238 | |
239 'codes' : table which gives the bit pattern of of each vlc code. | |
240 | |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
241 '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
|
242 |
24 | 243 'xxx_wrap' : give the number of bytes between each entry of the |
244 'bits' or 'codes' tables. | |
245 | |
246 'xxx_size' : gives the number of bytes of each entry of the 'bits' | |
247 or 'codes' tables. | |
248 | |
249 '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
|
250 (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
|
251 |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
252 '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
|
253 with av_free_static(), 0 if free_vlc() will be used. |
24 | 254 */ |
5071
0d503c12092b
add init_vlc_sparse(). faster than init_vlc() if there are lots of holes in the tables.
lorenm
parents:
5013
diff
changeset
|
255 int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, |
0 | 256 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
|
257 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
|
258 const void *symbols, int symbols_wrap, int symbols_size, |
4685 | 259 int flags) |
0 | 260 { |
261 vlc->bits = nb_bits; | |
6935
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
262 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
|
263 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
|
264 return 0; |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
265 }else if(vlc->table_size){ |
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
266 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
|
267 } |
10263
fd9dfd5aa5e9
Completely remove INIT_VLC_USE_STATIC, it is deprecated since ages and
reimar
parents:
9905
diff
changeset
|
268 }else { |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
269 vlc->table = NULL; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
270 vlc->table_allocated = 0; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
271 vlc->table_size = 0; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
272 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2281
diff
changeset
|
273 |
0 | 274 #ifdef DEBUG_VLC |
5013
c7904664624c
printf --> av_log, patch by Denis Fortin, fortin nerim net
diego
parents:
4889
diff
changeset
|
275 av_log(NULL,AV_LOG_DEBUG,"build table nb_codes=%d\n", nb_codes); |
0 | 276 #endif |
277 | |
278 if (build_table(vlc, nb_bits, nb_codes, | |
279 bits, bits_wrap, bits_size, | |
280 codes, codes_wrap, 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
|
281 symbols, symbols_wrap, symbols_size, |
4685 | 282 0, 0, flags) < 0) { |
5206 | 283 av_freep(&vlc->table); |
0 | 284 return -1; |
285 } | |
6935
24e01f7cc819
Make init_vlc* support proper static tables instead of this broken beyond
michael
parents:
6519
diff
changeset
|
286 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
|
287 av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); |
0 | 288 return 0; |
289 } | |
290 | |
291 | |
292 void free_vlc(VLC *vlc) | |
293 { | |
5206 | 294 av_freep(&vlc->table); |
0 | 295 } |
296 |