--- branches/dev-api-4/xvidcore/src/encoder.c 2003/08/03 10:20:12 1109 +++ branches/dev-api-4/xvidcore/src/encoder.c 2003/08/22 16:11:58 1126 @@ -21,7 +21,7 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: encoder.c,v 1.95.2.37 2003-08-03 10:20:12 syskin Exp $ + * $Id: encoder.c,v 1.95.2.39 2003-08-22 16:11:58 edgomez Exp $ * ****************************************************************************/ @@ -115,7 +115,7 @@ enc_create(xvid_enc_create_t * create) { Encoder *pEnc; - int n; + int n; if (XVID_VERSION_MAJOR(create->version) != 1) /* v1.x.x */ return XVID_ERR_VERSION; @@ -226,8 +226,7 @@ pEnc->mbParam.frame_drop_ratio = MAX(create->frame_drop_ratio, 0); /* max keyframe interval */ - pEnc->mbParam.iMaxKeyInterval = create->max_key_interval <= 0 ? - (10 * pEnc->mbParam.fbase) / pEnc->mbParam.fincr : create->max_key_interval; + pEnc->mbParam.iMaxKeyInterval = create->max_key_interval <= 0 ? (10 * (int)pEnc->mbParam.fbase) / (int)pEnc->mbParam.fincr : create->max_key_interval; /* allocate working frame-image memory */ @@ -771,7 +770,7 @@ } /* call plugins */ - for (i=0; inum_plugins;i++) { + for (i=0; i<(unsigned int)pEnc->num_plugins;i++) { emms(); if (pEnc->plugins[i].func) { if (pEnc->plugins[i].func(pEnc->plugins[i].param, opt, &data, 0) < 0) { @@ -1253,7 +1252,7 @@ * on next enc_encode call we must flush bframes * %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */ -done_flush: +/*done_flush:*/ pEnc->flush_bframes = 1; @@ -1569,6 +1568,11 @@ current->sStat.kblks++; + if (pEnc->current->vop_flags & XVID_VOP_GREYSCALE) + { pMB->cbp &= 0x3C; /* keep only bits 5-2 */ + qcoeff[4*64+0]=0; /* zero, because for INTRA MBs DC value is saved */ + qcoeff[5*64+0]=0; + } MBCoding(current, pMB, qcoeff, bs, ¤t->sStat); stop_coding_timer(); continue; @@ -1895,9 +1899,12 @@ } } -#ifdef BFRAMES_DEC_DEBUG - BFRAME_DEBUG -#endif + /* keep only bits 5-2 -- Chroma blocks will just be skipped by the + * coding function for BFrames, that's why we don't zero teh DC + * coeffs */ + if ((frame->vop_flags & XVID_VOP_GREYSCALE)) + mb->cbp &= 0x3C; + start_timer(); MBCodingBVOP(mb, qcoeff, frame->fcode, frame->bcode, bs, &frame->sStat, direction);