[Encode] Extend AVC BRC ROI support
BRC non-native ROI supports up 16 ROI
with max 7 different dQP
diff --git a/media_driver/agnostic/common/codec/hal/codechal_vdenc_avc.cpp b/media_driver/agnostic/common/codec/hal/codechal_vdenc_avc.cpp
index 4be42b4..e45f99e 100644
--- a/media_driver/agnostic/common/codec/hal/codechal_vdenc_avc.cpp
+++ b/media_driver/agnostic/common/codec/hal/codechal_vdenc_avc.cpp
@@ -4576,10 +4576,7 @@
break;
}
}
- if (dqpidx == -1)
- {
- return MOS_STATUS_INVALID_PARAMETER;
- }
+ CODECHAL_ENCODE_CHK_COND_RETURN(dqpidx == -1, "Max number of supported different dQP for ROI is %u", m_maxNumNativeRoi);
uint32_t curX, curY;
for (curY = picParams->ROI[i].Top; curY < picParams->ROI[i].Bottom; curY++)
@@ -4779,14 +4776,26 @@
MOS_ZeroMemory(pData, m_picHeightInMb * m_picWidthInMb);
+
for (int32_t i = picParams->NumROI - 1; i >= 0; i--)
{
+ int32_t dqpidx = -1;
+ for (int32_t j = 0; j < m_maxNumBrcRoi; j++)
+ {
+ if (m_avcPicParam->ROIDistinctDeltaQp[j] == m_avcPicParam->ROI[i].PriorityLevelOrDQp)
+ {
+ dqpidx = j;
+ break;
+ }
+ }
+ CODECHAL_ENCODE_CHK_COND_RETURN(dqpidx == -1, "Max number of supported different dQP for ROI is %u", m_maxNumBrcRoi);
+
uint32_t curX, curY;
for (curY = picParams->ROI[i].Top; curY < picParams->ROI[i].Bottom; curY++)
{
for (curX = picParams->ROI[i].Left; curX < picParams->ROI[i].Right; curX++)
{
- *(pData + (m_picWidthInMb * curY + curX)) = i + 1; // Shift ROI by 1
+ *(pData + (m_picWidthInMb * curY + curX)) = dqpidx + 1; // Shift ROI by 1
}
}
}
diff --git a/media_driver/agnostic/common/codec/shared/codec_def_encode_avc.h b/media_driver/agnostic/common/codec/shared/codec_def_encode_avc.h
index 86d2d7b..e9f8ad2 100644
--- a/media_driver/agnostic/common/codec/shared/codec_def_encode_avc.h
+++ b/media_driver/agnostic/common/codec/shared/codec_def_encode_avc.h
@@ -42,7 +42,6 @@
#define ENCODE_VDENC_AVC_MAX_ROI_NUMBER_G9 3 // Max 4 regions including non-ROI - used from DDI
#define ENCODE_VDENC_AVC_MAX_ROI_NUMBER_ADV 16 // Max 16 regions including non-ROI - used from DDI
-#define ENCODE_VDENC_AVC_MAX_BRC_ROI_NUMBER_ADV 7 // Max 8 regions including non-ROI - used from DDI
#define ENCODE_VDENC_AVC_MIN_ROI_DELTA_QP_G9 -8 // Min delta QP for VDEnc ROI
#define ENCODE_VDENC_AVC_MAX_ROI_DELTA_QP_G9 7 // Max delta QP for VDEnc ROI