blob: c7453d80405714603f8e756b07659567d7c4dbca [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.
23TEST(VCMDecoderDataBaseTest, RegisterExternalDecoder) {
24 VCMDecoderDataBase db;
25 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
35TEST(VCMDecoderDataBaseTest, RegisterReceiveCodec) {
36 VCMDecoderDataBase db;
37 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
49TEST(VCMDecoderDataBaseTest, DeregisterReceiveCodecs) {
50 VCMDecoderDataBase db;
51 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