comparison cavs.c @ 3468:804434dc50c3 libavcodec

set mvP2 also in PSKIP macroblock
author stefang
date Fri, 14 Jul 2006 18:48:50 +0000
parents af598a3e2340
children c9059c843d4c
comparison
equal deleted inserted replaced
3467:33af013504d5 3468:804434dc50c3
574 enum mv_pred_t mode, enum block_t size, int ref) { 574 enum mv_pred_t mode, enum block_t size, int ref) {
575 vector_t *mvP = &h->mv[nP]; 575 vector_t *mvP = &h->mv[nP];
576 vector_t *mvA = &h->mv[nP-1]; 576 vector_t *mvA = &h->mv[nP-1];
577 vector_t *mvB = &h->mv[nP-4]; 577 vector_t *mvB = &h->mv[nP-4];
578 vector_t *mvC = &h->mv[nC]; 578 vector_t *mvC = &h->mv[nC];
579 vector_t *mvP2 = NULL; 579 const vector_t *mvP2 = NULL;
580 580
581 mvP->ref = ref; 581 mvP->ref = ref;
582 mvP->dist = h->dist[mvP->ref]; 582 mvP->dist = h->dist[mvP->ref];
583 if(mvC->ref == NOT_AVAIL) 583 if(mvC->ref == NOT_AVAIL)
584 mvC = &h->mv[nP-5]; // set to top-left (mvD) 584 mvC = &h->mv[nP-5]; // set to top-left (mvD)
585 if(mode == MV_PRED_PSKIP) { 585 if((mode == MV_PRED_PSKIP) &&
586 if((mvA->ref == NOT_AVAIL) || (mvB->ref == NOT_AVAIL) || 586 ((mvA->ref == NOT_AVAIL) || (mvB->ref == NOT_AVAIL) ||
587 ((mvA->x | mvA->y | mvA->ref) == 0) || 587 ((mvA->x | mvA->y | mvA->ref) == 0) ||
588 ((mvB->x | mvB->y | mvB->ref) == 0) ) { 588 ((mvB->x | mvB->y | mvB->ref) == 0) )) {
589 mvP->x = mvP->y = 0; 589 mvP2 = &un_mv;
590 set_mvs(mvP,size);
591 return;
592 }
593 }
594 /* if there is only one suitable candidate, take it */ 590 /* if there is only one suitable candidate, take it */
595 if((mvA->ref >= 0) && (mvB->ref < 0) && (mvC->ref < 0)) { 591 } else if((mvA->ref >= 0) && (mvB->ref < 0) && (mvC->ref < 0)) {
596 mvP2= mvA; 592 mvP2= mvA;
597 } else if((mvA->ref < 0) && (mvB->ref >= 0) && (mvC->ref < 0)) { 593 } else if((mvA->ref < 0) && (mvB->ref >= 0) && (mvC->ref < 0)) {
598 mvP2= mvB; 594 mvP2= mvB;
599 } else if((mvA->ref < 0) && (mvB->ref < 0) && (mvC->ref >= 0)) { 595 } else if((mvA->ref < 0) && (mvB->ref < 0) && (mvC->ref >= 0)) {
600 mvP2= mvC; 596 mvP2= mvC;