decoder_database_unittest.cc (2763B)
1 /* 2 * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/video_coding/decoder_database.h" 12 13 #include <memory> 14 #include <utility> 15 16 #include "api/test/mock_video_decoder.h" 17 #include "api/video/video_codec_type.h" 18 #include "api/video_codecs/video_decoder.h" 19 #include "test/gmock.h" 20 #include "test/gtest.h" 21 22 namespace webrtc { 23 namespace { 24 25 using ::testing::NiceMock; 26 27 // Test registering and unregistering an external decoder instance. 28 TEST(VCMDecoderDatabaseTest, RegisterExternalDecoder) { 29 VCMDecoderDatabase db; 30 constexpr int kPayloadType = 1; 31 ASSERT_FALSE(db.IsExternalDecoderRegistered(kPayloadType)); 32 33 auto decoder = std::make_unique<NiceMock<MockVideoDecoder>>(); 34 bool decoder_deleted = false; 35 EXPECT_CALL(*decoder, Destruct).WillOnce([&decoder_deleted] { 36 decoder_deleted = true; 37 }); 38 39 db.RegisterExternalDecoder(kPayloadType, std::move(decoder)); 40 EXPECT_TRUE(db.IsExternalDecoderRegistered(kPayloadType)); 41 db.DeregisterExternalDecoder(kPayloadType); 42 EXPECT_TRUE(decoder_deleted); 43 EXPECT_FALSE(db.IsExternalDecoderRegistered(kPayloadType)); 44 } 45 46 TEST(VCMDecoderDatabaseTest, RegisterReceiveCodec) { 47 VCMDecoderDatabase db; 48 constexpr int kPayloadType = 1; 49 ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType)); 50 51 VideoDecoder::Settings settings; 52 settings.set_codec_type(kVideoCodecVP8); 53 settings.set_max_render_resolution({10, 10}); 54 settings.set_number_of_cores(4); 55 db.RegisterReceiveCodec(kPayloadType, settings); 56 57 EXPECT_TRUE(db.DeregisterReceiveCodec(kPayloadType)); 58 } 59 60 TEST(VCMDecoderDatabaseTest, DeregisterReceiveCodecs) { 61 VCMDecoderDatabase db; 62 constexpr int kPayloadType1 = 1; 63 constexpr int kPayloadType2 = 2; 64 ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType1)); 65 ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType2)); 66 67 VideoDecoder::Settings settings1; 68 settings1.set_codec_type(kVideoCodecVP8); 69 settings1.set_max_render_resolution({10, 10}); 70 settings1.set_number_of_cores(4); 71 72 VideoDecoder::Settings settings2 = settings1; 73 settings2.set_codec_type(kVideoCodecVP9); 74 75 db.RegisterReceiveCodec(kPayloadType1, settings1); 76 db.RegisterReceiveCodec(kPayloadType2, settings2); 77 78 db.DeregisterReceiveCodecs(); 79 80 // All receive codecs must have been removed. 81 EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType1)); 82 EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType2)); 83 } 84 85 } // namespace 86 } // namespace webrtc