Ext-intra modification/tuning
For ext-intra direcation intra modes:
1. Use neighbor block modes to modify edge filtering strength
Coding gain (lowres/midres/hdres):
(8 keyframes)
PSNR: -0.19 -0.22 -0.10
SSIM: -0.29 -0.27 -0.13
2. Use context-based cdf to code angle_delta syntax
(8 keyframes)
PSNR: -0.20 -0.24 -0.27
SSIM: -0.29 -0.33 -0.37
3. Filter corner sample:
(8 keyframes)
PSNR: -0.01 -0.02 -0.05
SSIM: -0.03 -0.04 -0.05
Combined Bd-rate improvement for 8 keyframes
PSNR: -0.40 -0.47 -0.40
SSIM: -0.57 -0.60 -0.51
Change-Id: Id47ac17b6bf91cd810b70cacfc5b457341f417f3
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 6f127e6..ae4529f 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -883,21 +883,42 @@
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
+#if CONFIG_EXT_INTRA_MOD
+static int read_angle_delta(aom_reader *r, aom_cdf_prob *cdf) {
+ const int sym = aom_read_symbol(r, cdf, 2 * MAX_ANGLE_DELTA + 1, ACCT_STR);
+ return sym - MAX_ANGLE_DELTA;
+}
+#endif // CONFIG_EXT_INTRA_MOD
+
static void read_intra_angle_info(MACROBLOCKD *const xd, aom_reader *r) {
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
const BLOCK_SIZE bsize = mbmi->sb_type;
+#if CONFIG_EXT_INTRA_MOD
+ FRAME_CONTEXT *const ec_ctx = xd->tile_ctx;
+#endif // CONFIG_EXT_INTRA_MOD
+
mbmi->angle_delta[0] = 0;
mbmi->angle_delta[1] = 0;
if (!av1_use_angle_delta(bsize)) return;
if (av1_is_directional_mode(mbmi->mode, bsize)) {
+#if CONFIG_EXT_INTRA_MOD
+ mbmi->angle_delta[0] =
+ read_angle_delta(r, ec_ctx->angle_delta_cdf[mbmi->mode - V_PRED]);
+#else
mbmi->angle_delta[0] =
av1_read_uniform(r, 2 * MAX_ANGLE_DELTA + 1) - MAX_ANGLE_DELTA;
+#endif // CONFIG_EXT_INTRA_MOD
}
if (av1_is_directional_mode(get_uv_mode(mbmi->uv_mode), bsize)) {
+#if CONFIG_EXT_INTRA_MOD
+ mbmi->angle_delta[1] =
+ read_angle_delta(r, ec_ctx->angle_delta_cdf[mbmi->uv_mode - V_PRED]);
+#else
mbmi->angle_delta[1] =
av1_read_uniform(r, 2 * MAX_ANGLE_DELTA + 1) - MAX_ANGLE_DELTA;
+#endif // CONFIG_EXT_INTRA_MOD
}
}
#endif // CONFIG_EXT_INTRA