diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c index 7b9dbbcff8..d814088a0c 100644 --- a/libavcodec/hevc/ps.c +++ b/libavcodec/hevc/ps.c @@ -103,6 +103,7 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, if (rps->rps_predict) { const ShortTermRPS *rps_ridx; uint8_t used[32] = { 0 }; + uint8_t use_delta[32] = { 0 }; int delta_rps; if (is_slice_header) { @@ -128,13 +129,19 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, } delta_rps = (1 - (rps->delta_rps_sign << 1)) * rps->abs_delta_rps; for (i = 0; i <= rps_ridx->num_delta_pocs; i++) { - used[k] = get_bits1(gb); + //used[k] = get_bits1(gb); + used[i] = get_bits1(gb); - rps->use_delta = 0; - if (!used[k]) - rps->use_delta = get_bits1(gb); + // rps->use_delta = 0; + // if (!used[k]) + // rps->use_delta = get_bits1(gb); + use_delta[i] = 1; + if (!used[i]) + use_delta[i] = get_bits1(gb); - if (used[k] || rps->use_delta) { + + //if (used[k] || rps->use_delta) { + if (used[i] || use_delta[i]) { if (i < rps_ridx->num_delta_pocs) delta_poc = delta_rps + rps_ridx->delta_poc[i]; else @@ -186,8 +193,12 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, } } - for (unsigned i = 0; i < FF_ARRAY_ELEMS(used); i++) + //for (unsigned i = 0; i < FF_ARRAY_ELEMS(used); i++) + for (unsigned i = 0; i < FF_ARRAY_ELEMS(used); i++) { rps->used |= (uint32_t)used[i] << i; + rps->use_delta |= (uint32_t)use_delta[i] << i; + } + } else { unsigned int nb_positive_pics; @@ -215,6 +226,7 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, prev -= delta_poc; rps->delta_poc[i] = prev; rps->used |= get_bits1(gb) * (1 << i); + rps->delta_poc_s0[i] = delta_poc; } prev = 0; for (i = 0; i < nb_positive_pics; i++) { @@ -228,6 +240,7 @@ int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, prev += delta_poc; rps->delta_poc[rps->num_negative_pics + i] = prev; rps->used |= get_bits1(gb) * (1 << (rps->num_negative_pics + i)); + rps->delta_poc_s1[i] = delta_poc; } } } diff --git a/libavcodec/hevc/ps.h b/libavcodec/hevc/ps.h index 98b1b1e94e..92dc1ad5b6 100644 --- a/libavcodec/hevc/ps.h +++ b/libavcodec/hevc/ps.h @@ -77,6 +77,7 @@ typedef struct ShortTermRPS { uint16_t delta_poc_s0[16]; uint16_t delta_poc_s1[16]; // uint32_t used; + uint32_t use_delta; uint8_t delta_idx; uint8_t num_negative_pics; @@ -87,7 +88,7 @@ typedef struct ShortTermRPS { unsigned delta_rps_sign:1; unsigned rps_predict:1; - unsigned use_delta:1; + //unsigned use_delta:1; } ShortTermRPS; typedef struct HEVCWindow {