blob: f2f250c332bead01c88812887d02ff88203d9270 [file] [log] [blame]
Tommi96c1a9b2022-09-29 12:24:02 +02001/*
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 "api/test/mock_video_decoder.h"
14#include "test/gmock.h"
15#include "test/gtest.h"
16
17namespace webrtc {
18namespace {
19
20using ::testing::NiceMock;
21
22// Test registering and unregistering an external decoder instance.
Tommi20b32712022-09-29 14:13:15 +020023TEST(VCMDecoderDatabaseTest, RegisterExternalDecoder) {
24 VCMDecoderDatabase db;
Tommi96c1a9b2022-09-29 12:24:02 +020025 constexpr int kPayloadType = 1;
26 ASSERT_FALSE(db.IsExternalDecoderRegistered(kPayloadType));
27
28 NiceMock<MockVideoDecoder> decoder;
29 db.RegisterExternalDecoder(kPayloadType, &decoder);
30 EXPECT_TRUE(db.IsExternalDecoderRegistered(kPayloadType));
31 EXPECT_EQ(db.DeregisterExternalDecoder(kPayloadType), &decoder);
32 EXPECT_FALSE(db.IsExternalDecoderRegistered(kPayloadType));
33}
34
Tommi20b32712022-09-29 14:13:15 +020035TEST(VCMDecoderDatabaseTest, RegisterReceiveCodec) {
36 VCMDecoderDatabase db;
Tommi96c1a9b2022-09-29 12:24:02 +020037 constexpr int kPayloadType = 1;
38 ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType));
39
40 VideoDecoder::Settings settings;
41 settings.set_codec_type(kVideoCodecVP8);
42 settings.set_max_render_resolution({10, 10});
43 settings.set_number_of_cores(4);
44 db.RegisterReceiveCodec(kPayloadType, settings);
45
46 EXPECT_TRUE(db.DeregisterReceiveCodec(kPayloadType));
47}
48
Tommi20b32712022-09-29 14:13:15 +020049TEST(VCMDecoderDatabaseTest, DeregisterReceiveCodecs) {
50 VCMDecoderDatabase db;
Tommi96c1a9b2022-09-29 12:24:02 +020051 constexpr int kPayloadType1 = 1;
52 constexpr int kPayloadType2 = 2;
53 ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType1));
54 ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType2));
55
56 VideoDecoder::Settings settings1;
57 settings1.set_codec_type(kVideoCodecVP8);
58 settings1.set_max_render_resolution({10, 10});
59 settings1.set_number_of_cores(4);
60
61 VideoDecoder::Settings settings2 = settings1;
62 settings2.set_codec_type(kVideoCodecVP9);
63
64 db.RegisterReceiveCodec(kPayloadType1, settings1);
65 db.RegisterReceiveCodec(kPayloadType2, settings2);
66
67 db.DeregisterReceiveCodecs();
68
69 // All receive codecs must have been removed.
70 EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType1));
71 EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType2));
72}
73
74} // namespace
75} // namespace webrtc