static av_cold int dvvideo_init(AVCodecContext *avctx)
{
    DVVideoContext *s = avctx->priv_data;
    DSPContext dsp;
    static int done=0;
    int i, j;
    if (!done) {
        VLC dv_vlc;
        uint16_t new_dv_vlc_bits[NB_DV_VLC*2];
        uint8_t new_dv_vlc_len[NB_DV_VLC*2];
        uint8_t new_dv_vlc_run[NB_DV_VLC*2];
        int16_t new_dv_vlc_level[NB_DV_VLC*2];
        done = 1;
        for (i=0; i<DV_ANCHOR_SIZE; i++)
            dv_anchor[i] = (void*)(size_t)i;
        for (i=0, j=0; i<NB_DV_VLC; i++, j++) {
            new_dv_vlc_bits[j] = dv_vlc_bits[i];
            new_dv_vlc_len[j] = dv_vlc_len[i];
            new_dv_vlc_run[j] = dv_vlc_run[i];
            new_dv_vlc_level[j] = dv_vlc_level[i];
            if (dv_vlc_level[i]) {
                new_dv_vlc_bits[j] <<= 1;
                new_dv_vlc_len[j]++;
                j++;
                new_dv_vlc_bits[j] = (dv_vlc_bits[i] << 1) | 1;
                new_dv_vlc_len[j] = dv_vlc_len[i] + 1;
                new_dv_vlc_run[j] = dv_vlc_run[i];
                new_dv_vlc_level[j] = -dv_vlc_level[i];
            }
        }
        init_vlc(&dv_vlc, TEX_VLC_BITS, j,
                 new_dv_vlc_len, 1, 1, new_dv_vlc_bits, 2, 2, 0);
        assert(dv_vlc.table_size == 1184);
        for(i = 0; i < dv_vlc.table_size; i++){
            int code= dv_vlc.table[i][0];
            int len = dv_vlc.table[i][1];
            int level, run;
            if(len<0){
                run= 0;
                level= code;
            } else {
                run=   new_dv_vlc_run[code] + 1;
                level= new_dv_vlc_level[code];
            }
            dv_rl_vlc[i].len = len;
            dv_rl_vlc[i].level = level;
            dv_rl_vlc[i].run = run;
        }
        free_vlc(&dv_vlc);
        for (i = 0; i < NB_DV_VLC - 1; i++) {
           if (dv_vlc_run[i] >= DV_VLC_MAP_RUN_SIZE)
               continue;
#ifdef DV_CODEC_TINY_TARGET
           if (dv_vlc_level[i] >= DV_VLC_MAP_LEV_SIZE)
               continue;
#endif
           if (dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size != 0)
               continue;
           dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].vlc = dv_vlc_bits[i] <<
                                                            (!!dv_vlc_level[i]);
           dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size = dv_vlc_len[i] +
                                                             (!!dv_vlc_level[i]);
        }
        for (i = 0; i < DV_VLC_MAP_RUN_SIZE; i++) {
#ifdef DV_CODEC_TINY_TARGET
           for (j = 1; j < DV_VLC_MAP_LEV_SIZE; j++) {
              if (dv_vlc_map[i][j].size == 0) {
                  dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc |
                            (dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size));
                  dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size +
                                          dv_vlc_map[0][j].size;
              }
           }
#else
           for (j = 1; j < DV_VLC_MAP_LEV_SIZE/2; j++) {
              if (dv_vlc_map[i][j].size == 0) {
                  dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc |
                            (dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size));
                  dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size +
                                          dv_vlc_map[0][j].size;
              }
              dv_vlc_map[i][((uint16_t)(-j))&0x1ff].vlc =
                                            dv_vlc_map[i][j].vlc | 1;
              dv_vlc_map[i][((uint16_t)(-j))&0x1ff].size =
                                            dv_vlc_map[i][j].size;
           }
#endif
        }
    }
    dsputil_init(&dsp, avctx);
    s->get_pixels = dsp.get_pixels;
    s->fdct[0] = dsp.fdct;
    s->idct_put[0] = dsp.idct_put;
    for (i=0; i<64; i++)
       s->dv_zigzag[0][i] = dsp.idct_permutation[ff_zigzag_direct[i]];
    s->fdct[1] = dsp.fdct248;
    s->idct_put[1] = ff_simple_idct248_put;
    if(avctx->lowres){
        for (i=0; i<64; i++){
            int j= ff_zigzag248_direct[i];
            s->dv_zigzag[1][i] = dsp.idct_permutation[(j&7) + (j&8)*4 + (j&48)/2];
        }
    }else
        memcpy(s->dv_zigzag[1], ff_zigzag248_direct, 64);
    dv_build_unquantize_tables(s, dsp.idct_permutation);
    avctx->coded_frame = &s->picture;
    s->avctx= avctx;
    return 0;
}
['static av_cold int dvvideo_init(AVCodecContext *avctx)\n{\n    DVVideoContext *s = avctx->priv_data;\n    DSPContext dsp;\n    static int done=0;\n    int i, j;\n    if (!done) {\n        VLC dv_vlc;\n        uint16_t new_dv_vlc_bits[NB_DV_VLC*2];\n        uint8_t new_dv_vlc_len[NB_DV_VLC*2];\n        uint8_t new_dv_vlc_run[NB_DV_VLC*2];\n        int16_t new_dv_vlc_level[NB_DV_VLC*2];\n        done = 1;\n        for (i=0; i<DV_ANCHOR_SIZE; i++)\n            dv_anchor[i] = (void*)(size_t)i;\n        for (i=0, j=0; i<NB_DV_VLC; i++, j++) {\n            new_dv_vlc_bits[j] = dv_vlc_bits[i];\n            new_dv_vlc_len[j] = dv_vlc_len[i];\n            new_dv_vlc_run[j] = dv_vlc_run[i];\n            new_dv_vlc_level[j] = dv_vlc_level[i];\n            if (dv_vlc_level[i]) {\n                new_dv_vlc_bits[j] <<= 1;\n                new_dv_vlc_len[j]++;\n                j++;\n                new_dv_vlc_bits[j] = (dv_vlc_bits[i] << 1) | 1;\n                new_dv_vlc_len[j] = dv_vlc_len[i] + 1;\n                new_dv_vlc_run[j] = dv_vlc_run[i];\n                new_dv_vlc_level[j] = -dv_vlc_level[i];\n            }\n        }\n        init_vlc(&dv_vlc, TEX_VLC_BITS, j,\n                 new_dv_vlc_len, 1, 1, new_dv_vlc_bits, 2, 2, 0);\n        assert(dv_vlc.table_size == 1184);\n        for(i = 0; i < dv_vlc.table_size; i++){\n            int code= dv_vlc.table[i][0];\n            int len = dv_vlc.table[i][1];\n            int level, run;\n            if(len<0){\n                run= 0;\n                level= code;\n            } else {\n                run=   new_dv_vlc_run[code] + 1;\n                level= new_dv_vlc_level[code];\n            }\n            dv_rl_vlc[i].len = len;\n            dv_rl_vlc[i].level = level;\n            dv_rl_vlc[i].run = run;\n        }\n        free_vlc(&dv_vlc);\n        for (i = 0; i < NB_DV_VLC - 1; i++) {\n           if (dv_vlc_run[i] >= DV_VLC_MAP_RUN_SIZE)\n               continue;\n#ifdef DV_CODEC_TINY_TARGET\n           if (dv_vlc_level[i] >= DV_VLC_MAP_LEV_SIZE)\n               continue;\n#endif\n           if (dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size != 0)\n               continue;\n           dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].vlc = dv_vlc_bits[i] <<\n                                                            (!!dv_vlc_level[i]);\n           dv_vlc_map[dv_vlc_run[i]][dv_vlc_level[i]].size = dv_vlc_len[i] +\n                                                             (!!dv_vlc_level[i]);\n        }\n        for (i = 0; i < DV_VLC_MAP_RUN_SIZE; i++) {\n#ifdef DV_CODEC_TINY_TARGET\n           for (j = 1; j < DV_VLC_MAP_LEV_SIZE; j++) {\n              if (dv_vlc_map[i][j].size == 0) {\n                  dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc |\n                            (dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size));\n                  dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size +\n                                          dv_vlc_map[0][j].size;\n              }\n           }\n#else\n           for (j = 1; j < DV_VLC_MAP_LEV_SIZE/2; j++) {\n              if (dv_vlc_map[i][j].size == 0) {\n                  dv_vlc_map[i][j].vlc = dv_vlc_map[0][j].vlc |\n                            (dv_vlc_map[i-1][0].vlc << (dv_vlc_map[0][j].size));\n                  dv_vlc_map[i][j].size = dv_vlc_map[i-1][0].size +\n                                          dv_vlc_map[0][j].size;\n              }\n              dv_vlc_map[i][((uint16_t)(-j))&0x1ff].vlc =\n                                            dv_vlc_map[i][j].vlc | 1;\n              dv_vlc_map[i][((uint16_t)(-j))&0x1ff].size =\n                                            dv_vlc_map[i][j].size;\n           }\n#endif\n        }\n    }\n    dsputil_init(&dsp, avctx);\n    s->get_pixels = dsp.get_pixels;\n    s->fdct[0] = dsp.fdct;\n    s->idct_put[0] = dsp.idct_put;\n    for (i=0; i<64; i++)\n       s->dv_zigzag[0][i] = dsp.idct_permutation[ff_zigzag_direct[i]];\n    s->fdct[1] = dsp.fdct248;\n    s->idct_put[1] = ff_simple_idct248_put;\n    if(avctx->lowres){\n        for (i=0; i<64; i++){\n            int j= ff_zigzag248_direct[i];\n            s->dv_zigzag[1][i] = dsp.idct_permutation[(j&7) + (j&8)*4 + (j&48)/2];\n        }\n    }else\n        memcpy(s->dv_zigzag[1], ff_zigzag248_direct, 64);\n    dv_build_unquantize_tables(s, dsp.idct_permutation);\n    avctx->coded_frame = &s->picture;\n    s->avctx= avctx;\n    return 0;\n}']