blob: 84ce187114444983c0d394e72011badbcc378da8 [file] [log] [blame] [edit]
/*
* Copyright (c) 2024, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 2 Clause License and
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
* was not distributed with this source code in the LICENSE file, you can
* obtain it at www.aomedia.org/license/software. If the Alliance for Open
* Media Patent License 1.0 was not distributed with this source code in the
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
#include <assert.h>
#include "aom_dsp/aom_dsp_common.h"
#include "intra_dip.h"
#include "intra_matrix.h"
const uint16_t
av1_intra_matrix_weights[INTRA_DIP_MODE_CNT][DIP_ROWS][DIP_COLS] = {
{
{ 776, 1714, 1077, 998, 1043, 1437, 1157, 1027, 1027, 1011, 1023 },
{ 845, 1519, 1598, 892, 1088, 988, 1219, 1079, 1039, 1000, 1022 },
{ 1008, 989, 1862, 1124, 1030, 977, 1060, 1124, 1076, 1016, 1022 },
{ 1037, 915, 1407, 1726, 926, 1029, 973, 1090, 1107, 1054, 1025 },
{ 1007, 1054, 928, 1902, 1186, 1032, 978, 1040, 1102, 1030, 1028 },
{ 1010, 1074, 899, 1409, 1778, 1021, 1007, 1002, 1091, 973, 1023 },
{ 1021, 1037, 1024, 927, 2084, 1023, 1019, 988, 1075, 1064, 1028 },
{ 1024, 1022, 1065, 818, 1862, 1029, 1018, 991, 1061, 1367, 1030 },
{ 822, 1283, 1251, 967, 1049, 1242, 1566, 1019, 1060, 1008, 1018 },
{ 933, 1155, 1562, 1034, 1049, 944, 1275, 1221, 1086, 1003, 1024 },
{ 1003, 986, 1479, 1395, 1018, 971, 1002, 1218, 1162, 1023, 1027 },
{ 1006, 1032, 1077, 1726, 1127, 1014, 935, 1093, 1204, 1040, 1033 },
{ 1004, 1084, 892, 1531, 1546, 1022, 968, 995, 1183, 1026, 1036 },
{ 1016, 1063, 959, 1086, 1954, 1022, 1002, 957, 1142, 1053, 1037 },
{ 1023, 1041, 1035, 839, 2022, 1025, 1014, 957, 1106, 1187, 1040 },
{ 1025, 1032, 1048, 831, 1806, 1035, 1013, 977, 1070, 1405, 1045 },
{ 985, 1050, 1269, 1027, 1027, 926, 1658, 1247, 1067, 1008, 1025 },
{ 989, 1001, 1381, 1213, 1024, 953, 1128, 1383, 1177, 1007, 1033 },
{ 998, 1016, 1175, 1515, 1098, 996, 932, 1201, 1287, 1027, 1041 },
{ 999, 1080, 933, 1550, 1381, 1012, 941, 1007, 1295, 1044, 1048 },
{ 1010, 1086, 914, 1212, 1794, 1020, 983, 929, 1228, 1062, 1050 },
{ 1019, 1061, 991, 908, 2018, 1028, 1004, 922, 1161, 1128, 1050 },
{ 1022, 1046, 1034, 806, 1978, 1035, 1007, 943, 1111, 1250, 1054 },
{ 1023, 1036, 1039, 843, 1790, 1049, 1001, 980, 1062, 1403, 1060 },
{ 1031, 964, 1196, 1112, 1010, 938, 1254, 1646, 1086, 1007, 1046 },
{ 1005, 958, 1184, 1329, 1049, 1017, 959, 1379, 1345, 1012, 1050 },
{ 1000, 1038, 989, 1495, 1239, 1015, 938, 1050, 1421, 1037, 1068 },
{ 1003, 1088, 893, 1327, 1614, 1014, 982, 897, 1339, 1059, 1073 },
{ 1015, 1075, 948, 1000, 1946, 1023, 1009, 883, 1223, 1101, 1068 },
{ 1020, 1058, 1009, 821, 2042, 1035, 1008, 912, 1143, 1176, 1065 },
{ 1021, 1047, 1034, 800, 1954, 1047, 1001, 948, 1089, 1275, 1068 },
{ 1023, 1037, 1039, 853, 1786, 1057, 997, 987, 1045, 1389, 1073 },
{ 1014, 944, 1108, 1173, 1014, 1066, 907, 1682, 1326, 1013, 1042 },
{ 1011, 963, 1025, 1365, 1119, 1056, 931, 1150, 1566, 1027, 1078 },
{ 1004, 1050, 892, 1385, 1411, 1021, 998, 884, 1483, 1054, 1107 },
{ 1011, 1071, 904, 1130, 1798, 1015, 1030, 841, 1307, 1080, 1102 },
{ 1019, 1056, 982, 880, 2026, 1029, 1028, 882, 1174, 1127, 1087 },
{ 1022, 1046, 1027, 789, 2042, 1043, 1015, 925, 1099, 1201, 1082 },
{ 1025, 1039, 1042, 808, 1934, 1052, 1006, 957, 1060, 1285, 1081 },
{ 1028, 1030, 1046, 864, 1782, 1062, 997, 992, 1031, 1377, 1080 },
{ 1017, 951, 1031, 1195, 1047, 1082, 914, 1246, 1746, 1025, 1031 },
{ 1020, 974, 925, 1327, 1229, 1061, 996, 905, 1670, 1046, 1140 },
{ 1013, 1042, 859, 1245, 1582, 1029, 1042, 825, 1425, 1068, 1160 },
{ 1016, 1050, 926, 998, 1914, 1022, 1051, 860, 1221, 1096, 1132 },
{ 1023, 1038, 1006, 828, 2052, 1034, 1037, 916, 1102, 1149, 1108 },
{ 1023, 1031, 1042, 792, 2018, 1049, 1019, 952, 1048, 1218, 1097 },
{ 1025, 1027, 1051, 827, 1902, 1060, 1007, 979, 1026, 1293, 1091 },
{ 1030, 1022, 1051, 878, 1766, 1066, 1000, 1003, 1012, 1370, 1087 },
{ 1029, 967, 967, 1187, 1108, 1054, 1032, 863, 1914, 1041, 1126 },
{ 1028, 975, 873, 1242, 1366, 1066, 1047, 821, 1570, 1063, 1240 },
{ 1020, 1025, 860, 1112, 1718, 1047, 1054, 862, 1293, 1084, 1215 },
{ 1022, 1031, 946, 922, 1962, 1036, 1047, 924, 1117, 1119, 1163 },
{ 1025, 1020, 1020, 820, 2026, 1043, 1033, 965, 1034, 1172, 1129 },
{ 1026, 1017, 1053, 814, 1970, 1055, 1017, 987, 999, 1233, 1114 },
{ 1028, 1019, 1058, 851, 1866, 1062, 1005, 1007, 990, 1299, 1104 },
{ 1033, 1019, 1053, 894, 1746, 1069, 996, 1026, 987, 1365, 1096 },
{ 1032, 977, 926, 1152, 1198, 1052, 1065, 821, 1638, 1050, 1379 },
{ 1036, 968, 857, 1142, 1493, 1078, 1054, 878, 1345, 1079, 1359 },
{ 1031, 997, 876, 1011, 1786, 1069, 1048, 939, 1146, 1108, 1273 },
{ 1026, 1011, 958, 888, 1950, 1058, 1034, 985, 1034, 1150, 1196 },
{ 1027, 1007, 1027, 840, 1964, 1058, 1018, 1009, 984, 1202, 1151 },
{ 1030, 1007, 1057, 847, 1903, 1058, 1012, 1016, 969, 1255, 1132 },
{ 1033, 1014, 1058, 878, 1814, 1062, 1003, 1029, 965, 1307, 1120 },
{ 1035, 1020, 1051, 913, 1714, 1069, 995, 1043, 966, 1366, 1110 },
},
{
{ 799, 1537, 1053, 1015, 1027, 1754, 997, 1045, 1021, 1019, 1020 },
{ 763, 1509, 1450, 905, 1061, 1401, 1105, 1037, 1027, 1012, 1019 },
{ 922, 1034, 1901, 923, 1060, 1213, 1123, 1055, 1024, 1012, 1020 },
{ 1018, 829, 1721, 1389, 958, 1120, 1103, 1075, 1020, 1034, 1022 },
{ 993, 994, 1129, 1862, 1009, 1060, 1080, 1092, 1014, 1027, 1026 },
{ 979, 1093, 896, 1657, 1475, 1029, 1055, 1102, 1013, 962, 1028 },
{ 1002, 1041, 1016, 1098, 1945, 1024, 1031, 1103, 1019, 979, 1031 },
{ 1014, 1003, 1100, 856, 1869, 1024, 1019, 1097, 1032, 1245, 1029 },
{ 769, 1147, 1140, 999, 1036, 1746, 1411, 960, 1048, 1018, 1016 },
{ 825, 1111, 1398, 944, 1061, 1481, 1363, 1046, 1030, 1013, 1018 },
{ 917, 940, 1626, 991, 1064, 1281, 1294, 1118, 1018, 1015, 1022 },
{ 971, 898, 1497, 1289, 1036, 1146, 1221, 1168, 1013, 1024, 1026 },
{ 975, 1011, 1150, 1550, 1131, 1057, 1156, 1196, 1013, 1018, 1031 },
{ 977, 1073, 1002, 1411, 1457, 1014, 1097, 1208, 1018, 996, 1035 },
{ 996, 1048, 1061, 1067, 1754, 1001, 1051, 1202, 1032, 1040, 1037 },
{ 1009, 1019, 1108, 914, 1709, 999, 1029, 1186, 1048, 1227, 1040 },
{ 944, 1038, 1115, 1012, 1041, 1166, 1890, 1004, 1039, 1016, 1019 },
{ 930, 980, 1269, 986, 1064, 1213, 1630, 1162, 1013, 1014, 1023 },
{ 966, 892, 1392, 1021, 1081, 1175, 1448, 1262, 1010, 1016, 1026 },
{ 991, 905, 1317, 1186, 1090, 1097, 1317, 1317, 1015, 1023, 1029 },
{ 989, 1006, 1134, 1315, 1179, 1026, 1217, 1339, 1024, 1024, 1035 },
{ 990, 1056, 1065, 1221, 1391, 988, 1136, 1335, 1041, 1025, 1040 },
{ 1000, 1041, 1107, 1019, 1574, 975, 1080, 1309, 1063, 1073, 1043 },
{ 1011, 1013, 1138, 933, 1550, 976, 1046, 1281, 1079, 1211, 1050 },
{ 1032, 1031, 1068, 1022, 1046, 903, 1709, 1483, 939, 1015, 1039 },
{ 995, 986, 1144, 1012, 1071, 1019, 1527, 1507, 980, 1013, 1034 },
{ 1002, 921, 1211, 1027, 1093, 1063, 1385, 1525, 1012, 1017, 1033 },
{ 1012, 914, 1190, 1101, 1114, 1058, 1274, 1529, 1038, 1023, 1034 },
{ 1009, 975, 1110, 1159, 1176, 1024, 1188, 1515, 1060, 1031, 1039 },
{ 1008, 1023, 1089, 1105, 1298, 991, 1122, 1481, 1085, 1042, 1044 },
{ 1010, 1027, 1128, 991, 1405, 972, 1074, 1431, 1111, 1088, 1050 },
{ 1016, 1006, 1160, 939, 1397, 968, 1042, 1381, 1124, 1192, 1061 },
{ 1014, 1030, 1039, 1025, 1050, 1005, 1137, 1966, 969, 1015, 1040 },
{ 1004, 1011, 1063, 1022, 1074, 1022, 1169, 1820, 1057, 1012, 1032 },
{ 1010, 969, 1097, 1026, 1094, 1043, 1153, 1750, 1096, 1016, 1036 },
{ 1019, 938, 1112, 1046, 1113, 1054, 1120, 1706, 1119, 1022, 1040 },
{ 1018, 950, 1096, 1066, 1142, 1053, 1082, 1662, 1138, 1034, 1044 },
{ 1015, 982, 1096, 1044, 1195, 1035, 1049, 1610, 1159, 1054, 1049 },
{ 1015, 1004, 1125, 984, 1252, 1008, 1025, 1542, 1176, 1095, 1058 },
{ 1020, 1000, 1158, 948, 1263, 986, 1009, 1474, 1185, 1174, 1069 },
{ 1002, 1028, 1025, 1025, 1050, 1079, 878, 1814, 1391, 1017, 984 },
{ 1003, 1022, 1025, 1024, 1069, 1065, 936, 1766, 1349, 1014, 1014 },
{ 1012, 994, 1042, 1021, 1085, 1063, 962, 1746, 1313, 1016, 1035 },
{ 1020, 954, 1074, 1017, 1096, 1071, 972, 1726, 1289, 1022, 1046 },
{ 1023, 937, 1091, 1018, 1101, 1081, 973, 1694, 1279, 1036, 1053 },
{ 1020, 948, 1099, 1015, 1106, 1079, 972, 1650, 1276, 1062, 1059 },
{ 1017, 977, 1114, 989, 1130, 1056, 971, 1590, 1274, 1098, 1069 },
{ 1020, 996, 1138, 961, 1153, 1022, 970, 1519, 1269, 1159, 1081 },
{ 1016, 1022, 1022, 1020, 1046, 1052, 949, 1278, 1882, 1017, 985 },
{ 1013, 1019, 1015, 1019, 1061, 1069, 909, 1449, 1678, 1016, 1041 },
{ 1016, 997, 1026, 1018, 1068, 1078, 894, 1550, 1554, 1019, 1067 },
{ 1022, 962, 1059, 1009, 1069, 1085, 898, 1598, 1482, 1025, 1077 },
{ 1027, 936, 1088, 1003, 1056, 1095, 909, 1610, 1440, 1042, 1080 },
{ 1027, 937, 1099, 1005, 1043, 1095, 925, 1594, 1409, 1067, 1084 },
{ 1025, 958, 1103, 999, 1046, 1080, 938, 1558, 1383, 1101, 1093 },
{ 1026, 983, 1117, 977, 1070, 1048, 947, 1506, 1355, 1149, 1106 },
{ 1022, 1017, 1025, 1014, 1045, 1032, 1014, 996, 1894, 1017, 1210 },
{ 1020, 1010, 1020, 1013, 1054, 1058, 939, 1215, 1747, 1018, 1191 },
{ 1022, 999, 1022, 1017, 1051, 1071, 902, 1361, 1642, 1023, 1177 },
{ 1026, 971, 1050, 1009, 1043, 1083, 889, 1451, 1570, 1033, 1164 },
{ 1032, 943, 1085, 997, 1027, 1089, 898, 1493, 1521, 1049, 1153 },
{ 1037, 934, 1099, 1000, 1006, 1087, 919, 1503, 1481, 1073, 1148 },
{ 1036, 949, 1095, 1008, 997, 1077, 934, 1495, 1441, 1104, 1150 },
{ 1037, 967, 1103, 993, 1017, 1057, 942, 1468, 1400, 1143, 1157 },
},
{
{ 771, 1998, 932, 1045, 1019, 1416, 1014, 1026, 1019, 1025, 1024 },
{ 743, 1958, 1466, 872, 1075, 1016, 1081, 1011, 1021, 1017, 1028 },
{ 970, 1143, 2116, 870, 1068, 989, 1057, 1016, 1015, 1017, 1028 },
{ 1067, 790, 1858, 1503, 879, 1046, 1026, 1025, 1014, 1055, 1026 },
{ 1013, 998, 1075, 2116, 903, 1039, 1026, 1029, 1017, 1048, 1023 },
{ 993, 1106, 808, 1818, 1503, 1022, 1030, 1029, 1016, 936, 1025 },
{ 1017, 1040, 987, 1092, 2092, 1020, 1030, 1029, 1015, 944, 1026 },
{ 1025, 1013, 1085, 794, 1986, 1015, 1035, 1024, 1015, 1271, 1025 },
{ 699, 1914, 978, 1028, 1024, 1294, 1315, 953, 1035, 1024, 1027 },
{ 761, 1902, 1497, 867, 1076, 915, 1211, 988, 1020, 1017, 1033 },
{ 970, 1159, 2084, 898, 1059, 935, 1104, 1013, 1008, 1021, 1035 },
{ 1056, 831, 1810, 1527, 884, 1016, 1046, 1026, 1007, 1055, 1030 },
{ 1010, 1010, 1069, 2084, 946, 1025, 1037, 1031, 1008, 1042, 1026 },
{ 994, 1106, 821, 1774, 1533, 1011, 1041, 1028, 1011, 944, 1026 },
{ 1018, 1044, 983, 1092, 2068, 1009, 1040, 1027, 1009, 968, 1028 },
{ 1025, 1019, 1076, 806, 1982, 1005, 1044, 1024, 1007, 1271, 1028 },
{ 817, 1838, 1017, 1013, 1028, 827, 1720, 945, 1029, 1024, 1030 },
{ 819, 1838, 1531, 862, 1077, 723, 1365, 1011, 1004, 1018, 1040 },
{ 987, 1162, 2068, 926, 1049, 855, 1150, 1033, 998, 1025, 1040 },
{ 1057, 867, 1762, 1550, 889, 974, 1063, 1033, 1001, 1056, 1034 },
{ 1016, 1023, 1060, 2060, 979, 998, 1050, 1028, 1006, 1040, 1029 },
{ 1000, 1106, 829, 1738, 1554, 994, 1053, 1023, 1007, 952, 1029 },
{ 1020, 1048, 981, 1086, 2060, 997, 1052, 1020, 1007, 986, 1031 },
{ 1023, 1024, 1071, 812, 1978, 998, 1054, 1022, 1001, 1274, 1033 },
{ 883, 1758, 1056, 998, 1033, 611, 1654, 1287, 943, 1024, 1043 },
{ 860, 1774, 1558, 862, 1076, 605, 1357, 1162, 967, 1019, 1048 },
{ 1003, 1163, 2038, 960, 1037, 786, 1155, 1088, 983, 1029, 1047 },
{ 1059, 899, 1718, 1578, 892, 933, 1072, 1045, 999, 1058, 1038 },
{ 1024, 1033, 1053, 2034, 1013, 971, 1062, 1023, 1009, 1038, 1032 },
{ 1009, 1107, 838, 1702, 1578, 975, 1063, 1015, 1008, 961, 1033 },
{ 1025, 1053, 979, 1078, 2052, 978, 1068, 1011, 1003, 1003, 1036 },
{ 1025, 1026, 1068, 815, 1974, 984, 1068, 1016, 995, 1279, 1039 },
{ 865, 1682, 1091, 986, 1035, 695, 1208, 1726, 931, 1026, 1046 },
{ 871, 1706, 1578, 867, 1072, 603, 1203, 1335, 980, 1021, 1049 },
{ 1006, 1169, 1998, 1001, 1024, 753, 1127, 1129, 1002, 1034, 1048 },
{ 1059, 930, 1670, 1598, 898, 898, 1079, 1046, 1008, 1059, 1041 },
{ 1031, 1041, 1049, 1998, 1049, 947, 1072, 1016, 1012, 1036, 1035 },
{ 1017, 1106, 848, 1666, 1594, 958, 1074, 1009, 1007, 971, 1037 },
{ 1029, 1057, 979, 1072, 2042, 961, 1079, 1011, 997, 1020, 1041 },
{ 1029, 1029, 1065, 820, 1962, 963, 1082, 1017, 989, 1285, 1044 },
{ 856, 1603, 1121, 977, 1036, 765, 994, 1650, 1256, 1027, 1004 },
{ 872, 1638, 1590, 878, 1068, 620, 1111, 1317, 1131, 1023, 1040 },
{ 1005, 1176, 1950, 1041, 1014, 729, 1109, 1115, 1062, 1037, 1050 },
{ 1058, 960, 1626, 1610, 912, 862, 1094, 1029, 1032, 1059, 1045 },
{ 1035, 1047, 1053, 1958, 1086, 923, 1087, 1009, 1014, 1036, 1042 },
{ 1021, 1104, 863, 1630, 1611, 940, 1086, 1010, 1001, 980, 1043 },
{ 1031, 1060, 981, 1068, 2026, 946, 1085, 1018, 990, 1037, 1047 },
{ 1030, 1032, 1064, 828, 1950, 951, 1083, 1024, 983, 1292, 1049 },
{ 873, 1527, 1147, 971, 1036, 741, 1085, 1158, 1730, 1028, 992 },
{ 875, 1566, 1590, 895, 1061, 612, 1141, 1116, 1358, 1027, 1049 },
{ 999, 1180, 1894, 1077, 1010, 709, 1118, 1051, 1142, 1041, 1064 },
{ 1055, 990, 1585, 1606, 936, 833, 1100, 1016, 1051, 1060, 1059 },
{ 1039, 1053, 1062, 1902, 1127, 900, 1095, 1008, 1015, 1036, 1052 },
{ 1022, 1100, 882, 1590, 1622, 925, 1093, 1017, 992, 992, 1052 },
{ 1030, 1062, 985, 1070, 2002, 931, 1089, 1029, 979, 1056, 1054 },
{ 1029, 1036, 1061, 844, 1926, 940, 1084, 1032, 977, 1300, 1057 },
{ 882, 1455, 1170, 969, 1036, 735, 1165, 870, 1818, 1029, 1161 },
{ 875, 1491, 1570, 917, 1055, 611, 1178, 962, 1459, 1032, 1137 },
{ 989, 1175, 1830, 1105, 1013, 698, 1134, 994, 1185, 1047, 1119 },
{ 1050, 1013, 1547, 1574, 972, 816, 1098, 1006, 1050, 1062, 1098 },
{ 1043, 1058, 1080, 1829, 1167, 879, 1091, 1020, 997, 1042, 1082 },
{ 1027, 1098, 907, 1550, 1618, 905, 1091, 1028, 979, 1010, 1072 },
{ 1031, 1065, 991, 1078, 1962, 916, 1090, 1035, 969, 1078, 1072 },
{ 1030, 1043, 1058, 867, 1890, 925, 1088, 1034, 969, 1310, 1073 },
},
{
{ 772, 1566, 1035, 1067, 1021, 1646, 1093, 1024, 1025, 1018, 1020 },
{ 737, 1413, 1375, 1083, 1029, 1365, 1211, 1018, 1026, 1012, 1020 },
{ 872, 880, 1710, 1207, 1025, 1272, 1231, 1036, 1020, 1013, 1022 },
{ 951, 607, 1559, 1602, 982, 1238, 1228, 1050, 1018, 1030, 1023 },
{ 940, 643, 1129, 1918, 1087, 1222, 1218, 1061, 1019, 1028, 1023 },
{ 937, 690, 929, 1682, 1542, 1191, 1212, 1067, 1026, 989, 1022 },
{ 952, 693, 985, 1092, 2034, 1162, 1201, 1071, 1031, 1039, 1026 },
{ 961, 730, 1017, 797, 1988, 1132, 1186, 1070, 1030, 1343, 1037 },
{ 747, 1184, 1096, 1108, 1017, 1554, 1554, 956, 1038, 1017, 1020 },
{ 776, 1014, 1266, 1240, 1012, 1325, 1584, 1013, 1023, 1012, 1024 },
{ 864, 651, 1393, 1437, 1020, 1242, 1570, 1060, 1009, 1015, 1029 },
{ 920, 402, 1310, 1674, 1069, 1215, 1546, 1091, 1004, 1024, 1033 },
{ 927, 338, 1099, 1734, 1287, 1201, 1523, 1110, 1011, 1024, 1032 },
{ 940, 338, 985, 1431, 1718, 1169, 1503, 1123, 1025, 1028, 1030 },
{ 948, 382, 953, 1022, 2030, 1133, 1473, 1131, 1034, 1144, 1036 },
{ 952, 458, 914, 842, 1962, 1103, 1429, 1131, 1034, 1407, 1055 },
{ 907, 1011, 1081, 1147, 1018, 1062, 1958, 1039, 1020, 1017, 1027 },
{ 892, 799, 1171, 1318, 1024, 1049, 1842, 1145, 1001, 1013, 1035 },
{ 938, 486, 1219, 1507, 1067, 1041, 1787, 1190, 995, 1015, 1043 },
{ 971, 258, 1150, 1642, 1187, 1041, 1762, 1209, 1000, 1024, 1047 },
{ 980, 166, 1017, 1554, 1477, 1040, 1738, 1220, 1015, 1035, 1047 },
{ 992, 142, 936, 1238, 1858, 1023, 1706, 1231, 1028, 1081, 1050 },
{ 993, 194, 876, 944, 2068, 1004, 1658, 1236, 1038, 1217, 1061 },
{ 984, 286, 815, 831, 1998, 991, 1594, 1233, 1040, 1436, 1083 },
{ 990, 930, 1061, 1161, 1028, 876, 1735, 1507, 936, 1017, 1048 },
{ 962, 701, 1106, 1327, 1058, 921, 1672, 1503, 972, 1015, 1052 },
{ 987, 422, 1112, 1475, 1142, 934, 1663, 1474, 999, 1018, 1061 },
{ 1011, 210, 1038, 1527, 1327, 937, 1675, 1449, 1019, 1029, 1068 },
{ 1025, 114, 922, 1355, 1662, 929, 1678, 1435, 1033, 1055, 1076 },
{ 1032, 96, 835, 1074, 1986, 918, 1662, 1431, 1045, 1126, 1083 },
{ 1027, 134, 767, 864, 2124, 914, 1616, 1421, 1057, 1265, 1097 },
{ 1012, 210, 709, 808, 2046, 913, 1558, 1399, 1070, 1449, 1115 },
{ 990, 894, 1044, 1152, 1046, 968, 1193, 1938, 1000, 1017, 1045 },
{ 984, 681, 1049, 1293, 1105, 943, 1289, 1790, 1078, 1018, 1057 },
{ 1004, 446, 1020, 1386, 1236, 928, 1360, 1694, 1112, 1026, 1078 },
{ 1029, 250, 947, 1337, 1495, 917, 1413, 1638, 1124, 1040, 1097 },
{ 1045, 154, 840, 1129, 1846, 905, 1439, 1610, 1132, 1076, 1109 },
{ 1048, 135, 739, 912, 2100, 897, 1439, 1590, 1140, 1166, 1120 },
{ 1040, 166, 660, 791, 2180, 894, 1416, 1558, 1154, 1299, 1133 },
{ 1027, 214, 611, 789, 2084, 892, 1389, 1507, 1178, 1457, 1145 },
{ 992, 890, 1024, 1133, 1067, 1016, 952, 1767, 1422, 1019, 1006 },
{ 995, 710, 995, 1229, 1161, 965, 1072, 1658, 1425, 1024, 1056 },
{ 1010, 519, 939, 1248, 1347, 939, 1153, 1586, 1409, 1037, 1100 },
{ 1036, 350, 869, 1105, 1674, 920, 1208, 1550, 1400, 1053, 1124 },
{ 1051, 254, 772, 898, 2002, 911, 1239, 1529, 1393, 1105, 1137 },
{ 1050, 222, 667, 763, 2187, 904, 1250, 1505, 1397, 1201, 1145 },
{ 1046, 227, 585, 725, 2204, 899, 1249, 1468, 1403, 1327, 1156 },
{ 1036, 249, 553, 763, 2092, 896, 1245, 1413, 1415, 1462, 1165 },
{ 1005, 908, 998, 1103, 1092, 991, 1025, 1174, 1942, 1024, 1027 },
{ 1006, 755, 949, 1141, 1227, 958, 1072, 1198, 1830, 1035, 1115 },
{ 1017, 611, 877, 1070, 1477, 931, 1121, 1195, 1778, 1051, 1159 },
{ 1036, 473, 803, 874, 1830, 915, 1158, 1192, 1758, 1076, 1174 },
{ 1050, 373, 715, 705, 2100, 909, 1177, 1190, 1750, 1142, 1176 },
{ 1052, 318, 621, 643, 2220, 906, 1184, 1184, 1742, 1240, 1180 },
{ 1048, 298, 549, 669, 2196, 903, 1185, 1167, 1734, 1353, 1183 },
{ 1039, 296, 529, 733, 2084, 899, 1186, 1146, 1718, 1466, 1189 },
{ 1013, 921, 974, 1067, 1119, 974, 1108, 799, 2006, 1032, 1275 },
{ 1014, 796, 906, 1040, 1303, 951, 1120, 850, 1954, 1050, 1303 },
{ 1024, 685, 825, 895, 1598, 926, 1145, 868, 1951, 1075, 1296 },
{ 1038, 571, 754, 697, 1916, 909, 1167, 876, 1963, 1117, 1279 },
{ 1051, 466, 679, 584, 2124, 901, 1182, 882, 1971, 1192, 1259 },
{ 1057, 392, 603, 577, 2195, 896, 1189, 889, 1964, 1283, 1250 },
{ 1051, 354, 547, 633, 2156, 898, 1182, 901, 1945, 1379, 1244 },
{ 1040, 335, 535, 708, 2060, 897, 1175, 921, 1904, 1472, 1244 },
},
{
{ 940, 1754, 940, 1035, 1021, 1546, 960, 1027, 1021, 1024, 1022 },
{ 806, 1975, 1226, 958, 1038, 1177, 1028, 1012, 1026, 1018, 1020 },
{ 930, 1431, 1819, 904, 1045, 1048, 1027, 1023, 1024, 1015, 1021 },
{ 1062, 960, 1934, 1234, 953, 1025, 1014, 1033, 1020, 1033, 1021 },
{ 1042, 977, 1413, 1810, 891, 1026, 1013, 1038, 1017, 1040, 1022 },
{ 1005, 1096, 979, 1941, 1166, 1016, 1019, 1038, 1016, 988, 1023 },
{ 1008, 1082, 979, 1419, 1737, 1015, 1025, 1034, 1015, 950, 1025 },
{ 1030, 1030, 1107, 901, 1962, 1004, 1036, 1027, 1014, 1153, 1026 },
{ 878, 1455, 979, 1022, 1026, 1726, 1161, 969, 1029, 1022, 1020 },
{ 878, 1826, 1102, 992, 1028, 1324, 1077, 997, 1024, 1020, 1020 },
{ 913, 1646, 1543, 937, 1033, 1101, 1033, 1019, 1023, 1017, 1021 },
{ 1011, 1197, 1866, 1084, 987, 1045, 997, 1035, 1017, 1023, 1023 },
{ 1040, 1020, 1651, 1524, 914, 1034, 996, 1037, 1012, 1033, 1025 },
{ 1014, 1066, 1232, 1841, 1008, 1028, 1009, 1034, 1010, 1020, 1026 },
{ 1006, 1096, 1044, 1650, 1387, 1020, 1021, 1029, 1007, 1000, 1029 },
{ 1021, 1065, 1082, 1181, 1738, 1015, 1029, 1024, 1003, 1099, 1031 },
{ 949, 1264, 994, 1018, 1029, 1445, 1594, 925, 1030, 1021, 1017 },
{ 924, 1606, 1050, 1000, 1029, 1403, 1224, 994, 1016, 1020, 1021 },
{ 921, 1686, 1347, 955, 1029, 1202, 1066, 1020, 1018, 1019, 1024 },
{ 980, 1392, 1726, 1007, 1002, 1089, 1001, 1027, 1017, 1021, 1028 },
{ 1024, 1128, 1754, 1309, 933, 1052, 987, 1026, 1012, 1033, 1031 },
{ 1021, 1069, 1459, 1670, 932, 1042, 999, 1016, 1010, 1038, 1031 },
{ 1013, 1086, 1190, 1722, 1140, 1034, 1014, 1012, 1005, 1037, 1034 },
{ 1018, 1083, 1103, 1435, 1463, 1027, 1025, 1010, 997, 1088, 1039 },
{ 1028, 1155, 998, 1016, 1032, 1129, 1770, 1145, 968, 1021, 1027 },
{ 964, 1409, 1024, 1002, 1030, 1340, 1435, 1040, 998, 1022, 1022 },
{ 925, 1622, 1211, 971, 1023, 1276, 1181, 1014, 1015, 1023, 1026 },
{ 959, 1501, 1567, 969, 1009, 1146, 1062, 1000, 1023, 1023, 1030 },
{ 1012, 1240, 1762, 1156, 949, 1073, 1016, 994, 1017, 1033, 1036 },
{ 1028, 1106, 1617, 1491, 903, 1049, 1008, 989, 1011, 1047, 1039 },
{ 1025, 1087, 1347, 1686, 1000, 1036, 1018, 989, 1003, 1056, 1042 },
{ 1026, 1083, 1184, 1574, 1244, 1028, 1031, 990, 993, 1087, 1046 },
{ 1031, 1096, 1001, 1016, 1032, 1064, 1499, 1578, 918, 1021, 1031 },
{ 996, 1272, 1004, 1006, 1027, 1212, 1550, 1194, 981, 1025, 1023 },
{ 943, 1505, 1118, 985, 1018, 1256, 1365, 1031, 1012, 1027, 1027 },
{ 940, 1525, 1419, 960, 1007, 1186, 1190, 976, 1023, 1027, 1035 },
{ 989, 1329, 1694, 1060, 964, 1107, 1084, 965, 1018, 1034, 1043 },
{ 1027, 1158, 1690, 1335, 906, 1060, 1040, 963, 1009, 1050, 1047 },
{ 1039, 1097, 1485, 1582, 938, 1034, 1034, 968, 997, 1063, 1051 },
{ 1037, 1086, 1291, 1606, 1101, 1023, 1038, 978, 986, 1087, 1054 },
{ 1016, 1064, 1005, 1015, 1028, 1093, 1174, 1790, 1083, 1023, 999 },
{ 1008, 1182, 994, 1010, 1020, 1134, 1475, 1412, 1005, 1028, 1020 },
{ 967, 1385, 1060, 996, 1011, 1192, 1478, 1130, 1007, 1031, 1031 },
{ 942, 1483, 1295, 963, 1005, 1180, 1332, 1000, 1014, 1031, 1040 },
{ 968, 1375, 1590, 1006, 976, 1129, 1184, 964, 1008, 1036, 1049 },
{ 1012, 1214, 1694, 1209, 923, 1078, 1093, 960, 998, 1051, 1055 },
{ 1037, 1123, 1574, 1457, 921, 1043, 1052, 968, 984, 1065, 1060 },
{ 1046, 1099, 1399, 1558, 1024, 1019, 1039, 979, 976, 1086, 1062 },
{ 1016, 1053, 1008, 1013, 1022, 1083, 1067, 1546, 1481, 1025, 971 },
{ 1012, 1128, 993, 1011, 1013, 1105, 1311, 1544, 1112, 1029, 1025 },
{ 989, 1271, 1033, 1002, 1005, 1144, 1451, 1297, 1015, 1034, 1045 },
{ 963, 1401, 1200, 977, 999, 1148, 1411, 1102, 997, 1036, 1052 },
{ 961, 1382, 1467, 987, 983, 1120, 1285, 1012, 991, 1040, 1058 },
{ 988, 1262, 1638, 1120, 944, 1085, 1165, 988, 980, 1051, 1063 },
{ 1019, 1163, 1610, 1337, 927, 1052, 1086, 992, 966, 1065, 1069 },
{ 1038, 1126, 1479, 1476, 984, 1024, 1041, 999, 963, 1085, 1070 },
{ 1027, 1054, 1008, 1014, 1015, 1046, 1095, 1151, 1750, 1027, 1100 },
{ 1025, 1096, 996, 1016, 1003, 1085, 1182, 1487, 1281, 1033, 1081 },
{ 1016, 1182, 1022, 1011, 997, 1113, 1345, 1425, 1054, 1038, 1083 },
{ 994, 1303, 1133, 994, 993, 1118, 1399, 1241, 990, 1040, 1079 },
{ 970, 1358, 1347, 987, 987, 1098, 1333, 1111, 972, 1043, 1078 },
{ 974, 1294, 1550, 1061, 963, 1070, 1229, 1051, 960, 1052, 1079 },
{ 995, 1203, 1601, 1235, 936, 1041, 1140, 1032, 953, 1066, 1081 },
{ 1020, 1153, 1525, 1389, 960, 1017, 1075, 1021, 953, 1087, 1081 },
},
{
{ 825, 1686, 1129, 1100, 1039, 1293, 1092, 1033, 1055, 1020, 1020 },
{ 919, 1356, 1626, 1084, 1071, 1026, 1063, 1038, 1072, 1017, 1018 },
{ 1008, 1013, 1826, 1172, 1073, 1047, 1011, 1027, 1074, 1020, 1018 },
{ 1028, 953, 1598, 1479, 1032, 1053, 1002, 1018, 1076, 1033, 1017 },
{ 1011, 1016, 1238, 1754, 1081, 1054, 999, 1019, 1078, 1024, 1015 },
{ 1008, 1028, 1108, 1641, 1363, 1050, 1005, 1021, 1078, 971, 1015 },
{ 1013, 1012, 1150, 1325, 1645, 1049, 1012, 1019, 1075, 970, 1016 },
{ 1015, 1014, 1172, 1149, 1586, 1045, 1024, 1011, 1071, 1184, 1018 },
{ 864, 1325, 1315, 1156, 1056, 1182, 1251, 1023, 1084, 1020, 1012 },
{ 970, 1133, 1590, 1251, 1079, 1034, 1044, 1056, 1101, 1017, 1012 },
{ 1008, 999, 1617, 1349, 1098, 1060, 990, 1029, 1110, 1017, 1012 },
{ 1012, 990, 1496, 1461, 1126, 1065, 982, 1015, 1113, 1016, 1012 },
{ 1006, 1015, 1349, 1542, 1188, 1065, 982, 1014, 1111, 1006, 1012 },
{ 1006, 1014, 1280, 1526, 1281, 1062, 992, 1009, 1111, 995, 1012 },
{ 1007, 1008, 1264, 1473, 1315, 1063, 1003, 1005, 1111, 1028, 1014 },
{ 1007, 1021, 1234, 1436, 1244, 1058, 1022, 1002, 1099, 1145, 1018 },
{ 967, 1171, 1365, 1202, 1072, 997, 1321, 1071, 1090, 1018, 1012 },
{ 995, 1060, 1546, 1325, 1099, 1039, 1007, 1070, 1119, 1015, 1013 },
{ 1011, 992, 1542, 1396, 1130, 1062, 970, 1029, 1130, 1012, 1013 },
{ 1011, 986, 1479, 1441, 1166, 1070, 971, 1011, 1132, 1008, 1013 },
{ 1006, 1003, 1396, 1490, 1189, 1072, 975, 1005, 1130, 1007, 1014 },
{ 1004, 1012, 1341, 1525, 1192, 1068, 987, 996, 1130, 1016, 1016 },
{ 1005, 1011, 1321, 1529, 1165, 1067, 999, 993, 1125, 1053, 1019 },
{ 1004, 1026, 1280, 1525, 1102, 1066, 1019, 993, 1114, 1137, 1023 },
{ 1002, 1109, 1367, 1227, 1089, 968, 1195, 1227, 1068, 1016, 1020 },
{ 1004, 1034, 1523, 1349, 1121, 1050, 974, 1067, 1137, 1013, 1016 },
{ 1016, 984, 1529, 1403, 1143, 1064, 960, 1018, 1141, 1011, 1019 },
{ 1015, 970, 1496, 1431, 1167, 1071, 969, 1001, 1141, 1007, 1020 },
{ 1009, 990, 1421, 1491, 1161, 1073, 980, 989, 1142, 1013, 1021 },
{ 1006, 1008, 1355, 1554, 1129, 1066, 995, 979, 1141, 1030, 1023 },
{ 1007, 1013, 1332, 1566, 1095, 1066, 1005, 979, 1134, 1066, 1026 },
{ 1004, 1028, 1299, 1547, 1056, 1068, 1020, 982, 1123, 1130, 1029 },
{ 990, 1079, 1361, 1236, 1101, 1031, 1023, 1335, 1096, 1015, 1018 },
{ 1004, 1024, 1511, 1361, 1126, 1061, 978, 1031, 1160, 1013, 1020 },
{ 1013, 982, 1538, 1402, 1137, 1070, 966, 995, 1147, 1012, 1027 },
{ 1016, 959, 1522, 1425, 1151, 1073, 973, 989, 1143, 1009, 1028 },
{ 1012, 974, 1445, 1501, 1128, 1070, 993, 972, 1147, 1019, 1027 },
{ 1007, 1001, 1359, 1589, 1081, 1064, 1009, 962, 1146, 1041, 1029 },
{ 1006, 1019, 1317, 1606, 1055, 1063, 1018, 962, 1140, 1073, 1031 },
{ 1003, 1041, 1295, 1558, 1040, 1065, 1029, 970, 1132, 1126, 1033 },
{ 990, 1059, 1353, 1244, 1102, 1047, 995, 1228, 1261, 1017, 992 },
{ 1002, 1023, 1505, 1367, 1117, 1063, 1005, 988, 1174, 1015, 1028 },
{ 1009, 993, 1538, 1401, 1123, 1069, 985, 973, 1142, 1014, 1040 },
{ 1016, 966, 1538, 1423, 1127, 1067, 987, 976, 1137, 1013, 1040 },
{ 1014, 971, 1465, 1507, 1094, 1062, 1007, 964, 1141, 1025, 1037 },
{ 1010, 996, 1365, 1606, 1048, 1060, 1023, 953, 1144, 1048, 1036 },
{ 1006, 1026, 1303, 1630, 1027, 1060, 1030, 954, 1143, 1077, 1036 },
{ 1005, 1050, 1277, 1574, 1026, 1057, 1040, 962, 1137, 1123, 1037 },
{ 997, 1049, 1347, 1245, 1092, 1034, 1030, 1071, 1408, 1019, 997 },
{ 999, 1032, 1494, 1369, 1105, 1063, 1022, 987, 1148, 1017, 1052 },
{ 1006, 1011, 1529, 1403, 1106, 1065, 1002, 974, 1119, 1017, 1058 },
{ 1014, 984, 1533, 1427, 1101, 1058, 1003, 972, 1124, 1018, 1053 },
{ 1017, 977, 1475, 1507, 1066, 1054, 1016, 966, 1130, 1032, 1048 },
{ 1012, 1001, 1374, 1602, 1028, 1054, 1030, 959, 1131, 1053, 1046 },
{ 1006, 1035, 1295, 1630, 1013, 1056, 1037, 959, 1131, 1082, 1045 },
{ 1006, 1054, 1265, 1578, 1021, 1057, 1043, 967, 1129, 1122, 1046 },
{ 997, 1052, 1317, 1242, 1077, 1029, 1027, 1023, 1386, 1022, 1118 },
{ 998, 1044, 1464, 1367, 1092, 1055, 1023, 1026, 1102, 1021, 1097 },
{ 1003, 1031, 1503, 1405, 1087, 1059, 1016, 991, 1086, 1023, 1085 },
{ 1012, 1009, 1511, 1433, 1072, 1052, 1014, 984, 1101, 1029, 1072 },
{ 1018, 998, 1473, 1489, 1047, 1048, 1020, 980, 1108, 1042, 1065 },
{ 1014, 1012, 1388, 1566, 1018, 1052, 1027, 975, 1113, 1061, 1061 },
{ 1008, 1043, 1305, 1598, 1011, 1052, 1038, 975, 1115, 1086, 1058 },
{ 1013, 1054, 1268, 1561, 1019, 1051, 1041, 983, 1113, 1123, 1060 },
},
};
// Multiply 11 element feature vector with matrix to generate 8x8 prediction.
// A - pointer to matrix
// B - pointer to feature vector
// C - 8x8 output prediction
// bd - bit depth
void av1_dip_matrix_multiplication_c(const uint16_t *A, const uint16_t *B,
uint16_t *C, int bd) {
int sum = 0;
for (int j = 0; j < DIP_FEATURES; j++) sum += B[j];
for (int i = 0; i < DIP_ROWS; i++) {
int c = 0;
for (int j = 0; j < DIP_FEATURES; j++) {
c += DIP_SCALE * A[i * DIP_COLS + j] * B[j];
}
c = ((c + DIP_OFFSET) >> DIP_BITS) - sum;
C[i] = clip_pixel_highbd(c, bd);
}
}
// Create one 8x8 DIP prediction from feature vector.
void av1_intra_matrix_pred(const uint16_t *input, int mode, uint16_t *output,
int bd) {
assert(mode >= 0 && mode < INTRA_DIP_MODE_CNT);
const uint16_t *A = &av1_intra_matrix_weights[mode][0][0];
av1_dip_matrix_multiplication(A, input, output, bd);
}