comparison cavs.c @ 3460:7a321f1b9eda libavcodec

simplify
author michael
date Sun, 09 Jul 2006 22:41:42 +0000
parents 9ccc2eb20012
children af598a3e2340
comparison
equal deleted inserted replaced
3459:9ccc2eb20012 3460:7a321f1b9eda
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 580
580 mvP->ref = ref; 581 mvP->ref = ref;
581 mvP->dist = h->dist[mvP->ref]; 582 mvP->dist = h->dist[mvP->ref];
582 if(mvC->ref == NOT_AVAIL) 583 if(mvC->ref == NOT_AVAIL)
583 mvC = &h->mv[nP-5]; // set to top-left (mvD) 584 mvC = &h->mv[nP-5]; // set to top-left (mvD)
590 return; 591 return;
591 } 592 }
592 } 593 }
593 /* if there is only one suitable candidate, take it */ 594 /* if there is only one suitable candidate, take it */
594 if((mvA->ref >= 0) && (mvB->ref < 0) && (mvC->ref < 0)) { 595 if((mvA->ref >= 0) && (mvB->ref < 0) && (mvC->ref < 0)) {
595 mvP->x = mvA->x; 596 mvP2= mvA;
596 mvP->y = mvA->y;
597 } else if((mvA->ref < 0) && (mvB->ref >= 0) && (mvC->ref < 0)) { 597 } else if((mvA->ref < 0) && (mvB->ref >= 0) && (mvC->ref < 0)) {
598 mvP->x = mvB->x; 598 mvP2= mvB;
599 mvP->y = mvB->y;
600 } else if((mvA->ref < 0) && (mvB->ref < 0) && (mvC->ref >= 0)) { 599 } else if((mvA->ref < 0) && (mvB->ref < 0) && (mvC->ref >= 0)) {
601 mvP->x = mvC->x; 600 mvP2= mvC;
602 mvP->y = mvC->y; 601 } else if(mode == MV_PRED_LEFT && mvA->ref == ref){
603 } else { 602 mvP2= mvA;
604 switch(mode) { 603 } else if(mode == MV_PRED_TOP && mvB->ref == ref){
605 case MV_PRED_LEFT: 604 mvP2= mvB;
606 if(mvA->ref == mvP->ref) { 605 } else if(mode == MV_PRED_TOPRIGHT && mvC->ref == ref){
607 mvP->x = mvA->x; 606 mvP2= mvC;
608 mvP->y = mvA->y; 607 }
609 } else 608 if(mvP2){
610 mv_pred_median(h, mvP, mvA, mvB, mvC); 609 mvP->x = mvP2->x;
611 break; 610 mvP->y = mvP2->y;
612 case MV_PRED_TOP: 611 }else
613 if(mvB->ref == mvP->ref) { 612 mv_pred_median(h, mvP, mvA, mvB, mvC);
614 mvP->x = mvB->x; 613
615 mvP->y = mvB->y;
616 } else
617 mv_pred_median(h, mvP, mvA, mvB, mvC);
618 break;
619 case MV_PRED_TOPRIGHT:
620 if(mvC->ref == mvP->ref) {
621 mvP->x = mvC->x;
622 mvP->y = mvC->y;
623 } else
624 mv_pred_median(h, mvP, mvA, mvB, mvC);
625 break;
626 default:
627 mv_pred_median(h, mvP, mvA, mvB, mvC);
628 break;
629 }
630 }
631 if(mode < MV_PRED_PSKIP) { 614 if(mode < MV_PRED_PSKIP) {
632 mvP->x += get_se_golomb(&h->s.gb); 615 mvP->x += get_se_golomb(&h->s.gb);
633 mvP->y += get_se_golomb(&h->s.gb); 616 mvP->y += get_se_golomb(&h->s.gb);
634 } 617 }
635 set_mvs(mvP,size); 618 set_mvs(mvP,size);