blob: 6a5ea5f52e2556248d6c07d42ec3fa2b4a3b3875 [file] [log] [blame]
kwiberg4dc94112015-11-11 08:34:21 -08001/*
2 * Copyright (c) 2015 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
kwiberg16c5a962016-02-15 02:27:22 -080011#include <memory>
12
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "modules/audio_coding/acm2/codec_manager.h"
14#include "modules/audio_coding/acm2/rent_a_codec.h"
15#include "test/gtest.h"
16#include "test/mock_audio_encoder.h"
kwiberg4dc94112015-11-11 08:34:21 -080017
18namespace webrtc {
19namespace acm2 {
20
21using ::testing::Return;
22
23namespace {
24
25// Create a MockAudioEncoder with some reasonable default behavior.
kwiberg16c5a962016-02-15 02:27:22 -080026std::unique_ptr<MockAudioEncoder> CreateMockEncoder() {
27 auto enc = std::unique_ptr<MockAudioEncoder>(new MockAudioEncoder);
kwiberg4dc94112015-11-11 08:34:21 -080028 EXPECT_CALL(*enc, SampleRateHz()).WillRepeatedly(Return(8000));
29 EXPECT_CALL(*enc, NumChannels()).WillRepeatedly(Return(1));
30 EXPECT_CALL(*enc, Max10MsFramesInAPacket()).WillRepeatedly(Return(1));
kwiberg4dc94112015-11-11 08:34:21 -080031 return enc;
32}
33
34} // namespace
35
36TEST(CodecManagerTest, ExternalEncoderFec) {
37 auto enc0 = CreateMockEncoder();
38 auto enc1 = CreateMockEncoder();
kwiberg6030a122016-03-08 06:01:31 -080039 auto enc2 = CreateMockEncoder();
kwiberg4dc94112015-11-11 08:34:21 -080040 {
41 ::testing::InSequence s;
42 EXPECT_CALL(*enc0, SetFec(false)).WillOnce(Return(true));
kwiberg4dc94112015-11-11 08:34:21 -080043 EXPECT_CALL(*enc1, SetFec(true)).WillOnce(Return(true));
kwiberg6030a122016-03-08 06:01:31 -080044 EXPECT_CALL(*enc2, SetFec(true)).WillOnce(Return(false));
kwiberg4dc94112015-11-11 08:34:21 -080045 }
46
47 CodecManager cm;
kwiberga6db4952015-12-16 04:19:08 -080048 RentACodec rac;
kwiberg6030a122016-03-08 06:01:31 -080049
50 // use_codec_fec starts out false.
kwiberga6db4952015-12-16 04:19:08 -080051 EXPECT_FALSE(cm.GetStackParams()->use_codec_fec);
kwiberg6030a122016-03-08 06:01:31 -080052 cm.GetStackParams()->speech_encoder = std::move(enc0);
kwiberga6db4952015-12-16 04:19:08 -080053 EXPECT_TRUE(rac.RentEncoderStack(cm.GetStackParams()));
54 EXPECT_FALSE(cm.GetStackParams()->use_codec_fec);
kwiberg6030a122016-03-08 06:01:31 -080055
56 // Set it to true.
kwiberga6db4952015-12-16 04:19:08 -080057 EXPECT_EQ(true, cm.SetCodecFEC(true));
kwiberga6db4952015-12-16 04:19:08 -080058 EXPECT_TRUE(cm.GetStackParams()->use_codec_fec);
kwiberg6030a122016-03-08 06:01:31 -080059 cm.GetStackParams()->speech_encoder = std::move(enc1);
kwiberga6db4952015-12-16 04:19:08 -080060 EXPECT_TRUE(rac.RentEncoderStack(cm.GetStackParams()));
61 EXPECT_TRUE(cm.GetStackParams()->use_codec_fec);
kwiberg4dc94112015-11-11 08:34:21 -080062
kwiberg6030a122016-03-08 06:01:31 -080063 // Switch to a codec that doesn't support it.
64 cm.GetStackParams()->speech_encoder = std::move(enc2);
kwiberga6db4952015-12-16 04:19:08 -080065 EXPECT_TRUE(rac.RentEncoderStack(cm.GetStackParams()));
66 EXPECT_FALSE(cm.GetStackParams()->use_codec_fec);
kwiberg4dc94112015-11-11 08:34:21 -080067}
68
69} // namespace acm2
70} // namespace webrtc