[svn] / trunk / xvidcore / src / motion / estimation_bvop.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/motion/estimation_bvop.c

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

revision 1516, Wed Jul 21 14:52:22 2004 UTC revision 1556, Tue Oct 12 21:08:41 2004 UTC
# Line 21  Line 21 
21   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
22   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
23   *   *
24   * $Id: estimation_bvop.c,v 1.12 2004-07-21 14:52:22 syskin Exp $   * $Id: estimation_bvop.c,v 1.16 2004-10-12 21:08:41 edgomez Exp $
25   *   *
26   ****************************************************************************/   ****************************************************************************/
27    
# Line 522  Line 522 
522  {  {
523          int k;          int k;
524    
         pMB->mode = MODE_DIRECT; /* just to initialize it */  
   
525          if (!Data->chroma) {          if (!Data->chroma) {
526                  int dx = 0, dy = 0, b_dx = 0, b_dy = 0;                  int dx = 0, dy = 0, b_dx = 0, b_dy = 0;
527                  int32_t sum;                  int32_t sum;
# Line 543  Line 541 
541                  b_dx = (b_dx >> 3) + roundtab_76[b_dx & 0xf];                  b_dx = (b_dx >> 3) + roundtab_76[b_dx & 0xf];
542    
543                  sum = sad8bi(Data->CurU,                  sum = sad8bi(Data->CurU,
544                                                  Data->RefP[4] + (dy/2) * stride + dx/2,                                                  Data->RefP[4] + (dy/2) * (int)stride + dx/2,
545                                                  Data->b_RefP[4] + (b_dy/2) * stride + b_dx/2,                                                  Data->b_RefP[4] + (b_dy/2) * (int)stride + b_dx/2,
546                                                  stride);                                                  stride);
547    
548                  if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */                  if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */
549    
550                  sum += sad8bi(Data->CurV,                  sum += sad8bi(Data->CurV,
551                                                  Data->RefP[5] + (dy/2) * stride + dx/2,                                                  Data->RefP[5] + (dy/2) * (int)stride + dx/2,
552                                                  Data->b_RefP[5] + (b_dy/2) * stride + b_dx/2,                                                  Data->b_RefP[5] + (b_dy/2) * (int)stride + b_dx/2,
553                                                  stride);                                                  stride);
554    
555                  if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */                  if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */
# Line 566  Line 564 
564          for (k = 0; k < 4; k++) {          for (k = 0; k < 4; k++) {
565                  pMB->qmvs[k] = pMB->mvs[k] = Data->directmvF[k];                  pMB->qmvs[k] = pMB->mvs[k] = Data->directmvF[k];
566                  pMB->b_qmvs[k] = pMB->b_mvs[k] =  Data->directmvB[k];                  pMB->b_qmvs[k] = pMB->b_mvs[k] =  Data->directmvB[k];
567                    if (Data->qpel) {
568                            pMB->mvs[k].x /= 2; pMB->mvs[k].y /= 2; /* it's a hint for future searches */
569                            pMB->b_mvs[k].x /= 2; pMB->b_mvs[k].y /= 2;
570                    }
571          }          }
572  }  }
573    
# Line 641  Line 643 
643                          Data->directmvB[0].y                          Data->directmvB[0].y
644                          : Data->currentMV[1].y - Data->referencemv[0].y);                          : Data->currentMV[1].y - Data->referencemv[0].y);
645    
646            *best_sad = Data->iMinSAD[0];
647    
648          return skip_sad;          return skip_sad;
649  }  }
650    
# Line 935  Line 939 
939                                           const IMAGE * const b_refHV)                                           const IMAGE * const b_refHV)
940  {  {
941          uint32_t i, j;          uint32_t i, j;
942          int32_t best_sad, sad2;          int32_t best_sad = 256*4096;
943            int32_t sad2;
944          uint32_t skip_sad;          uint32_t skip_sad;
945    
946          const MACROBLOCK * const b_mbs = b_reference->mbs;          const MACROBLOCK * const b_mbs = b_reference->mbs;
# Line 1031  Line 1036 
1036                          if ( (skip_sad < 2 * Data_d.iQuant * MAX_SAD00_FOR_SKIP )                          if ( (skip_sad < 2 * Data_d.iQuant * MAX_SAD00_FOR_SKIP )
1037                                  && ((100*best_sad)/(skip_sad+1) > FINAL_SKIP_THRESH) ) {                                  && ((100*best_sad)/(skip_sad+1) > FINAL_SKIP_THRESH) ) {
1038    
1039                                  if (!Data_d.chroma) { /* we still need to check chroma */                                  Data_d.chromaSAD = 0; /* green light for chroma check */
1040    
1041                                          SkipDecisionB(pMB, &Data_d);                                          SkipDecisionB(pMB, &Data_d);
1042    
1043                                          if (pMB->mode == MODE_DIRECT_NONE_MV) { /* skipped? */                                          if (pMB->mode == MODE_DIRECT_NONE_MV) { /* skipped? */
1044                                                  pMB->sad16 = skip_sad;                                                  pMB->sad16 = skip_sad;
1045                                                  continue;                                                  continue;
1046                                          }                                          }
                                 } else { /* just SKIP */  
                                         pMB->mode = MODE_DIRECT_NONE_MV;  
                                         pMB->sad16 = skip_sad;  
                                         continue;  
                                 }  
1047                          }                          }
1048    
1049                          if (frame->vop_flags & XVID_VOP_RD_BVOP)                          if (frame->vop_flags & XVID_VOP_RD_BVOP)

Legend:
Removed from v.1516  
changed lines
  Added in v.1556

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