diff options
-rw-r--r-- | src/libvdpau/h264_parser.c | 11 | ||||
-rw-r--r-- | src/libvdpau/vdpau_h264.c | 2 |
2 files changed, 7 insertions, 6 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 diff --git a/src/libvdpau/vdpau_h264.c b/src/libvdpau/vdpau_h264.c index 90dc15d67..6ae22d3bc 100644 --- a/src/libvdpau/vdpau_h264.c +++ b/src/libvdpau/vdpau_h264.c @@ -249,7 +249,7 @@ static void fill_vdpau_pictureinfo_h264(video_decoder_t *this_gen, uint32_t slic pic->field_pic_flag = slc->field_pic_flag; pic->bottom_field_flag = slc->bottom_field_flag; pic->num_ref_frames = sps->num_ref_frames; - pic->mb_adaptive_frame_field_flag = sps->mb_adaptive_frame_field_flag; + pic->mb_adaptive_frame_field_flag = sps->mb_adaptive_frame_field_flag && !slc->field_pic_flag; pic->constrained_intra_pred_flag = pps->constrained_intra_pred_flag; pic->weighted_pred_flag = pps->weighted_pred_flag; pic->weighted_bipred_idc = pps->weighted_bipred_idc; |