363 |
} |
} |
364 |
} |
} |
365 |
|
|
|
|
|
|
/* pad bitstream to the next byte boundary */ |
|
|
|
|
|
static void __inline |
|
|
BitstreamPad(Bitstream * const bs) |
|
|
{ |
|
|
uint32_t remainder = bs->pos % 8; |
|
|
|
|
|
if (remainder) { |
|
|
BitstreamForward(bs, 8 - remainder); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
366 |
/* read n bits from bitstream */ |
/* read n bits from bitstream */ |
367 |
|
|
368 |
static uint32_t __inline |
static uint32_t __inline |
425 |
} |
} |
426 |
} |
} |
427 |
|
|
428 |
|
static const int stuffing_codes[8] = |
429 |
|
{ |
430 |
|
/* nbits stuffing code */ |
431 |
|
0, /* 1 0 */ |
432 |
|
1, /* 2 01 */ |
433 |
|
3, /* 3 011 */ |
434 |
|
7, /* 4 0111 */ |
435 |
|
0xf, /* 5 01111 */ |
436 |
|
0x1f, /* 6 011111 */ |
437 |
|
0x3f, /* 7 0111111 */ |
438 |
|
0x7f, /* 8 01111111 */ |
439 |
|
}; |
440 |
|
|
441 |
|
/* pad bitstream to the next byte boundary */ |
442 |
|
|
443 |
|
static void __inline |
444 |
|
BitstreamPad(Bitstream * const bs) |
445 |
|
{ |
446 |
|
int bits = 8 - (bs->pos % 8); |
447 |
|
if (bits < 8) |
448 |
|
BitstreamPutBits(bs, stuffing_codes[bits - 1], bits); |
449 |
|
} |
450 |
|
|
451 |
|
/* |
452 |
|
* pad bitstream to the next byte boundary |
453 |
|
* alway pad: even if currently at the byte boundary |
454 |
|
*/ |
455 |
|
|
456 |
|
static void __inline |
457 |
|
BitstreamPadAlways(Bitstream * const bs) |
458 |
|
{ |
459 |
|
int bits = 8 - (bs->pos % 8); |
460 |
|
BitstreamPutBits(bs, stuffing_codes[bits - 1], bits); |
461 |
|
} |
462 |
|
|
463 |
#endif /* _BITSTREAM_H_ */ |
#endif /* _BITSTREAM_H_ */ |