xref: /aosp_15_r20/external/libaom/test/active_map_test.cc (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1 /*
2  * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3  *
4  * This source code is subject to the terms of the BSD 2 Clause License and
5  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6  * was not distributed with this source code in the LICENSE file, you can
7  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8  * Media Patent License 1.0 was not distributed with this source code in the
9  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10  */
11 
12 #include <climits>
13 #include <vector>
14 #include "gtest/gtest.h"
15 #include "test/codec_factory.h"
16 #include "test/encode_test_driver.h"
17 #include "test/i420_video_source.h"
18 #include "test/util.h"
19 
20 namespace {
21 
22 // Params: test mode, speed, aq_mode and screen_content mode.
23 class ActiveMapTest
24     : public ::libaom_test::CodecTestWith4Params<libaom_test::TestMode, int,
25                                                  int, int>,
26       public ::libaom_test::EncoderTest {
27  protected:
28   static const int kWidth = 208;
29   static const int kHeight = 144;
30 
ActiveMapTest()31   ActiveMapTest() : EncoderTest(GET_PARAM(0)) {}
32   ~ActiveMapTest() override = default;
33 
SetUp()34   void SetUp() override {
35     InitializeConfig(GET_PARAM(1));
36     cpu_used_ = GET_PARAM(2);
37     aq_mode_ = GET_PARAM(3);
38     screen_mode_ = GET_PARAM(4);
39   }
40 
PreEncodeFrameHook(::libaom_test::VideoSource * video,::libaom_test::Encoder * encoder)41   void PreEncodeFrameHook(::libaom_test::VideoSource *video,
42                           ::libaom_test::Encoder *encoder) override {
43     if (video->frame() == 0) {
44       encoder->Control(AOME_SET_CPUUSED, cpu_used_);
45       encoder->Control(AV1E_SET_ALLOW_WARPED_MOTION, 0);
46       encoder->Control(AV1E_SET_ENABLE_GLOBAL_MOTION, 0);
47       encoder->Control(AV1E_SET_ENABLE_OBMC, 0);
48       encoder->Control(AV1E_SET_AQ_MODE, aq_mode_);
49       encoder->Control(AV1E_SET_TUNE_CONTENT, screen_mode_);
50       if (screen_mode_) encoder->Control(AV1E_SET_ENABLE_PALETTE, 1);
51     } else if (video->frame() == 3) {
52       aom_active_map_t map = aom_active_map_t();
53       /* clang-format off */
54       uint8_t active_map[9 * 13] = {
55         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
56         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
57         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
58         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
59         0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1,
60         0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1,
61         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1,
62         0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1,
63         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0,
64       };
65       /* clang-format on */
66       map.cols = (kWidth + 15) / 16;
67       map.rows = (kHeight + 15) / 16;
68       ASSERT_EQ(map.cols, 13u);
69       ASSERT_EQ(map.rows, 9u);
70       map.active_map = active_map;
71       encoder->Control(AOME_SET_ACTIVEMAP, &map);
72     } else if (video->frame() == 15) {
73       aom_active_map_t map = aom_active_map_t();
74       map.cols = (kWidth + 15) / 16;
75       map.rows = (kHeight + 15) / 16;
76       map.active_map = nullptr;
77       encoder->Control(AOME_SET_ACTIVEMAP, &map);
78     }
79   }
80 
DoTest()81   void DoTest() {
82     // Validate that this non multiple of 64 wide clip encodes
83     cfg_.g_lag_in_frames = 0;
84     cfg_.rc_target_bitrate = 400;
85     cfg_.rc_resize_mode = 0;
86     cfg_.g_pass = AOM_RC_ONE_PASS;
87     cfg_.rc_end_usage = AOM_CBR;
88     cfg_.kf_max_dist = 90000;
89     ::libaom_test::I420VideoSource video("hantro_odd.yuv", kWidth, kHeight, 100,
90                                          1, 0, 100);
91 
92     ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
93   }
94 
95   int cpu_used_;
96   int aq_mode_;
97   int screen_mode_;
98 };
99 
TEST_P(ActiveMapTest,Test)100 TEST_P(ActiveMapTest, Test) { DoTest(); }
101 
102 AV1_INSTANTIATE_TEST_SUITE(ActiveMapTest,
103                            ::testing::Values(::libaom_test::kRealTime),
104                            ::testing::Range(5, 12), ::testing::Values(0, 3),
105                            ::testing::Values(0, 1));
106 
107 }  // namespace
108