summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2010-04-19 13:31:23 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2010-04-19 13:31:23 +0800
commit7d5877d542a3256e64d106caa791f9af0d701142 (patch)
treed3913f590f925fd2f636692a8cfc5102a45913e1
parent21b718316b33522d1761fc3bb15b5cef31860bd9 (diff)
downloadlibva-7d5877d542a3256e64d106caa791f9af0d701142.tar.gz
i965_drv_video: [H.264] fix weight 128 issue
-rw-r--r--i965_drv_video/i965_avc_bsd.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/i965_drv_video/i965_avc_bsd.c b/i965_drv_video/i965_avc_bsd.c
index 157bf16..d00fe7d 100644
--- a/i965_drv_video/i965_avc_bsd.c
+++ b/i965_drv_video/i965_avc_bsd.c
@@ -263,16 +263,17 @@ i965_avc_bsd_slice_state(VADriverContextP ctx,
cmd_len += 16;
}
- if (pic_param->pic_fields.bits.weighted_pred_flag == 1 ||
- pic_param->pic_fields.bits.weighted_bipred_idc == 1) {
+ if ((slice_param->slice_type == SLICE_TYPE_P ||
+ slice_param->slice_type == SLICE_TYPE_SP) &&
+ (pic_param->pic_fields.bits.weighted_pred_flag == 1)) {
present_flag |= PRESENT_WEIGHT_OFFSET_L0;
cmd_len += 48;
}
- if (pic_param->pic_fields.bits.weighted_bipred_idc == 1) {
- present_flag |= PRESENT_WEIGHT_OFFSET_L1;
- cmd_len += 48;
- assert(slice_param->slice_type == SLICE_TYPE_B);
+ if ((slice_param->slice_type == SLICE_TYPE_B) &&
+ (pic_param->pic_fields.bits.weighted_bipred_idc == 1)) {
+ present_flag |= PRESENT_WEIGHT_OFFSET_L0 | PRESENT_WEIGHT_OFFSET_L1;
+ cmd_len += 96;
}
BEGIN_BCS_BATCH(ctx, cmd_len);
@@ -346,7 +347,8 @@ i965_avc_bsd_slice_state(VADriverContextP ctx,
weightoffsets[j * 6 + 4] = slice_param->chroma_offset_l0[j][1];
weightoffsets[j * 6 + 5] = slice_param->chroma_weight_l0[j][1];
- if (pic_param->pic_fields.bits.weighted_bipred_idc == 1) {
+ if (pic_param->pic_fields.bits.weighted_pred_flag == 1 ||
+ pic_param->pic_fields.bits.weighted_bipred_idc == 1) {
if (i965_h264_context->use_hw_w128) {
if (slice_param->luma_weight_l0[j] == 128)
i965_h264_context->weight128_luma_l0 |= (1 << j);