29 |
* along with this program; if not, write to the Free Software |
* along with this program; if not, write to the Free Software |
30 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
31 |
* |
* |
32 |
* $Id: mbcoding.c,v 1.31 2002-09-21 02:26:12 suxen_drol Exp $ |
* $Id: mbcoding.c,v 1.32 2002-09-22 17:01:36 edgomez Exp $ |
33 |
* |
* |
34 |
****************************************************************************/ |
****************************************************************************/ |
35 |
|
|
374 |
if (frame->global_flags & XVID_INTERLACING) { |
if (frame->global_flags & XVID_INTERLACING) { |
375 |
if (pMB->cbp) { |
if (pMB->cbp) { |
376 |
BitstreamPutBit(bs, pMB->field_dct); |
BitstreamPutBit(bs, pMB->field_dct); |
377 |
DEBUG1("codep: field_dct: ", pMB->field_dct); |
DPRINTF(DPRINTF_DEBUG, "codep: field_dct: %d", pMB->field_dct); |
378 |
} |
} |
379 |
|
|
380 |
// if inter block, write field ME flag |
// if inter block, write field ME flag |
381 |
if (pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q) { |
if (pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q) { |
382 |
BitstreamPutBit(bs, pMB->field_pred); |
BitstreamPutBit(bs, pMB->field_pred); |
383 |
DEBUG1("codep: field_pred: ", pMB->field_pred); |
DPRINTF(DPRINTF_DEBUG, "codep: field_pred: %d", pMB->field_pred); |
384 |
|
|
385 |
// write field prediction references |
// write field prediction references |
386 |
if (pMB->field_pred) { |
if (pMB->field_pred) { |
671 |
level = BitstreamGetBits(bs, 8); |
level = BitstreamGetBits(bs, 8); |
672 |
|
|
673 |
if (level == 0 || level == 128) |
if (level == 0 || level == 128) |
674 |
DEBUG1("Illegal LEVEL for ESCAPE mode 4:", level); |
DPRINTF(DPRINTF_ERROR, "Illegal LEVEL for ESCAPE mode 4: %d", level); |
675 |
|
|
676 |
return (level >= 128 ? -(256 - level) : level); |
return (level >= 128 ? -(256 - level) : level); |
677 |
} |
} |
739 |
do { |
do { |
740 |
level = get_coeff(bs, &run, &last, 1, 0); |
level = get_coeff(bs, &run, &last, 1, 0); |
741 |
if (run == -1) { |
if (run == -1) { |
742 |
DEBUG("fatal: invalid run"); |
DPRINTF(DPRINTF_DEBUG, "fatal: invalid run"); |
743 |
break; |
break; |
744 |
} |
} |
745 |
coeff += run; |
coeff += run; |
749 |
//DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[coeff], level, BitstreamShowBits(bs, 32)); |
//DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[coeff], level, BitstreamShowBits(bs, 32)); |
750 |
|
|
751 |
if (level < -127 || level > 127) { |
if (level < -127 || level > 127) { |
752 |
DEBUG1("warning: intra_overflow", level); |
DPRINTF(DPRINTF_DEBUG, "warning: intra_overflow: %d", level); |
753 |
} |
} |
754 |
coeff++; |
coeff++; |
755 |
} while (!last); |
} while (!last); |
771 |
do { |
do { |
772 |
level = get_coeff(bs, &run, &last, 0, 0); |
level = get_coeff(bs, &run, &last, 0, 0); |
773 |
if (run == -1) { |
if (run == -1) { |
774 |
DEBUG("fatal: invalid run"); |
DPRINTF(DPRINTF_ERROR, "fatal: invalid run"); |
775 |
break; |
break; |
776 |
} |
} |
777 |
p += run; |
p += run; |
779 |
block[scan[p]] = level; |
block[scan[p]] = level; |
780 |
|
|
781 |
DPRINTF(DPRINTF_COEFF,"block[%i] %i", scan[p], level); |
DPRINTF(DPRINTF_COEFF,"block[%i] %i", scan[p], level); |
|
// DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[p], level, BitstreamShowBits(bs, 32)); |
|
782 |
|
|
783 |
if (level < -127 || level > 127) { |
if (level < -127 || level > 127) { |
784 |
DEBUG1("warning: inter_overflow", level); |
DPRINTF(DPRINTF_DEBUG, "warning: inter_overflow: %d", level); |
785 |
} |
} |
786 |
p++; |
p++; |
787 |
} while (!last); |
} while (!last); |