[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 639, Mon Nov 11 08:42:35 2002 UTC revision 640, Mon Nov 11 09:01:51 2002 UTC
# Line 1960  Line 1960 
1960    
1961          int i = 255, mask;          int i = 255, mask;
1962          VECTOR pmv[3];          VECTOR pmv[3];
   
1963          *(Data->iMinSAD) = MV_MAX_ERROR;          *(Data->iMinSAD) = MV_MAX_ERROR;
1964          Data->predMV = get_pmv2(pMBs, pParam->mb_width, 0, x, y, 0);  
1965            //median is only used as prediction. it doesn't have to be real
1966            if (x == 1 && y == 1) Data->predMV.x = Data->predMV.y = 0;
1967            else
1968                    if (x == 1) //left macroblock does not have any vector now
1969                            Data->predMV = (pMB - pParam->mb_width)->mvs[0]; // top instead of median
1970                    else if (y == 1) // top macroblock don't have it's vector
1971                            Data->predMV = (pMB - 1)->mvs[0]; // left instead of median
1972                            else Data->predMV = get_pmv2(pMBs, pParam->mb_width, 0, x, y, 0); //else median
1973    
1974          get_range(&Data->min_dx, &Data->max_dx, &Data->min_dy, &Data->max_dy, x, y, 16,          get_range(&Data->min_dx, &Data->max_dx, &Data->min_dy, &Data->max_dy, x, y, 16,
1975                                  pParam->width, pParam->height, Data->iFcode, pParam->m_quarterpel);                                  pParam->width, pParam->height, Data->iFcode, pParam->m_quarterpel);
1976    
1977          Data->Cur = pCur + (x + y * pParam->edged_width) * 16;          Data->Cur = pCur + (x + y * pParam->edged_width) * 16;
1978          Data->Ref = pRef + (x + y * pParam->edged_width) * 16;          Data->Ref = pRef + (x + y * pParam->edged_width) * 16;
1979    
         CheckCandidate = CheckCandidate16no4vI;  
   
1980          pmv[1].x = EVEN(pMB->mvs[0].x);          pmv[1].x = EVEN(pMB->mvs[0].x);
1981          pmv[1].y = EVEN(pMB->mvs[0].y);          pmv[1].y = EVEN(pMB->mvs[0].y);
1982          pmv[0].x = EVEN(Data->predMV.x);          pmv[2].x = EVEN(Data->predMV.x);
1983          pmv[0].y = EVEN(Data->predMV.y);          pmv[2].y = EVEN(Data->predMV.y);
1984          pmv[2].x = pmv[2].y = 0;          pmv[0].x = pmv[0].y = 0;
1985    
1986            (*CheckCandidate)(0, 0, 255, &i, Data);
1987    
1988    //early skip for 0,0
1989            if (*Data->iMinSAD < MAX_SAD00_FOR_SKIP * 4) {
1990                    pMB->mvs[0] = pMB->mvs[1] = pMB->mvs[2] = pMB->mvs[3] = Data->currentMV[0];
1991                    pMB->mode = MODE_NOT_CODED;
1992                    return 0;
1993            }
1994    
         CheckCandidate16no4vI(pmv[0].x, pmv[0].y, 255, &i, Data);  
1995          if (!(mask = make_mask(pmv, 1)))          if (!(mask = make_mask(pmv, 1)))
1996                  CheckCandidate16no4vI(pmv[1].x, pmv[1].y, mask, &i, Data);                  (*CheckCandidate)(pmv[1].x, pmv[1].y, mask, &i, Data);
1997          if (!(mask = make_mask(pmv, 2)))          if (!(mask = make_mask(pmv, 2)))
1998                  CheckCandidate16no4vI(0, 0, mask, &i, Data);                  (*CheckCandidate)(pmv[2].x, pmv[2].y, mask, &i, Data);
1999    
2000            if (*Data->iMinSAD > MAX_SAD00_FOR_SKIP * 4) // diamond only if needed
2001          DiamondSearch(Data->currentMV->x, Data->currentMV->y, Data, i);          DiamondSearch(Data->currentMV->x, Data->currentMV->y, Data, i);
2002    
2003          pMB->mvs[0] = *Data->currentMV;          pMB->mvs[0] = pMB->mvs[1] = pMB->mvs[2] = pMB->mvs[3] = Data->currentMV[0];
2004          pMB->mode = MODE_INTER;          pMB->mode = MODE_INTER;
   
2005          return *(Data->iMinSAD);          return *(Data->iMinSAD);
2006  }  }
2007    
# Line 2011  Line 2025 
2025          Data.currentMV = &currentMV;          Data.currentMV = &currentMV;
2026          Data.iMinSAD = &iMinSAD;          Data.iMinSAD = &iMinSAD;
2027          Data.iFcode = iFcode;          Data.iFcode = iFcode;
2028            CheckCandidate = CheckCandidate16no4vI;
2029    
2030          if (sadInit) (*sadInit) ();          if (sadInit) (*sadInit) ();
2031    

Legend:
Removed from v.639  
changed lines
  Added in v.640

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