diff options
-rw-r--r-- | src/libvdpau/dpb.c | 10 | ||||
-rw-r--r-- | src/libvdpau/dpb.h | 1 | ||||
-rw-r--r-- | src/libvdpau/vdpau_h264.c | 2 |
3 files changed, 12 insertions, 1 deletions
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); } /* |