--- trunk/xvidcore/src/encoder.c 2002/08/04 21:32:56 358 +++ trunk/xvidcore/src/encoder.c 2002/08/19 19:19:40 384 @@ -39,7 +39,7 @@ * MinChen * 14.04.2002 added FrameCodeB() * - * $Id: encoder.c,v 1.70 2002-08-04 21:32:56 Isibaar Exp $ + * $Id: encoder.c,v 1.75 2002-08-19 19:19:40 chl Exp $ * ****************************************************************************/ @@ -425,6 +425,7 @@ pEnc->mbParam.m_ticks = 0; pEnc->m_framenum = 0; pEnc->last_pframe = 0; + pEnc->last_sync = 0; #endif pParam->handle = (void *) pEnc; @@ -625,8 +626,21 @@ { pEnc->mbParam.m_ticks += pEnc->mbParam.fincr; - pEnc->mbParam.m_seconds = pEnc->mbParam.m_ticks / pEnc->mbParam.fbase; pEnc->mbParam.m_ticks = pEnc->mbParam.m_ticks % pEnc->mbParam.fbase; + +/* fprintf(stderr, "ENC %c %i:%i %i\n", + pEnc->current->coding_type == I_VOP ? 'I' : pEnc->current->coding_type == P_VOP ? 'P' : 'B', + pEnc->mbParam.m_seconds, pEnc->mbParam.m_ticks,pEnc->last_sync); +*/ + + if (pEnc->mbParam.m_ticks < pEnc->last_sync) + pEnc->mbParam.m_seconds = 1; // more than 1 second since last I or P is not supported. + else + pEnc->mbParam.m_seconds = 0; + + if (pEnc->current->coding_type != B_VOP) + pEnc->last_sync = pEnc->mbParam.m_ticks; + } #endif @@ -825,7 +839,7 @@ pFrame->intra = 0; - BitstreamPutBits(&bs, 0x7f, 8); + BitstreamWriteVopHeader(&bs, &pEnc->mbParam, pEnc->current, 0); // write N_VOP BitstreamPad(&bs); pFrame->length = BitstreamLength(&bs); @@ -1252,7 +1266,9 @@ DEBUG(temp); #endif +#ifdef BFRAMES inc_frame_num(pEnc); +#endif pEnc->iFrameNum++; stop_global_timer(); @@ -1933,8 +1949,7 @@ mb->quant = frame->quant; mb->cbp = - MBTransQuantInter(&pEnc->mbParam, frame, mb, x, y, dct_codes, - qcoeff); + MBTransQuantInterBVOP(&pEnc->mbParam, frame, mb, dct_codes, qcoeff); //mb->cbp = MBTransQuantBVOP(&pEnc->mbParam, x, y, dct_codes, qcoeff, &frame->image, frame->quant); if ( (mb->mode == MODE_DIRECT) && (mb->cbp == 0)