diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index cb026badc46d2e5d180000c037982b1316917542..d90fefc7dfe2d489e3d99ae60331d4ab2954075f 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -5430,6 +5430,9 @@ static inline int decode_seq_parameter_set(H264Context *h){
     }
 
     sps->ref_frame_count= get_ue_golomb(&s->gb);
+    if(sps->ref_frame_count > MAX_PICTURE_COUNT-2){
+        av_log(h->s.avctx, AV_LOG_ERROR, "too many reference frames\n");
+    }
     sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb);
     sps->mb_width= get_ue_golomb(&s->gb) + 1;
     sps->mb_height= get_ue_golomb(&s->gb) + 1;
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index d0ad4f066ba2334474ffc4d508d884d6949cf493..0c317202c176741461b3f4c45c7170be61922911 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -50,7 +50,7 @@ enum OutputFormat {
 
 #define MAX_THREADS 8
 
-#define MAX_PICTURE_COUNT 15
+#define MAX_PICTURE_COUNT 32
 
 #define ME_MAP_SIZE 64
 #define ME_MAP_SHIFT 3