static av_cold int jpg_init(AVCodecContext *avctx, JPGContext *c) { int ret; ret = build_vlc(&c->dc_vlc[0], avpriv_mjpeg_bits_dc_luminance, avpriv_mjpeg_val_dc, 12, 0); if (ret) return ret; ret = build_vlc(&c->dc_vlc[1], avpriv_mjpeg_bits_dc_chrominance, avpriv_mjpeg_val_dc, 12, 0); if (ret) return ret; ret = build_vlc(&c->ac_vlc[0], avpriv_mjpeg_bits_ac_luminance, avpriv_mjpeg_val_ac_luminance, 251, 1); if (ret) return ret; ret = build_vlc(&c->ac_vlc[1], avpriv_mjpeg_bits_ac_chrominance, avpriv_mjpeg_val_ac_chrominance, 251, 1); if (ret) return ret; ff_dsputil_init(&c->dsp, avctx); ff_init_scantable(c->dsp.idct_permutation, &c->scantable, ff_zigzag_direct); return 0; }
int build_dec_vlc(jpeg_ctx_t *ctx) { int ret; if (ctx->is_std_vlc[0][0] == 0) { ret = build_vlc(&ctx->dec_vlcs[0][0], ctx->dht_dc[0].len, ctx->dht_dc[0].val, 12, 0); if (ret != 0) return -1; } else ctx->dec_vlcs[0][0].table = ctx->std_dec_vlcs[0][0].table; if (ctx->is_std_vlc[0][1] == 0) { ret = build_vlc(&ctx->dec_vlcs[0][1], ctx->dht_dc[1].len, ctx->dht_dc[1].val, 12, 0); if (ret != 0) return -1; } else ctx->dec_vlcs[0][1].table = ctx->std_dec_vlcs[0][1].table; if (ctx->is_std_vlc[1][0] == 0) { ret = build_vlc(&ctx->dec_vlcs[1][0], ctx->dht_ac[0].len, ctx->dht_ac[0].val, 251, 1); if (ret != 0) return -1; } else ctx->dec_vlcs[1][0].table = ctx->std_dec_vlcs[1][0].table; if (ctx->is_std_vlc[1][1] == 0) { ret = build_vlc(&ctx->dec_vlcs[1][1], ctx->dht_ac[1].len, ctx->dht_ac[1].val, 251, 1); if (ret != 0) return -1; } else ctx->dec_vlcs[1][1].table = ctx->std_dec_vlcs[1][1].table; return 0; }
int build_std_dec_vlc(jpeg_ctx_t *ctx) { int ret; ret = build_vlc(&ctx->std_dec_vlcs[0][0], std_huffman_bits_dc_luminance, std_huffman_val_dc, 12, 0); if (ret != 0) return -1; ret = build_vlc(&ctx->std_dec_vlcs[0][1], std_huffman_bits_dc_chrominance, std_huffman_val_dc, 12, 0); if (ret != 0) return -1; ret = build_vlc(&ctx->std_dec_vlcs[1][0], std_huffman_bits_ac_luminance, std_huffman_val_ac_luminance, 251, 1); if (ret != 0) return -1; ret = build_vlc(&ctx->std_dec_vlcs[1][1], std_huffman_bits_ac_chrominance, std_huffman_val_ac_chrominance, 251, 1); if (ret != 0) return -1; return 0; }