AV1 levels: add some tests for level monitoring
Each test takes up to 5 minutes to run locally.
Change-Id: Ic9ec121e3457b1bd3c1240a7625dbe259f86fdd3
diff --git a/test/level_test.cc b/test/level_test.cc
index c730826..29b9245 100644
--- a/test/level_test.cc
+++ b/test/level_test.cc
@@ -14,11 +14,15 @@
#include "test/codec_factory.h"
#include "test/encode_test_driver.h"
+#include "test/i420_video_source.h"
#include "test/util.h"
#include "test/y4m_video_source.h"
#include "test/yuv_video_source.h"
namespace {
+const int kLevelMin = 0;
+const int kLevelMax = 31;
+const int kLevelKeepStats = 24;
// Speed settings tested
static const int kCpuUsedVectors[] = {
1,
@@ -63,11 +67,16 @@
encoder->Control(AOME_SET_ARNR_STRENGTH, 5);
}
}
+
+ encoder->Control(AV1E_GET_SEQ_LEVEL_IDX, level_);
+ ASSERT_LE(level_[0], kLevelMax);
+ ASSERT_GE(level_[0], kLevelMin);
}
libaom_test::TestMode encoding_mode_;
int cpu_used_;
int target_level_;
+ int level_[32];
};
TEST_P(LevelTest, TestTargetLevelApi) {
@@ -102,6 +111,30 @@
ASSERT_NO_FATAL_FAILURE(RunLoop(video.get()));
}
+TEST_P(LevelTest, TestLevelMonitoringLowBitrate) {
+ // To save run time, we only test speed 4.
+ if (cpu_used_ == 4) {
+ libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
+ 30, 1, 0, 40);
+ target_level_ = kLevelKeepStats;
+ cfg_.rc_target_bitrate = 1000;
+ ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+ ASSERT_EQ(level_[0], 0);
+ }
+}
+
+TEST_P(LevelTest, TestLevelMonitoringHighBitrate) {
+ // To save run time, we only test speed 4.
+ if (cpu_used_ == 4) {
+ libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
+ 30, 1, 0, 40);
+ target_level_ = kLevelKeepStats;
+ cfg_.rc_target_bitrate = 3000;
+ ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+ ASSERT_EQ(level_[0], 1);
+ }
+}
+
AV1_INSTANTIATE_TEST_CASE(LevelTest,
::testing::Values(::libaom_test::kTwoPassGood),
::testing::ValuesIn(kCpuUsedVectors));