summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libvdpau/dpb.c10
-rw-r--r--src/libvdpau/dpb.h1
-rw-r--r--src/libvdpau/vdpau_h264.c2
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);
}
/*