[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.99.2.1, Sat May 3 23:24:30 2003 UTC revision 1.101, Mon Jul 28 12:36:20 2003 UTC
# Line 73  Line 73 
73                                            Bitstream * bs,                                            Bitstream * bs,
74                                            uint32_t * pBits,                                            uint32_t * pBits,
75                                            bool force_inter,                                            bool force_inter,
76                                            bool vol_header,                                            bool vol_header);
                                           int interpolate);  
77    
78  static void FrameCodeB(Encoder * pEnc,  static void FrameCodeB(Encoder * pEnc,
79                                             FRAMEINFO * frame,                                             FRAMEINFO * frame,
80                                             Bitstream * bs,                                             Bitstream * bs,
81                                             uint32_t * pBits,                                             uint32_t * pBits);
                                            int interpolate_forward,  
                                            int interpolate_backward);  
82    
83  /*****************************************************************************  /*****************************************************************************
84   * Local data   * Local data
# Line 186  Line 183 
183          /* 1 keyframe each 10 seconds */          /* 1 keyframe each 10 seconds */
184    
185          if (pParam->max_key_interval <= 0)          if (pParam->max_key_interval <= 0)
186                  pParam->max_key_interval = 10 * pParam->fincr / pParam->fbase;                  pParam->max_key_interval = 10 * pParam->fbase / pParam->fincr;
187    
188          pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), CACHE_LINE);          pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), CACHE_LINE);
189          if (pEnc == NULL)          if (pEnc == NULL)
# Line 680  Line 677 
677    
678          int input_valid = 1;          int input_valid = 1;
679          int bframes_count = 0;          int bframes_count = 0;
         int interpolate_forward = 1;  
         int interpolate_backward = 1;  
680    
681          ENC_CHECK(pEnc);          ENC_CHECK(pEnc);
682          ENC_CHECK(pFrame);          ENC_CHECK(pFrame);
# Line 716  Line 711 
711    
712                          SWAP(FRAMEINFO *, pEnc->current, pEnc->bframes[pEnc->bframenum_tail]);                          SWAP(FRAMEINFO *, pEnc->current, pEnc->bframes[pEnc->bframenum_tail]);
713    
714                          if (pEnc->mbParam.m_quarterpel)                          FrameCodeP(pEnc, &bs, &bits, 1, 0);
                                 pEnc->current->global_flags |= XVID_QUARTERPEL;  
                         else  
                                 pEnc->current->global_flags &= ~XVID_QUARTERPEL;  
   
                         FrameCodeP(pEnc, &bs, &bits, 1, 0, interpolate_backward);  
715                          bframes_count = 0;                          bframes_count = 0;
                         interpolate_forward = 0;  
                         interpolate_backward = 1;  
716    
717                          BitstreamPadAlways(&bs);                          BitstreamPadAlways(&bs);
718                          pFrame->length = BitstreamLength(&bs);                          pFrame->length = BitstreamLength(&bs);
# Line 739  Line 727 
727                                  pResult->kblks = pEnc->current->sStat.kblks;                                  pResult->kblks = pEnc->current->sStat.kblks;
728                                  pResult->mblks = pEnc->current->sStat.mblks;                                  pResult->mblks = pEnc->current->sStat.mblks;
729                                  pResult->ublks = pEnc->current->sStat.ublks;                                  pResult->ublks = pEnc->current->sStat.ublks;
                                 pResult->iblks = pEnc->current->sStat.iblks;  
                                 pResult->qblks = pEnc->current->sStat.qblks;  
730                          }                          }
731    
732                          return XVID_ERR_OK;                          return XVID_ERR_OK;
# Line 751  Line 737 
737                                  pEnc->bframenum_head, pEnc->bframenum_tail,                                  pEnc->bframenum_head, pEnc->bframenum_tail,
738                                  pEnc->queue_head, pEnc->queue_tail, pEnc->queue_size);                                  pEnc->queue_head, pEnc->queue_tail, pEnc->queue_size);
739    
740                  if (pEnc->mbParam.m_quarterpel)                  FrameCodeB(pEnc, pEnc->bframes[pEnc->bframenum_head], &bs, &bits);
                         pEnc->current->global_flags |= XVID_QUARTERPEL;  
                 else  
                         pEnc->current->global_flags &= ~XVID_QUARTERPEL;  
   
                 FrameCodeB(pEnc, pEnc->bframes[pEnc->bframenum_head], &bs,  
                                    &bits, interpolate_forward, interpolate_backward);  
741                  pEnc->bframenum_head++;                  pEnc->bframenum_head++;
742    
                 interpolate_forward = 0;  
                 interpolate_backward = 0;  
   
743                  BitstreamPadAlways(&bs);                  BitstreamPadAlways(&bs);
744                  pFrame->length = BitstreamLength(&bs);                  pFrame->length = BitstreamLength(&bs);
745                  pFrame->intra = 2;                  pFrame->intra = 2;
# Line 773  Line 750 
750                          pResult->kblks = pEnc->current->sStat.kblks;                          pResult->kblks = pEnc->current->sStat.kblks;
751                          pResult->mblks = pEnc->current->sStat.mblks;                          pResult->mblks = pEnc->current->sStat.mblks;
752                          pResult->ublks = pEnc->current->sStat.ublks;                          pResult->ublks = pEnc->current->sStat.ublks;
                         pResult->iblks = pEnc->current->sStat.iblks;  
                         pResult->qblks = pEnc->current->sStat.qblks;  
753                  }                  }
754    
755                  emms();                  emms();
# Line 824  Line 799 
799                                  pResult->kblks = pEnc->current->sStat.kblks;                                  pResult->kblks = pEnc->current->sStat.kblks;
800                                  pResult->mblks = pEnc->current->sStat.mblks;                                  pResult->mblks = pEnc->current->sStat.mblks;
801                                  pResult->ublks = pEnc->current->sStat.ublks;                                  pResult->ublks = pEnc->current->sStat.ublks;
                                 pResult->iblks = pEnc->current->sStat.iblks;  
                                 pResult->qblks = pEnc->current->sStat.qblks;  
802                          }                          }
803    
804                          emms();                          emms();
# Line 937  Line 910 
910                                  pResult->kblks = 0;                                  pResult->kblks = 0;
911                                  pResult->mblks = 0;                                  pResult->mblks = 0;
912                                  pResult->ublks = 0;                                  pResult->ublks = 0;
                                 pResult->iblks = 0;  
                                 pResult->qblks = 0;  
913                          }                          }
914                  } else {                  } else {
915    
# Line 948  Line 919 
919                                  pResult->kblks = pEnc->current->sStat.kblks;                                  pResult->kblks = pEnc->current->sStat.kblks;
920                                  pResult->mblks = pEnc->current->sStat.mblks;                                  pResult->mblks = pEnc->current->sStat.mblks;
921                                  pResult->ublks = pEnc->current->sStat.ublks;                                  pResult->ublks = pEnc->current->sStat.ublks;
                                 pResult->iblks = pEnc->current->sStat.iblks;  
                                 pResult->qblks = pEnc->current->sStat.qblks;  
922                          }                          }
923    
924                  }                  }
# Line 1088  Line 1057 
1057                          if ((pEnc->mbParam.global & XVID_GLOBAL_DEBUG)) {                          if ((pEnc->mbParam.global & XVID_GLOBAL_DEBUG)) {
1058                                  image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 100, "DX50 BVOP->PVOP");                                  image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 100, "DX50 BVOP->PVOP");
1059                          }                          }
1060                            FrameCodeP(pEnc, &bs, &bits, 1, 0);
                         if (pEnc->mbParam.m_quarterpel)  
                                 pEnc->current->global_flags |= XVID_QUARTERPEL;  
                         else  
                                 pEnc->current->global_flags &= ~XVID_QUARTERPEL;  
   
                         FrameCodeP(pEnc, &bs, &bits, 1, 0, interpolate_backward);  
1061                          bframes_count = 0;                          bframes_count = 0;
1062                          pFrame->intra = 0;                          pFrame->intra = 0;
                         interpolate_forward = 0;  
                         interpolate_backward = 1;  
1063    
1064                  } else {                  } else {
1065    
                         if (pEnc->mbParam.m_quarterpel)  
                                 pEnc->current->global_flags |= XVID_QUARTERPEL;  
                         else  
                                 pEnc->current->global_flags &= ~XVID_QUARTERPEL;  
   
1066                          FrameCodeI(pEnc, &bs, &bits);                          FrameCodeI(pEnc, &bs, &bits);
1067                          bframes_count = 0;                          bframes_count = 0;
                         interpolate_forward = 1;  
                         interpolate_backward = 1;  
1068                          pFrame->intra = 1;                          pFrame->intra = 1;
1069    
1070                          pEnc->bframenum_dx50bvop = -1;                          pEnc->bframenum_dx50bvop = -1;
# Line 1141  Line 1095 
1095                          image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 200, "PVOP");                          image_printf(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.height, 5, 200, "PVOP");
1096                  }                  }
1097    
1098                  if (pEnc->mbParam.m_quarterpel)                  FrameCodeP(pEnc, &bs, &bits, 1, 0);
                         pEnc->current->global_flags |= XVID_QUARTERPEL;  
                 else  
                         pEnc->current->global_flags &= ~XVID_QUARTERPEL;  
   
                 FrameCodeP(pEnc, &bs, &bits, 1, 0, interpolate_backward);  
1099                  bframes_count = 0;                  bframes_count = 0;
1100                  pFrame->intra = 0;                  pFrame->intra = 0;
                 interpolate_forward = 0;  
                 interpolate_backward = 1;  
1101                  pEnc->flush_bframes = 1;                  pEnc->flush_bframes = 1;
1102    
1103                  if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) {                  if ((pEnc->mbParam.global & XVID_GLOBAL_PACKED) && (pEnc->bframenum_tail > 0)) {
# Line 1208  Line 1155 
1155                  pResult->kblks = pEnc->current->sStat.kblks;                  pResult->kblks = pEnc->current->sStat.kblks;
1156                  pResult->mblks = pEnc->current->sStat.mblks;                  pResult->mblks = pEnc->current->sStat.mblks;
1157                  pResult->ublks = pEnc->current->sStat.ublks;                  pResult->ublks = pEnc->current->sStat.ublks;
                 pResult->iblks = pEnc->current->sStat.iblks;  
                 pResult->qblks = pEnc->current->sStat.qblks;  
1158    
1159                  if (pFrame->general & XVID_EXTRASTATS)                  if (pFrame->general & XVID_EXTRASTATS)
1160                  {       pResult->sse_y =                  {       pResult->sse_y =
# Line 1263  Line 1208 
1208          Bitstream bs;          Bitstream bs;
1209          uint32_t bits;          uint32_t bits;
1210          uint16_t write_vol_header = 0;          uint16_t write_vol_header = 0;
         unsigned int old_qpel;  
1211    
1212          float psnr;          float psnr;
1213          char temp[128];          char temp[128];
# Line 1317  Line 1261 
1261                  pEnc->current->quant = pFrame->quant;                  pEnc->current->quant = pFrame->quant;
1262          }          }
1263    
         old_qpel = pEnc->mbParam.m_quarterpel;  
   
1264          if ((pEnc->current->global_flags & XVID_QUARTERPEL))          if ((pEnc->current->global_flags & XVID_QUARTERPEL))
1265                  pEnc->mbParam.m_quarterpel = 1;                  pEnc->mbParam.m_quarterpel = 1;
1266          else          else
# Line 1389  Line 1331 
1331                                  && (pEnc->iFrameNum >= pEnc->mbParam.iMaxKeyInterval))) {                                  && (pEnc->iFrameNum >= pEnc->mbParam.iMaxKeyInterval))) {
1332                          pFrame->intra = FrameCodeI(pEnc, &bs, &bits);                          pFrame->intra = FrameCodeI(pEnc, &bs, &bits);
1333                  } else {                  } else {
1334                          if (old_qpel != pEnc->mbParam.m_quarterpel)                          pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 0, write_vol_header);
                                 pEnc->mbParam.m_quarterpel = old_qpel;  
                         pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 0, write_vol_header, 1);  
1335                  }                  }
1336          } else {          } else {
1337                  if (pFrame->intra == 1) {                  if (pFrame->intra == 1) {
1338                          pFrame->intra = FrameCodeI(pEnc, &bs, &bits);                          pFrame->intra = FrameCodeI(pEnc, &bs, &bits);
1339                  } else {                  } else {
1340                          if (old_qpel != pEnc->mbParam.m_quarterpel)                          pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 1, write_vol_header);
                                 pEnc->mbParam.m_quarterpel = old_qpel;  
                         pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 1, write_vol_header, 1);  
1341                  }                  }
1342    
1343          }          }
# Line 1418  Line 1356 
1356                  pResult->kblks = pEnc->current->sStat.kblks;                  pResult->kblks = pEnc->current->sStat.kblks;
1357                  pResult->mblks = pEnc->current->sStat.mblks;                  pResult->mblks = pEnc->current->sStat.mblks;
1358                  pResult->ublks = pEnc->current->sStat.ublks;                  pResult->ublks = pEnc->current->sStat.ublks;
                 pResult->iblks = pEnc->current->sStat.iblks;  
                 pResult->qblks = pEnc->current->sStat.qblks;  
1359          }          }
1360    
1361          emms();          emms();
# Line 1702  Line 1638 
1638    
1639          set_timecodes(pEnc->current,pEnc->reference,pEnc->mbParam.fbase);          set_timecodes(pEnc->current,pEnc->reference,pEnc->mbParam.fbase);
1640    
1641          BitstreamPadAlways(bs);          BitstreamPad(bs);
1642          BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1);          BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1);
1643    
1644          *pBits = BitstreamPos(bs);          *pBits = BitstreamPos(bs);
# Line 1710  Line 1646 
1646          pEnc->current->sStat.iTextBits = 0;          pEnc->current->sStat.iTextBits = 0;
1647          pEnc->current->sStat.kblks = mb_width * mb_height;          pEnc->current->sStat.kblks = mb_width * mb_height;
1648          pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0;          pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0;
         pEnc->current->sStat.iblks = pEnc->current->sStat.qblks = 0;  
1649    
1650          for (y = 0; y < mb_height; y++)          for (y = 0; y < mb_height; y++)
1651                  for (x = 0; x < mb_width; x++) {                  for (x = 0; x < mb_width; x++) {
# Line 1766  Line 1701 
1701                     Bitstream * bs,                     Bitstream * bs,
1702                     uint32_t * pBits,                     uint32_t * pBits,
1703                     bool force_inter,                     bool force_inter,
1704                     bool vol_header,                     bool vol_header)
                    int interpolate)  
1705  {  {
1706          float fSigma;          float fSigma;
1707    
# Line 1781  Line 1715 
1715          int x, y, k;          int x, y, k;
1716          int iSearchRange;          int iSearchRange;
1717          int bIntra, skip_possible;          int bIntra, skip_possible;
         IMAGE *refh, *refv, *refhv;  
1718    
1719          /* IMAGE *pCurrent = &pEnc->current->image; */          /* IMAGE *pCurrent = &pEnc->current->image; */
1720          IMAGE *pRef = &pEnc->reference->image;          IMAGE *pRef = &pEnc->reference->image;
# Line 1792  Line 1725 
1725                  mb_height = (pEnc->mbParam.height + 31) / 32;                  mb_height = (pEnc->mbParam.height + 31) / 32;
1726          }          }
1727    
1728            start_timer();
1729            image_setedges(pRef, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
1730                                       pEnc->mbParam.width, pEnc->mbParam.height);
1731            stop_edges_timer();
1732    
1733          pEnc->mbParam.m_rounding_type = 1 - pEnc->mbParam.m_rounding_type;          pEnc->mbParam.m_rounding_type = 1 - pEnc->mbParam.m_rounding_type;
1734          pEnc->current->rounding_type = pEnc->mbParam.m_rounding_type;          pEnc->current->rounding_type = pEnc->mbParam.m_rounding_type;
1735          pEnc->current->quarterpel =  pEnc->mbParam.m_quarterpel;          pEnc->current->quarterpel =  pEnc->mbParam.m_quarterpel;
# Line 1802  Line 1740 
1740          else          else
1741                  iLimit = mb_width * mb_height + 1;                  iLimit = mb_width * mb_height + 1;
1742    
         if((interpolate) || (pEnc->current->rounding_type != 0)) {  
                 start_timer();  
                 image_setedges(pRef, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,  
                                            pEnc->mbParam.width, pEnc->mbParam.height);  
                 stop_edges_timer();  
   
1743                  if ((pEnc->current->global_flags & XVID_HALFPEL)) {                  if ((pEnc->current->global_flags & XVID_HALFPEL)) {
1744                          start_timer();                          start_timer();
1745                          image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV,                          image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV,
# Line 1818  Line 1750 
1750                          stop_inter_timer();                          stop_inter_timer();
1751                  }                  }
1752    
                 refh = &pEnc->vInterH;  
                 refv = &pEnc->vInterV;  
                 refhv = &pEnc->vInterHV;  
         }  
         else {  
                 refh = &pEnc->f_refh;  
                 refv = &pEnc->f_refv;  
                 refhv = &pEnc->f_refhv;  
         }  
   
1753          pEnc->current->coding_type = P_VOP;          pEnc->current->coding_type = P_VOP;
1754    
1755          start_timer();          start_timer();
# Line 1836  Line 1758 
1758          else          else
1759                  bIntra =                  bIntra =
1760                          MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference,                          MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference,
1761                                                   refh, refv, refhv,                                                   &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,
1762                                                   iLimit);                                                   iLimit);
1763    
1764          stop_motion_timer();          stop_motion_timer();
# Line 1863  Line 1785 
1785          set_timecodes(pEnc->current,pEnc->reference,pEnc->mbParam.fbase);          set_timecodes(pEnc->current,pEnc->reference,pEnc->mbParam.fbase);
1786          if (vol_header)          if (vol_header)
1787          {       BitstreamWriteVolHeader(bs, &pEnc->mbParam, pEnc->current);          {       BitstreamWriteVolHeader(bs, &pEnc->mbParam, pEnc->current);
1788                  BitstreamPadAlways(bs);                  BitstreamPad(bs);
1789          }          }
1790    
1791          BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1);          BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1);
# Line 1872  Line 1794 
1794    
1795          pEnc->current->sStat.iTextBits = pEnc->current->sStat.iMvSum = pEnc->current->sStat.iMvCount =          pEnc->current->sStat.iTextBits = pEnc->current->sStat.iMvSum = pEnc->current->sStat.iMvCount =
1796          pEnc->current->sStat.kblks = pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0;          pEnc->current->sStat.kblks = pEnc->current->sStat.mblks = pEnc->current->sStat.ublks = 0;
         pEnc->current->sStat.iblks = pEnc->current->sStat.qblks = 0;  
1797    
1798    
1799          for (y = 0; y < mb_height; y++) {          for (y = 0; y < mb_height; y++) {
# Line 1934  Line 1855 
1855    
1856                          start_timer();                          start_timer();
1857                          MBMotionCompensation(pMB, x, y, &pEnc->reference->image,                          MBMotionCompensation(pMB, x, y, &pEnc->reference->image,
1858                                                                   refh, refv,                                                                   &pEnc->vInterH, &pEnc->vInterV,
1859                                                                   refhv, &pEnc->vGMC,                                                                   &pEnc->vInterHV, &pEnc->vGMC,
1860                                                                   &pEnc->current->image,                                                                   &pEnc->current->image,
1861                                                                   dct_codes, pEnc->mbParam.width,                                                                   dct_codes, pEnc->mbParam.width,
1862                                                                   pEnc->mbParam.height,                                                                   pEnc->mbParam.height,
# Line 1974  Line 1895 
1895                                  pEnc->current->sStat.ublks++;                                  pEnc->current->sStat.ublks++;
1896                          }                          }
1897    
                         if(pEnc->mbParam.m_quarterpel) {  
                                 for (k = 0; k < ((pMB->mode == MODE_INTER4V) ? 4 : 1); k++) {  
                                         if (((pMB->qmvs[k].x % 4) != 0) || ((pMB->qmvs[k].y % 4) != 0))  
                                                 pEnc->current->sStat.iblks++;  
   
                                         if (((pMB->qmvs[k].x % 4) & 1) || ((pMB->qmvs[k].y % 4) & 1))  
                                                 pEnc->current->sStat.qblks++;  
                                 }  
                         }  
   
1898                          start_timer();                          start_timer();
1899    
1900                          /* Finished processing the MB, now check if to CODE or SKIP */                          /* Finished processing the MB, now check if to CODE or SKIP */
# Line 2178  Line 2089 
2089  FrameCodeB(Encoder * pEnc,  FrameCodeB(Encoder * pEnc,
2090                     FRAMEINFO * frame,                     FRAMEINFO * frame,
2091                     Bitstream * bs,                     Bitstream * bs,
2092                     uint32_t * pBits,                     uint32_t * pBits)
                    int interpolate_forward,  
                    int interpolate_backward)  
2093  {  {
2094          DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE);          DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE);
2095          DECLARE_ALIGNED_MATRIX(qcoeff, 6, 64, int16_t, CACHE_LINE);          DECLARE_ALIGNED_MATRIX(qcoeff, 6, 64, int16_t, CACHE_LINE);
# Line 2205  Line 2114 
2114    
2115          frame->quarterpel =  pEnc->mbParam.m_quarterpel;          frame->quarterpel =  pEnc->mbParam.m_quarterpel;
2116    
         if ((interpolate_forward) || ((pEnc->mbParam.m_rounding_type != 1) && interpolate_backward)) {  
   
2117                  /* forward  */                  /* forward  */
2118                  image_setedges(f_ref, pEnc->mbParam.edged_width,                  image_setedges(f_ref, pEnc->mbParam.edged_width,
2119                                             pEnc->mbParam.edged_height, pEnc->mbParam.width,                                             pEnc->mbParam.edged_height, pEnc->mbParam.width,
2120                                             pEnc->mbParam.height);                                             pEnc->mbParam.height);
2121                  start_timer();                  start_timer();
2122                  image_interpolate(f_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,          image_interpolate(f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,
2123                                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,                                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
2124                                                    pEnc->mbParam.m_quarterpel, 0);                                                    pEnc->mbParam.m_quarterpel, 0);
2125                  stop_inter_timer();                  stop_inter_timer();
         }  
   
         if (interpolate_backward) {  
2126    
2127                  /* backward */                  /* backward */
2128                  image_setedges(b_ref, pEnc->mbParam.edged_width,                  image_setedges(b_ref, pEnc->mbParam.edged_width,
2129                                             pEnc->mbParam.edged_height, pEnc->mbParam.width,                                             pEnc->mbParam.edged_height, pEnc->mbParam.width,
2130                                             pEnc->mbParam.height);                                             pEnc->mbParam.height);
2131                  start_timer();                  start_timer();
2132                  image_interpolate(b_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,          image_interpolate(b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,
2133                                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,                                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
2134                                                    pEnc->mbParam.m_quarterpel, 0);                                                    pEnc->mbParam.m_quarterpel, 0);
2135                  stop_inter_timer();                  stop_inter_timer();
         }  
2136    
2137          start_timer();          start_timer();
2138    
2139          MotionEstimationBVOP(&pEnc->mbParam, frame,          MotionEstimationBVOP(&pEnc->mbParam, frame,
2140                                                   ((int32_t)(pEnc->current->stamp - frame->stamp)),                              /* time_bp */                                                   ((int32_t)(pEnc->current->stamp - frame->stamp)),                              /* time_bp */
2141                                                   ((int32_t)(pEnc->current->stamp - pEnc->reference->stamp)),    /* time_pp */                                                   ((int32_t)(pEnc->current->stamp - pEnc->reference->stamp)),    /* time_pp */
2142                                                   pEnc->reference->mbs, f_ref, &pEnc->vInterH,                                                   pEnc->reference->mbs, f_ref,
2143                                                   &pEnc->vInterV, &pEnc->vInterHV,                                                   &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,
2144                                                   pEnc->current, b_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv);                                                   pEnc->current, b_ref, &pEnc->vInterH,
2145                                                     &pEnc->vInterV, &pEnc->vInterHV);
2146    
2147    
2148          stop_motion_timer();          stop_motion_timer();
2149          /*          /*
# Line 2258  Line 2163 
2163          frame->sStat.iMvSum = 0;          frame->sStat.iMvSum = 0;
2164          frame->sStat.iMvCount = 0;          frame->sStat.iMvCount = 0;
2165          frame->sStat.kblks = frame->sStat.mblks = frame->sStat.ublks = 0;          frame->sStat.kblks = frame->sStat.mblks = frame->sStat.ublks = 0;
         frame->sStat.iblks = frame->sStat.qblks = 0;  
2166    
2167    
2168          for (y = 0; y < pEnc->mbParam.mb_height; y++) {          for (y = 0; y < pEnc->mbParam.mb_height; y++) {
# Line 2274  Line 2178 
2178    
2179                          if (mb->mode != MODE_DIRECT_NONE_MV) {                          if (mb->mode != MODE_DIRECT_NONE_MV) {
2180                                  MBMotionCompensationBVOP(&pEnc->mbParam, mb, x, y, &frame->image,                                  MBMotionCompensationBVOP(&pEnc->mbParam, mb, x, y, &frame->image,
2181                                                                           f_ref, &pEnc->vInterH, &pEnc->vInterV,                                                                           f_ref, &pEnc->f_refh, &pEnc->f_refv,
2182                                                                           &pEnc->vInterHV, b_ref, &pEnc->f_refh,                                                                           &pEnc->f_refhv, b_ref, &pEnc->vInterH,
2183                                                                           &pEnc->f_refv, &pEnc->f_refhv,                                                                           &pEnc->vInterV, &pEnc->vInterHV,
2184                                                                           dct_codes);                                                                           dct_codes);
2185    
2186                                  if (mb->mode == MODE_DIRECT_NO4V) mb->mode = MODE_DIRECT;                                  if (mb->mode == MODE_DIRECT_NO4V) mb->mode = MODE_DIRECT;

Legend:
Removed from v.1.99.2.1  
changed lines
  Added in v.1.101

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