static inline void idctRowCondDC (DCTELEM * row)
{
        int a0, a1, a2, a3, b0, b1, b2, b3;
#ifdef HAVE_FAST_64BIT
        uint64_t temp;
#else
        uint32_t temp;
#endif
#ifdef HAVE_FAST_64BIT
#ifdef WORDS_BIGENDIAN
#define ROW0_MASK 0xffff000000000000LL
#else
#define ROW0_MASK 0xffffLL
#endif
        if(sizeof(DCTELEM)==2){
            if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) |
                  ((uint64_t *)row)[1]) == 0) {
                temp = (row[0] << 3) & 0xffff;
                temp += temp << 16;
                temp += temp << 32;
                ((uint64_t *)row)[0] = temp;
                ((uint64_t *)row)[1] = temp;
                return;
            }
        }else{
            if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
                row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;
                return;
            }
        }
#else
        if(sizeof(DCTELEM)==2){
            if (!(((uint32_t*)row)[1] |
                  ((uint32_t*)row)[2] |
                  ((uint32_t*)row)[3] |
                  row[1])) {
                temp = (row[0] << 3) & 0xffff;
                temp += temp << 16;
                ((uint32_t*)row)[0]=((uint32_t*)row)[1] =
                ((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp;
                return;
            }
        }else{
            if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
                row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;
                return;
            }
        }
#endif
        a0 = (W4 * row[0]) + (1 << (ROW_SHIFT - 1));
        a1 = a0;
        a2 = a0;
        a3 = a0;
        a0 += W2 * row[2];
        a1 += W6 * row[2];
        a2 -= W6 * row[2];
        a3 -= W2 * row[2];
        MUL16(b0, W1, row[1]);
        MAC16(b0, W3, row[3]);
        MUL16(b1, W3, row[1]);
        MAC16(b1, -W7, row[3]);
        MUL16(b2, W5, row[1]);
        MAC16(b2, -W1, row[3]);
        MUL16(b3, W7, row[1]);
        MAC16(b3, -W5, row[3]);
#ifdef HAVE_FAST_64BIT
        temp = ((uint64_t*)row)[1];
#else
        temp = ((uint32_t*)row)[2] | ((uint32_t*)row)[3];
#endif
        if (temp != 0) {
            a0 += W4*row[4] + W6*row[6];
            a1 += - W4*row[4] - W2*row[6];
            a2 += - W4*row[4] + W2*row[6];
            a3 += W4*row[4] - W6*row[6];
            MAC16(b0, W5, row[5]);
            MAC16(b0, W7, row[7]);
            MAC16(b1, -W1, row[5]);
            MAC16(b1, -W5, row[7]);
            MAC16(b2, W7, row[5]);
            MAC16(b2, W3, row[7]);
            MAC16(b3, W3, row[5]);
            MAC16(b3, -W1, row[7]);
        }
        row[0] = (a0 + b0) >> ROW_SHIFT;
        row[7] = (a0 - b0) >> ROW_SHIFT;
        row[1] = (a1 + b1) >> ROW_SHIFT;
        row[6] = (a1 - b1) >> ROW_SHIFT;
        row[2] = (a2 + b2) >> ROW_SHIFT;
        row[5] = (a2 - b2) >> ROW_SHIFT;
        row[3] = (a3 + b3) >> ROW_SHIFT;
        row[4] = (a3 - b3) >> ROW_SHIFT;
}
['void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr){\n    Wmv2Context * const w= (Wmv2Context*)s;\n    wmv2_add_block(w, block1[0], dest_y                    , s->linesize, 0);\n    wmv2_add_block(w, block1[1], dest_y + 8                , s->linesize, 1);\n    wmv2_add_block(w, block1[2], dest_y +     8*s->linesize, s->linesize, 2);\n    wmv2_add_block(w, block1[3], dest_y + 8 + 8*s->linesize, s->linesize, 3);\n    if(s->flags&CODEC_FLAG_GRAY) return;\n    wmv2_add_block(w, block1[4], dest_cb                   , s->uvlinesize, 4);\n    wmv2_add_block(w, block1[5], dest_cr                   , s->uvlinesize, 5);\n}', 'static void wmv2_add_block(Wmv2Context *w, DCTELEM *block1, uint8_t *dst, int stride, int n){\n    MpegEncContext * const s= &w->s;\n  if (s->block_last_index[n] >= 0) {\n    switch(w->abt_type_table[n]){\n    case 0:\n        s->dsp.idct_add (dst, stride, block1);\n        break;\n    case 1:\n        ff_simple_idct84_add(dst           , stride, block1);\n        ff_simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]);\n        memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));\n        break;\n    case 2:\n        ff_simple_idct48_add(dst           , stride, block1);\n        ff_simple_idct48_add(dst + 4       , stride, w->abt_block2[n]);\n        memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));\n        break;\n    default:\n        av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\\n");\n    }\n  }\n}', 'void ff_simple_idct84_add(uint8_t *dest, int line_size, DCTELEM *block)\n{\n    int i;\n    for(i=0; i<4; i++) {\n        idctRowCondDC(block + i*8);\n    }\n    for(i=0;i<8;i++) {\n        idct4col_add(dest + i, line_size, block + i);\n    }\n}', 'static inline void idctRowCondDC (DCTELEM * row)\n{\n        int a0, a1, a2, a3, b0, b1, b2, b3;\n#ifdef HAVE_FAST_64BIT\n        uint64_t temp;\n#else\n        uint32_t temp;\n#endif\n#ifdef HAVE_FAST_64BIT\n#ifdef WORDS_BIGENDIAN\n#define ROW0_MASK 0xffff000000000000LL\n#else\n#define ROW0_MASK 0xffffLL\n#endif\n        if(sizeof(DCTELEM)==2){\n            if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) |\n                  ((uint64_t *)row)[1]) == 0) {\n                temp = (row[0] << 3) & 0xffff;\n                temp += temp << 16;\n                temp += temp << 32;\n                ((uint64_t *)row)[0] = temp;\n                ((uint64_t *)row)[1] = temp;\n                return;\n            }\n        }else{\n            if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {\n                row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;\n                return;\n            }\n        }\n#else\n        if(sizeof(DCTELEM)==2){\n            if (!(((uint32_t*)row)[1] |\n                  ((uint32_t*)row)[2] |\n                  ((uint32_t*)row)[3] |\n                  row[1])) {\n                temp = (row[0] << 3) & 0xffff;\n                temp += temp << 16;\n                ((uint32_t*)row)[0]=((uint32_t*)row)[1] =\n                ((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp;\n                return;\n            }\n        }else{\n            if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {\n                row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;\n                return;\n            }\n        }\n#endif\n        a0 = (W4 * row[0]) + (1 << (ROW_SHIFT - 1));\n        a1 = a0;\n        a2 = a0;\n        a3 = a0;\n        a0 += W2 * row[2];\n        a1 += W6 * row[2];\n        a2 -= W6 * row[2];\n        a3 -= W2 * row[2];\n        MUL16(b0, W1, row[1]);\n        MAC16(b0, W3, row[3]);\n        MUL16(b1, W3, row[1]);\n        MAC16(b1, -W7, row[3]);\n        MUL16(b2, W5, row[1]);\n        MAC16(b2, -W1, row[3]);\n        MUL16(b3, W7, row[1]);\n        MAC16(b3, -W5, row[3]);\n#ifdef HAVE_FAST_64BIT\n        temp = ((uint64_t*)row)[1];\n#else\n        temp = ((uint32_t*)row)[2] | ((uint32_t*)row)[3];\n#endif\n        if (temp != 0) {\n            a0 += W4*row[4] + W6*row[6];\n            a1 += - W4*row[4] - W2*row[6];\n            a2 += - W4*row[4] + W2*row[6];\n            a3 += W4*row[4] - W6*row[6];\n            MAC16(b0, W5, row[5]);\n            MAC16(b0, W7, row[7]);\n            MAC16(b1, -W1, row[5]);\n            MAC16(b1, -W5, row[7]);\n            MAC16(b2, W7, row[5]);\n            MAC16(b2, W3, row[7]);\n            MAC16(b3, W3, row[5]);\n            MAC16(b3, -W1, row[7]);\n        }\n        row[0] = (a0 + b0) >> ROW_SHIFT;\n        row[7] = (a0 - b0) >> ROW_SHIFT;\n        row[1] = (a1 + b1) >> ROW_SHIFT;\n        row[6] = (a1 - b1) >> ROW_SHIFT;\n        row[2] = (a2 + b2) >> ROW_SHIFT;\n        row[5] = (a2 - b2) >> ROW_SHIFT;\n        row[3] = (a3 + b3) >> ROW_SHIFT;\n        row[4] = (a3 - b3) >> ROW_SHIFT;\n}']