--- decoder.c 2002/08/03 05:36:18 1.36 +++ decoder.c 2002/10/19 12:20:33 1.42 @@ -3,6 +3,9 @@ * XVID MPEG-4 VIDEO CODEC * - Decoder main module - * + * Copyright(C) 2002 MinChen + * 2002 Peter Ross + * * This program is an implementation of a part of one or more MPEG-4 * Video tools as specified in ISO/IEC 14496-2 standard. Those intending * to use this software module in hardware or software products are @@ -33,7 +36,7 @@ * History: * * 15.07.2002 fix a bug in B-frame decode at DIRECT mode - * MinChen + * 10.07.2002 added BFRAMES_DEC_DEBUG support * Fix a little bug for low_delay flage * MinChen @@ -53,9 +56,9 @@ * 26.03.2002 interlacing support - moved transfers outside decode loop * 26.12.2001 decoder_mbinter: dequant/idct moved within if(coded) block * 22.12.2001 lock based interpolation - * 01.12.2001 inital version; (c)2001 peter ross + * 01.12.2001 inital version; (c)2001 peter ross * - * $Id: decoder.c,v 1.36 2002/08/03 05:36:18 chenm001 Exp $ + * $Id: decoder.c,v 1.42 2002/10/19 12:20:33 edgomez Exp $ * *************************************************************************/ @@ -379,7 +382,7 @@ start_timer(); if(dec->quarterpel) { - DEBUG("QUARTERPEL"); + DPRINTF(DPRINTF_DEBUG, "QUARTERPEL\n"); interpolate8x8_quarterpel(dec->cur.y, dec->refn[0].y, 16*x_pos, 16*y_pos, pMB->mvs[0].x, pMB->mvs[0].y, stride, rounding); interpolate8x8_quarterpel(dec->cur.y, dec->refn[0].y, 16*x_pos + 8, 16*y_pos, @@ -509,7 +512,7 @@ if (dec->interlacing) { mb->field_dct = BitstreamGetBit(bs); - DEBUG1("deci: field_dct: ", mb->field_dct); + DPRINTF(DPRINTF_DEBUG, "deci: field_dct: %d", mb->field_dct); } decoder_mbintra(dec, mb, x, y, acpred_flag, cbp, bs, quant, @@ -585,7 +588,7 @@ start_timer(); image_setedges(&dec->refn[0], dec->edged_width, dec->edged_height, - dec->width, dec->height, dec->interlacing); + dec->width, dec->height); stop_edges_timer(); bound = 0; @@ -653,18 +656,20 @@ mb->quant = quant; if (dec->interlacing) { - mb->field_dct = BitstreamGetBit(bs); - DEBUG1("decp: field_dct: ", mb->field_dct); + if (cbp || intra) { + mb->field_dct = BitstreamGetBit(bs); + DPRINTF(DPRINTF_DEBUG, "decp: field_dct: %d", mb->field_dct); + } if (mb->mode == MODE_INTER || mb->mode == MODE_INTER_Q) { mb->field_pred = BitstreamGetBit(bs); - DEBUG1("decp: field_pred: ", mb->field_pred); + DPRINTF(DPRINTF_DEBUG, "decp: field_pred: %d", mb->field_pred); if (mb->field_pred) { mb->field_for_top = BitstreamGetBit(bs); - DEBUG1("decp: field_for_top: ", mb->field_for_top); + DPRINTF(DPRINTF_DEBUG, "decp: field_for_top: %d", mb->field_for_top); mb->field_for_bot = BitstreamGetBit(bs); - DEBUG1("decp: field_for_bot: ", mb->field_for_bot); + DPRINTF(DPRINTF_DEBUG, "decp: field_for_bot: %d", mb->field_for_bot); } } } @@ -704,7 +709,8 @@ rounding); } else // not coded { - DEBUG2("P-frame MB at (X,Y)=",x,y); + DPRINTF(DPRINTF_DEBUG, "P-frame MB at (X,Y)=(%d,%d)", x, y); + mb->mode = MODE_NOT_CODED; mb->mvs[0].x = mb->mvs[1].x = mb->mvs[2].x = mb->mvs[3].x = 0; mb->mvs[0].y = mb->mvs[1].y = mb->mvs[2].y = mb->mvs[3].y = 0; @@ -1140,9 +1146,9 @@ start_timer(); image_setedges(&dec->refn[0], dec->edged_width, dec->edged_height, - dec->width, dec->height, dec->interlacing); + dec->width, dec->height); image_setedges(&dec->refn[1], dec->edged_width, dec->edged_height, - dec->width, dec->height, dec->interlacing); + dec->width, dec->height); stop_edges_timer(); #ifdef BFRAMES_DEC_DEBUG @@ -1276,7 +1282,7 @@ break; default: - DEBUG1("Not support B-frame mb_type =", mb->mb_type); + DPRINTF(DPRINTF_ERROR, "Not support B-frame mb_type = %d", mb->mb_type); } } // end of FOR @@ -1334,24 +1340,24 @@ decoder_pframe(dec, &bs, rounding, quant, fcode_forward, intra_dc_threshold); #ifdef BFRAMES_DEC - DEBUG1("P_VOP Time=", dec->time); + DPRINTF(DPRINTF_DEBUG, "P_VOP Time=%d", dec->time); #endif break; case I_VOP: decoder_iframe(dec, &bs, quant, intra_dc_threshold); #ifdef BFRAMES_DEC - DEBUG1("I_VOP Time=", dec->time); + DPRINTF(DPRINTF_DEBUG, "I_VOP Time=%d", dec->time); #endif break; case B_VOP: #ifdef BFRAMES_DEC if (dec->time_pp > dec->time_bp) { - DEBUG1("B_VOP Time=", dec->time); + DPRINTF(DPRINTF_DEBUG, "B_VOP Time=%d", dec->time); decoder_bframe(dec, &bs, quant, fcode_forward, fcode_backward); } else { - DEBUG("broken B-frame!"); + DPRINTF(DPRINTF_DEBUG, "Broken B_VOP"); } #else image_copy(&dec->cur, &dec->refn[0], dec->edged_width, dec->height); @@ -1369,7 +1375,7 @@ #ifdef BFRAMES_DEC_DEBUG if (frame->length != BitstreamPos(&bs) / 8){ - DEBUG2("InLen/UseLen",frame->length, BitstreamPos(&bs) / 8); + DPRINTF(DPRINTF_DEBUG, "InLen: %d / UseLen: %d", frame->length, BitstreamPos(&bs) / 8); } #endif frame->length = BitstreamPos(&bs) / 8;