| 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 |
| |