--- branches/dev-api-4/xvidcore/src/encoder.c 2003/03/16 12:05:09 926 +++ branches/dev-api-4/xvidcore/src/encoder.c 2003/03/26 11:01:03 948 @@ -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.9 2003-03-16 12:04:13 suxen_drol Exp $ + * $Id: encoder.c,v 1.95.2.14 2003-03-26 11:01:03 suxen_drol Exp $ * ****************************************************************************/ @@ -116,12 +116,12 @@ int -enc_create(xvid_enc_create_t * create, xvid_enc_rc_t * rc) +enc_create(xvid_enc_create_t * create) { Encoder *pEnc; int n; - if (XVID_MAJOR(create->version) != 1 || (rc && XVID_MAJOR(rc->version) != 1)) /* v1.x.x */ + if (XVID_MAJOR(create->version) != 1) /* v1.x.x */ return XVID_ERR_VERSION; if (create->width%2 || create->height%2) @@ -597,12 +597,22 @@ xvid_free(pEnc->temp_dquants); } - for (i=0; inum_plugins;i++) { - if (pEnc->plugins[i].func) { - pEnc->plugins[i].func(pEnc->plugins[i].param, XVID_PLG_DESTROY, 0, 0); + + if (pEnc->num_plugins>0) + { + xvid_plg_destroy_t pdestroy; + memset(&pdestroy, 0, sizeof(xvid_plg_destroy_t)); + + pdestroy.version = XVID_VERSION; + pdestroy.num_frames = pEnc->m_framenum; + + for (i=0; inum_plugins;i++) { + if (pEnc->plugins[i].func) { + pEnc->plugins[i].func(pEnc->plugins[i].param, XVID_PLG_DESTROY, &pdestroy, 0); + } } + xvid_free(pEnc->plugins); } - xvid_free(pEnc->plugins); xvid_free(pEnc); @@ -620,14 +630,6 @@ unsigned int i, j; xvid_plg_data_t data; - if (pEnc->num_plugins == 0) { - for (j=0; jmbParam.mb_height; j++) - for (i=0; imbParam.mb_width; i++) { - frame->mbs[j*pEnc->mbParam.mb_width + i].dquant = 0; - } - return; - } - /* set data struct */ memset(&data, 0, sizeof(xvid_plg_data_t)); @@ -639,7 +641,7 @@ data.mb_height = pEnc->mbParam.mb_height; data.fincr = frame->fincr; data.fbase = pEnc->mbParam.fbase; - + data.reference.csp = XVID_CSP_USER; data.reference.plane[0] = pEnc->reference->image.y; data.reference.plane[1] = pEnc->reference->image.u; @@ -793,7 +795,7 @@ set_timecodes(FRAMEINFO* pCur,FRAMEINFO *pRef, int32_t time_base) { - pCur->ticks = (int32_t)pCur->stamp % time_base; + pCur->ticks = (int32_t)pCur->stamp % time_base; pCur->seconds = ((int32_t)pCur->stamp / time_base) - ((int32_t)pRef->stamp / time_base) ; /* HEAVY DEBUG OUTPUT remove when timecodes prove to be stable */ @@ -1005,12 +1007,14 @@ * %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */ pEnc->current->fincr = pEnc->mbParam.fincr>0 ? pEnc->mbParam.fincr : frame->fincr; + inc_frame_num(pEnc); pEnc->current->vol_flags = pEnc->mbParam.vol_flags; pEnc->current->vop_flags = frame->vop_flags; pEnc->current->motion_flags = frame->motion; pEnc->current->fcode = pEnc->mbParam.m_fcode; pEnc->current->bcode = pEnc->mbParam.m_fcode; + if ((xFrame->vop_flags & XVID_CHROMAOPT)) { image_chroma_optimize(&pEnc->current->image, pEnc->mbParam.width, pEnc->mbParam.height, pEnc->mbParam.edged_width); @@ -1054,7 +1058,6 @@ } } - inc_frame_num(pEnc); pEnc->iFrameNum++; if ((pEnc->current->vop_flags & XVID_DEBUG)) { @@ -1854,7 +1857,7 @@ continue; } - if (mb->mode != MODE_DIRECT_NONE_MV) { + if (mb->mode != MODE_DIRECT_NONE_MV || pEnc->mbParam.plugin_flags & XVID_REQORIGINAL) { MBMotionCompensationBVOP(&pEnc->mbParam, mb, x, y, &frame->image, f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv, b_ref, &pEnc->vInterH, @@ -1864,8 +1867,8 @@ if (mb->mode == MODE_DIRECT_NO4V) mb->mode = MODE_DIRECT; mb->quant = frame->quant; - mb->cbp = - MBTransQuantInterBVOP(&pEnc->mbParam, frame, mb, x, y, dct_codes, qcoeff); + if (mb->mode != MODE_DIRECT_NONE_MV) + mb->cbp = 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) ) {