|
|
|
@ -4002,8 +4002,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
get_se_golomb(&h->gb); /* slice_qs_delta */ |
|
|
|
|
|
|
|
|
|
h->deblocking_filter = 1; |
|
|
|
|
h->slice_alpha_c0_offset = 52; |
|
|
|
|
h->slice_beta_offset = 52; |
|
|
|
|
h->slice_alpha_c0_offset = 0; |
|
|
|
|
h->slice_beta_offset = 0; |
|
|
|
|
if (h->pps.deblocking_filter_parameters_present) { |
|
|
|
|
tmp = get_ue_golomb_31(&h->gb); |
|
|
|
|
if (tmp > 2) { |
|
|
|
@ -4016,10 +4016,12 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
h->deblocking_filter ^= 1; // 1<->0
|
|
|
|
|
|
|
|
|
|
if (h->deblocking_filter) { |
|
|
|
|
h->slice_alpha_c0_offset += get_se_golomb(&h->gb) << 1; |
|
|
|
|
h->slice_beta_offset += get_se_golomb(&h->gb) << 1; |
|
|
|
|
if (h->slice_alpha_c0_offset < 52 - 12 || h->slice_alpha_c0_offset > 52 + 12 || |
|
|
|
|
h->slice_beta_offset < 52 - 12 || h->slice_beta_offset > 52 + 12) { |
|
|
|
|
h->slice_alpha_c0_offset = get_se_golomb(&h->gb) * 2; |
|
|
|
|
h->slice_beta_offset = get_se_golomb(&h->gb) * 2; |
|
|
|
|
if (h->slice_alpha_c0_offset > 12 || |
|
|
|
|
h->slice_alpha_c0_offset < -12 || |
|
|
|
|
h->slice_beta_offset > 12 || |
|
|
|
|
h->slice_beta_offset < -12) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"deblocking filter parameters %d %d out of range\n", |
|
|
|
|
h->slice_alpha_c0_offset, h->slice_beta_offset); |
|
|
|
@ -4056,7 +4058,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
h->qp_thresh = 15 + 52 - |
|
|
|
|
h->qp_thresh = 15 + |
|
|
|
|
FFMIN(h->slice_alpha_c0_offset, h->slice_beta_offset) - |
|
|
|
|
FFMAX3(0, |
|
|
|
|
h->pps.chroma_qp_index_offset[0], |
|
|
|
@ -4132,7 +4134,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) |
|
|
|
|
h->ref_count[0], h->ref_count[1], |
|
|
|
|
h->qscale, |
|
|
|
|
h->deblocking_filter, |
|
|
|
|
h->slice_alpha_c0_offset / 2 - 26, h->slice_beta_offset / 2 - 26, |
|
|
|
|
h->slice_alpha_c0_offset, h->slice_beta_offset, |
|
|
|
|
h->use_weight, |
|
|
|
|
h->use_weight == 1 && h->use_weight_chroma ? "c" : "", |
|
|
|
|
h->slice_type == AV_PICTURE_TYPE_B ? (h->direct_spatial_mv_pred ? "SPAT" : "TEMP") : ""); |
|
|
|
|