From 89b81a1c8841817fd3610396a33e6a1420a195ec Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sun, 24 Jun 2012 21:19:24 +0300 Subject: [PATCH] mpegvideo: remove VLAs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavcodec/error_resilience.c | 2 +- libavcodec/mpegvideo.c | 10 ++++++++++ libavcodec/mpegvideo.h | 6 ++++++ libavcodec/ratecontrol.c | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c index fa1e008584..9cebb6d52e 100644 --- a/libavcodec/error_resilience.c +++ b/libavcodec/error_resilience.c @@ -388,7 +388,7 @@ static void v_block_filter(MpegEncContext *s, uint8_t *dst, int w, int h, static void guess_mv(MpegEncContext *s) { - uint8_t fixed[s->mb_stride * s->mb_height]; + uint8_t *fixed = s->er_temp_buffer; #define MV_FROZEN 3 #define MV_CHANGED 2 #define MV_UNCHANGED 1 diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index d1c42331c2..574893ed05 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -798,6 +798,11 @@ av_cold int ff_MPV_common_init(MpegEncContext *s) FF_ALLOCZ_OR_GOTO(s->avctx, s->dct_offset, 2 * 64 * sizeof(uint16_t), fail); } + + FF_ALLOC_OR_GOTO(s->avctx, s->cplx_tab, + mb_array_size * sizeof(float), fail); + FF_ALLOC_OR_GOTO(s->avctx, s->bits_tab, + mb_array_size * sizeof(float), fail); } } @@ -809,6 +814,8 @@ av_cold int ff_MPV_common_init(MpegEncContext *s) } if (s->width && s->height) { + FF_ALLOC_OR_GOTO(s->avctx, s->er_temp_buffer, + mb_array_size * sizeof(uint8_t), fail); FF_ALLOCZ_OR_GOTO(s->avctx, s->error_status_table, mb_array_size * sizeof(uint8_t), fail); @@ -974,6 +981,7 @@ void ff_MPV_common_end(MpegEncContext *s) av_freep(&s->avctx->stats_out); av_freep(&s->ac_stats); av_freep(&s->error_status_table); + av_freep(&s->er_temp_buffer); av_freep(&s->mb_index2xy); av_freep(&s->lambda_table); av_freep(&s->q_intra_matrix); @@ -983,6 +991,8 @@ void ff_MPV_common_end(MpegEncContext *s) av_freep(&s->input_picture); av_freep(&s->reordered_input_picture); av_freep(&s->dct_offset); + av_freep(&s->cplx_tab); + av_freep(&s->bits_tab); if (s->picture && !s->avctx->internal->is_copy) { for (i = 0; i < s->picture_count; i++) { diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index b73da416ba..f5b20e662e 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -696,6 +696,12 @@ typedef struct MpegEncContext { int mpv_flags; ///< flags set by private options int quantizer_noise_shaping; + + /* error resilience stuff */ + uint8_t *er_temp_buffer; + + /* temp buffers for rate control */ + float *cplx_tab, *bits_tab; } MpegEncContext; #define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? \ diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 9065f8e416..e2e3a54137 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -529,8 +529,8 @@ static void adaptive_quantization(MpegEncContext *s, double q){ const float border_masking = s->avctx->border_masking; float bits_sum= 0.0; float cplx_sum= 0.0; - float cplx_tab[s->mb_num]; - float bits_tab[s->mb_num]; + float *cplx_tab = s->cplx_tab; + float *bits_tab = s->bits_tab; const int qmin= s->avctx->mb_lmin; const int qmax= s->avctx->mb_lmax; Picture * const pic= &s->current_picture;