From f82162c8b1fac19514e767809f5fdbbb27692f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reinhard=20Ni=C3=9Fl?= Date: Sun, 4 Jan 2009 14:01:21 +0000 Subject: Clear PTS in DPB in case of discontinuity. --- src/libvdpau/dpb.c | 10 ++++++++++ src/libvdpau/dpb.h | 1 + src/libvdpau/vdpau_h264.c | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/libvdpau/dpb.c b/src/libvdpau/dpb.c index 561b1efa7..4236909db 100644 --- a/src/libvdpau/dpb.c +++ b/src/libvdpau/dpb.c @@ -316,6 +316,16 @@ void dpb_free_all( struct dpb *dpb ) dpb->pictures = NULL; } +void dpb_clear_all_pts( struct dpb *dpb ) +{ + struct decoded_picture *pic = dpb->pictures; + + while (pic != NULL) { + pic->img->pts = 0; + pic = pic->next; + } +} + int fill_vdpau_reference_list(struct dpb *dpb, VdpReferenceFrameH264 *reflist) { struct decoded_picture *pic = dpb->pictures; diff --git a/src/libvdpau/dpb.h b/src/libvdpau/dpb.h index 8ecde5d92..6578aa42f 100644 --- a/src/libvdpau/dpb.h +++ b/src/libvdpau/dpb.h @@ -73,6 +73,7 @@ int dpb_remove_picture(struct dpb *dpb, struct decoded_picture *rempic); int dpb_add_picture(struct dpb *dpb, struct decoded_picture *pic, uint32_t num_ref_frames); int dpb_flush(struct dpb *dpb); void dpb_free_all( struct dpb *dpb ); +void dpb_clear_all_pts( struct dpb *dpb ); int fill_vdpau_reference_list(struct dpb *dpb, VdpReferenceFrameH264 *reflist); diff --git a/src/libvdpau/vdpau_h264.c b/src/libvdpau/vdpau_h264.c index 5ba905ade..46923b557 100644 --- a/src/libvdpau/vdpau_h264.c +++ b/src/libvdpau/vdpau_h264.c @@ -584,7 +584,7 @@ static void vdpau_h264_discontinuity (video_decoder_t *this_gen) { this->curr_pts = 0; this->next_pts = 0; - + dpb_clear_all_pts(&this->nal_parser->dpb); } /* -- cgit v1.2.3