diff --git a/libavcodec/h264_refs.c b/libavcodec/h264_refs.c
index b4dc49cc414526b8e98b78bd746f2cd003221fd5..9536c4beaa957989a4e7a04da6cdcbd2e6c5b769 100644
--- a/libavcodec/h264_refs.c
+++ b/libavcodec/h264_refs.c
@@ -557,6 +557,12 @@ int ff_h264_execute_ref_pic_marking(H264Context *h)
     int current_ref_assigned = 0, err = 0;
     H264Picture *av_uninit(pic);
 
+    if (!h->ps.sps) {
+        av_log(h->avctx, AV_LOG_ERROR, "SPS is unset\n");
+        err = AVERROR_INVALIDDATA;
+        goto out;
+    }
+
     if (!h->explicit_ref_marking)
         generate_sliding_window_mmcos(h);
     mmco_count = h->nb_mmco;
@@ -725,6 +731,7 @@ int ff_h264_execute_ref_pic_marking(H264Context *h)
 
     print_short_term(h);
     print_long_term(h);
+out:
     return (h->avctx->err_recognition & AV_EF_EXPLODE) ? err : 0;
 }