59e733ca81
ARNR filtering is now forced to be centered on the ARF frame and the other two options have been removed. The other modes of constructing the ARNR frame were not used and there does not seem to be any good reason to maintain them. This is purely an encoder-side change. Change-Id: Ic772636d23f280752973852b9740083532a49de2
83 lines
2.8 KiB
C++
83 lines
2.8 KiB
C++
/*
|
|
* Copyright (c) 2012 The WebM project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
#include <climits>
|
|
#include <vector>
|
|
#include "third_party/googletest/src/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 {
|
|
|
|
class BordersTest : public ::libvpx_test::EncoderTest,
|
|
public ::libvpx_test::CodecTestWithParam<libvpx_test::TestMode> {
|
|
protected:
|
|
BordersTest() : EncoderTest(GET_PARAM(0)) {}
|
|
virtual ~BordersTest() {}
|
|
|
|
virtual void SetUp() {
|
|
InitializeConfig();
|
|
SetMode(GET_PARAM(1));
|
|
}
|
|
|
|
virtual void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
|
|
::libvpx_test::Encoder *encoder) {
|
|
if (video->frame() == 1) {
|
|
encoder->Control(VP8E_SET_CPUUSED, 1);
|
|
encoder->Control(VP8E_SET_ENABLEAUTOALTREF, 1);
|
|
encoder->Control(VP8E_SET_ARNR_MAXFRAMES, 7);
|
|
encoder->Control(VP8E_SET_ARNR_STRENGTH, 5);
|
|
}
|
|
}
|
|
|
|
virtual void FramePktHook(const vpx_codec_cx_pkt_t *pkt) {
|
|
if (pkt->data.frame.flags & VPX_FRAME_IS_KEY) {
|
|
}
|
|
}
|
|
};
|
|
|
|
TEST_P(BordersTest, TestEncodeHighBitrate) {
|
|
// Validate that this non multiple of 64 wide clip encodes and decodes
|
|
// without a mismatch when passing in a very low max q. This pushes
|
|
// the encoder to producing lots of big partitions which will likely
|
|
// extend into the border and test the border condition.
|
|
cfg_.g_lag_in_frames = 25;
|
|
cfg_.rc_2pass_vbr_minsection_pct = 5;
|
|
cfg_.rc_2pass_vbr_minsection_pct = 2000;
|
|
cfg_.rc_target_bitrate = 2000;
|
|
cfg_.rc_max_quantizer = 10;
|
|
|
|
::libvpx_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
|
|
40);
|
|
|
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
|
}
|
|
TEST_P(BordersTest, TestLowBitrate) {
|
|
// Validate that this clip encodes and decodes without a mismatch
|
|
// when passing in a very high min q. This pushes the encoder to producing
|
|
// lots of small partitions which might will test the other condition.
|
|
|
|
cfg_.g_lag_in_frames = 25;
|
|
cfg_.rc_2pass_vbr_minsection_pct = 5;
|
|
cfg_.rc_2pass_vbr_maxsection_pct = 2000;
|
|
cfg_.rc_target_bitrate = 200;
|
|
cfg_.rc_min_quantizer = 40;
|
|
|
|
::libvpx_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
|
|
40);
|
|
|
|
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
|
|
}
|
|
|
|
VP9_INSTANTIATE_TEST_CASE(BordersTest, ::testing::Values(
|
|
::libvpx_test::kTwoPassGood));
|
|
} // namespace
|