gmock.h and gtest.h were moved (or rather, got wrappers so that we could put some icky compatibility hacks in one place instead of 500) in this CL: https://codereview.webrtc.org/2358993004/ NOPRESUBMIT=true BUG=webrtc:6398 Review-Url: https://codereview.webrtc.org/2381013002 Cr-Commit-Position: refs/heads/master@{#14464}
108 lines
3.1 KiB
C++
108 lines
3.1 KiB
C++
/*
|
|
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include <memory>
|
|
|
|
#include "webrtc/voice_engine/include/voe_codec.h"
|
|
|
|
#include "webrtc/modules/audio_device/include/fake_audio_device.h"
|
|
#include "webrtc/test/gtest.h"
|
|
#include "webrtc/voice_engine/include/voe_base.h"
|
|
#include "webrtc/voice_engine/include/voe_hardware.h"
|
|
#include "webrtc/voice_engine/voice_engine_defines.h"
|
|
|
|
namespace webrtc {
|
|
namespace voe {
|
|
namespace {
|
|
|
|
TEST(VoECodecInst, TestCompareCodecInstances) {
|
|
CodecInst codec1, codec2;
|
|
memset(&codec1, 0, sizeof(CodecInst));
|
|
memset(&codec2, 0, sizeof(CodecInst));
|
|
|
|
codec1.pltype = 101;
|
|
strncpy(codec1.plname, "isac", 4);
|
|
codec1.plfreq = 8000;
|
|
codec1.pacsize = 110;
|
|
codec1.channels = 1;
|
|
codec1.rate = 8000;
|
|
memcpy(&codec2, &codec1, sizeof(CodecInst));
|
|
// Compare two codecs now.
|
|
EXPECT_TRUE(codec1 == codec2);
|
|
EXPECT_FALSE(codec1 != codec2);
|
|
|
|
// Changing pltype.
|
|
codec2.pltype = 102;
|
|
EXPECT_FALSE(codec1 == codec2);
|
|
EXPECT_TRUE(codec1 != codec2);
|
|
|
|
// Reset to codec2 to codec1 state.
|
|
memcpy(&codec2, &codec1, sizeof(CodecInst));
|
|
// payload name should be case insensitive.
|
|
strncpy(codec2.plname, "ISAC", 4);
|
|
EXPECT_TRUE(codec1 == codec2);
|
|
|
|
// Test modifying the |plfreq|
|
|
codec2.plfreq = 16000;
|
|
EXPECT_FALSE(codec1 == codec2);
|
|
|
|
// Reset to codec2 to codec1 state.
|
|
memcpy(&codec2, &codec1, sizeof(CodecInst));
|
|
// Test modifying the |pacsize|.
|
|
codec2.pacsize = 440;
|
|
EXPECT_FALSE(codec1 == codec2);
|
|
|
|
// Reset to codec2 to codec1 state.
|
|
memcpy(&codec2, &codec1, sizeof(CodecInst));
|
|
// Test modifying the |channels|.
|
|
codec2.channels = 2;
|
|
EXPECT_FALSE(codec1 == codec2);
|
|
|
|
// Reset to codec2 to codec1 state.
|
|
memcpy(&codec2, &codec1, sizeof(CodecInst));
|
|
// Test modifying the |rate|.
|
|
codec2.rate = 0;
|
|
EXPECT_FALSE(codec1 == codec2);
|
|
}
|
|
|
|
// This is a regression test for
|
|
// https://bugs.chromium.org/p/webrtc/issues/detail?id=6020
|
|
// The Opus DTX setting was being forgotten after unrelated VoE calls.
|
|
TEST(VoECodecInst, RememberOpusDtxAfterSettingChange) {
|
|
VoiceEngine* voe(VoiceEngine::Create());
|
|
VoEBase* base(VoEBase::GetInterface(voe));
|
|
VoECodec* voe_codec(VoECodec::GetInterface(voe));
|
|
std::unique_ptr<FakeAudioDeviceModule> adm(new FakeAudioDeviceModule);
|
|
|
|
base->Init(adm.get());
|
|
|
|
CodecInst codec = {111, "opus", 48000, 960, 1, 32000};
|
|
|
|
int channel = base->CreateChannel();
|
|
|
|
bool DTX = false;
|
|
|
|
EXPECT_EQ(0, voe_codec->SetSendCodec(channel, codec));
|
|
EXPECT_EQ(0, voe_codec->SetOpusDtx(channel, true));
|
|
EXPECT_EQ(0, voe_codec->SetFECStatus(channel, true));
|
|
EXPECT_EQ(0, voe_codec->GetOpusDtxStatus(channel, &DTX));
|
|
EXPECT_TRUE(DTX);
|
|
|
|
base->DeleteChannel(channel);
|
|
base->Terminate();
|
|
base->Release();
|
|
voe_codec->Release();
|
|
VoiceEngine::Delete(voe);
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace voe
|
|
} // namespace webrtc
|