965 |
uv_dx = pMB->mvs[0].x; |
uv_dx = pMB->mvs[0].x; |
966 |
uv_dy = pMB->mvs[0].y; |
uv_dy = pMB->mvs[0].y; |
967 |
|
|
968 |
uv_dx = (uv_dx & 3) ? (uv_dx >> 1) | 1 : uv_dx / 2; |
if (dec->quarterpel) |
969 |
uv_dy = (uv_dy & 3) ? (uv_dy >> 1) | 1 : uv_dy / 2; |
{ |
970 |
|
uv_dx /= 2; |
971 |
|
uv_dy /= 2; |
972 |
|
} |
973 |
|
|
974 |
|
uv_dx = (uv_dx >> 1) + roundtab_79[uv_dx & 0x3]; |
975 |
|
uv_dy = (uv_dy >> 1) + roundtab_79[uv_dy & 0x3]; |
976 |
} else { |
} else { |
977 |
int sum; |
int sum; |
978 |
|
|
979 |
|
if(dec->quarterpel) |
980 |
|
sum = (pMB->mvs[0].x / 2) + (pMB->mvs[1].x / 2) + (pMB->mvs[2].x / 2) + (pMB->mvs[3].x / 2); |
981 |
|
else |
982 |
sum = pMB->mvs[0].x + pMB->mvs[1].x + pMB->mvs[2].x + pMB->mvs[3].x; |
sum = pMB->mvs[0].x + pMB->mvs[1].x + pMB->mvs[2].x + pMB->mvs[3].x; |
|
uv_dx = |
|
|
(sum == |
|
|
0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + |
|
|
(ABS(sum) / 16) * 2)); |
|
983 |
|
|
984 |
|
uv_dx = (sum >> 3) + roundtab_76[sum & 0xf]; |
985 |
|
|
986 |
|
if(dec->quarterpel) |
987 |
|
sum = (pMB->mvs[0].y / 2) + (pMB->mvs[1].y / 2) + (pMB->mvs[2].y / 2) + (pMB->mvs[3].y / 2); |
988 |
|
else |
989 |
sum = pMB->mvs[0].y + pMB->mvs[1].y + pMB->mvs[2].y + pMB->mvs[3].y; |
sum = pMB->mvs[0].y + pMB->mvs[1].y + pMB->mvs[2].y + pMB->mvs[3].y; |
990 |
uv_dy = |
|
991 |
(sum == |
uv_dy = (sum >> 3) + roundtab_76[sum & 0xf]; |
|
0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + |
|
|
(ABS(sum) / 16) * 2)); |
|
992 |
} |
} |
993 |
|
|
994 |
start_timer(); |
start_timer(); |
995 |
|
if(dec->quarterpel) { |
996 |
|
interpolate16x16_quarterpel(dec->cur.y, dec->refn[ref].y, dec->refh.y, dec->refh.y + 64, |
997 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos, |
998 |
|
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
999 |
|
} |
1000 |
|
else { |
1001 |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16 * x_pos, 16 * y_pos, |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16 * x_pos, 16 * y_pos, |
1002 |
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
1003 |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16 * x_pos + 8, |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16*x_pos + 8, 16*y_pos, |
1004 |
16 * y_pos, pMB->mvs[1].x, pMB->mvs[1].y, stride, 0); |
pMB->mvs[1].x, pMB->mvs[1].y, stride, 0); |
1005 |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16 * x_pos, |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16*x_pos, 16*y_pos + 8, |
1006 |
16 * y_pos + 8, pMB->mvs[2].x, pMB->mvs[2].y, stride, |
pMB->mvs[2].x, pMB->mvs[2].y, stride, 0); |
1007 |
0); |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16*x_pos + 8, 16*y_pos + 8, |
1008 |
interpolate8x8_switch(dec->cur.y, dec->refn[ref].y, 16 * x_pos + 8, |
pMB->mvs[3].x, pMB->mvs[3].y, stride, 0); |
1009 |
16 * y_pos + 8, pMB->mvs[3].x, pMB->mvs[3].y, stride, |
} |
1010 |
0); |
|
1011 |
interpolate8x8_switch(dec->cur.u, dec->refn[ref].u, 8 * x_pos, 8 * y_pos, |
interpolate8x8_switch(dec->cur.u, dec->refn[ref].u, 8 * x_pos, 8 * y_pos, |
1012 |
uv_dx, uv_dy, stride2, 0); |
uv_dx, uv_dy, stride2, 0); |
1013 |
interpolate8x8_switch(dec->cur.v, dec->refn[ref].v, 8 * x_pos, 8 * y_pos, |
interpolate8x8_switch(dec->cur.v, dec->refn[ref].v, 8 * x_pos, 8 * y_pos, |
1094 |
uv_dx = pMB->mvs[0].x; |
uv_dx = pMB->mvs[0].x; |
1095 |
uv_dy = pMB->mvs[0].y; |
uv_dy = pMB->mvs[0].y; |
1096 |
|
|
|
uv_dx = (uv_dx & 3) ? (uv_dx >> 1) | 1 : uv_dx / 2; |
|
|
uv_dy = (uv_dy & 3) ? (uv_dy >> 1) | 1 : uv_dy / 2; |
|
|
|
|
1097 |
b_uv_dx = pMB->b_mvs[0].x; |
b_uv_dx = pMB->b_mvs[0].x; |
1098 |
b_uv_dy = pMB->b_mvs[0].y; |
b_uv_dy = pMB->b_mvs[0].y; |
1099 |
|
|
1100 |
b_uv_dx = (uv_dx & 3) ? (uv_dx >> 1) | 1 : uv_dx / 2; |
if (dec->quarterpel) |
1101 |
b_uv_dy = (uv_dy & 3) ? (uv_dy >> 1) | 1 : uv_dy / 2; |
{ |
1102 |
|
uv_dx /= 2; |
1103 |
|
uv_dy /= 2; |
1104 |
|
|
1105 |
|
b_uv_dx /= 2; |
1106 |
|
b_uv_dy /= 2; |
1107 |
|
} |
1108 |
|
|
1109 |
|
uv_dx = (uv_dx >> 1) + roundtab_79[uv_dx & 0x3]; |
1110 |
|
uv_dy = (uv_dy >> 1) + roundtab_79[uv_dy & 0x3]; |
1111 |
|
|
1112 |
|
b_uv_dx = (b_uv_dx >> 1) + roundtab_79[b_uv_dx & 0x3]; |
1113 |
|
b_uv_dy = (b_uv_dy >> 1) + roundtab_79[b_uv_dy & 0x3]; |
1114 |
} else { |
} else { |
1115 |
int sum; |
int sum; |
1116 |
|
|
1117 |
|
if(dec->quarterpel) |
1118 |
|
sum = (pMB->mvs[0].x / 2) + (pMB->mvs[1].x / 2) + (pMB->mvs[2].x / 2) + (pMB->mvs[3].x / 2); |
1119 |
|
else |
1120 |
sum = pMB->mvs[0].x + pMB->mvs[1].x + pMB->mvs[2].x + pMB->mvs[3].x; |
sum = pMB->mvs[0].x + pMB->mvs[1].x + pMB->mvs[2].x + pMB->mvs[3].x; |
|
uv_dx = |
|
|
(sum == |
|
|
0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + |
|
|
(ABS(sum) / 16) * 2)); |
|
1121 |
|
|
1122 |
|
uv_dx = (sum >> 3) + roundtab_76[sum & 0xf]; |
1123 |
|
|
1124 |
|
if(dec->quarterpel) |
1125 |
|
sum = (pMB->mvs[0].y / 2) + (pMB->mvs[1].y / 2) + (pMB->mvs[2].y / 2) + (pMB->mvs[3].y / 2); |
1126 |
|
else |
1127 |
sum = pMB->mvs[0].y + pMB->mvs[1].y + pMB->mvs[2].y + pMB->mvs[3].y; |
sum = pMB->mvs[0].y + pMB->mvs[1].y + pMB->mvs[2].y + pMB->mvs[3].y; |
1128 |
uv_dy = |
|
1129 |
(sum == |
uv_dy = (sum >> 3) + roundtab_76[sum & 0xf]; |
1130 |
0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + |
|
1131 |
(ABS(sum) / 16) * 2)); |
|
1132 |
|
if(dec->quarterpel) |
1133 |
sum = |
sum = (pMB->b_mvs[0].x / 2) + (pMB->b_mvs[1].x / 2) + (pMB->b_mvs[2].x / 2) + (pMB->b_mvs[3].x / 2); |
1134 |
pMB->b_mvs[0].x + pMB->b_mvs[1].x + pMB->b_mvs[2].x + |
else |
1135 |
pMB->b_mvs[3].x; |
sum = pMB->b_mvs[0].x + pMB->b_mvs[1].x + pMB->b_mvs[2].x + pMB->b_mvs[3].x; |
1136 |
b_uv_dx = |
|
1137 |
(sum == |
b_uv_dx = (sum >> 3) + roundtab_76[sum & 0xf]; |
1138 |
0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + |
|
1139 |
(ABS(sum) / 16) * 2)); |
if(dec->quarterpel) |
1140 |
|
sum = (pMB->b_mvs[0].y / 2) + (pMB->b_mvs[1].y / 2) + (pMB->b_mvs[2].y / 2) + (pMB->b_mvs[3].y / 2); |
1141 |
sum = |
else |
1142 |
pMB->b_mvs[0].y + pMB->b_mvs[1].y + pMB->b_mvs[2].y + |
sum = pMB->b_mvs[0].y + pMB->b_mvs[1].y + pMB->b_mvs[2].y + pMB->b_mvs[3].y; |
1143 |
pMB->b_mvs[3].y; |
|
1144 |
b_uv_dy = |
b_uv_dy = (sum >> 3) + roundtab_76[sum & 0xf]; |
|
(sum == |
|
|
0 ? 0 : SIGN(sum) * (roundtab[ABS(sum) % 16] + |
|
|
(ABS(sum) / 16) * 2)); |
|
1145 |
} |
} |
1146 |
|
|
1147 |
|
|
1148 |
start_timer(); |
start_timer(); |
1149 |
|
if(dec->quarterpel) { |
1150 |
|
if((pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q)) |
1151 |
|
interpolate16x16_quarterpel(dec->cur.y, forward.y, dec->refh.y, dec->refh.y + 64, |
1152 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos, |
1153 |
|
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
1154 |
|
else { |
1155 |
|
interpolate8x8_quarterpel(dec->cur.y, forward.y, dec->refh.y, dec->refh.y + 64, |
1156 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos, |
1157 |
|
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
1158 |
|
interpolate8x8_quarterpel(dec->cur.y, forward.y, dec->refh.y, dec->refh.y + 64, |
1159 |
|
dec->refh.y + 128, 16*x_pos + 8, 16*y_pos, |
1160 |
|
pMB->mvs[1].x, pMB->mvs[1].y, stride, 0); |
1161 |
|
interpolate8x8_quarterpel(dec->cur.y, forward.y, dec->refh.y, dec->refh.y + 64, |
1162 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos + 8, |
1163 |
|
pMB->mvs[2].x, pMB->mvs[2].y, stride, 0); |
1164 |
|
interpolate8x8_quarterpel(dec->cur.y, forward.y, dec->refh.y, dec->refh.y + 64, |
1165 |
|
dec->refh.y + 128, 16*x_pos + 8, 16*y_pos + 8, |
1166 |
|
pMB->mvs[3].x, pMB->mvs[3].y, stride, 0); |
1167 |
|
} |
1168 |
|
} |
1169 |
|
else { |
1170 |
interpolate8x8_switch(dec->cur.y, forward.y, 16 * x_pos, 16 * y_pos, |
interpolate8x8_switch(dec->cur.y, forward.y, 16 * x_pos, 16 * y_pos, |
1171 |
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
pMB->mvs[0].x, pMB->mvs[0].y, stride, 0); |
1172 |
interpolate8x8_switch(dec->cur.y, forward.y, 16 * x_pos + 8, 16 * y_pos, |
interpolate8x8_switch(dec->cur.y, forward.y, 16 * x_pos + 8, 16 * y_pos, |
1176 |
interpolate8x8_switch(dec->cur.y, forward.y, 16 * x_pos + 8, |
interpolate8x8_switch(dec->cur.y, forward.y, 16 * x_pos + 8, |
1177 |
16 * y_pos + 8, pMB->mvs[3].x, pMB->mvs[3].y, stride, |
16 * y_pos + 8, pMB->mvs[3].x, pMB->mvs[3].y, stride, |
1178 |
0); |
0); |
1179 |
|
} |
1180 |
|
|
1181 |
interpolate8x8_switch(dec->cur.u, forward.u, 8 * x_pos, 8 * y_pos, uv_dx, |
interpolate8x8_switch(dec->cur.u, forward.u, 8 * x_pos, 8 * y_pos, uv_dx, |
1182 |
uv_dy, stride2, 0); |
uv_dy, stride2, 0); |
1183 |
interpolate8x8_switch(dec->cur.v, forward.v, 8 * x_pos, 8 * y_pos, uv_dx, |
interpolate8x8_switch(dec->cur.v, forward.v, 8 * x_pos, 8 * y_pos, uv_dx, |
1184 |
uv_dy, stride2, 0); |
uv_dy, stride2, 0); |
1185 |
|
|
1186 |
|
|
1187 |
|
if(dec->quarterpel) { |
1188 |
|
if((pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q)) |
1189 |
|
interpolate16x16_quarterpel(dec->refn[2].y, backward.y, dec->refh.y, dec->refh.y + 64, |
1190 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos, |
1191 |
|
pMB->b_mvs[0].x, pMB->b_mvs[0].y, stride, 0); |
1192 |
|
else { |
1193 |
|
interpolate8x8_quarterpel(dec->refn[2].y, backward.y, dec->refh.y, dec->refh.y + 64, |
1194 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos, |
1195 |
|
pMB->b_mvs[0].x, pMB->b_mvs[0].y, stride, 0); |
1196 |
|
interpolate8x8_quarterpel(dec->refn[2].y, backward.y, dec->refh.y, dec->refh.y + 64, |
1197 |
|
dec->refh.y + 128, 16*x_pos + 8, 16*y_pos, |
1198 |
|
pMB->b_mvs[1].x, pMB->b_mvs[1].y, stride, 0); |
1199 |
|
interpolate8x8_quarterpel(dec->refn[2].y, backward.y, dec->refh.y, dec->refh.y + 64, |
1200 |
|
dec->refh.y + 128, 16*x_pos, 16*y_pos + 8, |
1201 |
|
pMB->b_mvs[2].x, pMB->b_mvs[2].y, stride, 0); |
1202 |
|
interpolate8x8_quarterpel(dec->refn[2].y, backward.y, dec->refh.y, dec->refh.y + 64, |
1203 |
|
dec->refh.y + 128, 16*x_pos + 8, 16*y_pos + 8, |
1204 |
|
pMB->b_mvs[3].x, pMB->b_mvs[3].y, stride, 0); |
1205 |
|
} |
1206 |
|
} |
1207 |
|
else { |
1208 |
interpolate8x8_switch(dec->refn[2].y, backward.y, 16 * x_pos, 16 * y_pos, |
interpolate8x8_switch(dec->refn[2].y, backward.y, 16 * x_pos, 16 * y_pos, |
1209 |
pMB->b_mvs[0].x, pMB->b_mvs[0].y, stride, 0); |
pMB->b_mvs[0].x, pMB->b_mvs[0].y, stride, 0); |
1210 |
interpolate8x8_switch(dec->refn[2].y, backward.y, 16 * x_pos + 8, |
interpolate8x8_switch(dec->refn[2].y, backward.y, 16 * x_pos + 8, |
1216 |
interpolate8x8_switch(dec->refn[2].y, backward.y, 16 * x_pos + 8, |
interpolate8x8_switch(dec->refn[2].y, backward.y, 16 * x_pos + 8, |
1217 |
16 * y_pos + 8, pMB->b_mvs[3].x, pMB->b_mvs[3].y, |
16 * y_pos + 8, pMB->b_mvs[3].x, pMB->b_mvs[3].y, |
1218 |
stride, 0); |
stride, 0); |
1219 |
|
} |
1220 |
|
|
1221 |
interpolate8x8_switch(dec->refn[2].u, backward.u, 8 * x_pos, 8 * y_pos, |
interpolate8x8_switch(dec->refn[2].u, backward.u, 8 * x_pos, 8 * y_pos, |
1222 |
b_uv_dx, b_uv_dy, stride2, 0); |
b_uv_dx, b_uv_dy, stride2, 0); |
1223 |
interpolate8x8_switch(dec->refn[2].v, backward.v, 8 * x_pos, 8 * y_pos, |
interpolate8x8_switch(dec->refn[2].v, backward.v, 8 * x_pos, 8 * y_pos, |
1226 |
interpolate8x8_avg2(dec->cur.y + (16 * y_pos * stride) + 16 * x_pos, |
interpolate8x8_avg2(dec->cur.y + (16 * y_pos * stride) + 16 * x_pos, |
1227 |
dec->cur.y + (16 * y_pos * stride) + 16 * x_pos, |
dec->cur.y + (16 * y_pos * stride) + 16 * x_pos, |
1228 |
dec->refn[2].y + (16 * y_pos * stride) + 16 * x_pos, |
dec->refn[2].y + (16 * y_pos * stride) + 16 * x_pos, |
1229 |
stride, 0); |
stride, 1, 8); |
1230 |
|
|
1231 |
interpolate8x8_avg2(dec->cur.y + (16 * y_pos * stride) + 16 * x_pos + 8, |
interpolate8x8_avg2(dec->cur.y + (16 * y_pos * stride) + 16 * x_pos + 8, |
1232 |
dec->cur.y + (16 * y_pos * stride) + 16 * x_pos + 8, |
dec->cur.y + (16 * y_pos * stride) + 16 * x_pos + 8, |
1233 |
dec->refn[2].y + (16 * y_pos * stride) + 16 * x_pos + 8, |
dec->refn[2].y + (16 * y_pos * stride) + 16 * x_pos + 8, |
1234 |
stride, 0); |
stride, 1, 8); |
1235 |
|
|
1236 |
interpolate8x8_avg2(dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos, |
interpolate8x8_avg2(dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos, |
1237 |
dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos, |
dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos, |
1238 |
dec->refn[2].y + ((16 * y_pos + 8) * stride) + 16 * x_pos, |
dec->refn[2].y + ((16 * y_pos + 8) * stride) + 16 * x_pos, |
1239 |
stride, 0); |
stride, 1, 8); |
1240 |
|
|
1241 |
interpolate8x8_avg2(dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos + 8, |
interpolate8x8_avg2(dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos + 8, |
1242 |
dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos + 8, |
dec->cur.y + ((16 * y_pos + 8) * stride) + 16 * x_pos + 8, |
1243 |
dec->refn[2].y + ((16 * y_pos + 8) * stride) + 16 * x_pos + 8, |
dec->refn[2].y + ((16 * y_pos + 8) * stride) + 16 * x_pos + 8, |
1244 |
stride, 0); |
stride, 1, 8); |
1245 |
|
|
1246 |
interpolate8x8_avg2(dec->cur.u + (8 * y_pos * stride2) + 8 * x_pos, |
interpolate8x8_avg2(dec->cur.u + (8 * y_pos * stride2) + 8 * x_pos, |
1247 |
dec->cur.u + (8 * y_pos * stride2) + 8 * x_pos, |
dec->cur.u + (8 * y_pos * stride2) + 8 * x_pos, |
1248 |
dec->refn[2].u + (8 * y_pos * stride2) + 8 * x_pos, |
dec->refn[2].u + (8 * y_pos * stride2) + 8 * x_pos, |
1249 |
stride2, 0); |
stride2, 1, 8); |
1250 |
|
|
1251 |
interpolate8x8_avg2(dec->cur.v + (8 * y_pos * stride2) + 8 * x_pos, |
interpolate8x8_avg2(dec->cur.v + (8 * y_pos * stride2) + 8 * x_pos, |
1252 |
dec->cur.v + (8 * y_pos * stride2) + 8 * x_pos, |
dec->cur.v + (8 * y_pos * stride2) + 8 * x_pos, |
1253 |
dec->refn[2].v + (8 * y_pos * stride2) + 8 * x_pos, |
dec->refn[2].v + (8 * y_pos * stride2) + 8 * x_pos, |
1254 |
stride2, 0); |
stride2, 1, 8); |
1255 |
|
|
1256 |
stop_comp_timer(); |
stop_comp_timer(); |
1257 |
|
|