[FFmpeg-cvslog] mpegvideo: remove VLAs
Ronald S. Bultje
git at videolan.org
Wed Jul 4 21:09:49 CEST 2012
ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Sun Jun 24 21:19:24 2012 +0300| [89b81a1c8841817fd3610396a33e6a1420a195ec] | committer: Martin Storsjö
mpegvideo: remove VLAs
Signed-off-by: Martin Storsjö <martin at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=89b81a1c8841817fd3610396a33e6a1420a195ec
---
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 fa1e008..9cebb6d 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 d1c4233..574893e 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 b73da41..f5b20e6 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 9065f8e..e2e3a54 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;
More information about the ffmpeg-cvslog
mailing list