Commit 94f60b65 authored by Michael Niedermayer's avatar Michael Niedermayer

avcodec/h264_mb: fix grayscale only decoding with weighted prediction

Fixes Ticket3412
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent b6c92667
...@@ -420,10 +420,12 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square, ...@@ -420,10 +420,12 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square,
int weight1 = 64 - weight0; int weight1 = 64 - weight0;
luma_weight_avg(dest_y, tmp_y, h->mb_linesize, luma_weight_avg(dest_y, tmp_y, h->mb_linesize,
height, 5, weight0, weight1, 0); height, 5, weight0, weight1, 0);
chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, if (!CONFIG_GRAY || !(h->flags & CODEC_FLAG_GRAY)) {
chroma_height, 5, weight0, weight1, 0); chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize,
chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, chroma_height, 5, weight0, weight1, 0);
chroma_height, 5, weight0, weight1, 0); chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize,
chroma_height, 5, weight0, weight1, 0);
}
} else { } else {
luma_weight_avg(dest_y, tmp_y, h->mb_linesize, height, luma_weight_avg(dest_y, tmp_y, h->mb_linesize, height,
h->luma_log2_weight_denom, h->luma_log2_weight_denom,
...@@ -431,18 +433,20 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square, ...@@ -431,18 +433,20 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square,
h->luma_weight[refn1][1][0], h->luma_weight[refn1][1][0],
h->luma_weight[refn0][0][1] + h->luma_weight[refn0][0][1] +
h->luma_weight[refn1][1][1]); h->luma_weight[refn1][1][1]);
chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, chroma_height, if (!CONFIG_GRAY || !(h->flags & CODEC_FLAG_GRAY)) {
h->chroma_log2_weight_denom, chroma_weight_avg(dest_cb, tmp_cb, h->mb_uvlinesize, chroma_height,
h->chroma_weight[refn0][0][0][0], h->chroma_log2_weight_denom,
h->chroma_weight[refn1][1][0][0], h->chroma_weight[refn0][0][0][0],
h->chroma_weight[refn0][0][0][1] + h->chroma_weight[refn1][1][0][0],
h->chroma_weight[refn1][1][0][1]); h->chroma_weight[refn0][0][0][1] +
chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, chroma_height, h->chroma_weight[refn1][1][0][1]);
h->chroma_log2_weight_denom, chroma_weight_avg(dest_cr, tmp_cr, h->mb_uvlinesize, chroma_height,
h->chroma_weight[refn0][0][1][0], h->chroma_log2_weight_denom,
h->chroma_weight[refn1][1][1][0], h->chroma_weight[refn0][0][1][0],
h->chroma_weight[refn0][0][1][1] + h->chroma_weight[refn1][1][1][0],
h->chroma_weight[refn1][1][1][1]); h->chroma_weight[refn0][0][1][1] +
h->chroma_weight[refn1][1][1][1]);
}
} }
} else { } else {
int list = list1 ? 1 : 0; int list = list1 ? 1 : 0;
...@@ -456,15 +460,17 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square, ...@@ -456,15 +460,17 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square,
h->luma_log2_weight_denom, h->luma_log2_weight_denom,
h->luma_weight[refn][list][0], h->luma_weight[refn][list][0],
h->luma_weight[refn][list][1]); h->luma_weight[refn][list][1]);
if (h->use_weight_chroma) { if (!CONFIG_GRAY || !(h->flags & CODEC_FLAG_GRAY)) {
chroma_weight_op(dest_cb, h->mb_uvlinesize, chroma_height, if (h->use_weight_chroma) {
h->chroma_log2_weight_denom, chroma_weight_op(dest_cb, h->mb_uvlinesize, chroma_height,
h->chroma_weight[refn][list][0][0], h->chroma_log2_weight_denom,
h->chroma_weight[refn][list][0][1]); h->chroma_weight[refn][list][0][0],
chroma_weight_op(dest_cr, h->mb_uvlinesize, chroma_height, h->chroma_weight[refn][list][0][1]);
h->chroma_log2_weight_denom, chroma_weight_op(dest_cr, h->mb_uvlinesize, chroma_height,
h->chroma_weight[refn][list][1][0], h->chroma_log2_weight_denom,
h->chroma_weight[refn][list][1][1]); h->chroma_weight[refn][list][1][0],
h->chroma_weight[refn][list][1][1]);
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment