From cf7fb043028f2dac8f33c1a3dcff14c802b30e6c Mon Sep 17 00:00:00 2001 From: Julian Scheel Date: Sun, 13 Jun 2010 13:50:16 +0200 Subject: fix reference marking - only mark pictures as reference for vdpau, where actually the slice nals are used for reference --- src/video_dec/libvdpau/h264_parser.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/video_dec/libvdpau/h264_parser.c') diff --git a/src/video_dec/libvdpau/h264_parser.c b/src/video_dec/libvdpau/h264_parser.c index c4c5ed718..4794b5b9e 100644 --- a/src/video_dec/libvdpau/h264_parser.c +++ b/src/video_dec/libvdpau/h264_parser.c @@ -1941,8 +1941,19 @@ int parse_nal(uint8_t *buf, int buf_len, struct h264_parser *parser, parser->pic->flag_mask |= IDR_PIC; } - if (nal->nal_ref_idc) { + /* reference flag is only set for slice NALs, + * as PPS/SPS/SEI only references are not relevant + * for the vdpau decoder. + */ + if (nal->nal_ref_idc && + nal->nal_unit_type <= NAL_SLICE_IDR) { parser->pic->flag_mask |= REFERENCE; + } else if (!nal->nal_ref_idc && + nal->nal_unit_type >= NAL_SLICE && + nal->nal_unit_type <= NAL_PART_C) { + /* remove reference flag if a picture is not + * continously flagged as reference. */ + parser->pic->flag_mask &= ~REFERENCE; } if (nal->nal_unit_type >= NAL_SLICE && -- cgit v1.2.3