diff --git a/cfg/scaling_list/sample_scaling_list.cfg b/cfg/scaling_list/sample_scaling_list.cfg new file mode 100644 index 0000000000000000000000000000000000000000..1f343d579d57cf91d471c90f60e74fef3235ca25 --- /dev/null +++ b/cfg/scaling_list/sample_scaling_list.cfg @@ -0,0 +1,3 @@ +#============ Scaling List ====================== +ScalingList : 2 # Scaling list: 0: no scaling list, 2: scaling lists specified in ScalingListFile +ScalingListFile : sample_scaling_list_file.txt diff --git a/cfg/scaling_list/sample_scaling_list_file.txt b/cfg/scaling_list/sample_scaling_list_file.txt new file mode 100644 index 0000000000000000000000000000000000000000..c0b827a63193163b952ba897b9e972b09d1bc8fb --- /dev/null +++ b/cfg/scaling_list/sample_scaling_list_file.txt @@ -0,0 +1,304 @@ +# ScalingListFile +# The matrices in this sample file are inherited from JCTVC-H1104. + +INTRA2X2_LUMA = + 7,19 + 19,41 + +INTRA2X2_CHROMAU = + 7,19 + 19,41 + +INTRA2X2_CHROMAV = + 7,19 + 19,41 + +INTER2X2_LUMA = + 11,30 + 30,50 + +INTER2X2_CHROMAU = + 11,30 + 30,50 + +INTER2X2_CHROMAV = + 11,30 + 30,50 + +INTRA4X4_LUMA = + 7,12,19,26 +12,16,24,40 +19,24,41,50 +26,40,50,56 + +INTRA4X4_CHROMAU = + 7,12,19,26 +12,16,24,40 +19,24,41,50 +26,40,50,56 + +INTRA4X4_CHROMAV = + 7,12,19,26 +12,16,24,40 +19,24,41,50 +26,40,50,56 + +INTER4X4_LUMA = +11,18,30,43 +18,22,40,50 +30,40,50,52 +43,50,52,55 + +INTER4X4_CHROMAU = +11,18,30,43 +18,22,40,50 +30,40,50,52 +43,50,52,55 + +INTER4X4_CHROMAV = +11,18,30,43 +18,22,40,50 +30,40,50,52 +43,50,52,55 + +INTRA8X8_LUMA = + 6, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA8X8_CHROMAU = + 6, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA8X8_CHROMAV = + 6, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTER8X8_LUMA = + 9,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER8X8_CHROMAU = + 9,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER8X8_CHROMAV = + 9,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTRA16X16_LUMA = + 6, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA16X16_LUMA_DC = +6 + +INTRA16X16_CHROMAU = + 7, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA16X16_CHROMAU_DC = +6 + +INTRA16X16_CHROMAV = + 7, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA16X16_CHROMAV_DC = +6 + +INTER16X16_LUMA = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER16X16_LUMA_DC = +9 + +INTER16X16_CHROMAU = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER16X16_CHROMAU_DC = +9 + +INTER16X16_CHROMAV = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER16X16_CHROMAV_DC = +9 + +INTRA32X32_LUMA = + 7, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA32X32_LUMA_DC = +6 + +INTRA32X32_CHROMAU = + 7, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA32X32_CHROMAU_DC = +6 + +INTRA32X32_CHROMAV = + 7, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA32X32_CHROMAV_DC = +6 + +INTER32X32_LUMA = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER32X32_LUMA_DC = +9 + +INTER32X32_CHROMAU = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER32X32_CHROMAU_DC = +9 + +INTER32X32_CHROMAV = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER32X32_CHROMAV_DC = +9 + +INTRA64X64_LUMA = + 7, 9,13,18,25,35,36,37 + 9,10,15,21,32,35,37,41 +13,15,18,23,35,55,58,59 +18,21,23,26,65,58,64,66 +25,32,35,65,66,66,67,70 +35,35,55,58,66,68,70,73 +36,37,58,64,67,70,76,80 +37,41,59,66,70,73,80,85 + +INTRA64X64_LUMA_DC = +6 + +INTER64X64_LUMA = +11,15,20,29,36,38,42,43 +15,17,22,29,39,43,45,46 +20,22,32,34,47,48,49,50 +29,29,34,44,50,51,52,53 +36,39,47,50,51,52,55,55 +38,43,48,51,52,53,56,58 +42,45,49,52,55,56,55,60 +43,46,50,53,55,58,60,63 + +INTER64X64_LUMA_DC = +9 diff --git a/source/Lib/CommonLib/Quant.cpp b/source/Lib/CommonLib/Quant.cpp index 15489433d85cb91bfc0a8f08151ee1cef2b62c13..0bc59f1e2f95c98bbd1c038a79cbdeb021fc0dca 100644 --- a/source/Lib/CommonLib/Quant.cpp +++ b/source/Lib/CommonLib/Quant.cpp @@ -542,8 +542,15 @@ void Quant::setScalingList(ScalingList *scalingList, const int maxLog2TrDynamicR { for(uint32_t list = 0; list < SCALING_LIST_NUM; list++) { +#if JVET_R0166_SCALING_LISTS_CHROMA_444 + if (size == SCALING_LIST_2x2 && list < 4) // skip 2x2 luma +#else if ((size == SCALING_LIST_2x2 && list < 4) || (size == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0)) // skip 2x2 luma +#endif continue; +#if JVET_R0166_SCALING_LISTS_CHROMA_444 + scalingListId = g_scalingListId[size][list]; +#endif if (scalingList->getChromaScalingListPresentFlag() || scalingList->isLumaScalingList(scalingListId)) { for(int qp = minimumQp; qp < maximumQp; qp++) @@ -556,7 +563,9 @@ void Quant::setScalingList(ScalingList *scalingList, const int maxLog2TrDynamicR { scalingList->processDefaultMatrix(scalingListId); } +#if !JVET_R0166_SCALING_LISTS_CHROMA_444 scalingListId++; +#endif } } //based on square result and apply downsample technology @@ -568,9 +577,15 @@ void Quant::setScalingList(ScalingList *scalingList, const int maxLog2TrDynamicR for (uint32_t list = 0; list < SCALING_LIST_NUM; list++) //9 { int largerSide = (sizew > sizeh) ? sizew : sizeh; +#if !JVET_R0166_SCALING_LISTS_CHROMA_444 if (largerSide == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0) continue; +#endif if (largerSide < SCALING_LIST_4x4) printf("Rectangle Error !\n"); +#if JVET_R0166_SCALING_LISTS_CHROMA_444 + recScalingListId = g_scalingListId[largerSide][list]; +#else recScalingListId = SCALING_LIST_NUM * (largerSide - 2) + 2 + (list / ((largerSide == SCALING_LIST_64x64) ? 3 : 1)); +#endif for (int qp = minimumQp; qp < maximumQp; qp++) { xSetRecScalingListEnc(scalingList, list, sizew, sizeh, qp, recScalingListId); @@ -595,13 +610,22 @@ void Quant::setScalingListDec(const ScalingList &scalingList) { for(uint32_t list = 0; list < SCALING_LIST_NUM; list++) { +#if JVET_R0166_SCALING_LISTS_CHROMA_444 + if (size == SCALING_LIST_2x2 && list < 4) // skip 2x2 luma +#else if ((size == SCALING_LIST_2x2 && list < 4) || (size == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0)) // skip 2x2 luma +#endif continue; +#if JVET_R0166_SCALING_LISTS_CHROMA_444 + scalingListId = g_scalingListId[size][list]; +#endif for(int qp = minimumQp; qp < maximumQp; qp++) { xSetScalingListDec(scalingList, list, size, qp, scalingListId); } +#if !JVET_R0166_SCALING_LISTS_CHROMA_444 scalingListId++; +#endif } } //based on square result and apply downsample technology @@ -614,9 +638,15 @@ void Quant::setScalingListDec(const ScalingList &scalingList) for (uint32_t list = 0; list < SCALING_LIST_NUM; list++) //9 { int largerSide = (sizew > sizeh) ? sizew : sizeh; +#if !JVET_R0166_SCALING_LISTS_CHROMA_444 if (largerSide == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0) continue; +#endif if (largerSide < SCALING_LIST_4x4) printf("Rectangle Error !\n"); +#if JVET_R0166_SCALING_LISTS_CHROMA_444 + recScalingListId = g_scalingListId[largerSide][list]; +#else recScalingListId = SCALING_LIST_NUM * (largerSide - 2) + 2 + (list / ((largerSide == SCALING_LIST_64x64) ? 3 : 1)); +#endif for (int qp = minimumQp; qp < maximumQp; qp++) { xSetRecScalingListDec(scalingList, list, sizew, sizeh, qp, recScalingListId); diff --git a/source/Lib/CommonLib/Rom.cpp b/source/Lib/CommonLib/Rom.cpp index c22e29f5648307a8ded6cab7fa858afe93c200e4..61814be666379ee943c954d3de7396fa1b460d50 100644 --- a/source/Lib/CommonLib/Rom.cpp +++ b/source/Lib/CommonLib/Rom.cpp @@ -678,6 +678,19 @@ const int g_quantInterDefault8x8[8 * 8] = const uint32_t g_scalingListSize [SCALING_LIST_SIZE_NUM] = { 1, 4, 16, 64, 256, 1024, 4096, 16384 }; const uint32_t g_scalingListSizeX[SCALING_LIST_SIZE_NUM] = { 1, 2, 4, 8, 16, 32, 64, 128 }; +#if JVET_R0166_SCALING_LISTS_CHROMA_444 +const uint32_t g_scalingListId[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM] = +{ + { 0, 0, 0, 0, 0, 0}, // SCALING_LIST_1x1 + { 0, 0, 0, 0, 0, 1}, // SCALING_LIST_2x2 + { 2, 3, 4, 5, 6, 7}, // SCALING_LIST_4x4 + { 8, 9, 10, 11, 12, 13}, // SCALING_LIST_8x8 + { 14, 15, 16, 17, 18, 19}, // SCALING_LIST_16x16 + { 20, 21, 22, 23, 24, 25}, // SCALING_LIST_32x32 + { 26, 21, 22, 27, 24, 25}, // SCALING_LIST_64x64 + { 0, 0, 0, 0, 0, 0}, // SCALING_LIST_128x128 +}; +#endif Mv g_reusedUniMVs[32][32][8][8][2][33]; diff --git a/source/Lib/CommonLib/Rom.h b/source/Lib/CommonLib/Rom.h index e3b7fa5905c8c278a3ee13c99a86741160ea9e5b..54e7a3b1cfd855773b8cb85c5e3faad4a7819836 100644 --- a/source/Lib/CommonLib/Rom.h +++ b/source/Lib/CommonLib/Rom.h @@ -176,6 +176,9 @@ extern const int g_quantInterDefault8x8[8*8]; extern const uint32_t g_scalingListSize [SCALING_LIST_SIZE_NUM]; extern const uint32_t g_scalingListSizeX[SCALING_LIST_SIZE_NUM]; +#if JVET_R0166_SCALING_LISTS_CHROMA_444 +extern const uint32_t g_scalingListId[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; +#endif extern MsgLevel g_verbosity; diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 86f59e9b5bbdb73a911df061ca6efa8edb6c14cf..1e903f5f3ca06d807f4660c5ddbfe2c70cfd82e3 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -63,6 +63,8 @@ #define JVET_R0165_OPTIONAL_ENTRY_POINT 1 // JVET-R0165: Optional entry point offset +#define JVET_R0166_SCALING_LISTS_CHROMA_444 1 // JVET-R0166: Scaling list for Chroma 444 + #define R0324_PH_SYNTAX_CONDITION_MODIFY 1 // JVET-R0324 add conditions on PH syntax to conder whether current pic is bi-predictive picture #define JVET_R0278_CONSTRAINT 1 // JVET-R0278: ph_inter_slice_allowed_flag constraint