blob: 4c1141a46a950597a16585aa4c1147eea1ebaf3d [file] [log] [blame]
From d6166b3538a89376771f2769d49d1ade8b177f7e Mon Sep 17 00:00:00 2001
From: JuanCutbertoEscamillaVela <juan.c.escamilla.vela@intel.com>
Date: Tue, 4 Aug 2020 06:16:58 +0800
Subject: [PATCH] [Encode] VP9 VDEnc fix width and height settings preventing
unaligned resolutions from working
VP9 VDEnc would send incorrect width and height settings to hardware, where an extra 1 would
be subtracted, preventing unaligned resolution encoding to work.
This change will correct these calculations to have aligned dimensions.
Change-Id: I7b17e7460acce497dbe222f9134009d07fdf72ed
---
.../agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.cpp | 6 +++---
.../agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.h | 4 ++--
media_driver/agnostic/gen11/hw/vdbox/mhw_vdbox_hcp_g11_X.cpp | 4 ++--
media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_hcp_g12_X.cpp | 8 ++++----
media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_vdenc_g12_X.h | 4 ++--
5 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.cpp b/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.cpp
index 0b0e71c1c0fb..7f83f95fb5d8 100644
--- a/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.cpp
+++ b/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.cpp
@@ -436,8 +436,8 @@ MOS_STATUS CodechalCmdInitializerG11::CmdInitializerVp9SetDmem()
hucInputCmd1.SADQPLambda = (uint16_t)(lambda * 4 + 0.5);
hucInputCmd1.RDQPLambda = (uint16_t)(lambda * lambda * 4 + 0.5); //U14.2
- hucInputCmd1.SrcFrameHeightMinus1 = m_vp9Params.picParams->SrcFrameHeightMinus1;
- hucInputCmd1.SrcFrameWidthMinus1 = m_vp9Params.picParams->SrcFrameWidthMinus1;
+ hucInputCmd1.SrcFrameHeight = m_vp9Params.picParams->SrcFrameHeightMinus1 + 1;
+ hucInputCmd1.SrcFrameWidth = m_vp9Params.picParams->SrcFrameWidthMinus1 + 1;
hucInputCmd1.SegmentationEnabled = m_vp9Params.segmentationEnabled;
hucInputCmd1.PrevFrameSegEnabled = m_vp9Params.prevFrameSegEnabled;
hucInputCmd1.LumaACQIndex = m_vp9Params.picParams->LumaACQIndex;
@@ -728,4 +728,4 @@ MOS_STATUS CodechalCmdInitializerG11::SetCopyData(
m_osInterface->pfnUnlockResource(m_osInterface, &m_cmdInitializerCopyDataBuffer[m_encoder->m_currRecycledBufIdx][m_currentPass]);
return eStatus;
-}
\ No newline at end of file
+}
diff --git a/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.h b/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.h
index e6e21ec50b57..733a26ca45b4 100644
--- a/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.h
+++ b/media_driver/agnostic/gen11/codec/hal/codechal_huc_cmd_initializer_g11.h
@@ -88,8 +88,8 @@ struct HucInputCmd1G11
uint32_t Intra32X32ModeMask;
// VP9
- uint16_t SrcFrameWidthMinus1;
- uint16_t SrcFrameHeightMinus1;
+ uint16_t SrcFrameWidth;
+ uint16_t SrcFrameHeight;
uint8_t SegmentationEnabled;
uint8_t PrevFrameSegEnabled;
diff --git a/media_driver/agnostic/gen11/hw/vdbox/mhw_vdbox_hcp_g11_X.cpp b/media_driver/agnostic/gen11/hw/vdbox/mhw_vdbox_hcp_g11_X.cpp
index 8d06bfac5d9b..6f263cae5f87 100644
--- a/media_driver/agnostic/gen11/hw/vdbox/mhw_vdbox_hcp_g11_X.cpp
+++ b/media_driver/agnostic/gen11/hw/vdbox/mhw_vdbox_hcp_g11_X.cpp
@@ -3280,8 +3280,8 @@ MOS_STATUS MhwVdboxHcpInterfaceG11::AddHcpVp9PicStateEncCmd(
auto vp9RefList = params->ppVp9RefList;
auto vp9SeqParams = params->pVp9SeqParams;
- cmd.DW1.FrameWidthInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameWidthMinus1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
- cmd.DW1.FrameHeightInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameHeightMinus1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
+ cmd.DW1.FrameWidthInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameWidthMinus1 + 1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
+ cmd.DW1.FrameHeightInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameHeightMinus1 + 1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
cmd.DW2.FrameType = vp9PicParams->PicFlags.fields.frame_type;
cmd.DW2.AdaptProbabilitiesFlag = !vp9PicParams->PicFlags.fields.error_resilient_mode && !vp9PicParams->PicFlags.fields.frame_parallel_decoding_mode;
diff --git a/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_hcp_g12_X.cpp b/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_hcp_g12_X.cpp
index 5e7c280bfad0..10e2dacdb925 100644
--- a/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_hcp_g12_X.cpp
+++ b/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_hcp_g12_X.cpp
@@ -3702,8 +3702,8 @@ MOS_STATUS MhwVdboxHcpInterfaceG12::AddHcpVp9PicStateEncCmd(
auto vp9RefList = params->ppVp9RefList;
auto vp9SeqParams = params->pVp9SeqParams;
- cmd.DW1.FrameWidthInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameWidthMinus1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
- cmd.DW1.FrameHeightInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameHeightMinus1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
+ cmd.DW1.FrameWidthInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameWidthMinus1 + 1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
+ cmd.DW1.FrameHeightInPixelsMinus1 = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameHeightMinus1 + 1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
cmd.DW2.FrameType = vp9PicParams->PicFlags.fields.frame_type;
cmd.DW2.AdaptProbabilitiesFlag = !vp9PicParams->PicFlags.fields.error_resilient_mode && !vp9PicParams->PicFlags.fields.frame_parallel_decoding_mode;
@@ -3711,8 +3711,8 @@ MOS_STATUS MhwVdboxHcpInterfaceG12::AddHcpVp9PicStateEncCmd(
cmd.DW2.AllowHiPrecisionMv = vp9PicParams->PicFlags.fields.allow_high_precision_mv;
cmd.DW2.McompFilterType = vp9PicParams->PicFlags.fields.mcomp_filter_type;
- cmd.DW2.RefFrameSignBias02 = vp9PicParams->RefFlags.fields.LastRefSignBias |
- (vp9PicParams->RefFlags.fields.GoldenRefSignBias << 1) |
+ cmd.DW2.RefFrameSignBias02 = vp9PicParams->RefFlags.fields.LastRefSignBias |
+ (vp9PicParams->RefFlags.fields.GoldenRefSignBias << 1) |
(vp9PicParams->RefFlags.fields.AltRefSignBias << 2);
cmd.DW2.HybridPredictionMode = vp9PicParams->PicFlags.fields.comp_prediction_mode == 2;
diff --git a/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_vdenc_g12_X.h b/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_vdenc_g12_X.h
index 59342edf54fa..a7538ffddf24 100644
--- a/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_vdenc_g12_X.h
+++ b/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_vdenc_g12_X.h
@@ -2740,8 +2740,8 @@ public:
MHW_MI_CHK_NULL(params->pVp9EncSeqParams);
auto vp9SeqParams = params->pVp9EncSeqParams;
- cmd.DW1.FrameWidthInPixelsMinusOne = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameWidthMinus1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
- cmd.DW1.FrameHeightInPixelsMinusOne = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameHeightMinus1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
+ cmd.DW1.FrameWidthInPixelsMinusOne = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameWidthMinus1 + 1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
+ cmd.DW1.FrameHeightInPixelsMinusOne = MOS_ALIGN_CEIL(vp9PicParams->SrcFrameHeightMinus1 + 1, CODEC_VP9_MIN_BLOCK_WIDTH) - 1;
cmd.DW2.Value = (cmd.DW2.Value & 0x8ff00000) | 0x5aff3;
cmd.DW5.Value = (cmd.DW5.Value & 0xf000300) | 0x80ac00;
--
2.7.4