comparison cavs.c @ 5235:5e6c54a13769 libavcodec

make vector constants global
author stefang
date Sat, 07 Jul 2007 04:54:05 +0000
parents 2b72f9bc4f06
children 1e80bd238744
comparison
equal deleted inserted replaced
5234:c94c4aa7d25f 5235:5e6c54a13769
590 mvC = &h->mv[nP-5]; // set to top-left (mvD) 590 mvC = &h->mv[nP-5]; // set to top-left (mvD)
591 if((mode == MV_PRED_PSKIP) && 591 if((mode == MV_PRED_PSKIP) &&
592 ((mvA->ref == NOT_AVAIL) || (mvB->ref == NOT_AVAIL) || 592 ((mvA->ref == NOT_AVAIL) || (mvB->ref == NOT_AVAIL) ||
593 ((mvA->x | mvA->y | mvA->ref) == 0) || 593 ((mvA->x | mvA->y | mvA->ref) == 0) ||
594 ((mvB->x | mvB->y | mvB->ref) == 0) )) { 594 ((mvB->x | mvB->y | mvB->ref) == 0) )) {
595 mvP2 = &un_mv; 595 mvP2 = &ff_cavs_un_mv;
596 /* if there is only one suitable candidate, take it */ 596 /* if there is only one suitable candidate, take it */
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 mvP2= mvA; 598 mvP2= mvA;
599 } else if((mvA->ref < 0) && (mvB->ref >= 0) && (mvC->ref < 0)) { 599 } else if((mvA->ref < 0) && (mvB->ref >= 0) && (mvC->ref < 0)) {
600 mvP2= mvB; 600 mvP2= mvB;
744 } 744 }
745 h->pred_mode_Y[1] = h->top_pred_Y[h->mbx*2+0]; 745 h->pred_mode_Y[1] = h->top_pred_Y[h->mbx*2+0];
746 h->pred_mode_Y[2] = h->top_pred_Y[h->mbx*2+1]; 746 h->pred_mode_Y[2] = h->top_pred_Y[h->mbx*2+1];
747 /* clear top predictors if MB B is not available */ 747 /* clear top predictors if MB B is not available */
748 if(!(h->flags & B_AVAIL)) { 748 if(!(h->flags & B_AVAIL)) {
749 h->mv[MV_FWD_B2] = un_mv; 749 h->mv[MV_FWD_B2] = ff_cavs_un_mv;
750 h->mv[MV_FWD_B3] = un_mv; 750 h->mv[MV_FWD_B3] = ff_cavs_un_mv;
751 h->mv[MV_BWD_B2] = un_mv; 751 h->mv[MV_BWD_B2] = ff_cavs_un_mv;
752 h->mv[MV_BWD_B3] = un_mv; 752 h->mv[MV_BWD_B3] = ff_cavs_un_mv;
753 h->pred_mode_Y[1] = h->pred_mode_Y[2] = NOT_AVAIL; 753 h->pred_mode_Y[1] = h->pred_mode_Y[2] = NOT_AVAIL;
754 h->flags &= ~(C_AVAIL|D_AVAIL); 754 h->flags &= ~(C_AVAIL|D_AVAIL);
755 } else if(h->mbx) { 755 } else if(h->mbx) {
756 h->flags |= D_AVAIL; 756 h->flags |= D_AVAIL;
757 } 757 }
758 if(h->mbx == h->mb_width-1) //MB C not available 758 if(h->mbx == h->mb_width-1) //MB C not available
759 h->flags &= ~C_AVAIL; 759 h->flags &= ~C_AVAIL;
760 /* clear top-right predictors if MB C is not available */ 760 /* clear top-right predictors if MB C is not available */
761 if(!(h->flags & C_AVAIL)) { 761 if(!(h->flags & C_AVAIL)) {
762 h->mv[MV_FWD_C2] = un_mv; 762 h->mv[MV_FWD_C2] = ff_cavs_un_mv;
763 h->mv[MV_BWD_C2] = un_mv; 763 h->mv[MV_BWD_C2] = ff_cavs_un_mv;
764 } 764 }
765 /* clear top-left predictors if MB D is not available */ 765 /* clear top-left predictors if MB D is not available */
766 if(!(h->flags & D_AVAIL)) { 766 if(!(h->flags & D_AVAIL)) {
767 h->mv[MV_FWD_D3] = un_mv; 767 h->mv[MV_FWD_D3] = ff_cavs_un_mv;
768 h->mv[MV_BWD_D3] = un_mv; 768 h->mv[MV_BWD_D3] = ff_cavs_un_mv;
769 } 769 }
770 /* set pointer for co-located macroblock type */ 770 /* set pointer for co-located macroblock type */
771 h->col_type = &h->col_type_base[h->mby*h->mb_width + h->mbx]; 771 h->col_type = &h->col_type_base[h->mby*h->mb_width + h->mbx];
772 } 772 }
773 773
799 h->flags = B_AVAIL|C_AVAIL; 799 h->flags = B_AVAIL|C_AVAIL;
800 /* clear left pred_modes */ 800 /* clear left pred_modes */
801 h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL; 801 h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL;
802 /* clear left mv predictors */ 802 /* clear left mv predictors */
803 for(i=0;i<=20;i+=4) 803 for(i=0;i<=20;i+=4)
804 h->mv[i] = un_mv; 804 h->mv[i] = ff_cavs_un_mv;
805 h->mbx = 0; 805 h->mbx = 0;
806 h->mby++; 806 h->mby++;
807 /* re-calculate sample pointers */ 807 /* re-calculate sample pointers */
808 h->cy = h->picture.data[0] + h->mby*16*h->l_stride; 808 h->cy = h->picture.data[0] + h->mby*16*h->l_stride;
809 h->cu = h->picture.data[1] + h->mby*8*h->c_stride; 809 h->cu = h->picture.data[1] + h->mby*8*h->c_stride;
909 909
910 decode_residual_chroma(h); 910 decode_residual_chroma(h);
911 filter_mb(h,I_8X8); 911 filter_mb(h,I_8X8);
912 912
913 /* mark motion vectors as intra */ 913 /* mark motion vectors as intra */
914 h->mv[MV_FWD_X0] = intra_mv; 914 h->mv[MV_FWD_X0] = ff_cavs_intra_mv;
915 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16); 915 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
916 h->mv[MV_BWD_X0] = intra_mv; 916 h->mv[MV_BWD_X0] = ff_cavs_intra_mv;
917 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16); 917 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
918 if(h->pic_type != FF_B_TYPE) 918 if(h->pic_type != FF_B_TYPE)
919 *h->col_type = I_8X8; 919 *h->col_type = I_8X8;
920 920
921 return 0; 921 return 0;
970 int flags; 970 int flags;
971 971
972 init_mb(h); 972 init_mb(h);
973 973
974 /* reset all MVs */ 974 /* reset all MVs */
975 h->mv[MV_FWD_X0] = dir_mv; 975 h->mv[MV_FWD_X0] = ff_cavs_dir_mv;
976 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16); 976 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
977 h->mv[MV_BWD_X0] = dir_mv; 977 h->mv[MV_BWD_X0] = ff_cavs_dir_mv;
978 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16); 978 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
979 switch(mb_type) { 979 switch(mb_type) {
980 case B_SKIP: 980 case B_SKIP:
981 case B_DIRECT: 981 case B_DIRECT:
982 if(!(*h->col_type)) { 982 if(!(*h->col_type)) {
1114 static void init_pic(AVSContext *h) { 1114 static void init_pic(AVSContext *h) {
1115 int i; 1115 int i;
1116 1116
1117 /* clear some predictors */ 1117 /* clear some predictors */
1118 for(i=0;i<=20;i+=4) 1118 for(i=0;i<=20;i+=4)
1119 h->mv[i] = un_mv; 1119 h->mv[i] = ff_cavs_un_mv;
1120 h->mv[MV_BWD_X0] = dir_mv; 1120 h->mv[MV_BWD_X0] = ff_cavs_dir_mv;
1121 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16); 1121 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
1122 h->mv[MV_FWD_X0] = dir_mv; 1122 h->mv[MV_FWD_X0] = ff_cavs_dir_mv;
1123 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16); 1123 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
1124 h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL; 1124 h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL;
1125 h->cy = h->picture.data[0]; 1125 h->cy = h->picture.data[0];
1126 h->cu = h->picture.data[1]; 1126 h->cu = h->picture.data[1];
1127 h->cv = h->picture.data[2]; 1127 h->cv = h->picture.data[2];
1422 h->intra_pred_c[ INTRA_C_VERT] = intra_pred_vert; 1422 h->intra_pred_c[ INTRA_C_VERT] = intra_pred_vert;
1423 h->intra_pred_c[ INTRA_C_PLANE] = intra_pred_plane; 1423 h->intra_pred_c[ INTRA_C_PLANE] = intra_pred_plane;
1424 h->intra_pred_c[ INTRA_C_LP_LEFT] = intra_pred_lp_left; 1424 h->intra_pred_c[ INTRA_C_LP_LEFT] = intra_pred_lp_left;
1425 h->intra_pred_c[ INTRA_C_LP_TOP] = intra_pred_lp_top; 1425 h->intra_pred_c[ INTRA_C_LP_TOP] = intra_pred_lp_top;
1426 h->intra_pred_c[ INTRA_C_DC_128] = intra_pred_dc_128; 1426 h->intra_pred_c[ INTRA_C_DC_128] = intra_pred_dc_128;
1427 h->mv[ 7] = un_mv; 1427 h->mv[ 7] = ff_cavs_un_mv;
1428 h->mv[19] = un_mv; 1428 h->mv[19] = ff_cavs_un_mv;
1429 return 0; 1429 return 0;
1430 } 1430 }
1431 1431
1432 static int cavs_decode_end(AVCodecContext * avctx) { 1432 static int cavs_decode_end(AVCodecContext * avctx) {
1433 AVSContext *h = avctx->priv_data; 1433 AVSContext *h = avctx->priv_data;