summaryrefslogtreecommitdiff
path: root/src/libvdpau/dpb.c
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2009-01-12 11:54:41 +0000
committerJulian Scheel <julian@jusst.de>2009-01-12 11:54:41 +0000
commitd24d9d256f20e7aadf30aca14d017c300caa0981 (patch)
treebc54ba806e2efe02ce4de9672ad0ad5c064b6ce1 /src/libvdpau/dpb.c
parenta1ff25f8d2cf49ab7dc694968980d1ce9e00c999 (diff)
downloadxine-lib-d24d9d256f20e7aadf30aca14d017c300caa0981.tar.gz
xine-lib-d24d9d256f20e7aadf30aca14d017c300caa0981.tar.bz2
Fix a possible crash.
Diffstat (limited to 'src/libvdpau/dpb.c')
-rw-r--r--src/libvdpau/dpb.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libvdpau/dpb.c b/src/libvdpau/dpb.c
index f83a5d2da..cd3c6ef9a 100644
--- a/src/libvdpau/dpb.c
+++ b/src/libvdpau/dpb.c
@@ -260,7 +260,7 @@ int dpb_remove_picture_by_picnum(struct dpb *dpb, uint32_t picnum)
int dpb_add_picture(struct dpb *dpb, struct decoded_picture *pic, uint32_t num_ref_frames)
{
int i = 0;
- struct decoded_picture *last_pic;
+ struct decoded_picture *last_pic = dpb->pictures;
pic->next = dpb->pictures;
dpb->pictures = pic;
@@ -273,10 +273,15 @@ int dpb_add_picture(struct dpb *dpb, struct decoded_picture *pic, uint32_t num_r
i++;
if(i>num_ref_frames) {
pic->used_for_reference = 0;
+ if(pic == dpb->pictures)
+ last_pic = pic->next;
+
if(!pic->delayed_output) {
dpb_remove_picture(dpb, pic);
}
pic = last_pic;
+ if(pic == dpb->pictures)
+ continue;
}
last_pic = pic;
}