[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 721, Sat Dec 14 09:39:42 2002 UTC revision 724, Sun Dec 15 14:24:20 2002 UTC
# Line 53  Line 53 
53  (*CheckCandidate)((const int)(X),(const int)(Y), (D), &iDirection, data ); }  (*CheckCandidate)((const int)(X),(const int)(Y), (D), &iDirection, data ); }
54    
55  static __inline int  static __inline int
56  d_mv_bits(int x, int y, const uint32_t iFcode, const int qpel, const int rrv)  d_mv_bits(int x, int y, const VECTOR pred, const uint32_t iFcode, const int qpel, const int rrv)
57  {  {
58          int xb, yb;          int xb, yb;
59          if (qpel) { x *= 2; y *= 2;}          if (qpel) { x *= 2; y *= 2;}
60          else if (rrv) { x = RRV_MV_SCALEDOWN(x); y = RRV_MV_SCALEDOWN(y); }          else if (rrv) { x = RRV_MV_SCALEDOWN(x); y = RRV_MV_SCALEDOWN(y); }
61            x = pred.x - x;
62            y = pred.y - y;
63    
64          if (x == 0) xb = 1;          if (x == 0) xb = 1;
65          else {          else {
# Line 246  Line 248 
248                  current = data->currentMV;                  current = data->currentMV;
249                  xc = x; yc = y;                  xc = x; yc = y;
250          }          }
251          t = d_mv_bits(x - data->predMV.x, y - data->predMV.y, data->iFcode, data->qpel && !data->qpel_precision, 0);          t = d_mv_bits(x, y, data->predMV, data->iFcode, data->qpel && !data->qpel_precision, 0);
252    
253          data->temp[0] = sad16v(data->Cur, Reference, data->iEdgedWidth, data->temp + 1);          data->temp[0] = sad16v(data->Cur, Reference, data->iEdgedWidth, data->temp + 1);
254    
# Line 282  Line 284 
284                  || ( y > data->max_dy) || (y < data->min_dy)) return;                  || ( y > data->max_dy) || (y < data->min_dy)) return;
285    
286          Reference = GetReference(x, y, 0, data);          Reference = GetReference(x, y, 0, data);
287          t = d_mv_bits(x - data->predMV.x, y - data->predMV.y, data->iFcode, 0, 1);          t = d_mv_bits(x, y, data->predMV, data->iFcode, 0, 1);
288    
289          data->temp[0] = sad32v_c(data->Cur, Reference, data->iEdgedWidth, data->temp + 1);          data->temp[0] = sad32v_c(data->Cur, Reference, data->iEdgedWidth, data->temp + 1);
290    
# Line 325  Line 327 
327                  Reference = GetReference(x, y, 0, data);                  Reference = GetReference(x, y, 0, data);
328                  current = data->currentMV;                  current = data->currentMV;
329          }          }
330          t = d_mv_bits(x - data->predMV.x, y - data->predMV.y, data->iFcode,          t = d_mv_bits(x, y, data->predMV, data->iFcode,
331                                          data->qpel && !data->qpel_precision && !data->rrv, data->rrv);                                          data->qpel && !data->qpel_precision && !data->rrv, data->rrv);
332    
333          sad = sad16(data->Cur, Reference, data->iEdgedWidth, 256*4096);          sad = sad16(data->Cur, Reference, data->iEdgedWidth, 256*4096);
# Line 379  Line 381 
381                  current = data->currentMV;                  current = data->currentMV;
382          }          }
383    
384          t = d_mv_bits(xf - data->predMV.x, yf - data->predMV.y, data->iFcode, data->qpel && !data->qpel_precision, 0)          t = d_mv_bits(xf, yf, data->predMV, data->iFcode, data->qpel && !data->qpel_precision, 0)
385                   + d_mv_bits(xb - data->bpredMV.x, yb - data->bpredMV.y, data->iFcode, data->qpel && !data->qpel_precision, 0);                   + d_mv_bits(xb, yb, data->bpredMV, data->iFcode, data->qpel && !data->qpel_precision, 0);
386    
387          sad = sad16bi(data->Cur, ReferenceF, ReferenceB, data->iEdgedWidth);          sad = sad16bi(data->Cur, ReferenceF, ReferenceB, data->iEdgedWidth);
388          sad += (data->lambda16 * t * sad)/1000;          sad += (data->lambda16 * t * sad)/1000;
# Line 399  Line 401 
401          const uint8_t *ReferenceF;          const uint8_t *ReferenceF;
402          const uint8_t *ReferenceB;          const uint8_t *ReferenceB;
403          VECTOR mvs, b_mvs;          VECTOR mvs, b_mvs;
404            const VECTOR zeroMV={0,0};
405    
406          if (( x > 31) || ( x < -32) || ( y > 31) || (y < -32)) return;          if (( x > 31) || ( x < -32) || ( y > 31) || (y < -32)) return;
407    
# Line 431  Line 434 
434                  if (sad > *(data->iMinSAD)) return;                  if (sad > *(data->iMinSAD)) return;
435          }          }
436    
437          sad += (data->lambda16 * d_mv_bits(x, y, 1, 0, 0) * sad)/1000;          sad += (data->lambda16 * d_mv_bits(x, y, zeroMV, 1, 0, 0) * sad)/1000;
438    
439          if (sad < *(data->iMinSAD)) {          if (sad < *(data->iMinSAD)) {
440                  *(data->iMinSAD) = sad;                  *(data->iMinSAD) = sad;
# Line 446  Line 449 
449          const uint8_t *ReferenceF;          const uint8_t *ReferenceF;
450          const uint8_t *ReferenceB;          const uint8_t *ReferenceB;
451          VECTOR mvs, b_mvs;          VECTOR mvs, b_mvs;
452            const VECTOR zeroMV = {0,0};
453    
454          if (( x > 31) || ( x < -32) || ( y > 31) || (y < -32)) return;          if (( x > 31) || ( x < -32) || ( y > 31) || (y < -32)) return;
455    
# Line 472  Line 476 
476          ReferenceB = Interpolate16x16qpel(b_mvs.x, b_mvs.y, 1, data);          ReferenceB = Interpolate16x16qpel(b_mvs.x, b_mvs.y, 1, data);
477    
478          sad = sad16bi(data->Cur, ReferenceF, ReferenceB, data->iEdgedWidth);          sad = sad16bi(data->Cur, ReferenceF, ReferenceB, data->iEdgedWidth);
479          sad += (data->lambda16 * d_mv_bits(x, y, 1, 0, 0) * sad)/1000;          sad += (data->lambda16 * d_mv_bits(x, y, zeroMV, 1, 0, 0) * sad)/1000;
480    
481          if (sad < *(data->iMinSAD)) {          if (sad < *(data->iMinSAD)) {
482                  *(data->iMinSAD) = sad;                  *(data->iMinSAD) = sad;
# Line 493  Line 497 
497          else Reference =  GetReference(x, y, 0, data);          else Reference =  GetReference(x, y, 0, data);
498    
499          sad = sad8(data->Cur, Reference, data->iEdgedWidth);          sad = sad8(data->Cur, Reference, data->iEdgedWidth);
500          t = d_mv_bits(x - data->predMV.x, y - data->predMV.y, data->iFcode, data->qpel && !data->qpel_precision, 0);          t = d_mv_bits(x, y, data->predMV, data->iFcode, data->qpel && !data->qpel_precision, 0);
501    
502          sad += (data->lambda8 * t * (sad+NEIGH_8X8_BIAS))/100;          sad += (data->lambda8 * t * (sad+NEIGH_8X8_BIAS))/100;
503    
# Line 997  Line 1001 
1001          if (pParam->m_quarterpel) Data->predMV = get_qpmv2(pMBs, pParam->mb_width, 0, x, y, 0);          if (pParam->m_quarterpel) Data->predMV = get_qpmv2(pMBs, pParam->mb_width, 0, x, y, 0);
1002          else Data->predMV = pmv[0];          else Data->predMV = pmv[0];
1003    
1004          i = d_mv_bits(Data->predMV.x, Data->predMV.y, Data->iFcode, 0, 0);          i = d_mv_bits(0, 0, Data->predMV, Data->iFcode, 0, 0);
1005          Data->iMinSAD[0] = pMB->sad16 + (Data->lambda16 * i * pMB->sad16)/1000;          Data->iMinSAD[0] = pMB->sad16 + (Data->lambda16 * i * pMB->sad16)/1000;
1006          Data->iMinSAD[1] = pMB->sad8[0] + (Data->lambda8 * i * (pMB->sad8[0]+NEIGH_8X8_BIAS))/100;          Data->iMinSAD[1] = pMB->sad8[0] + (Data->lambda8 * i * (pMB->sad8[0]+NEIGH_8X8_BIAS))/100;
1007          Data->iMinSAD[2] = pMB->sad8[1];          Data->iMinSAD[2] = pMB->sad8[1];
# Line 1172  Line 1176 
1176    
1177          if(pParam->m_quarterpel) {          if(pParam->m_quarterpel) {
1178                  Data->predMV = get_qpmv2(pMBs, pParam->mb_width, 0, x/2, y/2, block);                  Data->predMV = get_qpmv2(pMBs, pParam->mb_width, 0, x/2, y/2, block);
1179                  if (block != 0) i = d_mv_bits(  Data->currentQMV->x - Data->predMV.x,                  if (block != 0) i = d_mv_bits(  Data->currentQMV->x, Data->currentQMV->y,
1180                                                                                  Data->currentQMV->y - Data->predMV.y, Data->iFcode, 0, 0);                                                                                  Data->predMV, Data->iFcode, 0, 0);
1181    
1182          } else {          } else {
1183                  Data->predMV = get_pmv2(pMBs, pParam->mb_width, 0, x/2, y/2, block);                  Data->predMV = get_pmv2(pMBs, pParam->mb_width, 0, x/2, y/2, block);
1184                  if (block != 0) {                  if (block != 0) {
1185                          if (block != 0) i = d_mv_bits(  Data->currentMV->x - Data->predMV.x,                          if (block != 0) i = d_mv_bits(  Data->currentMV->x, Data->currentMV->y,
1186                                                                                          Data->currentMV->y - Data->predMV.y, Data->iFcode, 0, Data->rrv);                                                                                          Data->predMV, Data->iFcode, 0, Data->rrv);
1187                  }                  }
1188          }          }
1189    

Legend:
Removed from v.721  
changed lines
  Added in v.724

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