41 |
* * |
* * |
42 |
* Revision history: * |
* Revision history: * |
43 |
* * |
* * |
44 |
|
* 28.06.2002 added check_resync_marker() * |
45 |
* 14.04.2002 bframe encoding * |
* 14.04.2002 bframe encoding * |
46 |
* 08.03.2002 initial version; isibaar * |
* 08.03.2002 initial version; isibaar * |
47 |
* * |
* * |
96 |
|
|
97 |
for (l = 0; l < 64; l++) { // run |
for (l = 0; l < 64; l++) { // run |
98 |
int32_t level = k; |
int32_t level = k; |
99 |
uint32_t run = l; |
ptr_t run = l; |
100 |
|
|
101 |
if ((abs(level) <= max_level_ptr[run]) && (run <= (uint32_t) max_run_ptr[abs(level)])) { // level < max_level and run < max_run |
if ((abs(level) <= max_level_ptr[run]) && (run <= (uint32_t) max_run_ptr[abs(level)])) { // level < max_level and run < max_run |
102 |
|
|
572 |
* decoding stuff starts here * |
* decoding stuff starts here * |
573 |
***************************************************************/ |
***************************************************************/ |
574 |
|
|
575 |
|
|
576 |
|
// for IVOP addbits == 0 |
577 |
|
// for PVOP addbits == fcode - 1 |
578 |
|
// for BVOP addbits == max(fcode,bcode) - 1 |
579 |
|
// returns true or false |
580 |
|
int |
581 |
|
check_resync_marker(Bitstream * bs, int addbits) |
582 |
|
{ |
583 |
|
uint32_t nbits; |
584 |
|
uint32_t code; |
585 |
|
uint32_t nbitsresyncmarker = NUMBITS_VP_RESYNC_MARKER + addbits; |
586 |
|
|
587 |
|
nbits = BitstreamNumBitsToByteAlign(bs); |
588 |
|
code = BitstreamShowBits(bs, nbits); |
589 |
|
|
590 |
|
if (code == (((uint32_t)1 << (nbits - 1)) - 1)) |
591 |
|
{ |
592 |
|
return BitstreamShowBitsFromByteAlign(bs, nbitsresyncmarker) == RESYNC_MARKER; |
593 |
|
} |
594 |
|
|
595 |
|
return 0; |
596 |
|
} |
597 |
|
|
598 |
|
|
599 |
|
|
600 |
int |
int |
601 |
get_mcbpc_intra(Bitstream * bs) |
get_mcbpc_intra(Bitstream * bs) |
602 |
{ |
{ |
603 |
|
|
604 |
uint32_t index; |
uint32_t index; |
605 |
|
|
606 |
while ((index = BitstreamShowBits(bs, 9)) == 1) |
index = BitstreamShowBits(bs, 9); |
|
BitstreamSkip(bs, 9); |
|
|
|
|
607 |
index >>= 3; |
index >>= 3; |
608 |
|
|
609 |
BitstreamSkip(bs, mcbpc_intra_table[index].len); |
BitstreamSkip(bs, mcbpc_intra_table[index].len); |
618 |
|
|
619 |
uint32_t index; |
uint32_t index; |
620 |
|
|
621 |
while ((index = CLIP(BitstreamShowBits(bs, 9), 256)) == 1) |
index = CLIP(BitstreamShowBits(bs, 9), 256); |
|
BitstreamSkip(bs, 9); |
|
622 |
|
|
623 |
BitstreamSkip(bs, mcbpc_inter_table[index].len); |
BitstreamSkip(bs, mcbpc_inter_table[index].len); |
624 |
|
|
773 |
} |
} |
774 |
coeff += run; |
coeff += run; |
775 |
block[scan[coeff]] = level; |
block[scan[coeff]] = level; |
776 |
|
|
777 |
|
DPRINTF(DPRINTF_COEFF,"block[%i] %i", scan[coeff], level); |
778 |
|
//DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[coeff], level, BitstreamShowBits(bs, 32)); |
779 |
|
|
780 |
if (level < -127 || level > 127) { |
if (level < -127 || level > 127) { |
781 |
DEBUG1("warning: intra_overflow", level); |
DEBUG1("warning: intra_overflow", level); |
782 |
} |
} |
806 |
p += run; |
p += run; |
807 |
|
|
808 |
block[scan[p]] = level; |
block[scan[p]] = level; |
809 |
|
|
810 |
|
DPRINTF(DPRINTF_COEFF,"block[%i] %i", scan[p], level); |
811 |
|
// DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[p], level, BitstreamShowBits(bs, 32)); |
812 |
|
|
813 |
if (level < -127 || level > 127) { |
if (level < -127 || level > 127) { |
814 |
DEBUG1("warning: inter_overflow", level); |
DEBUG1("warning: inter_overflow", level); |
815 |
} |
} |