Use lower-precision filters in filter_intra
Filter coeffcients c0, c1, c2 are scaled by 8, and can be
represented by 4 bits unsigned integer (c2 is always <=0)
Change-Id: I93643bab6734214cef0b0175d6980ebabe9dfe10
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index a285e87..a10928a 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -1118,127 +1118,145 @@
#if CONFIG_FILTER_INTRA
static int filter_intra_taps_3[TX_SIZES_ALL][FILTER_INTRA_MODES][3] = {
{
- { 697, 836, -509 },
- { 993, 513, -482 },
- { 381, 984, -341 },
- { 762, 385, -123 },
- { 358, 687, -21 },
- { 883, 902, -761 },
+ { 5, 7, -4 },
+ { 8, 4, -4 },
+ { 3, 8, -3 },
+ { 6, 3, -1 },
+ { 3, 5, 0 },
+ { 7, 7, -6 },
},
{
- { 659, 816, -451 },
- { 980, 625, -581 },
- { 558, 962, -496 },
- { 778, 399, -153 },
- { 495, 641, -112 },
- { 839, 911, -726 },
+ { 5, 6, -3 },
+ { 8, 5, -5 },
+ { 4, 8, -4 },
+ { 6, 3, -1 },
+ { 4, 5, -1 },
+ { 7, 7, -6 },
},
{
- { 539, 927, -442 },
- { 1003, 714, -693 },
- { 349, 1271, -596 },
- { 780, 681, -437 },
- { 586, 795, -357 },
- { 974, 970, -920 },
+ { 4, 7, -3 },
+ { 8, 6, -6 },
+ { 3, 10, -5 },
+ { 6, 5, -3 },
+ { 5, 6, -3 },
+ { 8, 8, -8 },
},
{
- { 595, 919, -490 },
- { 945, 668, -589 },
- { 495, 962, -433 },
- { 852, 478, -306 },
- { 177, 760, 87 },
- { 846, 1010, -832 },
+ { 5, 7, -4 },
+ { 7, 5, -4 },
+ { 4, 8, -4 },
+ { 7, 4, -3 },
+ { 2, 6, 0 },
+ { 7, 8, -7 },
},
#if CONFIG_TX64X64
{
- { 595, 919, -490 },
- { 945, 668, -589 },
- { 495, 962, -433 },
- { 852, 478, -306 },
- { 177, 760, 87 },
- { 846, 1010, -832 },
+ { 5, 7, -4 },
+ { 7, 5, -4 },
+ { 4, 8, -4 },
+ { 7, 4, -3 },
+ { 2, 6, 0 },
+ { 7, 8, -7 },
},
#endif // CONFIG_TX64X64
{
- { 697, 836, -509 },
- { 993, 513, -482 },
- { 381, 984, -341 },
- { 762, 385, -123 },
- { 358, 687, -21 },
- { 883, 902, -761 },
+ { 5, 7, -4 },
+ { 8, 4, -4 },
+ { 3, 8, -3 },
+ { 6, 3, -1 },
+ { 3, 5, 0 },
+ { 7, 7, -6 },
},
{
- { 697, 836, -509 },
- { 993, 513, -482 },
- { 381, 984, -341 },
- { 762, 385, -123 },
- { 358, 687, -21 },
- { 883, 902, -761 },
+ { 5, 7, -4 },
+ { 8, 4, -4 },
+ { 3, 8, -3 },
+ { 6, 3, -1 },
+ { 3, 5, 0 },
+ { 7, 7, -6 },
},
{
- { 659, 816, -451 },
- { 980, 625, -581 },
- { 558, 962, -496 },
- { 778, 399, -153 },
- { 495, 641, -112 },
- { 839, 911, -726 },
+ { 5, 6, -3 },
+ { 8, 5, -5 },
+ { 4, 8, -4 },
+ { 6, 3, -1 },
+ { 4, 5, -1 },
+ { 7, 7, -6 },
},
{
- { 659, 816, -451 },
- { 980, 625, -581 },
- { 558, 962, -496 },
- { 778, 399, -153 },
- { 495, 641, -112 },
- { 839, 911, -726 },
+ { 5, 6, -3 },
+ { 8, 5, -5 },
+ { 4, 8, -4 },
+ { 6, 3, -1 },
+ { 4, 5, -1 },
+ { 7, 7, -6 },
},
{
- { 539, 927, -442 },
- { 1003, 714, -693 },
- { 349, 1271, -596 },
- { 780, 681, -437 },
- { 586, 795, -357 },
- { 974, 970, -920 },
+ { 4, 7, -3 },
+ { 8, 6, -6 },
+ { 3, 10, -5 },
+ { 6, 5, -3 },
+ { 5, 6, -3 },
+ { 8, 8, -8 },
},
{
- { 539, 927, -442 },
- { 1003, 714, -693 },
- { 349, 1271, -596 },
- { 780, 681, -437 },
- { 586, 795, -357 },
- { 974, 970, -920 },
+ { 4, 7, -3 },
+ { 8, 6, -6 },
+ { 3, 10, -5 },
+ { 6, 5, -3 },
+ { 5, 6, -3 },
+ { 8, 8, -8 },
+ },
+#if CONFIG_TX64X64
+ {
+ { 5, 7, -4 },
+ { 7, 5, -4 },
+ { 4, 8, -4 },
+ { 7, 4, -3 },
+ { 2, 6, 0 },
+ { 7, 8, -7 },
},
{
- { 697, 836, -509 },
- { 993, 513, -482 },
- { 381, 984, -341 },
- { 762, 385, -123 },
- { 358, 687, -21 },
- { 883, 902, -761 },
+ { 5, 7, -4 },
+ { 7, 5, -4 },
+ { 4, 8, -4 },
+ { 7, 4, -3 },
+ { 2, 6, 0 },
+ { 7, 8, -7 },
+ },
+#endif // CONFIG_TX64X64
+ {
+ { 5, 7, -4 },
+ { 8, 4, -4 },
+ { 3, 8, -3 },
+ { 6, 3, -1 },
+ { 3, 5, 0 },
+ { 7, 7, -6 },
},
{
- { 697, 836, -509 },
- { 993, 513, -482 },
- { 381, 984, -341 },
- { 762, 385, -123 },
- { 358, 687, -21 },
- { 883, 902, -761 },
+ { 5, 7, -4 },
+ { 8, 4, -4 },
+ { 3, 8, -3 },
+ { 6, 3, -1 },
+ { 3, 5, 0 },
+ { 7, 7, -6 },
},
{
- { 659, 816, -451 },
- { 980, 625, -581 },
- { 558, 962, -496 },
- { 778, 399, -153 },
- { 495, 641, -112 },
- { 839, 911, -726 },
+ { 5, 6, -3 },
+ { 8, 5, -5 },
+ { 4, 8, -4 },
+ { 6, 3, -1 },
+ { 4, 5, -1 },
+ { 7, 7, -6 },
},
{
- { 659, 816, -451 },
- { 980, 625, -581 },
- { 558, 962, -496 },
- { 778, 399, -153 },
- { 495, 641, -112 },
- { 839, 911, -726 },
- }
+ { 5, 6, -3 },
+ { 8, 5, -5 },
+ { 4, 8, -4 },
+ { 6, 3, -1 },
+ { 4, 5, -1 },
+ { 7, 7, -6 },
+ },
};
static void filter_intra_predictors_3tap(uint8_t *dst, ptrdiff_t stride,
@@ -1265,7 +1283,7 @@
for (c = 1; c < bw + 1; ++c) {
ipred = c0 * buffer[r - 1][c] + c1 * buffer[r][c - 1] +
c2 * buffer[r - 1][c - 1];
- buffer[r][c] = ROUND_POWER_OF_TWO_SIGNED(ipred, FILTER_INTRA_PREC_BITS);
+ buffer[r][c] = ROUND_POWER_OF_TWO_SIGNED(ipred, FILTER_INTRA_SCALE_BITS);
buffer[r][c] = clip_pixel(buffer[r][c]);
}
@@ -1368,7 +1386,7 @@
for (c = 1; c < bw + 1; ++c) {
ipred = c0 * preds[r - 1][c] + c1 * preds[r][c - 1] +
c2 * preds[r - 1][c - 1];
- preds[r][c] = ROUND_POWER_OF_TWO_SIGNED(ipred, FILTER_INTRA_PREC_BITS);
+ preds[r][c] = ROUND_POWER_OF_TWO_SIGNED(ipred, FILTER_INTRA_SCALE_BITS);
preds[r][c] = clip_pixel_highbd(preds[r][c], bd);
}
diff --git a/av1/common/reconintra.h b/av1/common/reconintra.h
index 87e030e..b821752 100644
--- a/av1/common/reconintra.h
+++ b/av1/common/reconintra.h
@@ -42,7 +42,7 @@
};
#if CONFIG_FILTER_INTRA
-#define FILTER_INTRA_PREC_BITS 10
+#define FILTER_INTRA_SCALE_BITS 3
#endif // CONFIG_FILTER_INTRA
#define CONFIG_INTRA_EDGE_UPSAMPLE CONFIG_INTRA_EDGE