static inline void idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col)
{
    int c0, c1, c2, c3, a0, a1, a2, a3;
    const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
    a0 = col[8*0];
    a1 = col[8*1];
    a2 = col[8*2];
    a3 = col[8*3];
    c0 = (a0 + a2)*C3 + (1 << (C_SHIFT - 1));
    c2 = (a0 - a2)*C3 + (1 << (C_SHIFT - 1));
    c1 = a1 * C1 + a3 * C2;
    c3 = a1 * C2 - a3 * C1;
    dest[0] = cm[dest[0] + ((c0 + c1) >> C_SHIFT)];
    dest += line_size;
    dest[0] = cm[dest[0] + ((c2 + c3) >> C_SHIFT)];
    dest += line_size;
    dest[0] = cm[dest[0] + ((c2 - c3) >> C_SHIFT)];
    dest += line_size;
    dest[0] = cm[dest[0] + ((c0 - c1) >> C_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 idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col)\n{\n    int c0, c1, c2, c3, a0, a1, a2, a3;\n    const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\n    a0 = col[8*0];\n    a1 = col[8*1];\n    a2 = col[8*2];\n    a3 = col[8*3];\n    c0 = (a0 + a2)*C3 + (1 << (C_SHIFT - 1));\n    c2 = (a0 - a2)*C3 + (1 << (C_SHIFT - 1));\n    c1 = a1 * C1 + a3 * C2;\n    c3 = a1 * C2 - a3 * C1;\n    dest[0] = cm[dest[0] + ((c0 + c1) >> C_SHIFT)];\n    dest += line_size;\n    dest[0] = cm[dest[0] + ((c2 + c3) >> C_SHIFT)];\n    dest += line_size;\n    dest[0] = cm[dest[0] + ((c2 - c3) >> C_SHIFT)];\n    dest += line_size;\n    dest[0] = cm[dest[0] + ((c0 - c1) >> C_SHIFT)];\n}']