diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h index 5f71bfbbb6c431760c851fcae50dee9140206188..34b2d2e8c47902433cdb4a385f0fcffb268a8cd7 100644 --- a/source/Lib/CommonLib/CommonDef.h +++ b/source/Lib/CommonLib/CommonDef.h @@ -1326,6 +1326,13 @@ static const int CFLM_MAX_REF_SAMPLES = CCCM_MAX_REF_SAMPLES; static const int INTER_CCCM_NUM_PARAMS = 8; static const int INTER_CCCM_MAX_REF_SAMPLES = 256; #endif +#if JVET_AG0058_EIP +#if JVET_AI0066_REGULARIZED_EIP +static const int REGULARIZED_EIP_L2_SAMPLE_THRESHOLD = 2024; +static const int REGULARIZED_EIP_L2_SMALL = 192; +static const int REGULARIZED_EIP_L2_LARGE = 128; +#endif +#endif #if JVET_AC0071_DBV static const int NUM_DBV_POSITION = 5; static const int DBV_TEMPLATE_SIZE = 1; diff --git a/source/Lib/CommonLib/IntraPrediction.cpp b/source/Lib/CommonLib/IntraPrediction.cpp index e717263c4ee6bfd93aeb4ba3c5c372294a2a5581..5edefec9884b96f9ad8c81a2555cd8dcb7b27349 100644 --- a/source/Lib/CommonLib/IntraPrediction.cpp +++ b/source/Lib/CommonLib/IntraPrediction.cpp @@ -26224,6 +26224,16 @@ void CccmCovariance::solveEip(const TCccmCoeff* A, const TCccmCoeff* Y, const in } } +#if JVET_AI0066_REGULARIZED_EIP + // Regularization parameter: L2 multiplier * number of parameters + const int regularizationParam = (sampleNum <= REGULARIZED_EIP_L2_SAMPLE_THRESHOLD) ? REGULARIZED_EIP_L2_SMALL * numParams : REGULARIZED_EIP_L2_LARGE * numParams; + + for (int coli0 = 0; coli0 < numParams - 1; coli0++) // The last term (bias) is not regularized. + { + ATA[coli0][coli0] += regularizationParam; + } +#endif + for (int coli = 0; coli < numParams; coli++) { ATCb[coli] = Y[coli]; diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 31fc98b0568d5cb2ca8e2c848ca6aa7742680c9d..91f1464be74d9366fdfd837e0f0ba373c2b8dcc8 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -204,6 +204,9 @@ #define JVET_AD0120_LBCCP 1 // JVET-AD0120: Local-Boosting Cross-Component Prediction, wherein the template part is controlled by CCCM SPS #define JVET_AE0043_CCP_MERGE_TEMPORAL 1 // JVET-AE0043: Cross-component merge mode with temporal candidates #define JVET_AG0058_EIP 1 // JVET-AG0058: Extrapolation filter-based intra prediction mode +#if JVET_AG0058_EIP +#define JVET_AI0066_REGULARIZED_EIP 1 // JVET-AI0066: L2 Regularization for EIP +#endif #define JVET_AG0154_DECODER_DERIVED_CCP_FUSION 1 // JVET-AG0154: Decoder derived CCP mode with fusion candidates #define JVET_AG0059_CCP_MERGE_ENHANCEMENT 1 // JVET-AG0059: Enhancements on CCP merge for chroma intra coding #define JVET_AH0065_RELAX_LINE_BUFFER 1 // JVET-AH0065: Relaxing line buffer restriction