On Sat, 13 Jun 2015 22:49:58 +0200 Michael Niedermayer <[email protected]> wrote:
> On Sat, Jun 13, 2015 at 09:43:49AM -0700, Philip Langdale wrote: > > Today, we track the short term RPS size for DXVA, but only if the > > SliceHeader RPS is being used. Otherwise it's left uninitialized. > > > > NVIDIA's VDPAU implementation requires that the size be accurately > > tracked even if an SPS RPS is being used. In this case, it's really > > counting the size of the RPS idx information, but you end up with > > mangled output if the value is not accurate. > > > > VDPAU also needs the size of the long term RPS. > > > > Signed-off-by: Philip Langdale <[email protected]> > > --- > > libavcodec/hevc.c | 10 ++++++---- > > libavcodec/hevc.h | 1 + > > 2 files changed, 7 insertions(+), 4 deletions(-) > > > > diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c > > index 1d2fa9c..95eb354 100644 > > --- a/libavcodec/hevc.c > > +++ b/libavcodec/hevc.c > > @@ -502,7 +502,7 @@ static int hls_slice_header(HEVCContext *s) > > sh->colour_plane_id = get_bits(gb, 2); > > > > if (!IS_IDR(s)) { > > - int poc; > > + int poc, pos; > > > > sh->pic_order_cnt_lsb = get_bits(gb, > > s->sps->log2_max_poc_lsb); poc = ff_hevc_compute_poc(s, > > sh->pic_order_cnt_lsb); @@ -516,13 +516,12 @@ static int > > hls_slice_header(HEVCContext *s) s->poc = poc; > > > > sh->short_term_ref_pic_set_sps_flag = get_bits1(gb); > > + pos = get_bits_left(gb); > > if (!sh->short_term_ref_pic_set_sps_flag) { > > - int pos = get_bits_left(gb); > > ret = ff_hevc_decode_short_term_rps(s, > > &sh->slice_rps, s->sps, 1); if (ret < 0) > > return ret; > > > > - sh->short_term_ref_pic_set_size = pos - > > get_bits_left(gb); sh->short_term_rps = &sh->slice_rps; > > } else { > > int numbits, rps_idx; > > @@ -536,13 +535,16 @@ static int hls_slice_header(HEVCContext *s) > > rps_idx = numbits > 0 ? get_bits(gb, numbits) : 0; > > sh->short_term_rps = &s->sps->st_rps[rps_idx]; > > } > > + sh->short_term_ref_pic_set_size = pos - > > get_bits_left(gb); > > + pos = get_bits_left(gb); > > ret = decode_lt_rps(s, &sh->long_term_rps, gb); > > if (ret < 0) { > > av_log(s->avctx, AV_LOG_WARNING, "Invalid long > > term RPS.\n"); if (s->avctx->err_recognition & AV_EF_EXPLODE) > > return AVERROR_INVALIDDATA; > > > - } > > + } > > stray change > > otherwise patch should be fine > > thanks > > [...] Fixed and pushed. Thanks. --phil _______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
