| rev |
line source |
|
nengel@2
|
1 /*
|
|
nengel@2
|
2 * exp golomb vlc stuff
|
|
nengel@2
|
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
|
|
nengel@2
|
4 * Copyright (c) 2004 Alex Beregszaszi
|
|
nengel@2
|
5 *
|
|
nengel@2
|
6 * This file is part of FFmpeg.
|
|
nengel@2
|
7 *
|
|
nengel@2
|
8 * FFmpeg is free software; you can redistribute it and/or
|
|
nengel@2
|
9 * modify it under the terms of the GNU Lesser General Public
|
|
nengel@2
|
10 * License as published by the Free Software Foundation; either
|
|
nengel@2
|
11 * version 2.1 of the License, or (at your option) any later version.
|
|
nengel@2
|
12 *
|
|
nengel@2
|
13 * FFmpeg is distributed in the hope that it will be useful,
|
|
nengel@2
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
nengel@2
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
nengel@2
|
16 * Lesser General Public License for more details.
|
|
nengel@2
|
17 *
|
|
nengel@2
|
18 * You should have received a copy of the GNU Lesser General Public
|
|
nengel@2
|
19 * License along with FFmpeg; if not, write to the Free Software
|
|
nengel@2
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
nengel@2
|
21 */
|
|
nengel@2
|
22
|
|
nengel@2
|
23 /**
|
|
nengel@2
|
24 * @file
|
|
nengel@2
|
25 * @brief
|
|
nengel@2
|
26 * exp golomb vlc stuff
|
|
nengel@2
|
27 * @author Michael Niedermayer <michaelni@gmx.at> and Alex Beregszaszi
|
|
nengel@2
|
28 */
|
|
nengel@2
|
29
|
|
nengel@2
|
30 #ifndef AVCODEC_GOLOMB_H
|
|
nengel@2
|
31 #define AVCODEC_GOLOMB_H
|
|
nengel@2
|
32
|
|
nengel@2
|
33 #include <stdint.h>
|
|
nengel@2
|
34 #include "get_bits.h"
|
|
nengel@2
|
35
|
|
nengel@2
|
36 #define INVALID_VLC 0x80000000
|
|
nengel@2
|
37
|
|
nengel@2
|
38 extern const uint8_t ff_golomb_vlc_len[512];
|
|
nengel@2
|
39 extern const uint8_t ff_ue_golomb_vlc_code[512];
|
|
nengel@2
|
40 extern const int8_t ff_se_golomb_vlc_code[512];
|
|
nengel@2
|
41 extern const uint8_t ff_ue_golomb_len[256];
|
|
nengel@2
|
42
|
|
nengel@2
|
43 extern const uint8_t ff_interleaved_golomb_vlc_len[256];
|
|
nengel@2
|
44 extern const uint8_t ff_interleaved_ue_golomb_vlc_code[256];
|
|
nengel@2
|
45 extern const int8_t ff_interleaved_se_golomb_vlc_code[256];
|
|
nengel@2
|
46 extern const uint8_t ff_interleaved_dirac_golomb_vlc_code[256];
|
|
nengel@2
|
47
|
|
nengel@2
|
48
|
|
nengel@2
|
49 /**
|
|
nengel@2
|
50 * read unsigned exp golomb code.
|
|
nengel@2
|
51 */
|
|
nengel@2
|
52 static inline int get_ue_golomb(GetBitContext *gb){
|
|
nengel@2
|
53 unsigned int buf;
|
|
nengel@2
|
54 int log;
|
|
nengel@2
|
55
|
|
nengel@2
|
56 OPEN_READER(re, gb);
|
|
nengel@2
|
57 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
58 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
59
|
|
nengel@2
|
60 if(buf >= (1<<27)){
|
|
nengel@2
|
61 buf >>= 32 - 9;
|
|
nengel@2
|
62 LAST_SKIP_BITS(re, gb, ff_golomb_vlc_len[buf]);
|
|
nengel@2
|
63 CLOSE_READER(re, gb);
|
|
nengel@2
|
64
|
|
nengel@2
|
65 return ff_ue_golomb_vlc_code[buf];
|
|
nengel@2
|
66 }else{
|
|
nengel@2
|
67 log= 2*av_log2_c(buf) - 31;
|
|
nengel@2
|
68 buf>>= log;
|
|
nengel@2
|
69 buf--;
|
|
nengel@2
|
70 LAST_SKIP_BITS(re, gb, 32 - log);
|
|
nengel@2
|
71 CLOSE_READER(re, gb);
|
|
nengel@2
|
72
|
|
nengel@2
|
73 return buf;
|
|
nengel@2
|
74 }
|
|
nengel@2
|
75 }
|
|
nengel@2
|
76
|
|
nengel@2
|
77 /**
|
|
nengel@2
|
78 * read unsigned exp golomb code, constraint to a max of 31.
|
|
nengel@2
|
79 * the return value is undefined if the stored value exceeds 31.
|
|
nengel@2
|
80 */
|
|
nengel@2
|
81 static inline int get_ue_golomb_31(GetBitContext *gb){
|
|
nengel@2
|
82 unsigned int buf;
|
|
nengel@2
|
83
|
|
nengel@2
|
84 OPEN_READER(re, gb);
|
|
nengel@2
|
85 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
86 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
87
|
|
nengel@2
|
88 buf >>= 32 - 9;
|
|
nengel@2
|
89 LAST_SKIP_BITS(re, gb, ff_golomb_vlc_len[buf]);
|
|
nengel@2
|
90 CLOSE_READER(re, gb);
|
|
nengel@2
|
91
|
|
nengel@2
|
92 return ff_ue_golomb_vlc_code[buf];
|
|
nengel@2
|
93 }
|
|
nengel@2
|
94
|
|
nengel@2
|
95 static inline int svq3_get_ue_golomb(GetBitContext *gb){
|
|
nengel@2
|
96 uint32_t buf;
|
|
nengel@2
|
97
|
|
nengel@2
|
98 OPEN_READER(re, gb);
|
|
nengel@2
|
99 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
100 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
101
|
|
nengel@2
|
102 if(buf&0xAA800000){
|
|
nengel@2
|
103 buf >>= 32 - 8;
|
|
nengel@2
|
104 LAST_SKIP_BITS(re, gb, ff_interleaved_golomb_vlc_len[buf]);
|
|
nengel@2
|
105 CLOSE_READER(re, gb);
|
|
nengel@2
|
106
|
|
nengel@2
|
107 return ff_interleaved_ue_golomb_vlc_code[buf];
|
|
nengel@2
|
108 }else{
|
|
nengel@2
|
109 int ret = 1;
|
|
nengel@2
|
110
|
|
nengel@2
|
111 while (1) {
|
|
nengel@2
|
112 buf >>= 32 - 8;
|
|
nengel@2
|
113 LAST_SKIP_BITS(re, gb, FFMIN(ff_interleaved_golomb_vlc_len[buf], 8));
|
|
nengel@2
|
114
|
|
nengel@2
|
115 if (ff_interleaved_golomb_vlc_len[buf] != 9){
|
|
nengel@2
|
116 ret <<= (ff_interleaved_golomb_vlc_len[buf] - 1) >> 1;
|
|
nengel@2
|
117 ret |= ff_interleaved_dirac_golomb_vlc_code[buf];
|
|
nengel@2
|
118 break;
|
|
nengel@2
|
119 }
|
|
nengel@2
|
120 ret = (ret << 4) | ff_interleaved_dirac_golomb_vlc_code[buf];
|
|
nengel@2
|
121 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
122 buf = GET_CACHE(re, gb);
|
|
nengel@2
|
123 }
|
|
nengel@2
|
124
|
|
nengel@2
|
125 CLOSE_READER(re, gb);
|
|
nengel@2
|
126 return ret - 1;
|
|
nengel@2
|
127 }
|
|
nengel@2
|
128 }
|
|
nengel@2
|
129
|
|
nengel@2
|
130 /**
|
|
nengel@2
|
131 * read unsigned truncated exp golomb code.
|
|
nengel@2
|
132 */
|
|
nengel@2
|
133 static inline int get_te0_golomb(GetBitContext *gb, int range){
|
|
nengel@2
|
134 assert(range >= 1);
|
|
nengel@2
|
135
|
|
nengel@2
|
136 if(range==1) return 0;
|
|
nengel@2
|
137 else if(range==2) return get_bits1(gb)^1;
|
|
nengel@2
|
138 else return get_ue_golomb(gb);
|
|
nengel@2
|
139 }
|
|
nengel@2
|
140
|
|
nengel@2
|
141 /**
|
|
nengel@2
|
142 * read unsigned truncated exp golomb code.
|
|
nengel@2
|
143 */
|
|
nengel@2
|
144 static inline int get_te_golomb(GetBitContext *gb, int range){
|
|
nengel@2
|
145 assert(range >= 1);
|
|
nengel@2
|
146
|
|
nengel@2
|
147 if(range==2) return get_bits1(gb)^1;
|
|
nengel@2
|
148 else return get_ue_golomb(gb);
|
|
nengel@2
|
149 }
|
|
nengel@2
|
150
|
|
nengel@2
|
151
|
|
nengel@2
|
152 /**
|
|
nengel@2
|
153 * read signed exp golomb code.
|
|
nengel@2
|
154 */
|
|
nengel@2
|
155 static inline int get_se_golomb(GetBitContext *gb){
|
|
nengel@2
|
156 unsigned int buf;
|
|
nengel@2
|
157 int log;
|
|
nengel@2
|
158
|
|
nengel@2
|
159 OPEN_READER(re, gb);
|
|
nengel@2
|
160 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
161 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
162
|
|
nengel@2
|
163 if(buf >= (1<<27)){
|
|
nengel@2
|
164 buf >>= 32 - 9;
|
|
nengel@2
|
165 LAST_SKIP_BITS(re, gb, ff_golomb_vlc_len[buf]);
|
|
nengel@2
|
166 CLOSE_READER(re, gb);
|
|
nengel@2
|
167
|
|
nengel@2
|
168 return ff_se_golomb_vlc_code[buf];
|
|
nengel@2
|
169 }else{
|
|
nengel@2
|
170 log= 2*av_log2_c(buf) - 31;
|
|
nengel@2
|
171 buf>>= log;
|
|
nengel@2
|
172
|
|
nengel@2
|
173 LAST_SKIP_BITS(re, gb, 32 - log);
|
|
nengel@2
|
174 CLOSE_READER(re, gb);
|
|
nengel@2
|
175
|
|
nengel@2
|
176 if(buf&1) buf= -(buf>>1);
|
|
nengel@2
|
177 else buf= (buf>>1);
|
|
nengel@2
|
178
|
|
nengel@2
|
179 return buf;
|
|
nengel@2
|
180 }
|
|
nengel@2
|
181 }
|
|
nengel@2
|
182
|
|
nengel@2
|
183 static inline int svq3_get_se_golomb(GetBitContext *gb){
|
|
nengel@2
|
184 unsigned int buf;
|
|
nengel@2
|
185 int log;
|
|
nengel@2
|
186
|
|
nengel@2
|
187 OPEN_READER(re, gb);
|
|
nengel@2
|
188 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
189 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
190
|
|
nengel@2
|
191 if(buf&0xAA800000){
|
|
nengel@2
|
192 buf >>= 32 - 8;
|
|
nengel@2
|
193 LAST_SKIP_BITS(re, gb, ff_interleaved_golomb_vlc_len[buf]);
|
|
nengel@2
|
194 CLOSE_READER(re, gb);
|
|
nengel@2
|
195
|
|
nengel@2
|
196 return ff_interleaved_se_golomb_vlc_code[buf];
|
|
nengel@2
|
197 }else{
|
|
nengel@2
|
198 LAST_SKIP_BITS(re, gb, 8);
|
|
nengel@2
|
199 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
200 buf |= 1 | (GET_CACHE(re, gb) >> 8);
|
|
nengel@2
|
201
|
|
nengel@2
|
202 if((buf & 0xAAAAAAAA) == 0)
|
|
nengel@2
|
203 return INVALID_VLC;
|
|
nengel@2
|
204
|
|
nengel@2
|
205 for(log=31; (buf & 0x80000000) == 0; log--){
|
|
nengel@2
|
206 buf = (buf << 2) - ((buf << log) >> (log - 1)) + (buf >> 30);
|
|
nengel@2
|
207 }
|
|
nengel@2
|
208
|
|
nengel@2
|
209 LAST_SKIP_BITS(re, gb, 63 - 2*log - 8);
|
|
nengel@2
|
210 CLOSE_READER(re, gb);
|
|
nengel@2
|
211
|
|
nengel@2
|
212 return (signed) (((((buf << log) >> log) - 1) ^ -(buf & 0x1)) + 1) >> 1;
|
|
nengel@2
|
213 }
|
|
nengel@2
|
214 }
|
|
nengel@2
|
215
|
|
nengel@2
|
216 static inline int dirac_get_se_golomb(GetBitContext *gb){
|
|
nengel@2
|
217 uint32_t buf;
|
|
nengel@2
|
218 uint32_t ret;
|
|
nengel@2
|
219
|
|
nengel@2
|
220 ret = svq3_get_ue_golomb(gb);
|
|
nengel@2
|
221
|
|
nengel@2
|
222 if (ret) {
|
|
nengel@2
|
223 OPEN_READER(re, gb);
|
|
nengel@2
|
224 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
225 buf = SHOW_SBITS(re, gb, 1);
|
|
nengel@2
|
226 LAST_SKIP_BITS(re, gb, 1);
|
|
nengel@2
|
227 ret = (ret ^ buf) - buf;
|
|
nengel@2
|
228 CLOSE_READER(re, gb);
|
|
nengel@2
|
229 }
|
|
nengel@2
|
230
|
|
nengel@2
|
231 return ret;
|
|
nengel@2
|
232 }
|
|
nengel@2
|
233
|
|
nengel@2
|
234 /**
|
|
nengel@2
|
235 * read unsigned golomb rice code (ffv1).
|
|
nengel@2
|
236 */
|
|
nengel@2
|
237 static inline int get_ur_golomb(GetBitContext *gb, int k, int limit, int esc_len){
|
|
nengel@2
|
238 unsigned int buf;
|
|
nengel@2
|
239 int log;
|
|
nengel@2
|
240
|
|
nengel@2
|
241 OPEN_READER(re, gb);
|
|
nengel@2
|
242 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
243 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
244
|
|
nengel@2
|
245 log= av_log2_c(buf);
|
|
nengel@2
|
246
|
|
nengel@2
|
247 if(log > 31-limit){
|
|
nengel@2
|
248 buf >>= log - k;
|
|
nengel@2
|
249 buf += (30-log)<<k;
|
|
nengel@2
|
250 LAST_SKIP_BITS(re, gb, 32 + k - log);
|
|
nengel@2
|
251 CLOSE_READER(re, gb);
|
|
nengel@2
|
252
|
|
nengel@2
|
253 return buf;
|
|
nengel@2
|
254 }else{
|
|
nengel@2
|
255 LAST_SKIP_BITS(re, gb, limit);
|
|
nengel@2
|
256 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
257
|
|
nengel@2
|
258 buf = SHOW_UBITS(re, gb, esc_len);
|
|
nengel@2
|
259
|
|
nengel@2
|
260 LAST_SKIP_BITS(re, gb, esc_len);
|
|
nengel@2
|
261 CLOSE_READER(re, gb);
|
|
nengel@2
|
262
|
|
nengel@2
|
263 return buf + limit - 1;
|
|
nengel@2
|
264 }
|
|
nengel@2
|
265 }
|
|
nengel@2
|
266
|
|
nengel@2
|
267 /**
|
|
nengel@2
|
268 * read unsigned golomb rice code (jpegls).
|
|
nengel@2
|
269 */
|
|
nengel@2
|
270 static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, int esc_len){
|
|
nengel@2
|
271 unsigned int buf;
|
|
nengel@2
|
272 int log;
|
|
nengel@2
|
273
|
|
nengel@2
|
274 OPEN_READER(re, gb);
|
|
nengel@2
|
275 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
276 buf=GET_CACHE(re, gb);
|
|
nengel@2
|
277
|
|
nengel@2
|
278 log= av_log2_c(buf);
|
|
nengel@2
|
279
|
|
nengel@2
|
280 if(log - k >= 32-MIN_CACHE_BITS+(MIN_CACHE_BITS==32) && 32-log < limit){
|
|
nengel@2
|
281 buf >>= log - k;
|
|
nengel@2
|
282 buf += (30-log)<<k;
|
|
nengel@2
|
283 LAST_SKIP_BITS(re, gb, 32 + k - log);
|
|
nengel@2
|
284 CLOSE_READER(re, gb);
|
|
nengel@2
|
285
|
|
nengel@2
|
286 return buf;
|
|
nengel@2
|
287 }else{
|
|
nengel@2
|
288 int i;
|
|
nengel@2
|
289 for(i=0; SHOW_UBITS(re, gb, 1) == 0; i++){
|
|
nengel@2
|
290 LAST_SKIP_BITS(re, gb, 1);
|
|
nengel@2
|
291 UPDATE_CACHE(re, gb);
|
|
nengel@2
|
292 }
|
|
nengel@2
|
293 SKIP_BITS(re, gb, 1);
|
|
nengel@2
|
294
|
|
nengel@2
|
295 if(i < limit - 1){
|
|
nengel@2
|
296 if(k){
|
|
nengel@2
|
297 buf = SHOW_UBITS(re, gb, k);
|
|
nengel@2
|
298 LAST_SKIP_BITS(re, gb, k);
|
|
nengel@2
|
299 }else{
|
|
nengel@2
|
300 buf=0;
|
|
nengel@2
|
301 }
|
|
nengel@2
|
302
|
|
nengel@2
|
303 CLOSE_READER(re, gb);
|
|
nengel@2
|
304 return buf + (i<<k);
|
|
nengel@2
|
305 }else if(i == limit - 1){
|
|
nengel@2
|
306 buf = SHOW_UBITS(re, gb, esc_len);
|
|
nengel@2
|
307 LAST_SKIP_BITS(re, gb, esc_len);
|
|
nengel@2
|
308 CLOSE_READER(re, gb);
|
|
nengel@2
|
309
|
|
nengel@2
|
310 return buf + 1;
|
|
nengel@2
|
311 }else
|
|
nengel@2
|
312 return -1;
|
|
nengel@2
|
313 }
|
|
nengel@2
|
314 }
|
|
nengel@2
|
315
|
|
nengel@2
|
316 /**
|
|
nengel@2
|
317 * read signed golomb rice code (ffv1).
|
|
nengel@2
|
318 */
|
|
nengel@2
|
319 static inline int get_sr_golomb(GetBitContext *gb, int k, int limit, int esc_len){
|
|
nengel@2
|
320 int v= get_ur_golomb(gb, k, limit, esc_len);
|
|
nengel@2
|
321
|
|
nengel@2
|
322 v++;
|
|
nengel@2
|
323 if (v&1) return v>>1;
|
|
nengel@2
|
324 else return -(v>>1);
|
|
nengel@2
|
325
|
|
nengel@2
|
326 // return (v>>1) ^ -(v&1);
|
|
nengel@2
|
327 }
|
|
nengel@2
|
328
|
|
nengel@2
|
329 /**
|
|
nengel@2
|
330 * read signed golomb rice code (flac).
|
|
nengel@2
|
331 */
|
|
nengel@2
|
332 static inline int get_sr_golomb_flac(GetBitContext *gb, int k, int limit, int esc_len){
|
|
nengel@2
|
333 int v= get_ur_golomb_jpegls(gb, k, limit, esc_len);
|
|
nengel@2
|
334 return (v>>1) ^ -(v&1);
|
|
nengel@2
|
335 }
|
|
nengel@2
|
336
|
|
nengel@2
|
337 /**
|
|
nengel@2
|
338 * read unsigned golomb rice code (shorten).
|
|
nengel@2
|
339 */
|
|
nengel@2
|
340 static inline unsigned int get_ur_golomb_shorten(GetBitContext *gb, int k){
|
|
nengel@2
|
341 return get_ur_golomb_jpegls(gb, k, INT_MAX, 0);
|
|
nengel@2
|
342 }
|
|
nengel@2
|
343
|
|
nengel@2
|
344 /**
|
|
nengel@2
|
345 * read signed golomb rice code (shorten).
|
|
nengel@2
|
346 */
|
|
nengel@2
|
347 static inline int get_sr_golomb_shorten(GetBitContext* gb, int k)
|
|
nengel@2
|
348 {
|
|
nengel@2
|
349 int uvar = get_ur_golomb_jpegls(gb, k + 1, INT_MAX, 0);
|
|
nengel@2
|
350 if (uvar & 1)
|
|
nengel@2
|
351 return ~(uvar >> 1);
|
|
nengel@2
|
352 else
|
|
nengel@2
|
353 return uvar >> 1;
|
|
nengel@2
|
354 }
|
|
nengel@2
|
355
|
|
nengel@2
|
356
|
|
nengel@2
|
357
|
|
nengel@2
|
358 #ifdef TRACE
|
|
nengel@2
|
359
|
|
nengel@2
|
360 static inline int get_ue(GetBitContext *s, char *file, const char *func, int line){
|
|
nengel@2
|
361 int show= show_bits(s, 24);
|
|
nengel@2
|
362 int pos= get_bits_count(s);
|
|
nengel@2
|
363 int i= get_ue_golomb(s);
|
|
nengel@2
|
364 int len= get_bits_count(s) - pos;
|
|
nengel@2
|
365 int bits= show>>(24-len);
|
|
nengel@2
|
366
|
|
nengel@2
|
367 print_bin(bits, len);
|
|
nengel@2
|
368
|
|
nengel@2
|
369 av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d ue @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line);
|
|
nengel@2
|
370
|
|
nengel@2
|
371 return i;
|
|
nengel@2
|
372 }
|
|
nengel@2
|
373
|
|
nengel@2
|
374 static inline int get_se(GetBitContext *s, char *file, const char *func, int line){
|
|
nengel@2
|
375 int show= show_bits(s, 24);
|
|
nengel@2
|
376 int pos= get_bits_count(s);
|
|
nengel@2
|
377 int i= get_se_golomb(s);
|
|
nengel@2
|
378 int len= get_bits_count(s) - pos;
|
|
nengel@2
|
379 int bits= show>>(24-len);
|
|
nengel@2
|
380
|
|
nengel@2
|
381 print_bin(bits, len);
|
|
nengel@2
|
382
|
|
nengel@2
|
383 av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d se @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line);
|
|
nengel@2
|
384
|
|
nengel@2
|
385 return i;
|
|
nengel@2
|
386 }
|
|
nengel@2
|
387
|
|
nengel@2
|
388 static inline int get_te(GetBitContext *s, int r, char *file, const char *func, int line){
|
|
nengel@2
|
389 int show= show_bits(s, 24);
|
|
nengel@2
|
390 int pos= get_bits_count(s);
|
|
nengel@2
|
391 int i= get_te0_golomb(s, r);
|
|
nengel@2
|
392 int len= get_bits_count(s) - pos;
|
|
nengel@2
|
393 int bits= show>>(24-len);
|
|
nengel@2
|
394
|
|
nengel@2
|
395 print_bin(bits, len);
|
|
nengel@2
|
396
|
|
nengel@2
|
397 av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d te @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line);
|
|
nengel@2
|
398
|
|
nengel@2
|
399 return i;
|
|
nengel@2
|
400 }
|
|
nengel@2
|
401
|
|
nengel@2
|
402 #define get_ue_golomb(a) get_ue(a, __FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
nengel@2
|
403 #define get_se_golomb(a) get_se(a, __FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
nengel@2
|
404 #define get_te_golomb(a, r) get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
nengel@2
|
405 #define get_te0_golomb(a, r) get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
nengel@2
|
406
|
|
nengel@2
|
407 #endif
|
|
nengel@2
|
408
|
|
nengel@2
|
409
|
|
nengel@2
|
410 #endif /* AVCODEC_GOLOMB_H */
|