X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmsmpeg4dec.c;h=f302509589423b7da71ef7b8a28e61bf106023a7;hb=83b6471dcb762859f20b2c414decc755fcceb5e8;hp=9501b101ca61baba7dbef8c759e30e70c9579644;hpb=fbb81ea2c615b1189d21ea00127be205db36b342;p=ffmpeg diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index 9501b101ca6..f3025095894 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -295,7 +295,7 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) { MpegEncContext *s = avctx->priv_data; static volatile int done = 0; - int i, ret; + int ret; MVTable *mv; if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0) @@ -307,9 +307,6 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) ff_msmpeg4_common_init(s); if (!done) { - for(i=0;ivlc, MV_VLC_BITS, mv->n + 1, + INIT_VLC_STATIC(&mv->vlc, MV_VLC_BITS, MSMPEG4_MV_TABLES_NB_ELEMS + 1, mv->table_mv_bits, 1, 1, mv->table_mv_code, 2, 2, 3714); mv = &ff_mv_tables[1]; - INIT_VLC_STATIC(&mv->vlc, MV_VLC_BITS, mv->n + 1, + INIT_VLC_STATIC(&mv->vlc, MV_VLC_BITS, MSMPEG4_MV_TABLES_NB_ELEMS + 1, mv->table_mv_bits, 1, 1, mv->table_mv_code, 2, 2, 2694); @@ -356,18 +353,16 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) &ff_v2_mb_type[0][1], 2, 1, &ff_v2_mb_type[0][0], 2, 1, 128); - INIT_VLC_STATIC(&ff_mb_non_intra_vlc[0], MB_NON_INTRA_VLC_BITS, 128, - &ff_wmv2_inter_table[0][0][1], 8, 4, - &ff_wmv2_inter_table[0][0][0], 8, 4, 1636); - INIT_VLC_STATIC(&ff_mb_non_intra_vlc[1], MB_NON_INTRA_VLC_BITS, 128, - &ff_wmv2_inter_table[1][0][1], 8, 4, - &ff_wmv2_inter_table[1][0][0], 8, 4, 2648); - INIT_VLC_STATIC(&ff_mb_non_intra_vlc[2], MB_NON_INTRA_VLC_BITS, 128, - &ff_wmv2_inter_table[2][0][1], 8, 4, - &ff_wmv2_inter_table[2][0][0], 8, 4, 1532); - INIT_VLC_STATIC(&ff_mb_non_intra_vlc[3], MB_NON_INTRA_VLC_BITS, 128, - &ff_wmv2_inter_table[3][0][1], 8, 4, - &ff_wmv2_inter_table[3][0][0], 8, 4, 2488); + for (unsigned i = 0, offset = 0; i < 4; i++) { + static VLC_TYPE vlc_buf[1636 + 2648 + 1532 + 2488][2]; + ff_mb_non_intra_vlc[i].table = &vlc_buf[offset]; + ff_mb_non_intra_vlc[i].table_allocated = FF_ARRAY_ELEMS(vlc_buf) - offset; + init_vlc(&ff_mb_non_intra_vlc[i], MB_NON_INTRA_VLC_BITS, 128, + &ff_wmv2_inter_table[i][0][1], 8, 4, + &ff_wmv2_inter_table[i][0][0], 8, 4, + INIT_VLC_STATIC_OVERLONG); + offset += ff_mb_non_intra_vlc[i].table_size; + } INIT_VLC_STATIC(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64, &ff_msmp4_mb_i_table[0][1], 4, 2, @@ -836,7 +831,7 @@ void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr) mv = &ff_mv_tables[s->mv_table_index]; code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2); - if (code == mv->n) { + if (code == MSMPEG4_MV_TABLES_NB_ELEMS) { mx = get_bits(&s->gb, 6); my = get_bits(&s->gb, 6); } else { @@ -860,7 +855,7 @@ void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr) *my_ptr = my; } -AVCodec ff_msmpeg4v1_decoder = { +const AVCodec ff_msmpeg4v1_decoder = { .name = "msmpeg4v1", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"), .type = AVMEDIA_TYPE_VIDEO, @@ -870,7 +865,7 @@ AVCodec ff_msmpeg4v1_decoder = { .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, @@ -878,7 +873,7 @@ AVCodec ff_msmpeg4v1_decoder = { }, }; -AVCodec ff_msmpeg4v2_decoder = { +const AVCodec ff_msmpeg4v2_decoder = { .name = "msmpeg4v2", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"), .type = AVMEDIA_TYPE_VIDEO, @@ -888,7 +883,7 @@ AVCodec ff_msmpeg4v2_decoder = { .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, @@ -896,7 +891,7 @@ AVCodec ff_msmpeg4v2_decoder = { }, }; -AVCodec ff_msmpeg4v3_decoder = { +const AVCodec ff_msmpeg4v3_decoder = { .name = "msmpeg4", .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"), .type = AVMEDIA_TYPE_VIDEO, @@ -906,7 +901,7 @@ AVCodec ff_msmpeg4v3_decoder = { .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, @@ -914,7 +909,7 @@ AVCodec ff_msmpeg4v3_decoder = { }, }; -AVCodec ff_wmv1_decoder = { +const AVCodec ff_wmv1_decoder = { .name = "wmv1", .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"), .type = AVMEDIA_TYPE_VIDEO, @@ -924,7 +919,7 @@ AVCodec ff_wmv1_decoder = { .close = ff_h263_decode_end, .decode = ff_h263_decode_frame, .capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | FF_CODEC_CAP_INIT_CLEANUP, + .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .max_lowres = 3, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,