1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2012 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 "gtest/gtest.h"
11*fb1b10abSAndroid Build Coastguard Worker #include "test/codec_factory.h"
12*fb1b10abSAndroid Build Coastguard Worker #include "test/encode_test_driver.h"
13*fb1b10abSAndroid Build Coastguard Worker #include "test/i420_video_source.h"
14*fb1b10abSAndroid Build Coastguard Worker #include "test/util.h"
15*fb1b10abSAndroid Build Coastguard Worker
16*fb1b10abSAndroid Build Coastguard Worker namespace {
17*fb1b10abSAndroid Build Coastguard Worker
18*fb1b10abSAndroid Build Coastguard Worker class AqSegmentTest
19*fb1b10abSAndroid Build Coastguard Worker : public ::libvpx_test::EncoderTest,
20*fb1b10abSAndroid Build Coastguard Worker public ::libvpx_test::CodecTestWith2Params<libvpx_test::TestMode, int> {
21*fb1b10abSAndroid Build Coastguard Worker protected:
AqSegmentTest()22*fb1b10abSAndroid Build Coastguard Worker AqSegmentTest() : EncoderTest(GET_PARAM(0)) {}
23*fb1b10abSAndroid Build Coastguard Worker ~AqSegmentTest() override = default;
24*fb1b10abSAndroid Build Coastguard Worker
SetUp()25*fb1b10abSAndroid Build Coastguard Worker void SetUp() override {
26*fb1b10abSAndroid Build Coastguard Worker InitializeConfig();
27*fb1b10abSAndroid Build Coastguard Worker SetMode(GET_PARAM(1));
28*fb1b10abSAndroid Build Coastguard Worker set_cpu_used_ = GET_PARAM(2);
29*fb1b10abSAndroid Build Coastguard Worker aq_mode_ = 0;
30*fb1b10abSAndroid Build Coastguard Worker }
31*fb1b10abSAndroid Build Coastguard Worker
PreEncodeFrameHook(::libvpx_test::VideoSource * video,::libvpx_test::Encoder * encoder)32*fb1b10abSAndroid Build Coastguard Worker void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
33*fb1b10abSAndroid Build Coastguard Worker ::libvpx_test::Encoder *encoder) override {
34*fb1b10abSAndroid Build Coastguard Worker if (video->frame() == 0) {
35*fb1b10abSAndroid Build Coastguard Worker encoder->Control(VP8E_SET_CPUUSED, set_cpu_used_);
36*fb1b10abSAndroid Build Coastguard Worker encoder->Control(VP9E_SET_AQ_MODE, aq_mode_);
37*fb1b10abSAndroid Build Coastguard Worker encoder->Control(VP8E_SET_MAX_INTRA_BITRATE_PCT, 100);
38*fb1b10abSAndroid Build Coastguard Worker }
39*fb1b10abSAndroid Build Coastguard Worker }
40*fb1b10abSAndroid Build Coastguard Worker
41*fb1b10abSAndroid Build Coastguard Worker int set_cpu_used_;
42*fb1b10abSAndroid Build Coastguard Worker int aq_mode_;
43*fb1b10abSAndroid Build Coastguard Worker };
44*fb1b10abSAndroid Build Coastguard Worker
45*fb1b10abSAndroid Build Coastguard Worker // Validate that this AQ segmentation mode (AQ=1, variance_ap)
46*fb1b10abSAndroid Build Coastguard Worker // encodes and decodes without a mismatch.
TEST_P(AqSegmentTest,TestNoMisMatchAQ1)47*fb1b10abSAndroid Build Coastguard Worker TEST_P(AqSegmentTest, TestNoMisMatchAQ1) {
48*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_min_quantizer = 8;
49*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_max_quantizer = 56;
50*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_end_usage = VPX_CBR;
51*fb1b10abSAndroid Build Coastguard Worker cfg_.g_lag_in_frames = 0;
52*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_initial_sz = 500;
53*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_optimal_sz = 500;
54*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_sz = 1000;
55*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_target_bitrate = 300;
56*fb1b10abSAndroid Build Coastguard Worker
57*fb1b10abSAndroid Build Coastguard Worker aq_mode_ = 1;
58*fb1b10abSAndroid Build Coastguard Worker
59*fb1b10abSAndroid Build Coastguard Worker ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
60*fb1b10abSAndroid Build Coastguard Worker 30, 1, 0, 100);
61*fb1b10abSAndroid Build Coastguard Worker
62*fb1b10abSAndroid Build Coastguard Worker ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
63*fb1b10abSAndroid Build Coastguard Worker }
64*fb1b10abSAndroid Build Coastguard Worker
65*fb1b10abSAndroid Build Coastguard Worker // Validate that this AQ segmentation mode (AQ=2, complexity_aq)
66*fb1b10abSAndroid Build Coastguard Worker // encodes and decodes without a mismatch.
TEST_P(AqSegmentTest,TestNoMisMatchAQ2)67*fb1b10abSAndroid Build Coastguard Worker TEST_P(AqSegmentTest, TestNoMisMatchAQ2) {
68*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_min_quantizer = 8;
69*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_max_quantizer = 56;
70*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_end_usage = VPX_CBR;
71*fb1b10abSAndroid Build Coastguard Worker cfg_.g_lag_in_frames = 0;
72*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_initial_sz = 500;
73*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_optimal_sz = 500;
74*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_sz = 1000;
75*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_target_bitrate = 300;
76*fb1b10abSAndroid Build Coastguard Worker
77*fb1b10abSAndroid Build Coastguard Worker aq_mode_ = 2;
78*fb1b10abSAndroid Build Coastguard Worker
79*fb1b10abSAndroid Build Coastguard Worker ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
80*fb1b10abSAndroid Build Coastguard Worker 30, 1, 0, 100);
81*fb1b10abSAndroid Build Coastguard Worker
82*fb1b10abSAndroid Build Coastguard Worker ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
83*fb1b10abSAndroid Build Coastguard Worker }
84*fb1b10abSAndroid Build Coastguard Worker
85*fb1b10abSAndroid Build Coastguard Worker // Validate that this AQ segmentation mode (AQ=3, cyclic_refresh_aq)
86*fb1b10abSAndroid Build Coastguard Worker // encodes and decodes without a mismatch.
TEST_P(AqSegmentTest,TestNoMisMatchAQ3)87*fb1b10abSAndroid Build Coastguard Worker TEST_P(AqSegmentTest, TestNoMisMatchAQ3) {
88*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_min_quantizer = 8;
89*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_max_quantizer = 56;
90*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_end_usage = VPX_CBR;
91*fb1b10abSAndroid Build Coastguard Worker cfg_.g_lag_in_frames = 0;
92*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_initial_sz = 500;
93*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_optimal_sz = 500;
94*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_buf_sz = 1000;
95*fb1b10abSAndroid Build Coastguard Worker cfg_.rc_target_bitrate = 300;
96*fb1b10abSAndroid Build Coastguard Worker
97*fb1b10abSAndroid Build Coastguard Worker aq_mode_ = 3;
98*fb1b10abSAndroid Build Coastguard Worker
99*fb1b10abSAndroid Build Coastguard Worker ::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
100*fb1b10abSAndroid Build Coastguard Worker 30, 1, 0, 100);
101*fb1b10abSAndroid Build Coastguard Worker
102*fb1b10abSAndroid Build Coastguard Worker ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
103*fb1b10abSAndroid Build Coastguard Worker }
104*fb1b10abSAndroid Build Coastguard Worker
105*fb1b10abSAndroid Build Coastguard Worker VP9_INSTANTIATE_TEST_SUITE(AqSegmentTest,
106*fb1b10abSAndroid Build Coastguard Worker ::testing::Values(::libvpx_test::kRealTime,
107*fb1b10abSAndroid Build Coastguard Worker ::libvpx_test::kOnePassGood),
108*fb1b10abSAndroid Build Coastguard Worker ::testing::Range(3, 9));
109*fb1b10abSAndroid Build Coastguard Worker } // namespace
110