comparison vc1.c @ 4258:4d2f162506e3 libavcodec

10e6l FastUVMC was done right but in the wrong place
author kostya
date Sat, 02 Dec 2006 12:55:29 +0000
parents c2224aefb923
children d6f83e2f8804
comparison
equal deleted inserted replaced
4257:ac98478e056d 4258:4d2f162506e3
788 s->current_picture.motion_val[1][s->block_index[0]][0] = mx; 788 s->current_picture.motion_val[1][s->block_index[0]][0] = mx;
789 s->current_picture.motion_val[1][s->block_index[0]][1] = my; 789 s->current_picture.motion_val[1][s->block_index[0]][1] = my;
790 } 790 }
791 uvmx = (mx + ((mx & 3) == 3)) >> 1; 791 uvmx = (mx + ((mx & 3) == 3)) >> 1;
792 uvmy = (my + ((my & 3) == 3)) >> 1; 792 uvmy = (my + ((my & 3) == 3)) >> 1;
793 if(v->fastuvmc) {
794 uvmx = uvmx + ((uvmx<0)?(uvmx&1):-(uvmx&1));
795 uvmy = uvmy + ((uvmy<0)?(uvmy&1):-(uvmy&1));
796 }
793 if(!dir) { 797 if(!dir) {
794 srcY = s->last_picture.data[0]; 798 srcY = s->last_picture.data[0];
795 srcU = s->last_picture.data[1]; 799 srcU = s->last_picture.data[1];
796 srcV = s->last_picture.data[2]; 800 srcV = s->last_picture.data[2];
797 } else { 801 } else {
874 src += s->uvlinesize; 878 src += s->uvlinesize;
875 src2 += s->uvlinesize; 879 src2 += s->uvlinesize;
876 } 880 }
877 } 881 }
878 srcY += s->mspel * (1 + s->linesize); 882 srcY += s->mspel * (1 + s->linesize);
879 }
880
881 if(v->fastuvmc) {
882 uvmx = uvmx + ((uvmx<0)?-(uvmx&1):(uvmx&1));
883 uvmy = uvmy + ((uvmy<0)?-(uvmy&1):(uvmy&1));
884 } 883 }
885 884
886 if(s->mspel) { 885 if(s->mspel) {
887 dxy = ((my & 3) << 2) | (mx & 3); 886 dxy = ((my & 3) << 2) | (mx & 3);
888 dsp->put_vc1_mspel_pixels_tab[dxy](s->dest[0] , srcY , s->linesize, v->rnd); 887 dsp->put_vc1_mspel_pixels_tab[dxy](s->dest[0] , srcY , s->linesize, v->rnd);
1050 1049
1051 s->current_picture.motion_val[1][s->block_index[0]][0] = tx; 1050 s->current_picture.motion_val[1][s->block_index[0]][0] = tx;
1052 s->current_picture.motion_val[1][s->block_index[0]][1] = ty; 1051 s->current_picture.motion_val[1][s->block_index[0]][1] = ty;
1053 uvmx = (tx + ((tx&3) == 3)) >> 1; 1052 uvmx = (tx + ((tx&3) == 3)) >> 1;
1054 uvmy = (ty + ((ty&3) == 3)) >> 1; 1053 uvmy = (ty + ((ty&3) == 3)) >> 1;
1054 if(v->fastuvmc) {
1055 uvmx = uvmx + ((uvmx<0)?(uvmx&1):-(uvmx&1));
1056 uvmy = uvmy + ((uvmy<0)?(uvmy&1):-(uvmy&1));
1057 }
1055 1058
1056 uvsrc_x = s->mb_x * 8 + (uvmx >> 2); 1059 uvsrc_x = s->mb_x * 8 + (uvmx >> 2);
1057 uvsrc_y = s->mb_y * 8 + (uvmy >> 2); 1060 uvsrc_y = s->mb_y * 8 + (uvmy >> 2);
1058 1061
1059 uvsrc_x = clip(uvsrc_x, -8, s->mb_width * 8); 1062 uvsrc_x = clip(uvsrc_x, -8, s->mb_width * 8);
1098 } 1101 }
1099 src += s->uvlinesize; 1102 src += s->uvlinesize;
1100 src2 += s->uvlinesize; 1103 src2 += s->uvlinesize;
1101 } 1104 }
1102 } 1105 }
1103 }
1104
1105 if(v->fastuvmc) {
1106 uvmx = uvmx + ((uvmx<0)?-(uvmx&1):(uvmx&1));
1107 uvmy = uvmy + ((uvmy<0)?-(uvmy&1):(uvmy&1));
1108 } 1106 }
1109 1107
1110 /* Chroma MC always uses qpel bilinear */ 1108 /* Chroma MC always uses qpel bilinear */
1111 uvdxy = ((uvmy & 3) << 2) | (uvmx & 3); 1109 uvdxy = ((uvmy & 3) << 2) | (uvmx & 3);
1112 uvmx = (uvmx&3)<<1; 1110 uvmx = (uvmx&3)<<1;
2059 2057
2060 mx = s->mv[1][0][0]; 2058 mx = s->mv[1][0][0];
2061 my = s->mv[1][0][1]; 2059 my = s->mv[1][0][1];
2062 uvmx = (mx + ((mx & 3) == 3)) >> 1; 2060 uvmx = (mx + ((mx & 3) == 3)) >> 1;
2063 uvmy = (my + ((my & 3) == 3)) >> 1; 2061 uvmy = (my + ((my & 3) == 3)) >> 1;
2062 if(v->fastuvmc) {
2063 uvmx = uvmx + ((uvmx<0)?-(uvmx&1):(uvmx&1));
2064 uvmy = uvmy + ((uvmy<0)?-(uvmy&1):(uvmy&1));
2065 }
2064 srcY = s->next_picture.data[0]; 2066 srcY = s->next_picture.data[0];
2065 srcU = s->next_picture.data[1]; 2067 srcU = s->next_picture.data[1];
2066 srcV = s->next_picture.data[2]; 2068 srcV = s->next_picture.data[2];
2067 2069
2068 src_x = s->mb_x * 16 + (mx >> 2); 2070 src_x = s->mb_x * 16 + (mx >> 2);
2119 src += s->uvlinesize; 2121 src += s->uvlinesize;
2120 src2 += s->uvlinesize; 2122 src2 += s->uvlinesize;
2121 } 2123 }
2122 } 2124 }
2123 srcY += s->mspel * (1 + s->linesize); 2125 srcY += s->mspel * (1 + s->linesize);
2124 }
2125
2126 if(v->fastuvmc) {
2127 uvmx = uvmx + ((uvmx<0)?-(uvmx&1):(uvmx&1));
2128 uvmy = uvmy + ((uvmy<0)?-(uvmy&1):(uvmy&1));
2129 } 2126 }
2130 2127
2131 mx >>= 1; 2128 mx >>= 1;
2132 my >>= 1; 2129 my >>= 1;
2133 dxy = ((my & 1) << 1) | (mx & 1); 2130 dxy = ((my & 1) << 1) | (mx & 1);