- assert(x<8 && y<8 && x>=0 && y>=0);
-
- for(i=0; i<h; i++)
- {
- dst[0] = avg2(dst[0], ((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + 32 - 4) >> 6));
- dst[1] = avg2(dst[1], ((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + 32 - 4) >> 6));
- dst[2] = avg2(dst[2], ((A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + 32 - 4) >> 6));
- dst[3] = avg2(dst[3], ((A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + 32 - 4) >> 6));
- dst[4] = avg2(dst[4], ((A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5] + 32 - 4) >> 6));
- dst[5] = avg2(dst[5], ((A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6] + 32 - 4) >> 6));
- dst[6] = avg2(dst[6], ((A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7] + 32 - 4) >> 6));
- dst[7] = avg2(dst[7], ((A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8] + 32 - 4) >> 6));
- dst+= stride;
- src+= stride;
+ assert(x < 8 && y < 8 && x >= 0 && y >= 0);
+
+ for (i = 0; i < h; i++) {
+ dst[0] = chroma_mc(0);
+ dst[1] = chroma_mc(1);
+ dst[2] = chroma_mc(2);
+ dst[3] = chroma_mc(3);
+ dst += stride;
+ src += stride;
+ }
+}
+
+#define avg2(a, b) (((a) + (b) + 1) >> 1)
+static void avg_no_rnd_vc1_chroma_mc8_c(uint8_t *dst /* align 8 */,
+ uint8_t *src /* align 1 */,
+ ptrdiff_t stride, int h, int x, int y)
+{
+ const int A = (8 - x) * (8 - y);
+ const int B = (x) * (8 - y);
+ const int C = (8 - x) * (y);
+ const int D = (x) * (y);
+ int i;
+
+ assert(x < 8 && y < 8 && x >= 0 && y >= 0);
+
+ for (i = 0; i < h; i++) {
+ dst[0] = avg2(dst[0], chroma_mc(0));
+ dst[1] = avg2(dst[1], chroma_mc(1));
+ dst[2] = avg2(dst[2], chroma_mc(2));
+ dst[3] = avg2(dst[3], chroma_mc(3));
+ dst[4] = avg2(dst[4], chroma_mc(4));
+ dst[5] = avg2(dst[5], chroma_mc(5));
+ dst[6] = avg2(dst[6], chroma_mc(6));
+ dst[7] = avg2(dst[7], chroma_mc(7));
+ dst += stride;
+ src += stride;
+ }
+}
+
+static void avg_no_rnd_vc1_chroma_mc4_c(uint8_t *dst /* align 8 */,
+ uint8_t *src /* align 1 */,
+ ptrdiff_t stride, int h, int x, int y)
+{
+ const int A = (8 - x) * (8 - y);
+ const int B = ( x) * (8 - y);
+ const int C = (8 - x) * ( y);
+ const int D = ( x) * ( y);
+ int i;
+
+ assert(x < 8 && y < 8 && x >= 0 && y >= 0);
+
+ for (i = 0; i < h; i++) {
+ dst[0] = avg2(dst[0], chroma_mc(0));
+ dst[1] = avg2(dst[1], chroma_mc(1));
+ dst[2] = avg2(dst[2], chroma_mc(2));
+ dst[3] = avg2(dst[3], chroma_mc(3));
+ dst += stride;
+ src += stride;
+ }
+}
+
+#if CONFIG_WMV3IMAGE_DECODER || CONFIG_VC1IMAGE_DECODER
+
+static void sprite_h_c(uint8_t *dst, const uint8_t *src, int offset,
+ int advance, int count)
+{
+ while (count--) {
+ int a = src[(offset >> 16)];
+ int b = src[(offset >> 16) + 1];
+ *dst++ = a + ((b - a) * (offset & 0xFFFF) >> 16);
+ offset += advance;