[svn] / branches / dev-api-3 / xvidcore / src / motion / motion_est.c Repository:
ViewVC logotype

Diff of /branches/dev-api-3/xvidcore/src/motion/motion_est.c

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

revision 766, Tue Jan 7 21:57:19 2003 UTC revision 767, Wed Jan 8 14:37:52 2003 UTC
# Line 932  Line 932 
932      else pmv[4].x = pmv[4].y = 0;      else pmv[4].x = pmv[4].y = 0;
933    
934          // [1] median prediction          // [1] median prediction
935          if (rrv) { //median is in halfzero-precision          pmv[1].x = EVEN(pmv[0].x); pmv[1].y = EVEN(pmv[0].y);
                 pmv[1].x = RRV_MV_SCALEUP(pmv[0].x);  
                 pmv[1].y = RRV_MV_SCALEUP(pmv[0].y);  
         } else { pmv[1].x = EVEN(pmv[0].x); pmv[1].y = EVEN(pmv[0].y); }  
936    
937          pmv[0].x = pmv[0].y = 0; // [0] is zero; not used in the loop (checked before) but needed here for make_mask          pmv[0].x = pmv[0].y = 0; // [0] is zero; not used in the loop (checked before) but needed here for make_mask
938    
# Line 950  Line 947 
947          if (rrv) {          if (rrv) {
948                  int i;                  int i;
949                  for (i = 0; i < 7; i++) {                  for (i = 0; i < 7; i++) {
950                          pmv[i].x = RRV_MV_SCALEDOWN(pmv[i].x);                          pmv[i].x = RRV_MV_SCALEUP(pmv[i].x); // halfzero->halfpel
951                          pmv[i].x = RRV_MV_SCALEUP(pmv[i].x); // a trick                          pmv[i].y = RRV_MV_SCALEUP(pmv[i].y);
952                  }                  }
953          }          }
954  }  }
# Line 1310  Line 1307 
1307    
1308          if ((x != 0)&&(y != 0)) {          if ((x != 0)&&(y != 0)) {
1309                  pmv[6] = ChoosePred(pMB-1-iWcount, mode_curr);                  pmv[6] = ChoosePred(pMB-1-iWcount, mode_curr);
1310                  pmv[6].x = EVEN(pmv[5].x); pmv[5].y = EVEN(pmv[5].y);                  pmv[6].x = EVEN(pmv[6].x); pmv[6].y = EVEN(pmv[6].y);
1311          } else pmv[6].x = pmv[6].y = 0;          } else pmv[6].x = pmv[6].y = 0;
1312    
1313  // more?  // more?
# Line 1418  Line 1415 
1415                            const IMAGE * const f_Ref,                            const IMAGE * const f_Ref,
1416                            const IMAGE * const b_Ref,                            const IMAGE * const b_Ref,
1417                            MACROBLOCK * const pMB,                            MACROBLOCK * const pMB,
                           const uint32_t quant,  
1418                            const uint32_t x, const uint32_t y,                            const uint32_t x, const uint32_t y,
1419                            const SearchData * const Data)                            const SearchData * const Data)
1420  {  {
1421          int dx, dy, b_dx, b_dy;          int dx = 0, dy = 0, b_dx = 0, b_dy = 0;
1422          uint32_t sum;          uint32_t sum;
1423            const int div = 1 + Data->qpel;
1424            int k;
1425            const uint32_t quant = pMB->quant;
1426  //this is not full chroma compensation, only it's fullpel approximation. should work though  //this is not full chroma compensation, only it's fullpel approximation. should work though
         if (Data->qpel) {  
                 dy = Data->directmvF[0].y/2 + Data->directmvF[1].y/2 +  
                                 Data->directmvF[2].y/2 + Data->directmvF[3].y/2;  
   
                 dx = Data->directmvF[0].x/2 + Data->directmvF[1].x/2 +  
                                 Data->directmvF[2].x/2 + Data->directmvF[3].x/2;  
   
                 b_dy = Data->directmvB[0].y/2 + Data->directmvB[1].y/2 +  
                                 Data->directmvB[2].y/2 + Data->directmvB[3].y/2;  
   
                 b_dx = Data->directmvB[0].x/2 + Data->directmvB[1].x/2 +  
                                 Data->directmvB[2].x/2 + Data->directmvB[3].x/2;  
   
         } else {  
                 dy = Data->directmvF[0].y + Data->directmvF[1].y +  
                                 Data->directmvF[2].y + Data->directmvF[3].y;  
1427    
1428                  dx = Data->directmvF[0].x + Data->directmvF[1].x +          for (k = 0; k < 4; k++) {
1429                                  Data->directmvF[2].x + Data->directmvF[3].x;                  dy += Data->directmvF[k].y / div;
1430                    dx += Data->directmvF[0].x / div;
1431                  b_dy = Data->directmvB[0].y + Data->directmvB[1].y +                  b_dy += Data->directmvB[0].y / div;
1432                                  Data->directmvB[2].y + Data->directmvB[3].y;                  b_dx += Data->directmvB[0].x / div;
   
                 b_dx = Data->directmvB[0].x + Data->directmvB[1].x +  
                                 Data->directmvB[2].x + Data->directmvB[3].x;  
1433          }          }
1434    
   
1435          dy = (dy >> 3) + roundtab_76[dy & 0xf];          dy = (dy >> 3) + roundtab_76[dy & 0xf];
1436          dx = (dx >> 3) + roundtab_76[dx & 0xf];          dx = (dx >> 3) + roundtab_76[dx & 0xf];
1437          b_dy = (b_dy >> 3) + roundtab_76[b_dy & 0xf];          b_dy = (b_dy >> 3) + roundtab_76[b_dy & 0xf];
# Line 1462  Line 1441 
1441                                          f_Ref->u + (y*8 + dy/2) * (Data->iEdgedWidth/2) + x*8 + dx/2,                                          f_Ref->u + (y*8 + dy/2) * (Data->iEdgedWidth/2) + x*8 + dx/2,
1442                                          b_Ref->u + (y*8 + b_dy/2) * (Data->iEdgedWidth/2) + x*8 + b_dx/2,                                          b_Ref->u + (y*8 + b_dy/2) * (Data->iEdgedWidth/2) + x*8 + b_dx/2,
1443                                          Data->iEdgedWidth/2);                                          Data->iEdgedWidth/2);
1444    
1445            if (sum >= 2 * MAX_CHROMA_SAD_FOR_SKIP * quant) return; //no skip
1446    
1447          sum += sad8bi(pCur->v + 8*x + 8*y*(Data->iEdgedWidth/2),          sum += sad8bi(pCur->v + 8*x + 8*y*(Data->iEdgedWidth/2),
1448                                          f_Ref->v + (y*8 + dy/2) * (Data->iEdgedWidth/2) + x*8 + dx/2,                                          f_Ref->v + (y*8 + dy/2) * (Data->iEdgedWidth/2) + x*8 + dx/2,
1449                                          b_Ref->v + (y*8 + b_dy/2) * (Data->iEdgedWidth/2) + x*8 + b_dx/2,                                          b_Ref->v + (y*8 + b_dy/2) * (Data->iEdgedWidth/2) + x*8 + b_dx/2,
# Line 1551  Line 1533 
1533    
1534  // initial (fast) skip decision  // initial (fast) skip decision
1535          if (*Data->iMinSAD < pMB->quant * INITIAL_SKIP_THRESH*2) {          if (*Data->iMinSAD < pMB->quant * INITIAL_SKIP_THRESH*2) {
1536                  SkipDecisionB(pCur, f_Ref, b_Ref, pMB, x, y, Data->chroma, Data); //possible skip - checking chroma                  SkipDecisionB(pCur, f_Ref, b_Ref, pMB, x, y, Data); //possible skip - checking chroma
1537                  if (pMB->mode == MODE_DIRECT_NONE_MV) return *Data->iMinSAD; // skip.                  if (pMB->mode == MODE_DIRECT_NONE_MV) return *Data->iMinSAD; // skip.
1538          }          }
1539    
# Line 1836  Line 1818 
1818  // final skip decision  // final skip decision
1819                          if ( (skip_sad < frame->quant * MAX_SAD00_FOR_SKIP*2)                          if ( (skip_sad < frame->quant * MAX_SAD00_FOR_SKIP*2)
1820                                          && ((100*best_sad)/(skip_sad+1) > FINAL_SKIP_THRESH) )                                          && ((100*best_sad)/(skip_sad+1) > FINAL_SKIP_THRESH) )
1821                                  SkipDecisionB(&frame->image, f_ref, b_ref, pMB,frame->quant, i, j, &Data);                                  SkipDecisionB(&frame->image, f_ref, b_ref, pMB, i, j, &Data);
1822    
1823                          switch (pMB->mode) {                          switch (pMB->mode) {
1824                                  case MODE_FORWARD:                                  case MODE_FORWARD:

Legend:
Removed from v.766  
changed lines
  Added in v.767

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