diff options
-rw-r--r-- | src/libvdpau/h264_parser.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c index 141f0d43e..ea043ca70 100644 --- a/src/libvdpau/h264_parser.c +++ b/src/libvdpau/h264_parser.c @@ -936,7 +936,7 @@ void parse_pred_weight_table(struct buf_reader *buf, struct nal_unit *nal) nal->slc->pred_weight_table.chroma_log2_weight_denom = read_exp_golomb(buf); int i; - for (i = 0; i <= pps->num_ref_idx_l0_active_minus1; i++) { + for (i = 0; i <= slc->num_ref_idx_l0_active_minus1; i++) { uint8_t luma_weight_l0_flag = read_bits(buf, 1); if (luma_weight_l0_flag == 1) { @@ -963,7 +963,7 @@ void parse_pred_weight_table(struct buf_reader *buf, struct nal_unit *nal) /* FIXME: Being spec-compliant here and loop to num_ref_idx_l0_active_minus1 * will break Divx7 files. Keep this in mind if any other streams are broken */ - for (i = 0; i <= pps->num_ref_idx_l1_active_minus1; i++) { + for (i = 0; i <= slc->num_ref_idx_l1_active_minus1; i++) { uint8_t luma_weight_l1_flag = read_bits(buf, 1); if (luma_weight_l1_flag == 1) { @@ -1001,7 +1001,7 @@ void decode_ref_pic_marking(struct nal_unit *nal, if (memory_management_control_operation == 1) { // short-term -> unused for reference uint32_t pic_num_x = (nal->curr_pic_num - - (slc->dec_ref_pic_marking[marking_nr].difference_of_pic_nums_minus1 + 1))%(nal->max_pic_num+1); + - (slc->dec_ref_pic_marking[marking_nr].difference_of_pic_nums_minus1 + 1))%nal->max_pic_num; struct decoded_picture* pic = NULL; if ((pic = dpb_get_picture(dpb, pic_num_x)) != NULL) { if (pic->nal->slc->field_pic_flag == 0) { @@ -1094,9 +1094,10 @@ void parse_dec_ref_pic_marking(struct buf_reader *buf, struct nal_parser *parser) { struct nal_unit *nal = parser->current_nal; + struct pic_parameter_set_rbsp *pps = parser->current_nal->pps; struct slice_header *slc = nal->slc; - if (!slc) + if (!slc || !pps) return; slc->dec_ref_pic_marking_count = 0; @@ -1253,13 +1254,11 @@ int parse_frame(struct nal_parser *parser, uint8_t *inbuf, int inbuf_len, parser->current_nal->slc) { int i; for(i = 0; i < parser->current_nal->slc->dec_ref_pic_marking_count; i++) { - if(parser->current_nal->slc->dec_ref_pic_marking[i].adaptive_ref_pic_marking_mode_flag) { - decode_ref_pic_marking( - parser->current_nal, - parser->current_nal->slc->dec_ref_pic_marking[i].memory_management_control_operation, - i, - parser); - } + decode_ref_pic_marking( + parser->current_nal, + parser->current_nal->slc->dec_ref_pic_marking[i].memory_management_control_operation, + i, + parser); } if (parser->last_nal->slc != NULL) |