diff options
Diffstat (limited to '')
-rw-r--r-- | third_party/libwebrtc/modules/video_coding/decoder_database_unittest.cc | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/third_party/libwebrtc/modules/video_coding/decoder_database_unittest.cc b/third_party/libwebrtc/modules/video_coding/decoder_database_unittest.cc new file mode 100644 index 0000000000..2e9c91b1c4 --- /dev/null +++ b/third_party/libwebrtc/modules/video_coding/decoder_database_unittest.cc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2022 The WebRTC 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 "modules/video_coding/decoder_database.h" + +#include <memory> +#include <utility> + +#include "api/test/mock_video_decoder.h" +#include "test/gmock.h" +#include "test/gtest.h" + +namespace webrtc { +namespace { + +using ::testing::NiceMock; + +// Test registering and unregistering an external decoder instance. +TEST(VCMDecoderDatabaseTest, RegisterExternalDecoder) { + VCMDecoderDatabase db; + constexpr int kPayloadType = 1; + ASSERT_FALSE(db.IsExternalDecoderRegistered(kPayloadType)); + + auto decoder = std::make_unique<NiceMock<MockVideoDecoder>>(); + bool decoder_deleted = false; + EXPECT_CALL(*decoder, Destruct).WillOnce([&decoder_deleted] { + decoder_deleted = true; + }); + + db.RegisterExternalDecoder(kPayloadType, std::move(decoder)); + EXPECT_TRUE(db.IsExternalDecoderRegistered(kPayloadType)); + db.DeregisterExternalDecoder(kPayloadType); + EXPECT_TRUE(decoder_deleted); + EXPECT_FALSE(db.IsExternalDecoderRegistered(kPayloadType)); +} + +TEST(VCMDecoderDatabaseTest, RegisterReceiveCodec) { + VCMDecoderDatabase db; + constexpr int kPayloadType = 1; + ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType)); + + VideoDecoder::Settings settings; + settings.set_codec_type(kVideoCodecVP8); + settings.set_max_render_resolution({10, 10}); + settings.set_number_of_cores(4); + db.RegisterReceiveCodec(kPayloadType, settings); + + EXPECT_TRUE(db.DeregisterReceiveCodec(kPayloadType)); +} + +TEST(VCMDecoderDatabaseTest, DeregisterReceiveCodecs) { + VCMDecoderDatabase db; + constexpr int kPayloadType1 = 1; + constexpr int kPayloadType2 = 2; + ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType1)); + ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType2)); + + VideoDecoder::Settings settings1; + settings1.set_codec_type(kVideoCodecVP8); + settings1.set_max_render_resolution({10, 10}); + settings1.set_number_of_cores(4); + + VideoDecoder::Settings settings2 = settings1; + settings2.set_codec_type(kVideoCodecVP9); + + db.RegisterReceiveCodec(kPayloadType1, settings1); + db.RegisterReceiveCodec(kPayloadType2, settings2); + + db.DeregisterReceiveCodecs(); + + // All receive codecs must have been removed. + EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType1)); + EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType2)); +} + +} // namespace +} // namespace webrtc |