Remove legacy VoiceEngine.

Now that voe::Channel is owned by Audio[Send|Receive]Stream, the legacy
VoiceEngine and the VoEBase interface is unused.

Also removes Atomic32, which was only used for ref counting VoiceEngine.

Bug: webrtc:4690
Change-Id: I73b8a083df544a8ab6383d57075a65ce955c592a
Reviewed-on: https://webrtc-review.googlesource.com/38723
Commit-Queue: Fredrik Solenberg <solenberg@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21595}
This commit is contained in:
Fredrik Solenberg
2018-01-12 10:31:52 +01:00
committed by Commit Bot
parent f0839f2c96
commit 2d49e4e18d
12 changed files with 0 additions and 572 deletions

View File

@ -94,7 +94,6 @@ LEGACY_API_DIRS = (
'modules/video_coding/include',
'rtc_base',
'system_wrappers/include',
'voice_engine/include',
)
# NOTE: The set of directories in API_DIRS should be the same as those

View File

@ -34,7 +34,6 @@ Legacy API directory | Including subdirectories?
`pc` | No
`rtc_base` | No
`system_wrappers/include` | No
`voice_engine/include` | No
While the files, types, functions, macros, build targets, etc. in the
API and legacy API directories will sometimes undergo incompatible

View File

@ -17,7 +17,6 @@ rtc_static_library("system_wrappers") {
sources = [
"include/aligned_array.h",
"include/aligned_malloc.h",
"include/atomic32.h",
"include/clock.h",
"include/cpu_info.h",
"include/event_wrapper.h",
@ -28,7 +27,6 @@ rtc_static_library("system_wrappers") {
"include/sleep.h",
"include/timestamp_extrapolator.h",
"source/aligned_malloc.cc",
"source/atomic32.cc",
"source/clock.cc",
"source/cpu_features.cc",
"source/cpu_info.cc",

View File

@ -1,59 +0,0 @@
/*
* 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.
*/
// Atomic, system independent 32-bit integer. Unless you know what you're
// doing, use locks instead! :-)
//
// Note: assumes 32-bit (or higher) system
#ifndef SYSTEM_WRAPPERS_INCLUDE_ATOMIC32_H_
#define SYSTEM_WRAPPERS_INCLUDE_ATOMIC32_H_
#include <atomic>
#include <stddef.h>
#include "common_types.h" // NOLINT(build/include)
#include "rtc_base/constructormagic.h"
namespace webrtc {
// DEPRECATED: Please use std::atomic<int32_t> instead.
// TODO(yuweih): Replace Atomic32 uses with std::atomic<int32_t> and remove this
// class. (bugs.webrtc.org/8428)
// 32 bit atomic variable. Note that this class relies on the compiler to
// align the 32 bit value correctly (on a 32 bit boundary), so as long as you're
// not doing things like reinterpret_cast over some custom allocated memory
// without being careful with alignment, you should be fine.
class Atomic32 {
public:
Atomic32(int32_t initial_value = 0);
~Atomic32();
// Prefix operator!
int32_t operator++();
int32_t operator--();
int32_t operator+=(int32_t value);
int32_t operator-=(int32_t value);
// Sets the value atomically to new_value if the value equals compare value.
// The function returns true if the exchange happened.
bool CompareExchange(int32_t new_value, int32_t compare_value);
int32_t Value() const;
private:
RTC_DISALLOW_COPY_AND_ASSIGN(Atomic32);
std::atomic<int32_t> value_;
};
} // namespace webrtc
#endif // SYSTEM_WRAPPERS_INCLUDE_ATOMIC32_H_

View File

@ -1,47 +0,0 @@
/*
* Copyright (c) 2017 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 "system_wrappers/include/atomic32.h"
#include <assert.h>
#include "common_types.h" // NOLINT(build/include)
namespace webrtc {
Atomic32::Atomic32(int32_t initial_value) : value_(initial_value) {}
Atomic32::~Atomic32() {}
int32_t Atomic32::operator++() {
return ++value_;
}
int32_t Atomic32::operator--() {
return --value_;
}
int32_t Atomic32::operator+=(int32_t value) {
return value_ += value;
}
int32_t Atomic32::operator-=(int32_t value) {
return value_ -= value;
}
bool Atomic32::CompareExchange(int32_t new_value, int32_t compare_value) {
return value_.compare_exchange_strong(compare_value, new_value);
}
int32_t Atomic32::Value() const {
return value_.load();
}
} // namespace webrtc

View File

@ -17,16 +17,10 @@ rtc_static_library("voice_engine") {
"channel.h",
"channel_proxy.cc",
"channel_proxy.h",
"include/voe_base.h",
"include/voe_errors.h",
"transport_feedback_packet_loss_tracker.cc",
"transport_feedback_packet_loss_tracker.h",
"utility.cc",
"utility.h",
"voe_base_impl.cc",
"voe_base_impl.h",
"voice_engine_impl.cc",
"voice_engine_impl.h",
]
if (is_win) {

View File

@ -1,118 +0,0 @@
/*
* 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.
*/
// This sub-API supports the following functionalities:
//
// - Enables full duplex VoIP sessions via RTP using G.711 (mu-Law or A-Law).
// - Initialization and termination.
// - Trace information on text files or via callbacks.
// - Multi-channel support (mixing, sending to multiple destinations etc.).
//
// To support other codecs than G.711, the VoECodec sub-API must be utilized.
//
// Usage example, omitting error checking:
//
// using namespace webrtc;
// VoiceEngine* voe = VoiceEngine::Create();
// VoEBase* base = VoEBase::GetInterface(voe);
// base->Init();
// int ch = base->CreateChannel();
// base->StartPlayout(ch);
// ...
// base->DeleteChannel(ch);
// base->Terminate();
// base->Release();
// VoiceEngine::Delete(voe);
//
#ifndef VOICE_ENGINE_VOE_BASE_H_
#define VOICE_ENGINE_VOE_BASE_H_
#include "api/audio_codecs/audio_decoder_factory.h"
#include "common_types.h" // NOLINT(build/include)
#include "modules/audio_coding/include/audio_coding_module.h"
#include "rtc_base/scoped_ref_ptr.h"
namespace webrtc {
class AudioDeviceModule;
class AudioProcessing;
// VoiceEngine
class WEBRTC_DLLEXPORT VoiceEngine {
public:
// Creates a VoiceEngine object, which can then be used to acquire
// sub-APIs. Returns NULL on failure.
static VoiceEngine* Create();
// Deletes a created VoiceEngine object and releases the utilized resources.
// Note that if there are outstanding references held via other interfaces,
// the voice engine instance will not actually be deleted until those
// references have been released.
static bool Delete(VoiceEngine*& voiceEngine);
protected:
VoiceEngine() {}
~VoiceEngine() {}
};
// VoEBase
class WEBRTC_DLLEXPORT VoEBase {
public:
struct ChannelConfig {
AudioCodingModule::Config acm_config;
bool enable_voice_pacing = false;
};
// Factory for the VoEBase sub-API. Increases an internal reference
// counter if successful. Returns NULL if the API is not supported or if
// construction fails.
static VoEBase* GetInterface(VoiceEngine* voiceEngine);
// Releases the VoEBase sub-API and decreases an internal reference
// counter. Returns the new reference count. This value should be zero
// for all sub-APIs before the VoiceEngine object can be safely deleted.
virtual int Release() = 0;
// Initializes all common parts of the VoiceEngine; e.g. all
// encoders/decoders, the sound card and core receiving components.
// This method also makes it possible to install some user-defined external
// modules:
// - The Audio Device Module (ADM) which implements all the audio layer
// functionality in a separate (reference counted) module.
// - The AudioProcessing module is unused - only kept for API compatibility.
// - An AudioDecoderFactory - used to create audio decoders.
virtual int Init(
AudioDeviceModule* audio_device,
AudioProcessing* audio_processing,
const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) = 0;
// Terminates all VoiceEngine functions and releases allocated resources.
virtual void Terminate() = 0;
// Creates a new channel and allocates the required resources for it.
// The second version accepts a |config| struct which includes an Audio Coding
// Module config and an option to enable voice pacing. Note that the
// decoder_factory member of the ACM config will be ignored (the decoder
// factory set through Init() will always be used).
// Returns channel ID or -1 in case of an error.
virtual int CreateChannel(const ChannelConfig& config) = 0;
// Deletes an existing channel and releases the utilized resources.
// Returns -1 in case of an error, 0 otherwise.
virtual int DeleteChannel(int channel) = 0;
protected:
VoEBase() {}
virtual ~VoEBase() {}
};
} // namespace webrtc
#endif // VOICE_ENGINE_VOE_BASE_H_

View File

@ -1,165 +0,0 @@
/*
* Copyright (c) 2011 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.
*/
#ifndef VOICE_ENGINE_VOE_ERRORS_H_
#define VOICE_ENGINE_VOE_ERRORS_H_
// Warnings
#define VE_PORT_NOT_DEFINED 8001
#define VE_CHANNEL_NOT_VALID 8002
#define VE_FUNC_NOT_SUPPORTED 8003
#define VE_INVALID_LISTNR 8004
#define VE_INVALID_ARGUMENT 8005
#define VE_INVALID_PORT_NMBR 8006
#define VE_INVALID_PLNAME 8007
#define VE_INVALID_PLFREQ 8008
#define VE_INVALID_PLTYPE 8009
#define VE_INVALID_PACSIZE 8010
#define VE_NOT_SUPPORTED 8011
#define VE_ALREADY_LISTENING 8012
#define VE_CHANNEL_NOT_CREATED 8013
#define VE_MAX_ACTIVE_CHANNELS_REACHED 8014
#define VE_REC_CANNOT_PREPARE_HEADER 8015
#define VE_REC_CANNOT_ADD_BUFFER 8016
#define VE_PLAY_CANNOT_PREPARE_HEADER 8017
#define VE_ALREADY_SENDING 8018
#define VE_INVALID_IP_ADDRESS 8019
#define VE_ALREADY_PLAYING 8020
#define VE_NOT_ALL_VERSION_INFO 8021
// 8022 is not used
#define VE_INVALID_CHANNELS 8023
#define VE_SET_PLTYPE_FAILED 8024
// 8025 is not used
#define VE_NOT_INITED 8026
#define VE_NOT_SENDING 8027
#define VE_EXT_TRANSPORT_NOT_SUPPORTED 8028
#define VE_EXTERNAL_TRANSPORT_ENABLED 8029
#define VE_STOP_RECORDING_FAILED 8030
#define VE_INVALID_RATE 8031
#define VE_INVALID_PACKET 8032
#define VE_NO_GQOS 8033
#define VE_INVALID_TIMESTAMP 8034
#define VE_RECEIVE_PACKET_TIMEOUT 8035
// 8036 is not used
#define VE_INIT_FAILED_WRONG_EXPIRY 8037
#define VE_SENDING 8038
#define VE_ENABLE_IPV6_FAILED 8039
#define VE_FUNC_NO_STEREO 8040
// Range 8041-8080 is not used
#define VE_FW_TRAVERSAL_ALREADY_INITIALIZED 8081
#define VE_PACKET_RECEIPT_RESTARTED 8082
#define VE_NOT_ALL_INFO 8083
#define VE_CANNOT_SET_SEND_CODEC 8084
#define VE_CODEC_ERROR 8085
#define VE_NETEQ_ERROR 8086
#define VE_RTCP_ERROR 8087
#define VE_INVALID_OPERATION 8088
#define VE_CPU_INFO_ERROR 8089
#define VE_SOUNDCARD_ERROR 8090
#define VE_SPEECH_LEVEL_ERROR 8091
#define VE_SEND_ERROR 8092
#define VE_CANNOT_REMOVE_CONF_CHANNEL 8093
#define VE_PLTYPE_ERROR 8094
#define VE_SET_RED_FAILED 8095
#define VE_CANNOT_GET_PLAY_DATA 8096
#define VE_APM_ERROR 8097
#define VE_RUNTIME_PLAY_WARNING 8098
#define VE_RUNTIME_REC_WARNING 8099
#define VE_NOT_PLAYING 8100
#define VE_SOCKETS_NOT_INITED 8101
#define VE_CANNOT_GET_SOCKET_INFO 8102
#define VE_INVALID_MULTICAST_ADDRESS 8103
#define VE_DESTINATION_NOT_INITED 8104
#define VE_RECEIVE_SOCKETS_CONFLICT 8105
#define VE_SEND_SOCKETS_CONFLICT 8106
// 8107 is not used
#define VE_NOISE_WARNING 8109
#define VE_CANNOT_GET_SEND_CODEC 8110
#define VE_CANNOT_GET_REC_CODEC 8111
#define VE_ALREADY_INITED 8112
#define VE_CANNOT_SET_SECONDARY_SEND_CODEC 8113
#define VE_CANNOT_GET_SECONDARY_SEND_CODEC 8114
#define VE_CANNOT_REMOVE_SECONDARY_SEND_CODEC 8115
// 8116 is not used
// Errors causing limited functionality
#define VE_RTCP_SOCKET_ERROR 9001
#define VE_MIC_VOL_ERROR 9002
#define VE_SPEAKER_VOL_ERROR 9003
#define VE_CANNOT_ACCESS_MIC_VOL 9004
#define VE_CANNOT_ACCESS_SPEAKER_VOL 9005
#define VE_GET_MIC_VOL_ERROR 9006
#define VE_GET_SPEAKER_VOL_ERROR 9007
#define VE_THREAD_RTCP_ERROR 9008
#define VE_CANNOT_INIT_APM 9009
#define VE_SEND_SOCKET_TOS_ERROR 9010
#define VE_CANNOT_RETRIEVE_DEVICE_NAME 9013
#define VE_SRTP_ERROR 9014
// 9015 is not used
#define VE_INTERFACE_NOT_FOUND 9016
#define VE_TOS_GQOS_CONFLICT 9017
#define VE_CANNOT_ADD_CONF_CHANNEL 9018
#define VE_BUFFER_TOO_SMALL 9019
#define VE_CANNOT_EXECUTE_SETTING 9020
#define VE_CANNOT_RETRIEVE_SETTING 9021
// 9022 is not used
#define VE_RTP_KEEPALIVE_FAILED 9023
#define VE_SEND_DTMF_FAILED 9024
#define VE_CANNOT_RETRIEVE_CNAME 9025
// 9026 is not used
// 9027 is not used
#define VE_CANNOT_RETRIEVE_RTP_STAT 9028
#define VE_GQOS_ERROR 9029
#define VE_BINDING_SOCKET_TO_LOCAL_ADDRESS_FAILED 9030
#define VE_TOS_INVALID 9031
#define VE_TOS_ERROR 9032
#define VE_CANNOT_RETRIEVE_VALUE 9033
// Critical errors that stops voice functionality
#define VE_PLAY_UNDEFINED_SC_ERR 10001
#define VE_REC_CANNOT_OPEN_SC 10002
#define VE_SOCKET_ERROR 10003
#define VE_MMSYSERR_INVALHANDLE 10004
#define VE_MMSYSERR_NODRIVER 10005
#define VE_MMSYSERR_NOMEM 10006
#define VE_WAVERR_UNPREPARED 10007
#define VE_WAVERR_STILLPLAYING 10008
#define VE_UNDEFINED_SC_ERR 10009
#define VE_UNDEFINED_SC_REC_ERR 10010
#define VE_THREAD_ERROR 10011
#define VE_CANNOT_START_RECORDING 10012
#define VE_PLAY_CANNOT_OPEN_SC 10013
#define VE_NO_WINSOCK_2 10014
#define VE_SEND_SOCKET_ERROR 10015
#define VE_BAD_FILE 10016
#define VE_EXPIRED_COPY 10017
#define VE_NOT_AUTHORISED 10018
#define VE_RUNTIME_PLAY_ERROR 10019
#define VE_RUNTIME_REC_ERROR 10020
#define VE_BAD_ARGUMENT 10021
#define VE_LINUX_API_ONLY 10022
#define VE_REC_DEVICE_REMOVED 10023
#define VE_NO_MEMORY 10024
#define VE_BAD_HANDLE 10025
#define VE_RTP_RTCP_MODULE_ERROR 10026
#define VE_AUDIO_CODING_MODULE_ERROR 10027
#define VE_AUDIO_DEVICE_MODULE_ERROR 10028
#define VE_CANNOT_START_PLAYOUT 10029
#define VE_CANNOT_STOP_RECORDING 10030
#define VE_CANNOT_STOP_PLAYOUT 10031
#define VE_CANNOT_INIT_CHANNEL 10032
#define VE_RECV_SOCKET_ERROR 10033
#define VE_SOCKET_TRANSPORT_MODULE_ERROR 10034
#define VE_AUDIO_CONF_MIX_MODULE_ERROR 10035
// Warnings for other platforms (reserved range 8061-8080)
#define VE_IGNORED_FUNCTION 8061
#endif // VOICE_ENGINE_VOE_ERRORS_H_

View File

@ -1,29 +0,0 @@
/*
* 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 "voice_engine/voe_base_impl.h"
#include "voice_engine/voice_engine_impl.h"
namespace webrtc {
VoEBase* VoEBase::GetInterface(VoiceEngine* voiceEngine) {
if (nullptr == voiceEngine) {
return nullptr;
}
VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine);
s->AddRef();
return s;
}
VoEBaseImpl::VoEBaseImpl() {}
VoEBaseImpl::~VoEBaseImpl() {}
} // namespace webrtc

View File

@ -1,38 +0,0 @@
/*
* 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.
*/
#ifndef VOICE_ENGINE_VOE_BASE_IMPL_H_
#define VOICE_ENGINE_VOE_BASE_IMPL_H_
#include "voice_engine/include/voe_base.h"
namespace webrtc {
class VoEBaseImpl : public VoEBase {
public:
int Init(
AudioDeviceModule* audio_device,
AudioProcessing* audio_processing,
const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) override {
return 0;
}
void Terminate() override {}
int CreateChannel(const ChannelConfig& config) override { return 1; }
int DeleteChannel(int channel) override { return 0; }
protected:
VoEBaseImpl();
~VoEBaseImpl() override;
};
} // namespace webrtc
#endif // VOICE_ENGINE_VOE_BASE_IMPL_H_

View File

@ -1,63 +0,0 @@
/*
* 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 "voice_engine/voice_engine_impl.h"
namespace webrtc {
// Counter to be ensure that we can add a correct ID in all static trace
// methods. It is not the nicest solution, especially not since we already
// have a counter in VoEBaseImpl. In other words, there is room for
// improvement here.
static int32_t gVoiceEngineInstanceCounter = 0;
VoiceEngine* GetVoiceEngine() {
VoiceEngineImpl* self = new VoiceEngineImpl();
if (self != NULL) {
self->AddRef(); // First reference. Released in VoiceEngine::Delete.
gVoiceEngineInstanceCounter++;
}
return self;
}
int VoiceEngineImpl::AddRef() {
return ++_ref_count;
}
// This implements the Release() method for all the inherited interfaces.
int VoiceEngineImpl::Release() {
int new_ref = --_ref_count;
assert(new_ref >= 0);
if (new_ref == 0) {
// Clear any pointers before starting destruction. Otherwise worker-
// threads will still have pointers to a partially destructed object.
// Example: AudioDeviceBuffer::RequestPlayoutData() can access a
// partially deconstructed |_ptrCbAudioTransport| during destruction
// if we don't call Terminate here.
Terminate();
delete this;
}
return new_ref;
}
VoiceEngine* VoiceEngine::Create() {
return GetVoiceEngine();
}
bool VoiceEngine::Delete(VoiceEngine*& voiceEngine) {
if (voiceEngine == NULL)
return false;
VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine);
s->Release();
voiceEngine = NULL;
return true;
}
} // namespace webrtc

View File

@ -1,43 +0,0 @@
/*
* 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.
*/
#ifndef VOICE_ENGINE_VOICE_ENGINE_IMPL_H_
#define VOICE_ENGINE_VOICE_ENGINE_IMPL_H_
#include <memory>
#include "system_wrappers/include/atomic32.h"
#include "typedefs.h" // NOLINT(build/include)
#include "voice_engine/voe_base_impl.h"
namespace webrtc {
class VoiceEngineImpl : public VoiceEngine,
public VoEBaseImpl {
public:
VoiceEngineImpl()
: VoEBaseImpl(),
_ref_count(0) {}
~VoiceEngineImpl() override { assert(_ref_count.Value() == 0); }
int AddRef();
// This implements the Release() method for all the inherited interfaces.
int Release() override;
// This is *protected* so that FakeVoiceEngine can inherit from the class and
// manipulate the reference count. See: fake_voice_engine.h.
protected:
Atomic32 _ref_count;
};
} // namespace webrtc
#endif // VOICE_ENGINE_VOICE_ENGINE_IMPL_H_