[FFmpeg-devel] [PATCH] dxva2_hevc: fix ucNumDeltaPocsOfRefRpsIdx

Hendrik Leppkes h.leppkes at gmail.com
Sun Aug 2 13:07:31 CEST 2015


It needs to point to the value from the sps rps, not the final computed one from the slice header.
---
 libavcodec/dxva2_hevc.c | 2 +-
 libavcodec/hevc.h       | 1 +
 libavcodec/hevc_ps.c    | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/libavcodec/dxva2_hevc.c b/libavcodec/dxva2_hevc.c
index 7e39677..79d2d28 100644
--- a/libavcodec/dxva2_hevc.c
+++ b/libavcodec/dxva2_hevc.c
@@ -92,7 +92,7 @@ static void fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *
     pp->init_qp_minus26                          = pps->pic_init_qp_minus26;
 
     if (h->sh.short_term_ref_pic_set_sps_flag == 0 && h->sh.short_term_rps) {
-        pp->ucNumDeltaPocsOfRefRpsIdx            = h->sh.short_term_rps->num_delta_pocs;
+        pp->ucNumDeltaPocsOfRefRpsIdx            = h->sh.short_term_rps->rps_idx_num_delta_pocs;
         pp->wNumBitsForShortTermRPSInSlice       = h->sh.short_term_ref_pic_set_size;
     }
 
diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h
index 2c1aff7..32d6da9 100644
--- a/libavcodec/hevc.h
+++ b/libavcodec/hevc.h
@@ -276,6 +276,7 @@ enum ScanType {
 typedef struct ShortTermRPS {
     unsigned int num_negative_pics;
     int num_delta_pocs;
+    int rps_idx_num_delta_pocs;
     int32_t delta_poc[32];
     uint8_t used[32];
 } ShortTermRPS;
diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
index d507c9b..427cf09 100644
--- a/libavcodec/hevc_ps.c
+++ b/libavcodec/hevc_ps.c
@@ -136,6 +136,7 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx,
                 return AVERROR_INVALIDDATA;
             }
             rps_ridx = &sps->st_rps[sps->nb_st_rps - delta_idx];
+            rps->rps_idx_num_delta_pocs = rps_ridx->num_delta_pocs;
         } else
             rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
 
-- 
1.9.5.msysgit.1



More information about the ffmpeg-devel mailing list