Mercurial > libavcodec.hg
comparison golomb.h @ 2215:2a767157935e libavcodec
new signed golomb routines
author | alex |
---|---|
date | Wed, 08 Sep 2004 17:59:22 +0000 |
parents | a4d3699c6636 |
children | 21947e176d4d |
comparison
equal
deleted
inserted
replaced
2214:de5ed621effc | 2215:2a767157935e |
---|---|
1 /* | 1 /* |
2 * exp golomb vlc stuff | 2 * exp golomb vlc stuff |
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> | 3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> |
4 * Copyright (c) 2004 Alex Beregszaszi | |
4 * | 5 * |
5 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Lesser General Public | 7 * modify it under the terms of the GNU Lesser General Public |
7 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
20 | 21 |
21 /** | 22 /** |
22 * @file golomb.h | 23 * @file golomb.h |
23 * @brief | 24 * @brief |
24 * exp golomb vlc stuff | 25 * exp golomb vlc stuff |
25 * @author Michael Niedermayer <michaelni@gmx.at> | 26 * @author Michael Niedermayer <michaelni@gmx.at> and Alex Beregszaszi |
26 */ | 27 */ |
27 | 28 |
28 #define INVALID_VLC 0x80000000 | 29 #define INVALID_VLC 0x80000000 |
29 | 30 |
30 extern const uint8_t ff_golomb_vlc_len[512]; | 31 extern const uint8_t ff_golomb_vlc_len[512]; |
258 return -1; | 259 return -1; |
259 } | 260 } |
260 } | 261 } |
261 | 262 |
262 /** | 263 /** |
263 * read unsigned golomb rice code (flac). | 264 * read signed golomb rice code (ffv1). |
265 */ | |
266 static inline int get_sr_golomb_ffv1(GetBitContext *gb, int k, int limit, int esc_len){ | |
267 int v= get_ur_golomb(gb, k, limit, esc_len); | |
268 | |
269 v++; | |
270 if (v&1) return v>>1; | |
271 else return -(v>>1); | |
272 | |
273 // return (v>>1) ^ -(v&1); | |
274 } | |
275 /** | |
276 | |
277 * read signed golomb rice code (flac). | |
264 */ | 278 */ |
265 static inline int get_sr_golomb_flac(GetBitContext *gb, int k, int limit, int esc_len){ | 279 static inline int get_sr_golomb_flac(GetBitContext *gb, int k, int limit, int esc_len){ |
266 int v= get_ur_golomb_jpegls(gb, k, limit, esc_len); | 280 int v= get_ur_golomb_jpegls(gb, k, limit, esc_len); |
267 return (v>>1) ^ -(v&1); | 281 return (v>>1) ^ -(v&1); |
282 } | |
283 | |
284 /** | |
285 * read signed golomb rice code (sonic). | |
286 */ | |
287 static inline int get_sr_golomb_sonic(GetBitContext *gb, int k, int limit, int esc_len){ | |
288 int v= get_ur_golomb(gb, k, limit, esc_len); | |
289 | |
290 v++; | |
291 if (v&1) return -(v>>1); | |
292 else return v>>1; | |
268 } | 293 } |
269 | 294 |
270 #ifdef TRACE | 295 #ifdef TRACE |
271 | 296 |
272 static inline int get_ue(GetBitContext *s, char *file, char *func, int line){ | 297 static inline int get_ue(GetBitContext *s, char *file, char *func, int line){ |
276 int len= get_bits_count(s) - pos; | 301 int len= get_bits_count(s) - pos; |
277 int bits= show>>(24-len); | 302 int bits= show>>(24-len); |
278 | 303 |
279 print_bin(bits, len); | 304 print_bin(bits, len); |
280 | 305 |
281 printf("%5d %2d %3d ue @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line); | 306 av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d ue @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line); |
282 | 307 |
283 return i; | 308 return i; |
284 } | 309 } |
285 | 310 |
286 static inline int get_se(GetBitContext *s, char *file, char *func, int line){ | 311 static inline int get_se(GetBitContext *s, char *file, char *func, int line){ |
290 int len= get_bits_count(s) - pos; | 315 int len= get_bits_count(s) - pos; |
291 int bits= show>>(24-len); | 316 int bits= show>>(24-len); |
292 | 317 |
293 print_bin(bits, len); | 318 print_bin(bits, len); |
294 | 319 |
295 printf("%5d %2d %3d se @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line); | 320 av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d se @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line); |
296 | 321 |
297 return i; | 322 return i; |
298 } | 323 } |
299 | 324 |
300 static inline int get_te(GetBitContext *s, int r, char *file, char *func, int line){ | 325 static inline int get_te(GetBitContext *s, int r, char *file, char *func, int line){ |
304 int len= get_bits_count(s) - pos; | 329 int len= get_bits_count(s) - pos; |
305 int bits= show>>(24-len); | 330 int bits= show>>(24-len); |
306 | 331 |
307 print_bin(bits, len); | 332 print_bin(bits, len); |
308 | 333 |
309 printf("%5d %2d %3d te @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line); | 334 av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d te @%5d in %s %s:%d\n", bits, len, i, pos, file, func, line); |
310 | 335 |
311 return i; | 336 return i; |
312 } | 337 } |
313 | 338 |
314 #define get_ue_golomb(a) get_ue(a, __FILE__, __PRETTY_FUNCTION__, __LINE__) | 339 #define get_ue_golomb(a) get_ue(a, __FILE__, __PRETTY_FUNCTION__, __LINE__) |
401 }else{ | 426 }else{ |
402 put_bits(pb, limit , 1); | 427 put_bits(pb, limit , 1); |
403 put_bits(pb, esc_len, i - 1); | 428 put_bits(pb, esc_len, i - 1); |
404 } | 429 } |
405 } | 430 } |
431 | |
432 /** | |
433 * write signed golomb rice code (ffv1). | |
434 */ | |
435 static inline void set_sr_golomb_ffv1(PutBitContext *pb, int i, int k, int limit, int esc_len){ | |
436 int v; | |
437 | |
438 v = -2*i-1; | |
439 v ^= (v>>31); | |
440 | |
441 set_ur_golomb(pb, v, k, limit, esc_len); | |
442 } | |
443 | |
444 /** | |
445 * write signed golomb rice code (flac). | |
446 */ | |
447 static inline void set_sr_golomb_flac(PutBitContext *pb, int i, int k, int limit, int esc_len){ | |
448 int v; | |
449 | |
450 v = -2*i-1; | |
451 v ^= (v>>31); | |
452 | |
453 set_ur_golomb_jpegls(pb, v, k, limit, esc_len); | |
454 } | |
455 | |
456 /** | |
457 * write signed golomb rice code (sonic). | |
458 */ | |
459 static inline void set_sr_golomb_sonic(PutBitContext *pb, int i, int k, int limit, int esc_len){ | |
460 int v; | |
461 | |
462 v = 2*i-1; | |
463 if (v<0) v ^= -1; | |
464 | |
465 set_ur_golomb(pb, v, k, limit, esc_len); | |
466 } |