diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 2f60055721a81d32ab160627ec406ea52372b594..a4d29ba9009ed74f6bcc58c16c8964d9d46c7be8 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -444,6 +444,8 @@ int MPV_common_init(MpegEncContext *s)
         CHECKED_ALLOCZ(s->lambda_table, mb_array_size * sizeof(int))
     }
         
+    CHECKED_ALLOCZ(s->picture, MAX_PICTURE_COUNT * sizeof(Picture))
+
     CHECKED_ALLOCZ(s->error_status_table, mb_array_size*sizeof(uint8_t))
     
     if (s->out_format == FMT_H263 || s->encoding) {
@@ -562,6 +564,7 @@ void MPV_common_end(MpegEncContext *s)
     for(i=0; i<MAX_PICTURE_COUNT; i++){
         free_picture(s, &s->picture[i]);
     }
+    av_freep(&s->picture);
     avcodec_default_free_buffers(s->avctx);
     s->context_initialized = 0;
     s->last_picture_ptr=
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 30432c17315de69a57e3be7d9eec000d27098a03..e557a81d1e6ee97e17e5953638ab9ebafb0d3e18 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -301,7 +301,7 @@ typedef struct MpegEncContext {
     int mb_num;                ///< number of MBs of a picture 
     int linesize;              ///< line size, in bytes, may be different from width 
     int uvlinesize;            ///< line size, for chroma in bytes, may be different from width 
-    Picture picture[MAX_PICTURE_COUNT]; ///< main picture buffer 
+    Picture *picture;          ///< main picture buffer 
     Picture *input_picture[MAX_PICTURE_COUNT]; ///< next pictures on display order for encoding
     Picture *reordered_input_picture[MAX_PICTURE_COUNT]; ///< pointer to the next pictures in codedorder for encoding