Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2015-03-02 14:04:33 +0300
committerHendrik Leppkes <h.leppkes@gmail.com>2015-08-03 16:48:21 +0300
commit5d324dae114e7abbb7f52f8853283b25302a2cd9 (patch)
tree7edf288b6dd753cf12153c6a3fb279ab6e004a32
parent8bdd0dbd60b0c09376da34e661cf53ff73256bfd (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
-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 7e39677ad3..79d2d2824e 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 2c1aff77b3..32d6da9968 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 d507c9ba8d..427cf098aa 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];