| /* | |
| * Copyright (c) 2026, Alliance for Open Media. All rights reserved. | |
| * | |
| * This source code is subject to the terms of the BSD 2 Clause License and | |
| * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License | |
| * was not distributed with this source code in the LICENSE file, you can | |
| * obtain it at www.aomedia.org/license/software. If the Alliance for Open | |
| * Media Patent License 1.0 was not distributed with this source code in the | |
| * PATENTS file, you can obtain it at www.aomedia.org/license/patent. | |
| */ | |
| #include "config/aom_config.h" | |
| #include "gtest/gtest.h" | |
| #include "test/codec_factory.h" | |
| #include "test/encode_test_driver.h" | |
| #include "test/i420_video_source.h" | |
| #include "test/util.h" | |
| namespace { | |
| const ::libaom_test::TestMode kTestMode[] = | |
| #if CONFIG_REALTIME_ONLY | |
| { ::libaom_test::kRealTime }; | |
| #else | |
| { ::libaom_test::kRealTime, ::libaom_test::kOnePassGood }; | |
| #endif | |
| const int kUseFixedQPOffsetsMode[] = { 1, 2 }; | |
| class UseFixedQPOffsetsTest | |
| : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>, | |
| public ::libaom_test::EncoderTest { | |
| protected: | |
| UseFixedQPOffsetsTest() : EncoderTest(GET_PARAM(0)) {} | |
| ~UseFixedQPOffsetsTest() override = default; | |
| void SetUp() override { | |
| InitializeConfig(GET_PARAM(1)); | |
| cfg_.kf_max_dist = 9999; | |
| cfg_.rc_end_usage = AOM_Q; | |
| cfg_.use_fixed_qp_offsets = GET_PARAM(2); | |
| } | |
| void PreEncodeFrameHook(::libaom_test::VideoSource *video, | |
| ::libaom_test::Encoder *encoder) override { | |
| if (video->frame() == 0) { | |
| encoder->Control(AOME_SET_CPUUSED, 6); | |
| encoder->Control(AOME_SET_CQ_LEVEL, frame_qp_); | |
| } | |
| } | |
| void PostEncodeFrameHook(::libaom_test::Encoder *encoder) override { | |
| int qp = 0; | |
| encoder->Control(AOME_GET_LAST_QUANTIZER_64, &qp); | |
| // If a call to encoder->EncodeFrame() results in a last QP of 0, | |
| // interpret as the frame being read into the lookahead buffer. | |
| if (qp == 0) return; | |
| if (cfg_.use_fixed_qp_offsets == 2) { | |
| // Setting use_fixed_qp_offsets = 2 means every frame should use the same | |
| // QP | |
| ASSERT_EQ(qp, frame_qp_); | |
| } else { | |
| ASSERT_LE(qp, frame_qp_); | |
| } | |
| } | |
| void DoTest() { | |
| ::libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, | |
| 288, 30, 1, 0, 33); | |
| frame_qp_ = 35; | |
| ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); | |
| } | |
| int frame_qp_; | |
| }; | |
| TEST_P(UseFixedQPOffsetsTest, TestQPOffsets) { DoTest(); } | |
| AV1_INSTANTIATE_TEST_SUITE(UseFixedQPOffsetsTest, | |
| ::testing::ValuesIn(kTestMode), | |
| ::testing::ValuesIn(kUseFixedQPOffsetsMode)); | |
| } // namespace |