--- trunk/xvidcore/src/bitstream/mbcoding.c 2002/06/30 10:46:29 252 +++ trunk/xvidcore/src/bitstream/mbcoding.c 2002/07/24 19:34:14 335 @@ -412,18 +412,23 @@ Statistics * pStat) { - int intra = (pMB->mode == MODE_INTRA || pMB->mode == MODE_INTRA_Q); - if (frame->coding_type == P_VOP) { if (pMB->cbp == 0 && pMB->mode == MODE_INTER && pMB->mvs[0].x == 0 && pMB->mvs[0].y == 0) { + +#ifdef _DISABLE_SKIP +/* disable SKIP when Bframes active until some workaround for the B-SKIP problem is found */ + BitstreamPutBit(bs, 0); // always coded! +#else BitstreamPutBit(bs, 1); // not_coded + return; +#endif } else BitstreamPutBit(bs, 0); // coded } - if (intra) + if (pMB->mode == MODE_INTRA || pMB->mode == MODE_INTRA_Q) CodeBlockIntra(frame, pMB, qcoeff, bs, pStat); else CodeBlockInter(frame, pMB, qcoeff, bs, pStat); @@ -518,11 +523,11 @@ int i; /* ------------------------------------------------------------------ - when a block is skipped it is decoded DIRECT(0,) - hence are interpolated from forward & backward frames + when a block is skipped it is decoded DIRECT(0,0) + hence is interpolated from forward & backward frames ------------------------------------------------------------------ */ - if (mb->mode == 5) { + if (mb->mode == MODE_DIRECT_NONE_MV) { BitstreamPutBit(bs, 1); // skipped return; } @@ -556,7 +561,8 @@ } if (mb->mode == MODE_DIRECT) { - // TODO: direct + CodeVector(bs, mb->mvs[0].x, 1, pStat); /* fcode is always 1 for delta vector */ + CodeVector(bs, mb->mvs[0].y, 1, pStat); /* prediction is always (0,0) */ } for (i = 0; i < 6; i++) {