summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcarpalis <jerome.borsboom@carpalis.nl>2017-10-27 13:04:33 +0200
committerXiang, Haihao <haihao.xiang@intel.com>2018-01-05 14:57:31 +0800
commit9cba61ce395f943b4399e6646fa368dea958688f (patch)
treed49f2ec74d5047b633150b81e2fe9a8e6ceb3f47
parent16871854bf5fadb33a59d4958546983f2a06011a (diff)
downloadlibva-intel-driver-9cba61ce395f943b4399e6646fa368dea958688f.tar.gz
genX_mfd: fix calculation of motion vector mode
As stated in the PRM, the FastUVMCFlag field should be equal to the LSB of the Motion Vector Mode field. This also conforms to VC-1 spec, as FASTUVMC controls whether color difference motion vectors are reconstructed with quarter of half pixel resolution. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
-rw-r--r--src/gen75_mfd.c8
-rw-r--r--src/gen7_mfd.c8
-rw-r--r--src/gen8_mfd.c8
3 files changed, 6 insertions, 18 deletions
diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c
index 13ee8b05..9906f604 100644
--- a/src/gen75_mfd.c
+++ b/src/gen75_mfd.c
@@ -1882,13 +1882,9 @@ gen75_mfd_vc1_pic_state(VADriverContextP ctx,
if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear ||
(pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation &&
pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear))
- interpolation_mode = 9; /* Half-pel bilinear */
- else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel ||
- (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation &&
- pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel))
- interpolation_mode = 1; /* Half-pel bicubic */
+ interpolation_mode = 8 | pic_param->fast_uvmc_flag;
else
- interpolation_mode = 0; /* Quarter-pel bicubic */
+ interpolation_mode = 0 | pic_param->fast_uvmc_flag;
BEGIN_BCS_BATCH(batch, 6);
OUT_BCS_BATCH(batch, MFD_VC1_LONG_PIC_STATE | (6 - 2));
diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c
index 51cd91a1..4902c8ee 100644
--- a/src/gen7_mfd.c
+++ b/src/gen7_mfd.c
@@ -1616,13 +1616,9 @@ gen7_mfd_vc1_pic_state(VADriverContextP ctx,
if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear ||
(pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation &&
pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear))
- interpolation_mode = 9; /* Half-pel bilinear */
- else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel ||
- (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation &&
- pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel))
- interpolation_mode = 1; /* Half-pel bicubic */
+ interpolation_mode = 8 | pic_param->fast_uvmc_flag;
else
- interpolation_mode = 0; /* Quarter-pel bicubic */
+ interpolation_mode = 0 | pic_param->fast_uvmc_flag;
BEGIN_BCS_BATCH(batch, 6);
OUT_BCS_BATCH(batch, MFD_VC1_LONG_PIC_STATE | (6 - 2));
diff --git a/src/gen8_mfd.c b/src/gen8_mfd.c
index 59d0e709..0eeb9a70 100644
--- a/src/gen8_mfd.c
+++ b/src/gen8_mfd.c
@@ -1661,13 +1661,9 @@ gen8_mfd_vc1_pic_state(VADriverContextP ctx,
if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPelBilinear ||
(pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation &&
pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPelBilinear))
- interpolation_mode = 9; /* Half-pel bilinear */
- else if (pic_param->mv_fields.bits.mv_mode == VAMvMode1MvHalfPel ||
- (pic_param->mv_fields.bits.mv_mode == VAMvModeIntensityCompensation &&
- pic_param->mv_fields.bits.mv_mode2 == VAMvMode1MvHalfPel))
- interpolation_mode = 1; /* Half-pel bicubic */
+ interpolation_mode = 8 | pic_param->fast_uvmc_flag;
else
- interpolation_mode = 0; /* Quarter-pel bicubic */
+ interpolation_mode = 0 | pic_param->fast_uvmc_flag;
BEGIN_BCS_BATCH(batch, 6);
OUT_BCS_BATCH(batch, MFD_VC1_LONG_PIC_STATE | (6 - 2));