Add test that attempting HW is still possible after SW fallback.

Based on previous discussions I would have thought that this test would
fail, but it turns out that it passes. See referenced bug for context.

Bug: webrtc:15021
Change-Id: I845b48f688fb25942e3b770d50cafbf8a0bafe94
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/298562
Auto-Submit: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Evan Shrubsole <eshr@google.com>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39625}
This commit is contained in:
Henrik Boström 2023-03-21 11:27:41 +01:00 committed by WebRTC LUCI CQ
parent 7efd372f02
commit 62dc65b537

View File

@ -796,6 +796,37 @@ TEST(SoftwareFallbackEncoderTest, ReportsHardwareAccelerated) {
EXPECT_FALSE(wrapper->GetEncoderInfo().is_hardware_accelerated);
}
TEST(SoftwareFallbackEncoderTest, ConfigureHardwareOnSecondAttempt) {
auto* sw_encoder = new ::testing::NiceMock<MockVideoEncoder>();
auto* hw_encoder = new ::testing::NiceMock<MockVideoEncoder>();
EXPECT_CALL(*sw_encoder, GetEncoderInfo())
.WillRepeatedly(Return(GetEncoderInfoWithHardwareAccelerated(false)));
EXPECT_CALL(*hw_encoder, GetEncoderInfo())
.WillRepeatedly(Return(GetEncoderInfoWithHardwareAccelerated(true)));
std::unique_ptr<VideoEncoder> wrapper =
CreateVideoEncoderSoftwareFallbackWrapper(
std::unique_ptr<VideoEncoder>(sw_encoder),
std::unique_ptr<VideoEncoder>(hw_encoder));
EXPECT_TRUE(wrapper->GetEncoderInfo().is_hardware_accelerated);
// Initialize the encoder. When HW attempt fails we fallback to SW.
VideoCodec codec_ = {};
codec_.width = 100;
codec_.height = 100;
EXPECT_CALL(*hw_encoder, InitEncode(_, _))
.WillOnce(Return(WEBRTC_VIDEO_CODEC_ERR_PARAMETER));
EXPECT_CALL(*sw_encoder, InitEncode(_, _))
.WillOnce(Return(WEBRTC_VIDEO_CODEC_OK));
wrapper->InitEncode(&codec_, kSettings);
// When reconfiguring (Release+InitEncode) we should re-attempt HW.
wrapper->Release();
EXPECT_CALL(*hw_encoder, InitEncode(_, _))
.WillOnce(Return(WEBRTC_VIDEO_CODEC_OK));
wrapper->InitEncode(&codec_, kSettings);
}
class PreferTemporalLayersFallbackTest : public ::testing::Test {
public:
PreferTemporalLayersFallbackTest() {}