audio_coding_module_unittest: Don't rely on the ACM to create encoders

It will soon lose the ability to do so.

Bug: webrtc:8396
Change-Id: I1d7c62fbc2585233cf1656fdcc4bb5380c2f41a5
Reviewed-on: https://webrtc-review.googlesource.com/c/100980
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24947}
This commit is contained in:
Karl Wiberg
2018-10-03 11:16:55 +02:00
committed by Commit Bot
parent e44e847c70
commit 5cc8e14586

View File

@ -15,10 +15,12 @@
#include "api/audio_codecs/audio_encoder.h" #include "api/audio_codecs/audio_encoder.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/audio_codecs/opus/audio_encoder_opus.h" #include "api/audio_codecs/opus/audio_encoder_opus.h"
#include "modules/audio_coding/acm2/acm_receive_test.h" #include "modules/audio_coding/acm2/acm_receive_test.h"
#include "modules/audio_coding/acm2/acm_send_test.h" #include "modules/audio_coding/acm2/acm_send_test.h"
#include "modules/audio_coding/codecs/audio_format_conversion.h" #include "modules/audio_coding/codecs/audio_format_conversion.h"
#include "modules/audio_coding/codecs/cng/audio_encoder_cng.h"
#include "modules/audio_coding/codecs/g711/audio_decoder_pcm.h" #include "modules/audio_coding/codecs/g711/audio_decoder_pcm.h"
#include "modules/audio_coding/codecs/g711/audio_encoder_pcm.h" #include "modules/audio_coding/codecs/g711/audio_encoder_pcm.h"
#include "modules/audio_coding/codecs/isac/main/include/audio_encoder_isac.h" #include "modules/audio_coding/codecs/isac/main/include/audio_encoder_isac.h"
@ -194,7 +196,8 @@ class AudioCodingModuleTestOldApi : public ::testing::Test {
virtual void RegisterCodec() { virtual void RegisterCodec() {
EXPECT_EQ(true, acm_->RegisterReceiveCodec(kPayloadType, *audio_format_)); EXPECT_EQ(true, acm_->RegisterReceiveCodec(kPayloadType, *audio_format_));
EXPECT_EQ(0, acm_->RegisterSendCodec(codec_)); acm_->SetEncoder(CreateBuiltinAudioEncoderFactory()->MakeAudioEncoder(
kPayloadType, *audio_format_, absl::nullopt));
} }
virtual void InsertPacketAndPullAudio() { virtual void InsertPacketAndPullAudio() {
@ -341,6 +344,7 @@ TEST_F(AudioCodingModuleTestOldApi, FailOnZeroDesiredFrequency) {
TEST_F(AudioCodingModuleTestOldApi, TransportCallbackIsInvokedForEachPacket) { TEST_F(AudioCodingModuleTestOldApi, TransportCallbackIsInvokedForEachPacket) {
const int k10MsBlocksPerPacket = 3; const int k10MsBlocksPerPacket = 3;
codec_.pacsize = k10MsBlocksPerPacket * kSampleRateHz / 100; codec_.pacsize = k10MsBlocksPerPacket * kSampleRateHz / 100;
audio_format_->parameters["ptime"] = "30";
RegisterCodec(); RegisterCodec();
const int kLoops = 10; const int kLoops = 10;
for (int i = 0; i < kLoops; ++i) { for (int i = 0; i < kLoops; ++i) {
@ -374,6 +378,7 @@ TEST_F(AudioCodingModuleTestOldApi, TimestampSeriesContinuesWhenCodecChanges) {
// Change codec. // Change codec.
ASSERT_EQ(0, AudioCodingModule::Codec("ISAC", &codec_, kSampleRateHz, 1)); ASSERT_EQ(0, AudioCodingModule::Codec("ISAC", &codec_, kSampleRateHz, 1));
audio_format_ = SdpAudioFormat("ISAC", kSampleRateHz, 1);
RegisterCodec(); RegisterCodec();
blocks_per_packet = codec_.pacsize / (kSampleRateHz / 100); blocks_per_packet = codec_.pacsize / (kSampleRateHz / 100);
// Encode another 5 packets. // Encode another 5 packets.
@ -402,11 +407,14 @@ class AudioCodingModuleTestWithComfortNoiseOldApi
EXPECT_EQ(true, EXPECT_EQ(true,
acm_->RegisterReceiveCodec( acm_->RegisterReceiveCodec(
rtp_payload_type, SdpAudioFormat("cn", kSampleRateHz, 1))); rtp_payload_type, SdpAudioFormat("cn", kSampleRateHz, 1)));
acm_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* enc) {
CodecInst codec; AudioEncoderCng::Config config;
EXPECT_EQ(0, AudioCodingModule::Codec("CN", &codec, kSampleRateHz, 1)); config.speech_encoder = std::move(*enc);
codec.pltype = rtp_payload_type; config.num_channels = 1;
EXPECT_EQ(0, acm_->RegisterSendCodec(codec)); config.payload_type = rtp_payload_type;
config.vad_mode = Vad::kVadNormal;
*enc = absl::make_unique<AudioEncoderCng>(std::move(config));
});
} }
void VerifyEncoding() override { void VerifyEncoding() override {
@ -450,27 +458,14 @@ class AudioCodingModuleTestWithComfortNoiseOldApi
// Checks that the transport callback is invoked once per frame period of the // Checks that the transport callback is invoked once per frame period of the
// underlying speech encoder, even when comfort noise is produced. // underlying speech encoder, even when comfort noise is produced.
// Also checks that the frame type is kAudioFrameCN or kEmptyFrame. // Also checks that the frame type is kAudioFrameCN or kEmptyFrame.
// This test and the next check the same thing, but differ in the order of
// speech codec and CNG registration.
TEST_F(AudioCodingModuleTestWithComfortNoiseOldApi, TEST_F(AudioCodingModuleTestWithComfortNoiseOldApi,
TransportCallbackTestForComfortNoiseRegisterCngLast) { TransportCallbackTestForComfortNoiseRegisterCngLast) {
const int k10MsBlocksPerPacket = 3; const int k10MsBlocksPerPacket = 3;
codec_.pacsize = k10MsBlocksPerPacket * kSampleRateHz / 100; codec_.pacsize = k10MsBlocksPerPacket * kSampleRateHz / 100;
audio_format_->parameters["ptime"] = "30";
RegisterCodec(); RegisterCodec();
const int kCngPayloadType = 105; const int kCngPayloadType = 105;
RegisterCngCodec(kCngPayloadType); RegisterCngCodec(kCngPayloadType);
ASSERT_EQ(0, acm_->SetVAD(true, true));
DoTest(k10MsBlocksPerPacket, kCngPayloadType);
}
TEST_F(AudioCodingModuleTestWithComfortNoiseOldApi,
TransportCallbackTestForComfortNoiseRegisterCngFirst) {
const int k10MsBlocksPerPacket = 3;
codec_.pacsize = k10MsBlocksPerPacket * kSampleRateHz / 100;
const int kCngPayloadType = 105;
RegisterCngCodec(kCngPayloadType);
RegisterCodec();
ASSERT_EQ(0, acm_->SetVAD(true, true));
DoTest(k10MsBlocksPerPacket, kCngPayloadType); DoTest(k10MsBlocksPerPacket, kCngPayloadType);
} }
@ -662,7 +657,8 @@ class AcmIsacMtTestOldApi : public AudioCodingModuleMtTestOldApi {
// Register iSAC codec in ACM, effectively unregistering the PCM16B codec // Register iSAC codec in ACM, effectively unregistering the PCM16B codec
// registered in AudioCodingModuleTestOldApi::SetUp(); // registered in AudioCodingModuleTestOldApi::SetUp();
EXPECT_EQ(true, acm_->RegisterReceiveCodec(kPayloadType, *audio_format_)); EXPECT_EQ(true, acm_->RegisterReceiveCodec(kPayloadType, *audio_format_));
EXPECT_EQ(0, acm_->RegisterSendCodec(codec_)); acm_->SetEncoder(CreateBuiltinAudioEncoderFactory()->MakeAudioEncoder(
kPayloadType, *audio_format_, absl::nullopt));
} }
void InsertPacket() override { void InsertPacket() override {
@ -855,7 +851,8 @@ class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi {
if (!codec_registered_ && if (!codec_registered_ &&
receive_packet_count_ > kRegisterAfterNumPackets) { receive_packet_count_ > kRegisterAfterNumPackets) {
// Register the iSAC encoder. // Register the iSAC encoder.
EXPECT_EQ(0, acm_->RegisterSendCodec(codec_)); acm_->SetEncoder(CreateBuiltinAudioEncoderFactory()->MakeAudioEncoder(
kPayloadType, *audio_format_, absl::nullopt));
codec_registered_ = true; codec_registered_ = true;
} }
if (codec_registered_ && receive_packet_count_ > kNumPackets) { if (codec_registered_ && receive_packet_count_ > kNumPackets) {