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