diff --git a/libavcodec/mpeg4video.h b/libavcodec/mpeg4video.h index 1c72abe723..d735a68fa2 100644 --- a/libavcodec/mpeg4video.h +++ b/libavcodec/mpeg4video.h @@ -76,6 +76,10 @@ typedef struct Mpeg4DecContext { int divx_build; int xvid_build; int lavc_build; + + int cplx_estimation_trash_i; + int cplx_estimation_trash_p; + int cplx_estimation_trash_b; } Mpeg4DecContext; /* dc encoding for mpeg4 */ diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index 212954c9f9..6f93f2bda9 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -1920,44 +1920,44 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) int estimation_method = get_bits(gb, 2); if (estimation_method < 2) { if (!get_bits1(gb)) { - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* opaque */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* transparent */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* intra_cae */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* inter_cae */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* no_update */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* upampling */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* opaque */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* transparent */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* intra_cae */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* inter_cae */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* no_update */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* upampling */ } if (!get_bits1(gb)) { - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* intra_blocks */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter_blocks */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter4v_blocks */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* not coded blocks */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* intra_blocks */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter_blocks */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter4v_blocks */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* not coded blocks */ } if (!check_marker(gb, "in complexity estimation part 1")) { skip_bits_long(gb, pos - get_bits_count(gb)); goto no_cplx_est; } if (!get_bits1(gb)) { - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* dct_coeffs */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* dct_lines */ - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* vlc_syms */ - s->cplx_estimation_trash_i += 4 * get_bits1(gb); /* vlc_bits */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* dct_coeffs */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* dct_lines */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* vlc_syms */ + ctx->cplx_estimation_trash_i += 4 * get_bits1(gb); /* vlc_bits */ } if (!get_bits1(gb)) { - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* apm */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* npm */ - s->cplx_estimation_trash_b += 8 * get_bits1(gb); /* interpolate_mc_q */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* forwback_mc_q */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel2 */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel4 */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* apm */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* npm */ + ctx->cplx_estimation_trash_b += 8 * get_bits1(gb); /* interpolate_mc_q */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* forwback_mc_q */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel2 */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel4 */ } if (!check_marker(gb, "in complexity estimation part 2")) { skip_bits_long(gb, pos - get_bits_count(gb)); goto no_cplx_est; } if (estimation_method == 1) { - s->cplx_estimation_trash_i += 8 * get_bits1(gb); /* sadct */ - s->cplx_estimation_trash_p += 8 * get_bits1(gb); /* qpel */ + ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* sadct */ + ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* qpel */ } } else av_log(s->avctx, AV_LOG_ERROR, @@ -1966,9 +1966,9 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) } else { no_cplx_est: - s->cplx_estimation_trash_i = - s->cplx_estimation_trash_p = - s->cplx_estimation_trash_b = 0; + ctx->cplx_estimation_trash_i = + ctx->cplx_estimation_trash_p = + ctx->cplx_estimation_trash_b = 0; } ctx->resync_marker = !get_bits1(gb); /* resync_marker_disabled */ @@ -2353,11 +2353,11 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) // FIXME complexity estimation stuff if (ctx->shape != BIN_ONLY_SHAPE) { - skip_bits_long(gb, s->cplx_estimation_trash_i); + skip_bits_long(gb, ctx->cplx_estimation_trash_i); if (s->pict_type != AV_PICTURE_TYPE_I) - skip_bits_long(gb, s->cplx_estimation_trash_p); + skip_bits_long(gb, ctx->cplx_estimation_trash_p); if (s->pict_type == AV_PICTURE_TYPE_B) - skip_bits_long(gb, s->cplx_estimation_trash_b); + skip_bits_long(gb, ctx->cplx_estimation_trash_b); if (get_bits_left(gb) < 3) { av_log(s->avctx, AV_LOG_ERROR, "Header truncated\n"); @@ -2436,8 +2436,8 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) s->num_sprite_warping_points, s->sprite_warping_accuracy, 1 - s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold, - s->cplx_estimation_trash_i, s->cplx_estimation_trash_p, - s->cplx_estimation_trash_b, + ctx->cplx_estimation_trash_i, ctx->cplx_estimation_trash_p, + ctx->cplx_estimation_trash_b, s->time, time_increment ); diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index fb58d1cb67..12bd3e0fdb 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -625,9 +625,6 @@ typedef struct MpegEncContext { int mpeg_quant; int t_frame; ///< time distance of first I -> B, used for interlaced b frames int padding_bug_score; ///< used to detect the VERY common padding bug in MPEG4 - int cplx_estimation_trash_i; - int cplx_estimation_trash_p; - int cplx_estimation_trash_b; /* divx specific, used to workaround (many) bugs in divx5 */ int divx_packed;