diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c
index f7b16714f8f9023a7d355c8f5fa50fdd752af428..3de5f1891fece5fa62a4873cb1397cf4a2e7e273 100644
--- a/libavcodec/dxva2_h264.c
+++ b/libavcodec/dxva2_h264.c
@@ -277,7 +277,7 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice,
     }
     slice->slice_qs_delta    = 0; /* XXX not implemented by Libav */
     slice->slice_qp_delta    = sl->qscale - h->pps.init_qp;
-    slice->redundant_pic_cnt = h->redundant_pic_count;
+    slice->redundant_pic_cnt = sl->redundant_pic_count;
     if (sl->slice_type == AV_PICTURE_TYPE_B)
         slice->direct_spatial_mv_pred_flag = sl->direct_spatial_mv_pred;
     slice->cabac_init_idc = h->pps.cabac ? sl->cabac_init_idc : 0;
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index cc3af6f03940f13478f7180b3a88da3740dff1b3..554c3d1f942cb277c5b66ca0bc4bfd4aa57ef78f 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1570,7 +1570,7 @@ again:
                         return ret;
                 }
 
-                if (hx->redundant_pic_count == 0 &&
+                if (sl->redundant_pic_count == 0 &&
                     (avctx->skip_frame < AVDISCARD_NONREF ||
                      hx->nal_ref_idc) &&
                     (avctx->skip_frame < AVDISCARD_BIDIR  ||
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 18aa8cbc001618d4e704f29e94879e2811527c1f..069600029407c2b6907e5e7e77a0be3c884f6b4d 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -356,6 +356,8 @@ typedef struct H264SliceContext {
     ptrdiff_t mb_linesize;  ///< may be equal to s->linesize or s->linesize * 2, for mbaff
     ptrdiff_t mb_uvlinesize;
 
+    int redundant_pic_count;
+
     /**
      * number of neighbors (top and/or left) that used 8x8 dct
      */
@@ -577,8 +579,6 @@ typedef struct H264Context {
      */
     int max_pic_num;
 
-    int redundant_pic_count;
-
     H264Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture
     H264Picture *short_ref[32];
     H264Picture *long_ref[32];
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 59016c147b10667efa77cc8d04bd038f8a93655a..2e319e9daa744f0ef681b48b3c9f39343c7a4c80 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -605,7 +605,7 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
     h->dequant_coeff_pps = h1->dequant_coeff_pps;
 
     // POC timing
-    copy_fields(h, h1, poc_lsb, redundant_pic_count);
+    copy_fields(h, h1, poc_lsb, default_ref_list);
 
     // reference lists
     copy_fields(h, h1, short_ref, thread_context);
@@ -1591,7 +1591,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
     ff_init_poc(h, h->cur_pic_ptr->field_poc, &h->cur_pic_ptr->poc);
 
     if (h->pps.redundant_pic_cnt_present)
-        h->redundant_pic_count = get_ue_golomb(&h->gb);
+        sl->redundant_pic_count = get_ue_golomb(&h->gb);
 
     ret = ff_set_ref_count(h, sl);
     if (ret < 0)