[FFmpeg-cvslog] dxva2_hevc: properly signal the num_delta_pocs from the SPS RPS
Hendrik Leppkes
git at videolan.org
Mon Aug 3 15:55:43 CEST 2015
ffmpeg | branch: master | Hendrik Leppkes <h.leppkes at gmail.com> | Mon Mar 2 12:04:33 2015 +0100| [5d324dae114e7abbb7f52f8853283b25302a2cd9] | committer: Hendrik Leppkes
dxva2_hevc: properly signal the num_delta_pocs from the SPS RPS
ucNumDeltaPocsOfRefRpsIdx needs to contain the flat value from the SPS RPS,
and not the final computed value from the slice header RPS, as this calculation
is done internally by the driver again.
Sample-Id: http://trailers.divx.com/hevc/Sintel_4k_27qp_24fps_1aud_9subs.mkvi
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5d324dae114e7abbb7f52f8853283b25302a2cd9
---
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];
More information about the ffmpeg-cvslog
mailing list