From ebc5dd01f87b53b92210828b3b512d693e554eb1 Mon Sep 17 00:00:00 2001 From: Kenneth Andersson <kenneth.r.andersson@ericsson.com> Date: Mon, 25 Jul 2022 22:05:30 +0000 Subject: [PATCH] JVET-AA0042 Test 2.10b (longer RPR filters for luma and chroma) --- source/Lib/CommonLib/CommonDef.h | 4 + source/Lib/CommonLib/InterpolationFilter.cpp | 247 ++++++++++++++++++- source/Lib/CommonLib/InterpolationFilter.h | 9 +- source/Lib/CommonLib/TypeDef.h | 1 + 4 files changed, 259 insertions(+), 2 deletions(-) diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h index b9c1d6925..46123d49e 100644 --- a/source/Lib/CommonLib/CommonDef.h +++ b/source/Lib/CommonLib/CommonDef.h @@ -815,7 +815,11 @@ static const int NTAPS_LUMA = 8; ///< Numb #endif #if JVET_Z0117_CHROMA_IF static const int NTAPS_CHROMA = 6; ///< Number of taps for chroma +#if JVET_AA0042_RPR_FILTERS +static const int NTAPS_CHROMA_RPR = 6; ///< Number of taps for chroma RPR +#else static const int NTAPS_CHROMA_RPR = 4; ///< Number of taps for chroma RPR +#endif #else static const int NTAPS_CHROMA = 4; ///< Number of taps for chroma #endif diff --git a/source/Lib/CommonLib/InterpolationFilter.cpp b/source/Lib/CommonLib/InterpolationFilter.cpp index dd7672b48..fccbf7292 100644 --- a/source/Lib/CommonLib/InterpolationFilter.cpp +++ b/source/Lib/CommonLib/InterpolationFilter.cpp @@ -161,14 +161,65 @@ const TFilterCoeff InterpolationFilter::m_lumaFilter[LUMA_INTERPOLATION_FILTER_S { 0, 1, -2, 4, 63, -3, 1, 0 } }; #endif + +#if JVET_AA0042_RPR_FILTERS +const TFilterCoeff InterpolationFilter::m_affineLumaFilterUpRPR[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12] = +{ + { 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0}, + { 0, 2, -3, 6, -14, 254, 16, -7, 4, -2, 0, 0}, + { 0, 3, -6, 12, -26, 249, 34, -14, 7, -4, 1, 0}, + { 0, 4, -9, 17, -36, 241, 54, -22, 11, -6, 2, 0}, + { 0, 5, -11, 20, -43, 230, 75, -29, 15, -8, 2, 0}, + { 0, 5, -12, 23, -48, 216, 96, -36, 18, -9, 3, 0}, + { 0, 5, -13, 25, -51, 200, 118, -42, 21, -11, 4, 0}, + { 0, 5, -13, 25, -51, 181, 140, -46, 23, -12, 4, 0}, + { 0, 5, -13, 25, -50, 161, 161, -50, 25, -13, 5, 0}, + { 0, 4, -12, 23, -46, 140, 181, -51, 25, -13, 5, 0}, + { 0, 4, -11, 21, -42, 118, 200, -51, 25, -13, 5, 0}, + { 0, 3, -9, 18, -36, 96, 216, -48, 23, -12, 5, 0}, + { 0, 2, -8, 15, -29, 75, 230, -43, 20, -11, 5, 0}, + { 0, 2, -6, 11, -22, 54, 241, -36, 17, -9, 4, 0}, + { 0, 1, -4, 7, -14, 34, 249, -26, 12, -6, 3, 0}, + { 0, 0, -2, 4, -7, 16, 254, -14, 6, -3, 2, 0}, +#if SIMD_4x4_12 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // dummy line for SIMD reading of 2 chunks for 12-tap filter not to address wrong memory +#endif +}; +#endif + // 1.5x #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS +const TFilterCoeff InterpolationFilter::m_lumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12] = +#else const TFilterCoeff InterpolationFilter::m_lumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8] = +#endif #else const TFilterCoeff InterpolationFilter::m_lumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][NTAPS_LUMA] = #endif { #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS + { 0, 10, -12, -19, 70, 158, 70, -19, -12, 10, 0, 0, }, + { 0, 10, -9, -22, 62, 156, 79, -17, -13, 9, 1, 0, }, + { -1, 10, -8, -22, 54, 155, 87, -13, -16, 9, 2, -1, }, + { -2, 10, -5, -23, 46, 152, 95, -9, -18, 9, 2, -1, }, + { -2, 9, -4, -23, 39, 150, 103, -6, -20, 8, 4, -2, }, + { -2, 8, -1, -24, 33, 144, 111, -2, -20, 6, 5, -2, }, + { -3, 9, -1, -24, 26, 142, 117, 4, -22, 5, 5, -2, }, + { -3, 8, 0, -23, 20, 137, 123, 10, -23, 4, 5, -2, }, + { -2, 6, 3, -25, 16, 130, 130, 16, -25, 3, 6, -2, }, + { -2, 5, 4, -23, 10, 123, 137, 20, -23, 0, 8, -3, }, + { -2, 5, 5, -22, 4, 117, 142, 26, -24, -1, 9, -3, }, + { -2, 5, 6, -20, -2, 111, 144, 33, -24, -1, 8, -2, }, + { -2, 4, 8, -20, -6, 103, 150, 39, -23, -4, 9, -2, }, + { -1, 2, 9, -18, -9, 95, 152, 46, -23, -5, 10, -2, }, + { -1, 2, 9, -16, -13, 87, 155, 54, -22, -8, 10, -1, }, + { 0, 1, 9, -13, -17, 79, 156, 62, -22, -9, 10, 0, }, +#if SIMD_4x4_12 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // dummy line for SIMD reading of 2 chunks for 12-tap filter not to address wrong memory +#endif +#else { -1 * 4, -5 * 4, 17 * 4, 42 * 4, 17 * 4, -5 * 4, -1 * 4, 0 }, { 0, -5 * 4, 15 * 4, 41 * 4, 19 * 4, -5 * 4, -1 * 4, 0 }, { 0, -5 * 4, 13 * 4, 40 * 4, 21 * 4, -4 * 4, -1 * 4, 0 }, @@ -185,6 +236,7 @@ const TFilterCoeff InterpolationFilter::m_lumaFilterRPR1[LUMA_INTERPOLATION_FILT { 1 * 4, -2 * 4, -4 * 4, 24 * 4, 39 * 4, 11 * 4, -5 * 4, 0 }, { 0, -1 * 4, -4 * 4, 21 * 4, 40 * 4, 13 * 4, -5 * 4, 0 }, { 0, -1 * 4, -5 * 4, 19 * 4, 41 * 4, 15 * 4, -5 * 4, 0 } +#endif #else { -1, -5, 17, 42, 17, -5, -1, 0 }, { 0, -5, 15, 41, 19, -5, -1, 0 }, @@ -207,12 +259,37 @@ const TFilterCoeff InterpolationFilter::m_lumaFilterRPR1[LUMA_INTERPOLATION_FILT // 2x #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS +const TFilterCoeff InterpolationFilter::m_lumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12] = +#else const TFilterCoeff InterpolationFilter::m_lumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8] = +#endif #else const TFilterCoeff InterpolationFilter::m_lumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][NTAPS_LUMA] = #endif { #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS + { 4, -6, -18, 12, 78, 116, 78, 12, -18, -6, 4, 0 }, + { 4, -6, -18, 8, 76, 116, 86, 14, -18, -8, 2, 0 }, + { 4, -4, -18, 4, 70, 116, 88, 18, -16, -8, 2, 0 }, + { 2, -4, -18, 2, 68, 116, 92, 22, -16, -10, 2, 0 }, + { 2, -2, -16, -2, 62, 114, 94, 26, -14, -10, 2, 0 }, + { 2, -2, -16, -4, 58, 112, 98, 30, -14, -12, 2, 2 }, + { 2, 0, -16, -6, 52, 110, 102, 34, -14, -12, 2, 2 }, + { 2, 0, -14, -8, 48, 108, 104, 38, -12, -14, 2, 2 }, + { 2, 0, -14, -10, 44, 106, 106, 44, -10, -14, 0, 2 }, + { 2, 2, -14, -12, 38, 104, 108, 48, -8, -14, 0, 2 }, + { 2, 2, -12, -14, 34, 102, 110, 52, -6, -16, 0, 2 }, + { 2, 2, -12, -14, 30, 98, 112, 58, -4, -16, -2, 2 }, + { 0, 2, -10, -14, 26, 94, 114, 62, -2, -16, -2, 2 }, + { 0, 2, -10, -16, 22, 92, 116, 68, 2, -18, -4, 2 }, + { 0, 2, -8, -16, 18, 88, 116, 70, 4, -18, -4, 4 }, + { 0, 2, -8, -18, 14, 86, 116, 76, 8, -18, -6, 4 }, +#if SIMD_4x4_12 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // dummy line for SIMD reading of 2 chunks for 12-tap filter not to address wrong memory +#endif +#else { -4 * 4, 2 * 4, 20 * 4, 28 * 4, 20 * 4, 2 * 4, -4 * 4, 0 }, { -4 * 4, 0, 19 * 4, 29 * 4, 21 * 4, 5 * 4, -4 * 4, -2 * 4 }, { -4 * 4, -1 * 4, 18 * 4, 29 * 4, 22 * 4, 6 * 4, -4 * 4, -2 * 4 }, @@ -229,6 +306,7 @@ const TFilterCoeff InterpolationFilter::m_lumaFilterRPR2[LUMA_INTERPOLATION_FILT { -2 * 4, -4 * 4, 7 * 4, 23 * 4, 29 * 4, 16 * 4, -1 * 4, -4 * 4 }, { -2 * 4, -4 * 4, 6 * 4, 22 * 4, 29 * 4, 18 * 4, -1 * 4, -4 * 4 }, { -2 * 4, -4 * 4, 5 * 4, 21 * 4, 29 * 4, 19 * 4, 0, -4 * 4 } +#endif #else { -4, 2, 20, 28, 20, 2, -4, 0 }, { -4, 0, 19, 29, 21, 5, -4, -2 }, @@ -251,12 +329,37 @@ const TFilterCoeff InterpolationFilter::m_lumaFilterRPR2[LUMA_INTERPOLATION_FILT // 1.5x #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS +const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12] = +#else const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8] = +#endif #else const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][NTAPS_LUMA] = #endif { #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS + { 0, 6, -10, -19, 74, 154, 74, -19, -10, 6, 0, 0}, + { 0, 8, -8, -22, 66, 153, 82, -18, -13, 8, 0, 0}, + { 0, 7, -6, -24, 58, 152, 90, -14, -15, 8, 0, 0}, + { 0, 7, -5, -25, 51, 150, 97, -11, -17, 8, 1, 0}, + { 0, 6, -2, -26, 43, 147, 105, -7, -19, 7, 2, 0}, + { 0, 6, -1, -26, 35, 144, 112, -2, -21, 7, 2, 0}, + { 0, 5, 1, -26, 28, 140, 118, 3, -22, 6, 3, 0}, + { 0, 5, 2, -26, 22, 135, 125, 9, -24, 5, 3, 0}, + { 0, 4, 4, -25, 15, 130, 130, 15, -25, 4, 4, 0}, + { 0, 3, 5, -24, 9, 125, 135, 22, -26, 2, 5, 0}, + { 0, 3, 6, -22, 3, 118, 140, 28, -26, 1, 5, 0}, + { 0, 2, 7, -21, -2, 112, 144, 35, -26, -1, 6, 0}, + { 0, 2, 7, -19, -7, 105, 147, 43, -26, -2, 6, 0}, + { 0, 1, 8, -17, -11, 97, 150, 51, -25, -5, 7, 0}, + { 0, 0, 8, -15, -14, 90, 152, 58, -24, -6, 7, 0}, + { 0, 0, 8, -13, -18, 82, 153, 66, -22, -8, 8, 0}, +#if SIMD_4x4_12 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } +#endif +#else { 0, -6 * 4, 17 * 4, 42 * 4, 17 * 4, -5 * 4, -1 * 4, 0 }, { 0, -5 * 4, 15 * 4, 41 * 4, 19 * 4, -5 * 4, -1 * 4, 0 }, { 0, -5 * 4, 13 * 4, 40 * 4, 21 * 4, -4 * 4, -1 * 4, 0 }, @@ -273,6 +376,7 @@ const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR1[LUMA_INTERPOLATIO { 0, -1 * 4, -4 * 4, 24 * 4, 39 * 4, 11 * 4, -5 * 4, 0 }, { 0, -1 * 4, -4 * 4, 21 * 4, 40 * 4, 13 * 4, -5 * 4, 0 }, { 0, -1 * 4, -5 * 4, 19 * 4, 41 * 4, 15 * 4, -5 * 4, 0 } +#endif #else { 0, -6, 17, 42, 17, -5, -1, 0 }, { 0, -5, 15, 41, 19, -5, -1, 0 }, @@ -295,12 +399,37 @@ const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR1[LUMA_INTERPOLATIO // 2x #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS +const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12] = +#else const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8] = +#endif #else const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][NTAPS_LUMA] = #endif { #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS + { 0, -3, -14, 10, 77, 116, 77, 10, -14, -3, 0, 0}, + { 0, -4, -15, 8, 73, 116, 82, 14, -15, -5, 2, 0}, + { 0, -3, -15, 5, 69, 115, 86, 18, -15, -6, 2, 0}, + { 0, -2, -15, 2, 65, 114, 89, 22, -14, -7, 2, 0}, + { 0, -1, -14, -1, 60, 113, 93, 26, -14, -8, 2, 0}, + { 0, -1, -14, -3, 56, 112, 96, 30, -13, -9, 2, 0}, + { 0, 0, -13, -5, 51, 110, 100, 34, -12, -10, 1, 0}, + { 0, 0, -13, -7, 47, 108, 103, 38, -10, -11, 1, 0}, + { 0, 1, -12, -9, 43, 105, 105, 43, -9, -12, 1, 0}, + { 0, 1, -11, -10, 38, 103, 108, 47, -7, -13, 0, 0}, + { 0, 1, -10, -12, 34, 100, 110, 51, -5, -13, 0, 0}, + { 0, 2, -9, -13, 30, 96, 112, 56, -3, -14, -1, 0}, + { 0, 2, -8, -14, 26, 93, 113, 60, -1, -14, -1, 0}, + { 0, 2, -7, -14, 22, 89, 114, 65, 2, -15, -2, 0}, + { 0, 2, -6, -15, 18, 86, 115, 69, 5, -15, -3, 0}, + { 0, 2, -5, -15, 14, 82, 116, 73, 8, -15, -4, 0}, +#if SIMD_4x4_12 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } +#endif +#else { 0, -2 * 4, 20 * 4, 28 * 4, 20 * 4, 2 * 4, -4 * 4, 0 }, { 0, -4 * 4, 19 * 4, 29 * 4, 21 * 4, 5 * 4, -6 * 4, 0 }, { 0, -5 * 4, 18 * 4, 29 * 4, 22 * 4, 6 * 4, -6 * 4, 0 }, @@ -317,6 +446,7 @@ const TFilterCoeff InterpolationFilter::m_affineLumaFilterRPR2[LUMA_INTERPOLATIO { 0, -6 * 4, 7 * 4, 23 * 4, 29 * 4, 16 * 4, -5 * 4, 0 }, { 0, -6 * 4, 6 * 4, 22 * 4, 29 * 4, 18 * 4, -5 * 4, 0 }, { 0, -6 * 4, 5 * 4, 21 * 4, 29 * 4, 19 * 4, -4 * 4, 0 } +#endif #else { 0, -2, 20, 28, 20, 2, -4, 0 }, { 0, -4, 19, 29, 21, 5, -6, 0 }, @@ -757,6 +887,40 @@ const TFilterCoeff InterpolationFilter::m_chromaFilterRPR1[CHROMA_INTERPOLATION_ #endif { #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS + { -14, 64, 156, 64, -14, 0 }, + { -13, 59, 155, 68, -12, -1 }, + { -13, 56, 154, 71, -11, -1 }, + { -13, 52, 153, 76, -10, -2 }, + { -12, 47, 153, 79, -9, -2 }, + { -13, 45, 151, 84, -8, -3 }, + { -13, 39, 154, 88, -9, -3 }, + { -14, 34, 156, 94, -10, -4 }, + { -15, 33, 152, 99, -7, -6 }, + { -15, 30, 150, 103, -5, -7 }, + { -14, 26, 148, 107, -4, -7 }, + { -12, 23, 143, 110, -1, -7 }, + { -13, 18, 145, 116, -2, -8 }, + { -10, 15, 139, 118, 1, -7 }, + { -15, 19, 134, 122, 9, -13 }, + { -14, 18, 129, 123, 13, -13 }, + { -14, 18, 124, 124, 18, -14 }, + { -13, 13, 123, 129, 18, -14 }, + { -13, 9, 122, 134, 19, -15 }, + { -7, 1, 118, 139, 15, -10 }, + { -8, -2, 116, 145, 18, -13 }, + { -7, -1, 110, 143, 23, -12 }, + { -7, -4, 107, 148, 26, -14 }, + { -7, -5, 103, 150, 30, -15 }, + { -6, -7, 99, 152, 33, -15 }, + { -4, -10, 94, 156, 34, -14 }, + { -3, -9, 88, 154, 39, -13 }, + { -3, -8, 84, 151, 45, -13 }, + { -2, -9, 79, 153, 47, -12 }, + { -2, -10, 76, 153, 52, -13 }, + { -1, -11, 71, 154, 56, -13 }, + { -1, -12, 68, 155, 59, -13 }, +#else { 12 * 4, 40 * 4, 12 * 4, 0 }, { 11 * 4, 40 * 4, 13 * 4, 0 }, { 10 * 4, 40 * 4, 15 * 4, -1 * 4 }, @@ -789,6 +953,7 @@ const TFilterCoeff InterpolationFilter::m_chromaFilterRPR1[CHROMA_INTERPOLATION_ { -1 * 4, 16 * 4, 40 * 4, 9 * 4 }, { -1 * 4, 15 * 4, 40 * 4, 10 * 4 }, { 0, 13 * 4, 40 * 4, 11 * 4 }, +#endif #else { 12, 40, 12, 0 }, { 11, 40, 13, 0 }, @@ -833,6 +998,40 @@ const TFilterCoeff InterpolationFilter::m_chromaFilterRPR2[CHROMA_INTERPOLATION_ #endif { #if IF_12TAP +#if JVET_AA0042_RPR_FILTERS + { -5, 64, 138, 64, -5, 0}, + { -8, 66, 132, 73, -6, -1}, + { -9, 62, 134, 76, -5, -2}, + { -10, 59, 134, 80, -4, -3}, + { -10, 57, 132, 82, -2, -3}, + { -10, 53, 132, 85, 0, -4}, + { -11, 50, 132, 89, 1, -5}, + { -12, 47, 132, 93, 2, -6}, + { -13, 45, 131, 96, 4, -7}, + { -12, 40, 131, 99, 5, -7}, + { -12, 39, 127, 101, 9, -8}, + { -13, 36, 127, 105, 10, -9}, + { -12, 33, 124, 107, 14, -10}, + { -13, 30, 124, 111, 15, -11}, + { -13, 29, 121, 112, 18, -11}, + { -12, 25, 119, 115, 21, -12}, + { -13, 24, 117, 117, 24, -13}, + { -12, 21, 115, 119, 25, -12}, + { -11, 18, 112, 121, 29, -13}, + { -11, 15, 111, 124, 30, -13}, + { -10, 14, 107, 124, 33, -12}, + { -9, 10, 105, 127, 36, -13}, + { -8, 9, 101, 127, 39, -12}, + { -7, 5, 99, 131, 40, -12}, + { -7, 4, 96, 131, 45, -13}, + { -6, 2, 93, 132, 47, -12}, + { -5, 1, 89, 132, 50, -11}, + { -4, 0, 85, 132, 53, -10}, + { -3, -2, 82, 132, 57, -10}, + { -3, -4, 80, 134, 59, -10}, + { -2, -5, 76, 134, 62, -9}, + { -1, -6, 73, 132, 66, -8}, +#else { 17 * 4, 30 * 4, 17 * 4, 0 }, { 17 * 4, 30 * 4, 18 * 4, -1 * 4 }, { 16 * 4, 30 * 4, 18 * 4, 0 }, @@ -865,6 +1064,7 @@ const TFilterCoeff InterpolationFilter::m_chromaFilterRPR2[CHROMA_INTERPOLATION_ { 0, 18 * 4, 30 * 4, 16 * 4 }, { 0, 18 * 4, 30 * 4, 16 * 4 }, { -1 * 4, 18 * 4, 30 * 4, 17 * 4 } +#endif #else { 17, 30, 17, 0 }, { 17, 30, 18, -1 }, @@ -1651,8 +1851,30 @@ void InterpolationFilter::filterHor(const ComponentID compID, Pel const *src, in } else if (nFilterIdx == 2) { +#if JVET_AA0042_RPR_FILTERS + filterHor<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_affineLumaFilterUpRPR[frac], biMCForDMVR); +#else filterHor<8>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter4x4[frac], biMCForDMVR); +#endif } +#if JVET_AA0042_RPR_FILTERS + else if (nFilterIdx == 3) + { + filterHor<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilterRPR1[frac], biMCForDMVR); + } + else if (nFilterIdx == 4) + { + filterHor<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilterRPR2[frac], biMCForDMVR); + } + else if (nFilterIdx == 5) + { + filterHor<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_affineLumaFilterRPR1[frac], biMCForDMVR); + } + else if (nFilterIdx == 6) + { + filterHor<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_affineLumaFilterRPR2[frac], biMCForDMVR); + } +#else else if (nFilterIdx == 3) { filterHor<8>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilterRPR1[frac], biMCForDMVR); @@ -1670,7 +1892,7 @@ void InterpolationFilter::filterHor(const ComponentID compID, Pel const *src, in { filterHor<8>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_affineLumaFilterRPR2[frac], biMCForDMVR); } - +#endif else if (frac == 8 && useAltHpelIf) { filterHor<8>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaAltHpelIFilter, biMCForDMVR); @@ -1795,8 +2017,30 @@ void InterpolationFilter::filterVer(const ComponentID compID, Pel const *src, in } else if (nFilterIdx == 2) { +#if JVET_AA0042_RPR_FILTERS + filterVer<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_affineLumaFilterUpRPR[frac], biMCForDMVR); +#else filterVer<8>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter4x4[frac], biMCForDMVR); +#endif } +#if JVET_AA0042_RPR_FILTERS + else if (nFilterIdx == 3) + { + filterVer<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilterRPR1[frac], biMCForDMVR); + } + else if (nFilterIdx == 4) + { + filterVer<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilterRPR2[frac], biMCForDMVR); + } + else if (nFilterIdx == 5) + { + filterVer<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_affineLumaFilterRPR1[frac], biMCForDMVR); + } + else if (nFilterIdx == 6) + { + filterVer<NTAPS_LUMA(0)>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_affineLumaFilterRPR2[frac], biMCForDMVR); + } +#else else if (nFilterIdx == 3) { filterVer<8>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilterRPR1[frac], biMCForDMVR); @@ -1813,6 +2057,7 @@ void InterpolationFilter::filterVer(const ComponentID compID, Pel const *src, in { filterVer<8>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_affineLumaFilterRPR2[frac], biMCForDMVR); } +#endif else if (frac == 8 && useAltHpelIf) { filterVer<8>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaAltHpelIFilter, biMCForDMVR); diff --git a/source/Lib/CommonLib/InterpolationFilter.h b/source/Lib/CommonLib/InterpolationFilter.h index 8022a5f82..1d47585aa 100644 --- a/source/Lib/CommonLib/InterpolationFilter.h +++ b/source/Lib/CommonLib/InterpolationFilter.h @@ -82,11 +82,18 @@ public: #if IF_12TAP static const TFilterCoeff m_lumaFilter12[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12]; ///< Luma filter taps //+1 added by //kolya static const TFilterCoeff m_lumaFilter[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8]; ///< Luma filter taps, for affine +#if JVET_AA0042_RPR_FILTERS + static const TFilterCoeff m_lumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12]; ///< Luma filter taps 1.5x + static const TFilterCoeff m_lumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12]; ///< Luma filter taps 2x + static const TFilterCoeff m_affineLumaFilterUpRPR[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12]; + static const TFilterCoeff m_affineLumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12]; ///< Luma filter taps 1.5x + static const TFilterCoeff m_affineLumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS + 1][12]; ///< Luma filter taps 2x +#else static const TFilterCoeff m_lumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8]; ///< Luma filter taps 1.5x static const TFilterCoeff m_lumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8]; ///< Luma filter taps 2x static const TFilterCoeff m_affineLumaFilterRPR1[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8]; ///< Luma filter taps 1.5x static const TFilterCoeff m_affineLumaFilterRPR2[LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][8]; ///< Luma filter taps 2x - +#endif private: static const TFilterCoeff m_lumaAltHpelIFilter[8]; ///< Luma filter taps #else diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 451d4c794..baf379fd4 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -155,6 +155,7 @@ #endif #define IF_12TAP 1 // 12-tap IF #define JVET_Z0117_CHROMA_IF 1 // JVET-Z0117: 6-tap interpolation filter for chroma MC +#define JVET_AA0042_RPR_FILTERS 1 // JVET-AA0042: luma 12-tap non-affine 10-tap affine, chroma 6-tap #define ENABLE_OBMC 1 // Enable Overlapped Block Motion Compensation #if JVET_X0049_BDMVR_SW_OPT -- GitLab