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 }