summaryrefslogtreecommitdiff
path: root/src/libvdpau/h264_parser.c
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2009-03-23 15:18:56 +0000
committerJulian Scheel <julian@jusst.de>2009-03-23 15:18:56 +0000
commit0edcaa5cbcf431bc3c3029aecb2dcc810ef67a82 (patch)
treefd3b289455fcd22f34128e568e695ded93840990 /src/libvdpau/h264_parser.c
parent6b74e1ea780e2f1f20aa45f5a130ca20151a12fe (diff)
downloadxine-lib-0edcaa5cbcf431bc3c3029aecb2dcc810ef67a82.tar.gz
xine-lib-0edcaa5cbcf431bc3c3029aecb2dcc810ef67a82.tar.bz2
Fix Sky Sports HD samples. pic_order_cnt calculation was broken in some cases.
Diffstat (limited to 'src/libvdpau/h264_parser.c')
-rw-r--r--src/libvdpau/h264_parser.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c
index d7c268fcc..14e1b735a 100644
--- a/src/libvdpau/h264_parser.c
+++ b/src/libvdpau/h264_parser.c
@@ -303,12 +303,13 @@ void calculate_pic_order(struct nal_parser *parser)
if(!slc->field_pic_flag || !slc->bottom_field_flag)
nal->top_field_order_cnt = parser->pic_order_cnt_msb + slc->pic_order_cnt_lsb;
+ nal->bottom_field_order_cnt = 0;
+
if(!slc->field_pic_flag)
nal->bottom_field_order_cnt = nal->top_field_order_cnt + slc->delta_pic_order_cnt_bottom;
- else
+ else if(slc->bottom_field_flag)
nal->bottom_field_order_cnt = parser->pic_order_cnt_msb + slc->pic_order_cnt_lsb;
-
} else if (sps->pic_order_cnt_type == 2) {
uint32_t prev_frame_num = parser->last_nal->slc->frame_num;
uint32_t prev_frame_num_offset = parser->frame_num_offset;
@@ -1007,10 +1008,10 @@ void decode_ref_pic_marking(struct nal_unit *nal,
if (pic->nal->slc->field_pic_flag == 0) {
dpb_set_unused_ref_picture_a(dpb, pic);
} else {
- if(!pic->top_is_reference)
+ //if(!pic->top_is_reference)
dpb_set_unused_ref_picture_a(dpb, pic);
- else
- pic->top_is_reference = 0;
+ /*else
+ pic->top_is_reference = 0;*/
//printf("FIXME: We might need do delete more from the DPB...\n");
// FIXME: some more handling needed here?! See 8.2.5.4.1, p. 120