Mercurial > libavcodec.hg
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); |