summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2016-02-12 20:38:40 +0200
committerLuca Barbato <lu_zero@gentoo.org>2016-02-13 14:19:54 +0100
commit8c399bd5cefd572eceb448981fcb6d4dbca35d27 (patch)
tree45e9930c6310750b33fd48df5efde3353496a7da /libavcodec
parente579d8b29cdb9b42c50a0fde277dfb047c1466ad (diff)
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 Signed-off-by: RĂ©mi Denis-Courmont <remi@remlab.net>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/dxva2_hevc.c2
-rw-r--r--libavcodec/hevc.h1
-rw-r--r--libavcodec/hevc_ps.c1
3 files changed, 3 insertions, 1 deletions
diff --git a/libavcodec/dxva2_hevc.c b/libavcodec/dxva2_hevc.c
index aa684bba75..5bb10d6916 100644
--- a/libavcodec/dxva2_hevc.c
+++ b/libavcodec/dxva2_hevc.c
@@ -96,7 +96,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 7c87a557dd..62edcf258f 100644
--- a/libavcodec/hevc.h
+++ b/libavcodec/hevc.h
@@ -262,6 +262,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 2faee96bbf..583fa062ab 100644
--- a/libavcodec/hevc_ps.c
+++ b/libavcodec/hevc_ps.c
@@ -134,6 +134,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];