diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2012-06-24 21:19:24 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-07-04 15:10:57 +0300 |
commit | 89b81a1c8841817fd3610396a33e6a1420a195ec (patch) | |
tree | 06a9f58143a78dd6d398f879d584ce04febdd3ac /libavcodec | |
parent | 8c14f7a5937f05238e0e16da6ceccad8a86458ad (diff) | |
download | ffmpeg-89b81a1c8841817fd3610396a33e6a1420a195ec.tar.gz |
mpegvideo: remove VLAs
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/error_resilience.c | 2 | ||||
-rw-r--r-- | libavcodec/mpegvideo.c | 10 | ||||
-rw-r--r-- | libavcodec/mpegvideo.h | 6 | ||||
-rw-r--r-- | 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; |