Ban nonzero lag_in_frames,kf_max_dist in all intra
Disallow nonzero g_lag_in_frames and kf_max_dist in all intra mode.
Tested:
test_libaom --gtest_filter=EncodeAPI.AllIntraMode
BUG=aomedia:2959
Change-Id: Id56be7ad8943ca688649947d3038589c7a3b2c9a
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index a6102e6..d306a23 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -392,6 +392,12 @@
} else {
RANGE_CHECK_HI(cfg, g_lag_in_frames, MAX_LAG_BUFFERS);
}
+ if (cfg->g_usage == AOM_USAGE_ALL_INTRA) {
+ if (cfg->g_lag_in_frames != 0)
+ ERROR("g_lag_in_frames must be zero in all intra mode");
+ if (cfg->kf_max_dist != 0)
+ ERROR("kf_max_dist must be zero in all intra mode");
+ }
RANGE_CHECK_HI(extra_cfg, min_gf_interval, MAX_LAG_BUFFERS - 1);
RANGE_CHECK_HI(extra_cfg, max_gf_interval, MAX_LAG_BUFFERS - 1);
if (extra_cfg->max_gf_interval > 0) {
diff --git a/test/encode_api_test.cc b/test/encode_api_test.cc
index 45d639f..eb91846 100644
--- a/test/encode_api_test.cc
+++ b/test/encode_api_test.cc
@@ -70,4 +70,28 @@
EXPECT_EQ(AOM_CODEC_OK, aom_codec_destroy(&enc));
}
+TEST(EncodeAPI, AllIntraMode) {
+ aom_codec_iface_t *iface = aom_codec_av1_cx();
+ aom_codec_ctx_t enc;
+ aom_codec_enc_cfg_t cfg;
+ EXPECT_EQ(AOM_CODEC_OK,
+ aom_codec_enc_config_default(iface, &cfg, AOM_USAGE_ALL_INTRA));
+ EXPECT_EQ(AOM_CODEC_OK, aom_codec_enc_init(&enc, iface, &cfg, 0));
+ EXPECT_EQ(AOM_CODEC_OK, aom_codec_destroy(&enc));
+
+ // Set g_lag_in_frames to a nonzero value. This should cause
+ // aom_codec_enc_init() to fail.
+ EXPECT_EQ(AOM_CODEC_OK,
+ aom_codec_enc_config_default(iface, &cfg, AOM_USAGE_ALL_INTRA));
+ cfg.g_lag_in_frames = 1;
+ EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_enc_init(&enc, iface, &cfg, 0));
+
+ // Set kf_max_dist to a nonzero value. This should cause aom_codec_enc_init()
+ // to fail.
+ EXPECT_EQ(AOM_CODEC_OK,
+ aom_codec_enc_config_default(iface, &cfg, AOM_USAGE_ALL_INTRA));
+ cfg.kf_max_dist = 1;
+ EXPECT_EQ(AOM_CODEC_INVALID_PARAM, aom_codec_enc_init(&enc, iface, &cfg, 0));
+}
+
} // namespace