diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 9fe93bf4abe78616eef307dec1f71e463530a54e..d0c8262fdebb5ca23e9e90426168d1cde3287b03 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -411,6 +411,11 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared)
 {
     int i, ret;
 
+    if (pic->qscale_table_buf)
+        if (pic->mbskip_table_buf->size < s->mb_stride * s->mb_height + 2 ||
+            pic->qscale_table_buf->size < s->mb_stride * (s->mb_height + 1) + 1 + s->mb_stride)
+            free_picture_tables(pic);
+
     if (shared) {
         assert(pic->f.data[0]);
         pic->shared = 1;