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