--- encoder.c 2003/02/22 08:49:44 1.95.2.1 +++ encoder.c 2003/03/10 00:38:49 1.95.2.3 @@ -26,7 +26,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.1 2003/02/22 08:49:44 suxen_drol Exp $ + * $Id: encoder.c,v 1.95.2.3 2003/03/10 00:38:49 edgomez Exp $ * ****************************************************************************/ @@ -634,8 +634,10 @@ * Returned values : * - >0 - output bytes * - 0 - no output + * - XVID_ERR_VERSION - wrong version passed to core + * - XVID_ERR_END - End of stream reached before end of coding * - XVID_ERR_FORMAT - the image subsystem reported the image had a wrong - * format + * format ****************************************************************************/ @@ -718,7 +720,30 @@ pEnc->bframenum_head, pEnc->bframenum_tail, pEnc->queue_head, pEnc->queue_tail, pEnc->queue_size); + if (pEnc->bframes[pEnc->bframenum_head]->vop_flags & XVID_EXTRASTATS) { + image_copy(&pEnc->sOriginal, &pEnc->bframes[pEnc->bframenum_head]->image, + pEnc->mbParam.edged_width, pEnc->mbParam.height); + } + FrameCodeB(pEnc, pEnc->bframes[pEnc->bframenum_head], &bs); + + if (pEnc->bframes[pEnc->bframenum_head]->vop_flags & XVID_EXTRASTATS) { + stats->sse_y = + plane_sse( pEnc->sOriginal.y, pEnc->bframes[pEnc->bframenum_head]->image.y, + pEnc->mbParam.edged_width, pEnc->mbParam.width, + pEnc->mbParam.height); + + stats->sse_u = + plane_sse( pEnc->sOriginal.u, pEnc->bframes[pEnc->bframenum_head]->image.u, + pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, + pEnc->mbParam.height/2); + + stats->sse_v = + plane_sse( pEnc->sOriginal.v, pEnc->bframes[pEnc->bframenum_head]->image.v, + pEnc->mbParam.edged_width/2, pEnc->mbParam.width/2, + pEnc->mbParam.height/2); + } + set_stats(stats, &pEnc->rate_control, &pEnc->mbParam, pEnc->bframes[pEnc->bframenum_head]); pEnc->bframenum_head++; @@ -822,8 +847,8 @@ pEnc->mbParam.width, pEnc->mbParam.height, pEnc->mbParam.edged_width); } - if (xFrame->vop_flags & XVID_EXTRASTATS) - { image_copy(&pEnc->sOriginal, &pEnc->current->image, + if (xFrame->vop_flags & XVID_EXTRASTATS) { + image_copy(&pEnc->sOriginal, &pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height); } @@ -1006,8 +1031,8 @@ } - if (xFrame->vop_flags & XVID_EXTRASTATS) - { stats->sse_y = + if (xFrame->vop_flags & XVID_EXTRASTATS) { + stats->sse_y = plane_sse( pEnc->sOriginal.y, pEnc->current->image.y, pEnc->mbParam.edged_width, pEnc->mbParam.width, pEnc->mbParam.height); @@ -1029,12 +1054,14 @@ done_flush: +#if 0 { char tmp[100]; wsprintf(tmp,"\\frame%03i.pgm", pEnc->m_framenum); image_dump_yuvpgm(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.width, pEnc->mbParam.height, tmp); } +#endif /* packed_mode: repeat */ pEnc->flush_bframes = 1; @@ -1697,7 +1724,7 @@ mb->quant = frame->quant; mb->cbp = - MBTransQuantInterBVOP(&pEnc->mbParam, frame, mb, dct_codes, qcoeff); + MBTransQuantInterBVOP(&pEnc->mbParam, frame, mb, x, y, dct_codes, qcoeff); if ( (mb->mode == MODE_DIRECT) && (mb->cbp == 0) && (mb->pmvs[3].x == 0) && (mb->pmvs[3].y == 0) ) {