xref: /aosp_15_r20/external/libvpx/test/active_map_test.cc (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker #include <climits>
11*fb1b10abSAndroid Build Coastguard Worker #include <vector>
12*fb1b10abSAndroid Build Coastguard Worker #include "gtest/gtest.h"
13*fb1b10abSAndroid Build Coastguard Worker #include "test/codec_factory.h"
14*fb1b10abSAndroid Build Coastguard Worker #include "test/encode_test_driver.h"
15*fb1b10abSAndroid Build Coastguard Worker #include "test/i420_video_source.h"
16*fb1b10abSAndroid Build Coastguard Worker #include "test/util.h"
17*fb1b10abSAndroid Build Coastguard Worker 
18*fb1b10abSAndroid Build Coastguard Worker namespace {
19*fb1b10abSAndroid Build Coastguard Worker 
20*fb1b10abSAndroid Build Coastguard Worker class ActiveMapTest
21*fb1b10abSAndroid Build Coastguard Worker     : public ::libvpx_test::EncoderTest,
22*fb1b10abSAndroid Build Coastguard Worker       public ::libvpx_test::CodecTestWith3Params<libvpx_test::TestMode, int,
23*fb1b10abSAndroid Build Coastguard Worker                                                  int> {
24*fb1b10abSAndroid Build Coastguard Worker  protected:
25*fb1b10abSAndroid Build Coastguard Worker   static const int kWidth = 208;
26*fb1b10abSAndroid Build Coastguard Worker   static const int kHeight = 144;
27*fb1b10abSAndroid Build Coastguard Worker 
ActiveMapTest()28*fb1b10abSAndroid Build Coastguard Worker   ActiveMapTest() : EncoderTest(GET_PARAM(0)) {}
29*fb1b10abSAndroid Build Coastguard Worker   ~ActiveMapTest() override = default;
30*fb1b10abSAndroid Build Coastguard Worker 
SetUp()31*fb1b10abSAndroid Build Coastguard Worker   void SetUp() override {
32*fb1b10abSAndroid Build Coastguard Worker     InitializeConfig();
33*fb1b10abSAndroid Build Coastguard Worker     SetMode(GET_PARAM(1));
34*fb1b10abSAndroid Build Coastguard Worker     cpu_used_ = GET_PARAM(2);
35*fb1b10abSAndroid Build Coastguard Worker   }
36*fb1b10abSAndroid Build Coastguard Worker 
PreEncodeFrameHook(::libvpx_test::VideoSource * video,::libvpx_test::Encoder * encoder)37*fb1b10abSAndroid Build Coastguard Worker   void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
38*fb1b10abSAndroid Build Coastguard Worker                           ::libvpx_test::Encoder *encoder) override {
39*fb1b10abSAndroid Build Coastguard Worker     if (video->frame() == 0) {
40*fb1b10abSAndroid Build Coastguard Worker       encoder->Control(VP8E_SET_CPUUSED, cpu_used_);
41*fb1b10abSAndroid Build Coastguard Worker       encoder->Control(VP9E_SET_AQ_MODE, GET_PARAM(3));
42*fb1b10abSAndroid Build Coastguard Worker     } else if (video->frame() == 3) {
43*fb1b10abSAndroid Build Coastguard Worker       vpx_active_map_t map = vpx_active_map_t();
44*fb1b10abSAndroid Build Coastguard Worker       /* clang-format off */
45*fb1b10abSAndroid Build Coastguard Worker       uint8_t active_map[9 * 13] = {
46*fb1b10abSAndroid Build Coastguard Worker         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
47*fb1b10abSAndroid Build Coastguard Worker         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
48*fb1b10abSAndroid Build Coastguard Worker         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
49*fb1b10abSAndroid Build Coastguard Worker         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
50*fb1b10abSAndroid Build Coastguard Worker         0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1,
51*fb1b10abSAndroid Build Coastguard Worker         0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1,
52*fb1b10abSAndroid Build Coastguard Worker         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1,
53*fb1b10abSAndroid Build Coastguard Worker         0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1,
54*fb1b10abSAndroid Build Coastguard Worker         1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0,
55*fb1b10abSAndroid Build Coastguard Worker       };
56*fb1b10abSAndroid Build Coastguard Worker       /* clang-format on */
57*fb1b10abSAndroid Build Coastguard Worker       map.cols = (kWidth + 15) / 16;
58*fb1b10abSAndroid Build Coastguard Worker       map.rows = (kHeight + 15) / 16;
59*fb1b10abSAndroid Build Coastguard Worker       ASSERT_EQ(map.cols, 13u);
60*fb1b10abSAndroid Build Coastguard Worker       ASSERT_EQ(map.rows, 9u);
61*fb1b10abSAndroid Build Coastguard Worker       map.active_map = active_map;
62*fb1b10abSAndroid Build Coastguard Worker       encoder->Control(VP8E_SET_ACTIVEMAP, &map);
63*fb1b10abSAndroid Build Coastguard Worker     } else if (video->frame() == 15) {
64*fb1b10abSAndroid Build Coastguard Worker       vpx_active_map_t map = vpx_active_map_t();
65*fb1b10abSAndroid Build Coastguard Worker       map.cols = (kWidth + 15) / 16;
66*fb1b10abSAndroid Build Coastguard Worker       map.rows = (kHeight + 15) / 16;
67*fb1b10abSAndroid Build Coastguard Worker       map.active_map = nullptr;
68*fb1b10abSAndroid Build Coastguard Worker       encoder->Control(VP8E_SET_ACTIVEMAP, &map);
69*fb1b10abSAndroid Build Coastguard Worker     }
70*fb1b10abSAndroid Build Coastguard Worker   }
71*fb1b10abSAndroid Build Coastguard Worker 
72*fb1b10abSAndroid Build Coastguard Worker   int cpu_used_;
73*fb1b10abSAndroid Build Coastguard Worker };
74*fb1b10abSAndroid Build Coastguard Worker 
TEST_P(ActiveMapTest,Test)75*fb1b10abSAndroid Build Coastguard Worker TEST_P(ActiveMapTest, Test) {
76*fb1b10abSAndroid Build Coastguard Worker   // Validate that this non multiple of 64 wide clip encodes
77*fb1b10abSAndroid Build Coastguard Worker   cfg_.g_lag_in_frames = 0;
78*fb1b10abSAndroid Build Coastguard Worker   cfg_.rc_target_bitrate = 400;
79*fb1b10abSAndroid Build Coastguard Worker   cfg_.rc_resize_allowed = 0;
80*fb1b10abSAndroid Build Coastguard Worker   cfg_.g_pass = VPX_RC_ONE_PASS;
81*fb1b10abSAndroid Build Coastguard Worker   cfg_.rc_end_usage = VPX_CBR;
82*fb1b10abSAndroid Build Coastguard Worker   cfg_.kf_max_dist = 90000;
83*fb1b10abSAndroid Build Coastguard Worker 
84*fb1b10abSAndroid Build Coastguard Worker   ::libvpx_test::I420VideoSource video("hantro_odd.yuv", kWidth, kHeight, 30, 1,
85*fb1b10abSAndroid Build Coastguard Worker                                        0, 20);
86*fb1b10abSAndroid Build Coastguard Worker 
87*fb1b10abSAndroid Build Coastguard Worker   ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
88*fb1b10abSAndroid Build Coastguard Worker }
89*fb1b10abSAndroid Build Coastguard Worker 
90*fb1b10abSAndroid Build Coastguard Worker VP9_INSTANTIATE_TEST_SUITE(ActiveMapTest,
91*fb1b10abSAndroid Build Coastguard Worker                            ::testing::Values(::libvpx_test::kRealTime),
92*fb1b10abSAndroid Build Coastguard Worker                            ::testing::Range(5, 10), ::testing::Values(0, 3));
93*fb1b10abSAndroid Build Coastguard Worker }  // namespace
94