[cvs] / xvidcore / src / encoder.c Repository:
ViewVC logotype

Diff of /xvidcore/src/encoder.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.120, Tue Nov 22 10:23:01 2005 UTC revision 1.133, Sun Nov 28 15:18:21 2010 UTC
# Line 3  Line 3 
3   *  XVID MPEG-4 VIDEO CODEC   *  XVID MPEG-4 VIDEO CODEC
4   *  - Encoder main module -   *  - Encoder main module -
5   *   *
6   *  Copyright(C) 2002     Michael Militzer <isibaar@xvid.org>   *  Copyright(C) 2002-2010 Michael Militzer <isibaar@xvid.org>
7   *                         2002-2003 Peter Ross <pross@xvid.org>   *                         2002-2003 Peter Ross <pross@xvid.org>
8   *                         2002   Daniel Smith <danielsmith@astroboymail.com>   *                         2002   Daniel Smith <danielsmith@astroboymail.com>
9   *   *
# Line 49  Line 49 
49  #include "quant/quant_matrix.h"  #include "quant/quant_matrix.h"
50  #include "utils/mem_align.h"  #include "utils/mem_align.h"
51    
52    # include "motion/motion_smp.h"
53    
54    
55  /*****************************************************************************  /*****************************************************************************
56   * Local function prototypes   * Local function prototypes
57   ****************************************************************************/   ****************************************************************************/
# Line 238  Line 241 
241                          goto xvid_err_memory1a;                          goto xvid_err_memory1a;
242          }          }
243    
244            /* temp lambdas */
245            if (pEnc->mbParam.plugin_flags & XVID_REQLAMBDA) {
246                    pEnc->temp_lambda = (float *) xvid_malloc(pEnc->mbParam.mb_width *
247                                                    pEnc->mbParam.mb_height * 6 * sizeof(float), CACHE_LINE);
248                    if (pEnc->temp_lambda == NULL)
249                            goto xvid_err_memory1a;
250            }
251    
252          /* bframes */          /* bframes */
253          pEnc->mbParam.max_bframes = MAX(create->max_bframes, 0);          pEnc->mbParam.max_bframes = MAX(create->max_bframes, 0);
254          pEnc->mbParam.bquant_ratio = MAX(create->bquant_ratio, 0);          pEnc->mbParam.bquant_ratio = MAX(create->bquant_ratio, 0);
# Line 424  Line 435 
435          /* timestamp stuff */          /* timestamp stuff */
436    
437          pEnc->mbParam.m_stamp = 0;          pEnc->mbParam.m_stamp = 0;
438          pEnc->m_framenum = 0;          pEnc->m_framenum = create->start_frame_num;
439          pEnc->current->stamp = 0;          pEnc->current->stamp = 0;
440          pEnc->reference->stamp = 0;          pEnc->reference->stamp = 0;
441    
# Line 433  Line 444 
444          pEnc->iFrameNum = 0;          pEnc->iFrameNum = 0;
445          pEnc->fMvPrevSigma = -1;          pEnc->fMvPrevSigma = -1;
446    
447            /* multithreaded stuff */
448            if (create->num_threads > 0) {
449                    int t = create->num_threads;
450                    int rows_per_thread = (pEnc->mbParam.mb_height+t-1)/t;
451                    pEnc->num_threads = t;
452                    pEnc->motionData = xvid_malloc(t*sizeof(SMPmotionData), CACHE_LINE);
453                    if (!pEnc->motionData)
454                            goto xvid_err_nosmp;
455    
456                    for (n = 0; n < t; n++) {
457                            pEnc->motionData[n].complete_count_self =
458                                    xvid_malloc(rows_per_thread * sizeof(int), CACHE_LINE);
459    
460                            if (!pEnc->motionData[n].complete_count_self)
461                                    goto xvid_err_nosmp;
462    
463                            if (n != 0)
464                                    pEnc->motionData[n].complete_count_above =
465                                            pEnc->motionData[n-1].complete_count_self;
466                    }
467                    pEnc->motionData[0].complete_count_above =
468                            pEnc->motionData[t-1].complete_count_self - 1;
469    
470            } else {
471      xvid_err_nosmp:
472                    /* no SMP */
473                    create->num_threads = 0;
474                    pEnc->motionData = NULL;
475            }
476    
477          create->handle = (void *) pEnc;          create->handle = (void *) pEnc;
478    
479          init_timer();          init_timer();
# Line 519  Line 560 
560                  xvid_free(pEnc->temp_dquants);                  xvid_free(pEnc->temp_dquants);
561          }          }
562    
563            if(pEnc->mbParam.plugin_flags & XVID_REQLAMBDA) {
564                    xvid_free(pEnc->temp_lambda);
565            }
566    
567    xvid_err_memory0:    xvid_err_memory0:
568          for (n=0; n<pEnc->num_plugins;n++) {          for (n=0; n<pEnc->num_plugins;n++) {
569                  if (pEnc->plugins[n].func) {                  if (pEnc->plugins[n].func) {
# Line 617  Line 662 
662                  xvid_free(pEnc->temp_dquants);                  xvid_free(pEnc->temp_dquants);
663          }          }
664    
665            if ((pEnc->mbParam.plugin_flags & XVID_REQLAMBDA)) {
666                    xvid_free(pEnc->temp_lambda);
667            }
668    
669          if (pEnc->num_plugins>0) {          if (pEnc->num_plugins>0) {
670                  xvid_plg_destroy_t pdestroy;                  xvid_plg_destroy_t pdestroy;
# Line 635  Line 683 
683    
684          xvid_free(pEnc->mbParam.mpeg_quant_matrices);          xvid_free(pEnc->mbParam.mpeg_quant_matrices);
685    
686          if (pEnc->num_plugins>0)          if (pEnc->num_zones > 0)
687                  xvid_free(pEnc->zones);                  xvid_free(pEnc->zones);
688    
689            if (pEnc->num_threads > 0) {
690                    for (i = 0; i < pEnc->num_threads; i++)
691                            xvid_free(pEnc->motionData[i].complete_count_self);
692    
693                    xvid_free(pEnc->motionData);
694            }
695    
696          xvid_free(pEnc);          xvid_free(pEnc);
697    
698          return 0;  /* ok */          return 0;  /* ok */
# Line 651  Line 706 
706  static void call_plugins(Encoder * pEnc, FRAMEINFO * frame, IMAGE * original,  static void call_plugins(Encoder * pEnc, FRAMEINFO * frame, IMAGE * original,
707                                                   int opt, int * type, int * quant, xvid_enc_stats_t * stats)                                                   int opt, int * type, int * quant, xvid_enc_stats_t * stats)
708  {  {
709          unsigned int i, j;          unsigned int i, j, k;
710          xvid_plg_data_t data;          xvid_plg_data_t data;
711    
712          /* set data struct */          /* set data struct */
# Line 710  Line 765 
765                  if ((pEnc->mbParam.plugin_flags & XVID_REQDQUANTS)) {                  if ((pEnc->mbParam.plugin_flags & XVID_REQDQUANTS)) {
766                          data.dquant = pEnc->temp_dquants;                          data.dquant = pEnc->temp_dquants;
767                          data.dquant_stride = pEnc->mbParam.mb_width;                          data.dquant_stride = pEnc->mbParam.mb_width;
768                          memset(data.dquant, 0, data.mb_width*data.mb_height);                          memset(data.dquant, 0, data.mb_width*data.mb_height*sizeof(int));
769                    }
770    
771                    if(pEnc->mbParam.plugin_flags & XVID_REQLAMBDA) {
772                            int block = 0;
773                            emms();
774                            data.lambda = pEnc->temp_lambda;
775                            for(i = 0;i < pEnc->mbParam.mb_height; i++)
776                                    for(j = 0;j < pEnc->mbParam.mb_width; j++)
777                                            for (k = 0; k < 6; k++)
778                                                    data.lambda[block++] = 1.0f;
779                  }                  }
780    
781          } else { /* XVID_PLG_AFTER */          } else { /* XVID_PLG_AFTER */
# Line 816  Line 881 
881                                  frame->mbs[j*pEnc->mbParam.mb_width + i].dquant = 0;                                  frame->mbs[j*pEnc->mbParam.mb_width + i].dquant = 0;
882                          }                          }
883                  }                  }
884    
885                    if (pEnc->mbParam.plugin_flags & XVID_REQLAMBDA) {
886                            for (j = 0; j < pEnc->mbParam.mb_height; j++)
887                                    for (i = 0; i < pEnc->mbParam.mb_width; i++)
888                                            for (k = 0; k < 6; k++) {
889                                                    frame->mbs[j*pEnc->mbParam.mb_width + i].lambda[k] =
890                                                            (int) ((float)(1<<LAMBDA_EXP) * data.lambda[6 * (j * data.mb_width + i) + k]);
891                                            }
892                    } else {
893                            for (j = 0; j<pEnc->mbParam.mb_height; j++)
894                                    for (i = 0; i<pEnc->mbParam.mb_width; i++)
895                                            for (k = 0; k < 6; k++) {
896                                                    frame->mbs[j*pEnc->mbParam.mb_width + i].lambda[k] = 1<<LAMBDA_EXP;
897                                            }
898                    }
899    
900    
901                  frame->mbs[0].quant = data.quant; /* FRAME will not affect the quant in stats */                  frame->mbs[0].quant = data.quant; /* FRAME will not affect the quant in stats */
902          }          }
903    
# Line 915  Line 997 
997          return;          return;
998  }  }
999    
   
1000  /*****************************************************************************  /*****************************************************************************
1001   * IPB frame encoder entry point   * IPB frame encoder entry point
1002   *   *
# Line 1225  Line 1306 
1306                  if (pEnc->current->stamp > 0) {                  if (pEnc->current->stamp > 0) {
1307                          call_plugins(pEnc, pEnc->reference, &pEnc->sOriginal, XVID_PLG_AFTER, NULL, NULL, stats);                          call_plugins(pEnc, pEnc->reference, &pEnc->sOriginal, XVID_PLG_AFTER, NULL, NULL, stats);
1308                  }                  }
1309                  else          else if (stats) {
1310                          stats->type = XVID_TYPE_NOTHING;                          stats->type = XVID_TYPE_NOTHING;
1311          }          }
1312            }
1313    
1314          /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1315           * closed-gop           * closed-gop
# Line 1346  Line 1428 
1428    
1429                  if ( FrameCodeP(pEnc, &bs) == 0 ) {                  if ( FrameCodeP(pEnc, &bs) == 0 ) {
1430                          /* N-VOP, we mustn't code b-frames yet */                          /* N-VOP, we mustn't code b-frames yet */
1431                            if ((pEnc->mbParam.global_flags & XVID_GLOBAL_PACKED) ||
1432                                     pEnc->mbParam.max_bframes == 0)
1433                          call_plugins(pEnc, pEnc->current, &pEnc->sOriginal, XVID_PLG_AFTER, NULL, NULL, stats);                          call_plugins(pEnc, pEnc->current, &pEnc->sOriginal, XVID_PLG_AFTER, NULL, NULL, stats);
1434                          goto done;                          goto done;
1435                  }                  }
# Line 1456  Line 1540 
1540          BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1, pEnc->current->mbs[0].quant);          BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1, pEnc->current->mbs[0].quant);
1541    
1542          pEnc->current->sStat.iTextBits = 0;          pEnc->current->sStat.iTextBits = 0;
1543            pEnc->current->sStat.iMVBits = 0;
1544          pEnc->current->sStat.kblks = mb_width * mb_height;          pEnc->current->sStat.kblks = mb_width * mb_height;
1545          pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0;          pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0;
1546    
# Line 1554  Line 1639 
1639          if ((current->vop_flags & XVID_VOP_HALFPEL)) {          if ((current->vop_flags & XVID_VOP_HALFPEL)) {
1640                  if (reference->is_interpolated != current->rounding_type) {                  if (reference->is_interpolated != current->rounding_type) {
1641                          start_timer();                          start_timer();
1642                          image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV,                          image_interpolate(pRef->y, pEnc->vInterH.y, pEnc->vInterV.y,
1643                                                            &pEnc->vInterHV, pParam->edged_width,                                                            pEnc->vInterHV.y, pParam->edged_width,
1644                                                            pParam->edged_height,                                                            pParam->edged_height,
1645                                                            (pParam->vol_flags & XVID_VOL_QUARTERPEL),                                                            (pParam->vol_flags & XVID_VOL_QUARTERPEL),
1646                                                            current->rounding_type);                                                            current->rounding_type);
# Line 1565  Line 1650 
1650          }          }
1651    
1652          current->sStat.iTextBits = current->sStat.iMvSum = current->sStat.iMvCount =          current->sStat.iTextBits = current->sStat.iMvSum = current->sStat.iMvCount =
1653                  current->sStat.kblks = current->sStat.mblks = current->sStat.ublks = 0;                  current->sStat.kblks = current->sStat.mblks = current->sStat.ublks =
1654                    current->sStat.iMVBits = 0;
1655    
1656          current->coding_type = P_VOP;          current->coding_type = P_VOP;
1657    
1658            if (current->vop_flags & XVID_VOP_RD_PSNRHVSM) {
1659                    image_block_variance(&current->image, pParam->edged_width, current->mbs,
1660                                         pParam->mb_width, pParam->mb_height);
1661            }
1662    
1663          call_plugins(pEnc, pEnc->current, NULL, XVID_PLG_FRAME, NULL, NULL, NULL);          call_plugins(pEnc, pEnc->current, NULL, XVID_PLG_FRAME, NULL, NULL, NULL);
1664    
1665          SetMacroblockQuants(&pEnc->mbParam, current);          SetMacroblockQuants(&pEnc->mbParam, current);
# Line 1624  Line 1715 
1715                  }                  }
1716          }          }
1717    
1718    
1719            if (pEnc->num_threads > 0) {
1720                    /* multithreaded motion estimation - dispatch threads */
1721    
1722                    void * status;
1723                    int rows_per_thread = (pParam->mb_height + pEnc->num_threads - 1)/pEnc->num_threads;
1724    
1725                    for (k = 0; k < pEnc->num_threads; k++) {
1726                            memset(pEnc->motionData[k].complete_count_self, 0, rows_per_thread * sizeof(int));
1727                            pEnc->motionData[k].pParam = &pEnc->mbParam;
1728                            pEnc->motionData[k].current = current;
1729                            pEnc->motionData[k].reference = reference;
1730                            pEnc->motionData[k].pRefH = &pEnc->vInterH;
1731                            pEnc->motionData[k].pRefV = &pEnc->vInterV;
1732                            pEnc->motionData[k].pRefHV = &pEnc->vInterHV;
1733                            pEnc->motionData[k].pGMC = &pEnc->vGMC;
1734                            pEnc->motionData[k].y_step = pEnc->num_threads;
1735                            pEnc->motionData[k].start_y = k;
1736                            /* todo: sort out temp space once and for all */
1737                            pEnc->motionData[k].RefQ = pEnc->vInterH.u + 16*k*pParam->edged_width;
1738                    }
1739    
1740                    for (k = 1; k < pEnc->num_threads; k++) {
1741                            pthread_create(&pEnc->motionData[k].handle, NULL,
1742                                    (void*)MotionEstimateSMP, (void*)&pEnc->motionData[k]);
1743                    }
1744    
1745                    MotionEstimateSMP(&pEnc->motionData[0]);
1746    
1747                    for (k = 1; k < pEnc->num_threads; k++) {
1748                            pthread_join(pEnc->motionData[k].handle, &status);
1749                    }
1750    
1751                    current->fcode = 0;
1752                    for (k = 0; k < pEnc->num_threads; k++) {
1753                            current->sStat.iMvSum += pEnc->motionData[k].mvSum;
1754                            current->sStat.iMvCount += pEnc->motionData[k].mvCount;
1755                            if (pEnc->motionData[k].minfcode > current->fcode)
1756                                    current->fcode = pEnc->motionData[k].minfcode;
1757                    }
1758    
1759            } else {
1760                    /* regular ME */
1761    
1762          MotionEstimation(&pEnc->mbParam, current, reference,          MotionEstimation(&pEnc->mbParam, current, reference,
1763                                           &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,                                           &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,
1764                                           &pEnc->vGMC, 256*4096);                                           &pEnc->vGMC, 256*4096);
1765            }
1766    
1767          stop_motion_timer();          stop_motion_timer();
1768    
# Line 1753  Line 1888 
1888  #if 0  #if 0
1889          DPRINTF(XVID_DEBUG_DEBUG, "kmu %i %i %i\n", current->sStat.kblks, current->sStat.mblks, current->sStat.ublks);          DPRINTF(XVID_DEBUG_DEBUG, "kmu %i %i %i\n", current->sStat.kblks, current->sStat.mblks, current->sStat.ublks);
1890  #endif  #endif
1891          if (current->sStat.kblks + current->sStat.mblks <=          if (current->sStat.kblks + current->sStat.mblks <
1892                  (pParam->frame_drop_ratio * mb_width * mb_height) / 100 &&                  (pParam->frame_drop_ratio * mb_width * mb_height) / 100 &&
1893                  ( (pEnc->bframenum_head >= pEnc->bframenum_tail) || !(pEnc->mbParam.global_flags & XVID_GLOBAL_CLOSED_GOP)) )                  ( (pEnc->bframenum_head >= pEnc->bframenum_tail) || !(pEnc->mbParam.global_flags & XVID_GLOBAL_CLOSED_GOP)) )
1894          {          {
1895                  current->sStat.kblks = current->sStat.mblks = 0;                  current->sStat.kblks = current->sStat.mblks = current->sStat.iTextBits = 0;
1896                  current->sStat.ublks = mb_width * mb_height;                  current->sStat.ublks = mb_width * mb_height;
1897    
1898                  BitstreamReset(bs);                  BitstreamReset(bs);
# Line 1847  Line 1982 
1982    
1983          if (pEnc->reference->is_interpolated != 0) {          if (pEnc->reference->is_interpolated != 0) {
1984                  start_timer();                  start_timer();
1985                  image_interpolate(f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,                  image_interpolate(f_ref->y, pEnc->f_refh.y, pEnc->f_refv.y, pEnc->f_refhv.y,
1986                                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,                                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
1987                                                    (pEnc->mbParam.vol_flags & XVID_VOL_QUARTERPEL), 0);                                                    (pEnc->mbParam.vol_flags & XVID_VOL_QUARTERPEL), 0);
1988                  stop_inter_timer();                  stop_inter_timer();
# Line 1864  Line 1999 
1999    
2000          if (pEnc->current->is_interpolated != 0) {          if (pEnc->current->is_interpolated != 0) {
2001                  start_timer();                  start_timer();
2002                  image_interpolate(b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,                  image_interpolate(b_ref->y, pEnc->vInterH.y, pEnc->vInterV.y, pEnc->vInterHV.y,
2003                                                  pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,                                                  pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
2004                                                  (pEnc->mbParam.vol_flags & XVID_VOL_QUARTERPEL), 0);                                                  (pEnc->mbParam.vol_flags & XVID_VOL_QUARTERPEL), 0);
2005                  stop_inter_timer();                  stop_inter_timer();
# Line 1872  Line 2007 
2007          }          }
2008    
2009          frame->coding_type = B_VOP;          frame->coding_type = B_VOP;
2010          call_plugins(pEnc, pEnc->current, NULL, XVID_PLG_FRAME, NULL, NULL, NULL);  
2011            if (pEnc->current->vop_flags & XVID_VOP_RD_PSNRHVSM) {
2012                    image_block_variance(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->current->mbs,
2013                                         pEnc->mbParam.mb_width, pEnc->mbParam.mb_height);
2014            }
2015    
2016            call_plugins(pEnc, frame, NULL, XVID_PLG_FRAME, NULL, NULL, NULL);
2017    
2018            frame->fcode = frame->bcode = pEnc->current->fcode;
2019    
2020          start_timer();          start_timer();
2021            if (pEnc->num_threads > 0) {
2022                    void * status;
2023                    int k;
2024                    /* multithreaded motion estimation - dispatch threads */
2025                    int rows_per_thread = (pEnc->mbParam.mb_height + pEnc->num_threads - 1)/pEnc->num_threads;
2026    
2027                    for (k = 0; k < pEnc->num_threads; k++) {
2028                            memset(pEnc->motionData[k].complete_count_self, 0, rows_per_thread * sizeof(int));
2029                            pEnc->motionData[k].pParam = &pEnc->mbParam;
2030                            pEnc->motionData[k].current = frame;
2031                            pEnc->motionData[k].reference = pEnc->current;
2032                            pEnc->motionData[k].fRef = f_ref;
2033                            pEnc->motionData[k].fRefH = &pEnc->f_refh;
2034                            pEnc->motionData[k].fRefV = &pEnc->f_refv;
2035                            pEnc->motionData[k].fRefHV = &pEnc->f_refhv;
2036                            pEnc->motionData[k].pRef = b_ref;
2037                            pEnc->motionData[k].pRefH = &pEnc->vInterH;
2038                            pEnc->motionData[k].pRefV = &pEnc->vInterV;
2039                            pEnc->motionData[k].pRefHV = &pEnc->vInterHV;
2040                            pEnc->motionData[k].time_bp = (int32_t)(pEnc->current->stamp - frame->stamp);
2041                            pEnc->motionData[k].time_pp = (int32_t)(pEnc->current->stamp - pEnc->reference->stamp);
2042                            pEnc->motionData[k].y_step = pEnc->num_threads;
2043                            pEnc->motionData[k].start_y = k;
2044                            /* todo: sort out temp space once and for all */
2045                            pEnc->motionData[k].RefQ = pEnc->vInterH.u + 16*k*pEnc->mbParam.edged_width;
2046                    }
2047    
2048                    for (k = 1; k < pEnc->num_threads; k++) {
2049                            pthread_create(&pEnc->motionData[k].handle, NULL,
2050                                    (void*)SMPMotionEstimationBVOP, (void*)&pEnc->motionData[k]);
2051                    }
2052    
2053                    SMPMotionEstimationBVOP(&pEnc->motionData[0]);
2054    
2055                    for (k = 1; k < pEnc->num_threads; k++) {
2056                            pthread_join(pEnc->motionData[k].handle, &status);
2057                    }
2058    
2059                    frame->fcode = frame->bcode = 0;
2060                    for (k = 0; k < pEnc->num_threads; k++) {
2061                            if (pEnc->motionData[k].minfcode > frame->fcode)
2062                                    frame->fcode = pEnc->motionData[k].minfcode;
2063                            if (pEnc->motionData[k].minbcode > frame->bcode)
2064                                    frame->bcode = pEnc->motionData[k].minbcode;
2065                    }
2066            } else {
2067          MotionEstimationBVOP(&pEnc->mbParam, frame,          MotionEstimationBVOP(&pEnc->mbParam, frame,
2068                                                   ((int32_t)(pEnc->current->stamp - frame->stamp)),                              /* time_bp */                                                   ((int32_t)(pEnc->current->stamp - frame->stamp)),                              /* time_bp */
2069                                                   ((int32_t)(pEnc->current->stamp - pEnc->reference->stamp)),    /* time_pp */                                                   ((int32_t)(pEnc->current->stamp - pEnc->reference->stamp)),    /* time_pp */
# Line 1882  Line 2071 
2071                                                   &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,                                                   &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,
2072                                                   pEnc->current, b_ref, &pEnc->vInterH,                                                   pEnc->current, b_ref, &pEnc->vInterH,
2073                                                   &pEnc->vInterV, &pEnc->vInterHV);                                                   &pEnc->vInterV, &pEnc->vInterHV);
2074            }
2075          stop_motion_timer();          stop_motion_timer();
2076    
2077          set_timecodes(frame, pEnc->reference,pEnc->mbParam.fbase);          set_timecodes(frame, pEnc->reference,pEnc->mbParam.fbase);
2078          BitstreamWriteVopHeader(bs, &pEnc->mbParam, frame, 1, frame->quant);          BitstreamWriteVopHeader(bs, &pEnc->mbParam, frame, 1, frame->quant);
2079    
2080          frame->sStat.iTextBits = 0;          frame->sStat.iTextBits = 0;
2081            frame->sStat.iMVBits = 0;
2082          frame->sStat.iMvSum = 0;          frame->sStat.iMvSum = 0;
2083          frame->sStat.iMvCount = 0;          frame->sStat.iMvCount = 0;
2084          frame->sStat.kblks = frame->sStat.mblks = frame->sStat.ublks = 0;          frame->sStat.kblks = frame->sStat.mblks = frame->sStat.ublks = 0;
# Line 1938  Line 2129 
2129                          stop_coding_timer();                          stop_coding_timer();
2130                  }                  }
2131          }          }
   
2132          emms();          emms();
2133    
2134          BitstreamPadAlways(bs); /* next_start_code() at the end of VideoObjectPlane() */          BitstreamPadAlways(bs); /* next_start_code() at the end of VideoObjectPlane() */

Legend:
Removed from v.1.120  
changed lines
  Added in v.1.133

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4