summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-08-07 17:57:36 +0000
committerpbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-08-07 17:57:36 +0000
commitb3ada1540827c60a63058570a94a57dfd260ad11 (patch)
tree4111b0516651b8faa696542ec02b30fad770c879
parentd7b06eca993d068de0d579a83511640d74ab9f77 (diff)
downloadwebrtc-b3ada1540827c60a63058570a94a57dfd260ad11.tar.gz
Ref-counted rewrite of ChannelManager.
The complexity of the last ChannelManager and potentially usage of it as well caused race conditions and deadlocks in loopback voe_auto_test. This ref-counted solution takes no long-term locks, uses less locks overall and is significantly easier to understand. ScopedChannel has been split up into a ChannelOwner with a reference to a channel and an Iterator over ChannelManager. Previous code was really used for both things. ChannelOwner is used as a shared pointer to a channel object, while an Iterator should work as expected. BUG=2081 R=tommi@webrtc.org, xians@webrtc.org Review URL: https://webrtc-codereview.appspot.com/1802004 git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@4502 4adac7df-926f-26a2-2b94-8c16560cd09d
-rw-r--r--voice_engine/Android.mk1
-rw-r--r--voice_engine/channel_manager.cc191
-rw-r--r--voice_engine/channel_manager.h133
-rw-r--r--voice_engine/channel_manager_base.cc228
-rw-r--r--voice_engine/channel_manager_base.h87
-rw-r--r--voice_engine/include/voe_base.h3
-rw-r--r--voice_engine/shared_data.cc33
-rw-r--r--voice_engine/test/auto_test/standard/rtp_rtcp_test.cc83
-rw-r--r--voice_engine/test/auto_test/standard/voe_base_misc_test.cc4
-rw-r--r--voice_engine/test/auto_test/voe_extended_test.cc47
-rw-r--r--voice_engine/test/auto_test/voe_stress_test.cc2
-rw-r--r--voice_engine/transmit_mixer.cc33
-rw-r--r--voice_engine/voe_audio_processing_impl.cc36
-rw-r--r--voice_engine/voe_base_impl.cc232
-rw-r--r--voice_engine/voe_base_impl.h2
-rw-r--r--voice_engine/voe_call_report_impl.cc98
-rw-r--r--voice_engine/voe_codec_impl.cc72
-rw-r--r--voice_engine/voe_dtmf_impl.cc20
-rw-r--r--voice_engine/voe_encryption_impl.cc8
-rw-r--r--voice_engine/voe_external_media_impl.cc18
-rw-r--r--voice_engine/voe_file_impl.cc56
-rw-r--r--voice_engine/voe_neteq_stats_impl.cc4
-rw-r--r--voice_engine/voe_network_impl.cc40
-rw-r--r--voice_engine/voe_rtp_rtcp_impl.cc119
-rw-r--r--voice_engine/voe_video_sync_impl.cc40
-rw-r--r--voice_engine/voe_volume_control_impl.cc32
-rw-r--r--voice_engine/voice_engine.gyp2
-rw-r--r--voice_engine/voice_engine_defines.h3
28 files changed, 568 insertions, 1059 deletions
diff --git a/voice_engine/Android.mk b/voice_engine/Android.mk
index 5040f17a..4c5fa592 100644
--- a/voice_engine/Android.mk
+++ b/voice_engine/Android.mk
@@ -20,7 +20,6 @@ LOCAL_SRC_FILES := \
audio_frame_operations.cc \
channel.cc \
channel_manager.cc \
- channel_manager_base.cc \
dtmf_inband.cc \
dtmf_inband_queue.cc \
level_indicator.cc \
diff --git a/voice_engine/channel_manager.cc b/voice_engine/channel_manager.cc
index 4b203176..6cf935d1 100644
--- a/voice_engine/channel_manager.cc
+++ b/voice_engine/channel_manager.cc
@@ -8,154 +8,117 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "webrtc/voice_engine/channel.h"
#include "webrtc/voice_engine/channel_manager.h"
-namespace webrtc
-{
+#include "webrtc/voice_engine/channel.h"
-namespace voe
-{
+namespace webrtc {
+namespace voe {
-ChannelManager::ChannelManager(uint32_t instanceId) :
- ChannelManagerBase(),
- _instanceId(instanceId)
-{
-}
+ChannelOwner::ChannelOwner(class Channel* channel)
+ : channel_ref_(new ChannelRef(channel)) {}
-ChannelManager::~ChannelManager()
-{
- ChannelManagerBase::DestroyAllItems();
+ChannelOwner::ChannelOwner(const ChannelOwner& channel_owner)
+ : channel_ref_(channel_owner.channel_ref_) {
+ ++channel_ref_->ref_count;
}
-bool ChannelManager::CreateChannel(int32_t& channelId)
-{
- return ChannelManagerBase::CreateItem(channelId);
+ChannelOwner::~ChannelOwner() {
+ if (--channel_ref_->ref_count == 0)
+ delete channel_ref_;
}
-int32_t ChannelManager::DestroyChannel(int32_t channelId)
-{
- Channel* deleteChannel =
- static_cast<Channel*> (ChannelManagerBase::RemoveItem(channelId));
- if (!deleteChannel)
- {
- return -1;
- }
- delete deleteChannel;
- return 0;
-}
+ChannelOwner& ChannelOwner::operator=(const ChannelOwner& other) {
+ if (other.channel_ref_ == channel_ref_)
+ return *this;
-int32_t ChannelManager::NumOfChannels() const
-{
- return ChannelManagerBase::NumOfItems();
-}
+ if (--channel_ref_->ref_count == 0)
+ delete channel_ref_;
-int32_t ChannelManager::MaxNumOfChannels() const
-{
- return ChannelManagerBase::MaxNumOfItems();
-}
+ channel_ref_ = other.channel_ref_;
+ ++channel_ref_->ref_count;
-void* ChannelManager::NewItem(int32_t itemID)
-{
- Channel* channel;
- if (Channel::CreateChannel(channel, itemID, _instanceId) == -1)
- {
- return NULL;
- }
- return static_cast<void*> (channel);
+ return *this;
}
-void ChannelManager::DeleteItem(void* item)
-{
- Channel* deleteItem = static_cast<Channel*> (item);
- delete deleteItem;
-}
+ChannelOwner::ChannelRef::ChannelRef(class Channel* channel)
+ : channel(channel), ref_count(1) {}
-Channel* ChannelManager::GetChannel(int32_t channelId) const
-{
- return static_cast<Channel*> (ChannelManagerBase::GetItem(channelId));
-}
+ChannelManager::ChannelManager(uint32_t instance_id)
+ : instance_id_(instance_id),
+ last_channel_id_(-1),
+ lock_(CriticalSectionWrapper::CreateCriticalSection()) {}
+
+ChannelOwner ChannelManager::CreateChannel() {
+ Channel* channel;
+ Channel::CreateChannel(channel, ++last_channel_id_, instance_id_);
+ ChannelOwner channel_owner(channel);
+
+ CriticalSectionScoped crit(lock_.get());
-void ChannelManager::ReleaseChannel()
-{
- ChannelManagerBase::ReleaseItem();
+ channels_.push_back(channel_owner);
+
+ return channel_owner;
}
-void ChannelManager::GetChannelIds(int32_t* channelsArray,
- int32_t& numOfChannels) const
-{
- ChannelManagerBase::GetItemIds(channelsArray, numOfChannels);
+ChannelOwner ChannelManager::GetChannel(int32_t channel_id) {
+ CriticalSectionScoped crit(lock_.get());
+
+ for (size_t i = 0; i < channels_.size(); ++i) {
+ if (channels_[i].channel()->ChannelId() == channel_id)
+ return channels_[i];
+ }
+ return ChannelOwner(NULL);
}
-void ChannelManager::GetChannels(MapWrapper& channels) const
-{
- ChannelManagerBase::GetChannels(channels);
+void ChannelManager::GetAllChannels(std::vector<ChannelOwner>* channels) {
+ CriticalSectionScoped crit(lock_.get());
+
+ *channels = channels_;
}
-ScopedChannel::ScopedChannel(ChannelManager& chManager) :
- _chManager(chManager),
- _channelPtr(NULL)
-{
- // Copy all existing channels to the local map.
- // It is not possible to utilize the ChannelPtr() API after
- // this constructor. The intention is that this constructor
- // is used in combination with the scoped iterator.
- _chManager.GetChannels(_channels);
+void ChannelManager::DestroyChannel(int32_t channel_id) {
+ CriticalSectionScoped crit(lock_.get());
+ assert(channel_id >= 0);
+
+ for (std::vector<ChannelOwner>::iterator it = channels_.begin();
+ it != channels_.end();
+ ++it) {
+ if (it->channel()->ChannelId() == channel_id) {
+ channels_.erase(it);
+ break;
+ }
+ }
}
-ScopedChannel::ScopedChannel(ChannelManager& chManager,
- int32_t channelId) :
- _chManager(chManager),
- _channelPtr(NULL)
-{
- _channelPtr = _chManager.GetChannel(channelId);
+void ChannelManager::DestroyAllChannels() {
+ CriticalSectionScoped crit(lock_.get());
+ channels_.clear();
}
-ScopedChannel::~ScopedChannel()
-{
- if (_channelPtr != NULL || _channels.Size() != 0)
- {
- _chManager.ReleaseChannel();
- }
+size_t ChannelManager::NumOfChannels() const {
+ CriticalSectionScoped crit(lock_.get());
+ return channels_.size();
+}
- // Delete the map
- while (_channels.Erase(_channels.First()) == 0)
- ;
+ChannelManager::Iterator::Iterator(ChannelManager* channel_manager)
+ : iterator_pos_(0) {
+ channel_manager->GetAllChannels(&channels_);
}
-Channel* ScopedChannel::ChannelPtr()
-{
- return _channelPtr;
+Channel* ChannelManager::Iterator::GetChannel() {
+ if (iterator_pos_ < channels_.size())
+ return channels_[iterator_pos_].channel();
+ return NULL;
}
-Channel* ScopedChannel::GetFirstChannel(void*& iterator) const
-{
- MapItem* it = _channels.First();
- iterator = (void*) it;
- if (!it)
- {
- return NULL;
- }
- return static_cast<Channel*> (it->GetItem());
+bool ChannelManager::Iterator::IsValid() {
+ return iterator_pos_ < channels_.size();
}
-Channel* ScopedChannel::GetNextChannel(void*& iterator) const
-{
- MapItem* it = (MapItem*) iterator;
- if (!it)
- {
- iterator = NULL;
- return NULL;
- }
- it = _channels.Next(it);
- iterator = (void*) it;
- if (!it)
- {
- return NULL;
- }
- return static_cast<Channel*> (it->GetItem());
+void ChannelManager::Iterator::Increment() {
+ ++iterator_pos_;
}
} // namespace voe
-
} // namespace webrtc
diff --git a/voice_engine/channel_manager.h b/voice_engine/channel_manager.h
index 723ff043..4efeb15f 100644
--- a/voice_engine/channel_manager.h
+++ b/voice_engine/channel_manager.h
@@ -11,79 +11,108 @@
#ifndef WEBRTC_VOICE_ENGINE_CHANNEL_MANAGER_H
#define WEBRTC_VOICE_ENGINE_CHANNEL_MANAGER_H
-#include "webrtc/typedefs.h"
-#include "webrtc/voice_engine/channel_manager_base.h"
+#include <vector>
-namespace webrtc
-{
+#include "webrtc/system_wrappers/interface/atomic32.h"
+#include "webrtc/system_wrappers/interface/constructor_magic.h"
+#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
+#include "webrtc/typedefs.h"
-namespace voe
-{
+namespace webrtc {
+namespace voe {
-class ScopedChannel;
class Channel;
-class ChannelManager: private ChannelManagerBase
-{
- friend class ScopedChannel;
-
-public:
- bool CreateChannel(int32_t& channelId);
-
- int32_t DestroyChannel(int32_t channelId);
-
- int32_t MaxNumOfChannels() const;
-
- int32_t NumOfChannels() const;
-
- void GetChannelIds(int32_t* channelsArray,
- int32_t& numOfChannels) const;
-
- ChannelManager(uint32_t instanceId);
-
- ~ChannelManager();
+// Shared-pointer implementation for keeping track of Channels. The underlying
+// shared instance will be dropped when no more ChannelOwners point to it.
+//
+// One common source of ChannelOwner instances are
+// ChannelManager::CreateChannel() and ChannelManager::GetChannel(...).
+// It has a similar use case to shared_ptr in C++11. Should this move to C++11
+// in the future, this class should be replaced by exactly that.
+//
+// To access the underlying Channel, use .channel().
+// IsValid() implements a convenience method as an alternative for checking
+// whether the underlying pointer is NULL or not.
+//
+// Channel channel_owner = channel_manager.GetChannel(channel_id);
+// if (channel_owner.IsValid())
+// channel_owner.channel()->...;
+//
+class ChannelOwner {
+ public:
+ explicit ChannelOwner(Channel* channel);
+ ChannelOwner(const ChannelOwner& channel_owner);
+
+ ~ChannelOwner();
+
+ ChannelOwner& operator=(const ChannelOwner& other);
+
+ Channel* channel() { return channel_ref_->channel.get(); }
+ bool IsValid() { return channel_ref_->channel.get() != NULL; }
+ private:
+ // Shared instance of a Channel. Copying ChannelOwners increase the reference
+ // count and destroying ChannelOwners decrease references. Channels are
+ // deleted when no references to them are held.
+ struct ChannelRef {
+ ChannelRef(Channel* channel);
+ const scoped_ptr<Channel> channel;
+ Atomic32 ref_count;
+ };
+
+ ChannelRef* channel_ref_;
+};
-private:
- ChannelManager(const ChannelManager&);
+class ChannelManager {
+ public:
+ ChannelManager(uint32_t instance_id);
- ChannelManager& operator=(const ChannelManager&);
+ // Upon construction of an Iterator it will grab a copy of the channel list of
+ // the ChannelManager. The iteration will then occur over this state, not the
+ // current one of the ChannelManager. As the Iterator holds its own references
+ // to the Channels, they will remain valid even if they are removed from the
+ // ChannelManager.
+ class Iterator {
+ public:
+ explicit Iterator(ChannelManager* channel_manager);
- Channel* GetChannel(int32_t channelId) const;
+ Channel* GetChannel();
+ bool IsValid();
- void GetChannels(MapWrapper& channels) const;
+ void Increment();
- void ReleaseChannel();
+ private:
+ size_t iterator_pos_;
+ std::vector<ChannelOwner> channels_;
- virtual void* NewItem(int32_t itemID);
+ DISALLOW_COPY_AND_ASSIGN(Iterator);
+ };
- virtual void DeleteItem(void* item);
+ // CreateChannel will always return a valid ChannelOwner instance.
+ ChannelOwner CreateChannel();
- uint32_t _instanceId;
-};
+ // ChannelOwner.channel() will be NULL if channel_id is invalid or no longer
+ // exists. This should be checked with ChannelOwner::IsValid().
+ ChannelOwner GetChannel(int32_t channel_id);
+ void GetAllChannels(std::vector<ChannelOwner>* channels);
-class ScopedChannel
-{
-public:
- // Can only be created by the channel manager
- ScopedChannel(ChannelManager& chManager);
+ void DestroyChannel(int32_t channel_id);
+ void DestroyAllChannels();
- ScopedChannel(ChannelManager& chManager, int32_t channelId);
+ size_t NumOfChannels() const;
- Channel* ChannelPtr();
+ private:
+ uint32_t instance_id_;
- Channel* GetFirstChannel(void*& iterator) const;
+ Atomic32 last_channel_id_;
- Channel* GetNextChannel(void*& iterator) const;
+ scoped_ptr<CriticalSectionWrapper> lock_;
+ std::vector<ChannelOwner> channels_;
- ~ScopedChannel();
-private:
- ChannelManager& _chManager;
- Channel* _channelPtr;
- MapWrapper _channels;
+ DISALLOW_COPY_AND_ASSIGN(ChannelManager);
};
-
} // namespace voe
-
} // namespace webrtc
#endif // WEBRTC_VOICE_ENGINE_CHANNEL_MANAGER_H
diff --git a/voice_engine/channel_manager_base.cc b/voice_engine/channel_manager_base.cc
deleted file mode 100644
index 10cb11f7..00000000
--- a/voice_engine/channel_manager_base.cc
+++ /dev/null
@@ -1,228 +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 "webrtc/voice_engine/channel_manager_base.h"
-
-#include <assert.h>
-
-#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
-#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
-
-namespace webrtc
-{
-
-namespace voe
-{
-
-ChannelManagerBase::ChannelManagerBase() :
- _itemsCritSectPtr(CriticalSectionWrapper::CreateCriticalSection()),
- _itemsRWLockPtr(RWLockWrapper::CreateRWLock())
-{
- for (int i = 0; i < kVoiceEngineMaxNumChannels; i++)
- {
- _freeItemIds[i] = true;
- }
-}
-
-ChannelManagerBase::~ChannelManagerBase()
-{
- if (_itemsRWLockPtr)
- {
- delete _itemsRWLockPtr;
- _itemsRWLockPtr = NULL;
- }
- if (_itemsCritSectPtr)
- {
- delete _itemsCritSectPtr;
- _itemsCritSectPtr = NULL;
- }
-}
-
-bool ChannelManagerBase::GetFreeItemId(int32_t& itemId)
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- int32_t i(0);
- while (i < kVoiceEngineMaxNumChannels)
- {
- if (_freeItemIds[i])
- {
- itemId = i;
- _freeItemIds[i] = false;
- return true;
- }
- i++;
- }
- return false;
-}
-
-void ChannelManagerBase::AddFreeItemId(int32_t itemId)
-{
- assert(itemId < kVoiceEngineMaxNumChannels);
- _freeItemIds[itemId] = true;
-}
-
-void ChannelManagerBase::RemoveFreeItemIds()
-{
- for (int i = 0; i < kVoiceEngineMaxNumChannels; i++)
- {
- _freeItemIds[i] = false;
- }
-}
-
-bool ChannelManagerBase::CreateItem(int32_t& itemId)
-{
- _itemsCritSectPtr->Enter();
- void* itemPtr;
- itemId = -1;
- const bool success = GetFreeItemId(itemId);
- if (!success)
- {
- _itemsCritSectPtr->Leave();
- return false;
- }
- itemPtr = NewItem(itemId);
- if (!itemPtr)
- {
- _itemsCritSectPtr->Leave();
- return false;
- }
- _itemsCritSectPtr->Leave();
- InsertItem(itemId, itemPtr);
-
- return true;
-}
-
-void ChannelManagerBase::InsertItem(int32_t itemId, void* item)
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- assert(!_items.Find(itemId));
- _items.Insert(itemId, item);
-}
-
-void*
-ChannelManagerBase::RemoveItem(int32_t itemId)
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- WriteLockScoped wlock(*_itemsRWLockPtr);
- MapItem* it = _items.Find(itemId);
- if (!it)
- {
- return 0;
- }
- void* returnItem = it->GetItem();
- _items.Erase(it);
- AddFreeItemId(itemId);
-
- return returnItem;
-}
-
-void ChannelManagerBase::DestroyAllItems()
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- MapItem* it = _items.First();
- while (it)
- {
- DeleteItem(it->GetItem());
- _items.Erase(it);
- it = _items.First();
- }
- RemoveFreeItemIds();
-}
-
-int32_t ChannelManagerBase::NumOfItems() const
-{
- return _items.Size();
-}
-
-int32_t ChannelManagerBase::MaxNumOfItems() const
-{
- return static_cast<int32_t> (kVoiceEngineMaxNumChannels);
-}
-
-void*
-ChannelManagerBase::GetItem(int32_t itemId) const
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- MapItem* it = _items.Find(itemId);
- if (!it)
- {
- return 0;
- }
- _itemsRWLockPtr->AcquireLockShared();
- return it->GetItem();
-}
-
-void*
-ChannelManagerBase::GetFirstItem(void*& iterator) const
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- MapItem* it = _items.First();
- iterator = (void*) it;
- if (!it)
- {
- return 0;
- }
- return it->GetItem();
-}
-
-void*
-ChannelManagerBase::GetNextItem(void*& iterator) const
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- MapItem* it = (MapItem*) iterator;
- if (!it)
- {
- iterator = 0;
- return 0;
- }
- it = _items.Next(it);
- iterator = (void*) it;
- if (!it)
- {
- return 0;
- }
- return it->GetItem();
-}
-
-void ChannelManagerBase::ReleaseItem()
-{
- _itemsRWLockPtr->ReleaseLockShared();
-}
-
-void ChannelManagerBase::GetItemIds(int32_t* channelsArray,
- int32_t& numOfChannels) const
-{
- MapItem* it = _items.First();
- numOfChannels = (numOfChannels <= _items.Size()) ?
- numOfChannels : _items.Size();
- for (int i = 0; i < numOfChannels && it != NULL; i++)
- {
- channelsArray[i] = it->GetId();
- it = _items.Next(it);
- }
-}
-
-void ChannelManagerBase::GetChannels(MapWrapper& channels) const
-{
- CriticalSectionScoped cs(_itemsCritSectPtr);
- if (_items.Size() == 0)
- {
- return;
- }
- _itemsRWLockPtr->AcquireLockShared();
- for (MapItem* it = _items.First(); it != NULL; it = _items.Next(it))
- {
- channels.Insert(it->GetId(), it->GetItem());
- }
-}
-
-} // namespace voe
-
-} // namespace webrtc
diff --git a/voice_engine/channel_manager_base.h b/voice_engine/channel_manager_base.h
deleted file mode 100644
index 1db19033..00000000
--- a/voice_engine/channel_manager_base.h
+++ /dev/null
@@ -1,87 +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 WEBRTC_VOICE_ENGINE_CHANNEL_MANAGER_BASE_H
-#define WEBRTC_VOICE_ENGINE_CHANNEL_MANAGER_BASE_H
-
-#include "webrtc/system_wrappers/interface/map_wrapper.h"
-#include "webrtc/typedefs.h"
-#include "webrtc/voice_engine/voice_engine_defines.h"
-
-namespace webrtc
-{
-class CriticalSectionWrapper;
-class RWLockWrapper;
-
-namespace voe
-{
-
-class ScopedChannel;
-class Channel;
-
-class ChannelManagerBase
-{
-protected:
- bool CreateItem(int32_t& itemId);
-
- void InsertItem(int32_t itemId, void* item);
-
- void* RemoveItem(int32_t itemId);
-
- void* GetItem(int32_t itemId) const;
-
- void* GetFirstItem(void*& iterator) const ;
-
- void* GetNextItem(void*& iterator) const;
-
- void ReleaseItem();
-
- void AddFreeItemId(int32_t itemId);
-
- bool GetFreeItemId(int32_t& itemId);
-
- void RemoveFreeItemIds();
-
- void DestroyAllItems();
-
- int32_t NumOfItems() const;
-
- int32_t MaxNumOfItems() const;
-
- void GetItemIds(int32_t* channelsArray,
- int32_t& numOfChannels) const;
-
- void GetChannels(MapWrapper& channels) const;
-
- virtual void* NewItem(int32_t itemId) = 0;
-
- virtual void DeleteItem(void* item) = 0;
-
- ChannelManagerBase();
-
- virtual ~ChannelManagerBase();
-
-private:
- // Protects _items and _freeItemIds
- CriticalSectionWrapper* _itemsCritSectPtr;
-
- MapWrapper _items;
-
- bool _freeItemIds[kVoiceEngineMaxNumChannels];
-
- // Protects channels from being destroyed while being used
- RWLockWrapper* _itemsRWLockPtr;
-};
-
-} // namespace voe
-
-} // namespace webrtc
-
-#endif // WEBRTC_VOICE_ENGINE_CHANNEL_MANAGER_BASE_H
diff --git a/voice_engine/include/voe_base.h b/voice_engine/include/voe_base.h
index 1a06c2ee..de483b43 100644
--- a/voice_engine/include/voe_base.h
+++ b/voice_engine/include/voe_base.h
@@ -130,9 +130,6 @@ public:
// Terminates all VoiceEngine functions and releses allocated resources.
virtual int Terminate() = 0;
- // Retrieves the maximum number of channels that can be created.
- virtual int MaxNumOfChannels() = 0;
-
// Creates a new channel and allocates the required resources for it.
virtual int CreateChannel() = 0;
diff --git a/voice_engine/shared_data.cc b/voice_engine/shared_data.cc
index e993778b..843d5db6 100644
--- a/voice_engine/shared_data.cc
+++ b/voice_engine/shared_data.cc
@@ -76,32 +76,17 @@ void SharedData::set_audio_processing(AudioProcessing* audioproc) {
_outputMixerPtr->SetAudioProcessingModule(audioproc);
}
-uint16_t SharedData::NumOfSendingChannels()
-{
- int32_t numOfChannels = _channelManager.NumOfChannels();
- if (numOfChannels <= 0)
- {
- return 0;
- }
+uint16_t SharedData::NumOfSendingChannels() {
+ ChannelManager::Iterator it(&_channelManager);
+ uint16_t sending_channels = 0;
- uint16_t nChannelsSending(0);
- int32_t* channelsArray = new int32_t[numOfChannels];
+ for (ChannelManager::Iterator it(&_channelManager); it.IsValid();
+ it.Increment()) {
+ if (it.GetChannel()->Sending())
+ ++sending_channels;
+ }
- _channelManager.GetChannelIds(channelsArray, numOfChannels);
- for (int i = 0; i < numOfChannels; i++)
- {
- voe::ScopedChannel sc(_channelManager, channelsArray[i]);
- Channel* chPtr = sc.ChannelPtr();
- if (chPtr)
- {
- if (chPtr->Sending())
- {
- nChannelsSending++;
- }
- }
- }
- delete [] channelsArray;
- return nChannelsSending;
+ return sending_channels;
}
void SharedData::SetLastError(int32_t error) const {
diff --git a/voice_engine/test/auto_test/standard/rtp_rtcp_test.cc b/voice_engine/test/auto_test/standard/rtp_rtcp_test.cc
index 6fef51cc..1cf64a01 100644
--- a/voice_engine/test/auto_test/standard/rtp_rtcp_test.cc
+++ b/voice_engine/test/auto_test/standard/rtp_rtcp_test.cc
@@ -8,64 +8,39 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include "webrtc/system_wrappers/interface/atomic32.h"
+#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
+#include "webrtc/system_wrappers/interface/event_wrapper.h"
#include "webrtc/test/testsupport/fileutils.h"
#include "webrtc/voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
#include "webrtc/voice_engine/test/auto_test/voe_standard_test.h"
class TestRtpObserver : public webrtc::VoERTPObserver {
public:
- TestRtpObserver();
- virtual ~TestRtpObserver();
+ TestRtpObserver()
+ : crit_(voetest::CriticalSectionWrapper::CreateCriticalSection()),
+ changed_ssrc_event_(voetest::EventWrapper::Create()) {}
+ virtual ~TestRtpObserver() {}
virtual void OnIncomingCSRCChanged(int channel,
unsigned int CSRC,
- bool added);
+ bool added) {}
virtual void OnIncomingSSRCChanged(int channel,
unsigned int SSRC);
- void Reset();
+ void WaitForChangedSsrc() {
+ // 10 seconds should be enough.
+ EXPECT_EQ(voetest::kEventSignaled, changed_ssrc_event_->Wait(10*1000));
+ changed_ssrc_event_->Reset();
+ }
+ void SetIncomingSsrc(unsigned int ssrc) {
+ voetest::CriticalSectionScoped lock(crit_.get());
+ incoming_ssrc_ = ssrc;
+ }
public:
- unsigned int ssrc_[2];
- unsigned int csrc_[2][2]; // Stores 2 CSRCs for each channel.
- bool added_[2][2];
- int size_[2];
+ voetest::scoped_ptr<voetest::CriticalSectionWrapper> crit_;
+ unsigned int incoming_ssrc_;
+ voetest::scoped_ptr<voetest::EventWrapper> changed_ssrc_event_;
};
-TestRtpObserver::TestRtpObserver() {
- Reset();
-}
-
-TestRtpObserver::~TestRtpObserver() {
-}
-
-void TestRtpObserver::Reset() {
- for (int i = 0; i < 2; i++) {
- ssrc_[i] = 0;
- csrc_[i][0] = 0;
- csrc_[i][1] = 0;
- added_[i][0] = false;
- added_[i][1] = false;
- size_[i] = 0;
- }
-}
-
-void TestRtpObserver::OnIncomingCSRCChanged(int channel,
- unsigned int CSRC,
- bool added) {
- char msg[128];
- sprintf(msg, "=> OnIncomingCSRCChanged(channel=%d, CSRC=%u, added=%d)\n",
- channel, CSRC, added);
- TEST_LOG("%s", msg);
-
- if (channel > 1)
- return; // Not enough memory.
-
- csrc_[channel][size_[channel]] = CSRC;
- added_[channel][size_[channel]] = added;
-
- size_[channel]++;
- if (size_[channel] == 2)
- size_[channel] = 0;
-}
-
void TestRtpObserver::OnIncomingSSRCChanged(int channel,
unsigned int SSRC) {
char msg[128];
@@ -73,7 +48,11 @@ void TestRtpObserver::OnIncomingSSRCChanged(int channel,
SSRC);
TEST_LOG("%s", msg);
- ssrc_[channel] = SSRC;
+ {
+ voetest::CriticalSectionScoped lock(crit_.get());
+ if (incoming_ssrc_ == SSRC)
+ changed_ssrc_event_->Set();
+ }
}
class RtcpAppHandler : public webrtc::VoERTCPObserver {
@@ -277,27 +256,23 @@ TEST_F(RtpRtcpTest, ObserverGetsNotifiedOnSsrcChange) {
TestRtpObserver rtcp_observer;
EXPECT_EQ(0, voe_rtp_rtcp_->RegisterRTPObserver(
channel_, rtcp_observer));
- rtcp_observer.Reset();
unsigned int new_ssrc = 7777;
EXPECT_EQ(0, voe_base_->StopSend(channel_));
+ rtcp_observer.SetIncomingSsrc(new_ssrc);
EXPECT_EQ(0, voe_rtp_rtcp_->SetLocalSSRC(channel_, new_ssrc));
EXPECT_EQ(0, voe_base_->StartSend(channel_));
- Sleep(500);
-
- // Verify we got the new SSRC.
- EXPECT_EQ(new_ssrc, rtcp_observer.ssrc_[0]);
+ rtcp_observer.WaitForChangedSsrc();
// Now try another SSRC.
unsigned int newer_ssrc = 1717;
EXPECT_EQ(0, voe_base_->StopSend(channel_));
+ rtcp_observer.SetIncomingSsrc(newer_ssrc);
EXPECT_EQ(0, voe_rtp_rtcp_->SetLocalSSRC(channel_, newer_ssrc));
EXPECT_EQ(0, voe_base_->StartSend(channel_));
- Sleep(500);
-
- EXPECT_EQ(newer_ssrc, rtcp_observer.ssrc_[0]);
+ rtcp_observer.WaitForChangedSsrc();
EXPECT_EQ(0, voe_rtp_rtcp_->DeRegisterRTPObserver(channel_));
}
diff --git a/voice_engine/test/auto_test/standard/voe_base_misc_test.cc b/voice_engine/test/auto_test/standard/voe_base_misc_test.cc
index 8d8713c8..736ff087 100644
--- a/voice_engine/test/auto_test/standard/voe_base_misc_test.cc
+++ b/voice_engine/test/auto_test/standard/voe_base_misc_test.cc
@@ -17,10 +17,6 @@ class VoeBaseMiscTest : public BeforeInitializationFixture {
using namespace testing;
-TEST_F(VoeBaseMiscTest, MaxNumChannelsIs100) {
- EXPECT_EQ(100, voe_base_->MaxNumOfChannels());
-}
-
TEST_F(VoeBaseMiscTest, GetVersionPrintsSomeUsefulInformation) {
char char_buffer[1024];
memset(char_buffer, 0, sizeof(char_buffer));
diff --git a/voice_engine/test/auto_test/voe_extended_test.cc b/voice_engine/test/auto_test/voe_extended_test.cc
index 9568e89c..c569aaab 100644
--- a/voice_engine/test/auto_test/voe_extended_test.cc
+++ b/voice_engine/test/auto_test/voe_extended_test.cc
@@ -45,6 +45,8 @@ extern void* globalJavaVM;
extern void* globalContext;
#endif
+static const int kTestMaxNumChannels = 100;
+
// ----------------------------------------------------------------------------
// External AudioDeviceModule implementation
// ----------------------------------------------------------------------------
@@ -464,24 +466,13 @@ int VoEExtendedTest::TestBase() {
// >> end of Init(AudioDeviceModule)
// ------------------------------------------------------------------------
- ///////////////////////////
- // MaxNumOfChannels
- TEST(MaxNumOfChannels);
- ANL();
- TEST_MUSTPASS(voe_base_->MaxNumOfChannels() < 0);
- MARK();
- ANL();
- AOK();
- ANL();
- ANL();
-
////////////////////////
// CreateChannel
// DeleteChannel
int i;
int channel;
- int nChannels(voe_base_->MaxNumOfChannels());
+ static const int kTestMaxNumChannels = 100;
TEST(CreateChannel);
ANL();
@@ -511,7 +502,7 @@ int VoEExtendedTest::TestBase() {
MARK();
}
// create max number of channels
- for (i = 0; i < nChannels; i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
channel = voe_base_->CreateChannel();
MARK();
TEST_MUSTPASS(channel != i);
@@ -520,7 +511,8 @@ int VoEExtendedTest::TestBase() {
MARK(); // should fail since no more channels can now be created
TEST_MUSTPASS(channel != -1);
- int aChannel = (((nChannels - 17) > 0) ? (nChannels - 17) : 0);
+ int aChannel =
+ (((kTestMaxNumChannels - 17) > 0) ? (kTestMaxNumChannels - 17) : 0);
TEST_MUSTPASS(voe_base_->DeleteChannel(aChannel));
MARK();
channel = voe_base_->CreateChannel();
@@ -528,7 +520,7 @@ int VoEExtendedTest::TestBase() {
TEST_MUSTPASS(channel != aChannel);
// delete all created channels
- for (i = 0; i < nChannels; i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
TEST_MUSTPASS(voe_base_->DeleteChannel(i));
MARK();
}
@@ -608,15 +600,15 @@ int VoEExtendedTest::TestBase() {
// Multi-channel tests
- for (i = 0; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
ch = voe_base_->CreateChannel();
MARK();
}
- for (i = 0; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
voe_base_->DeleteChannel(i);
MARK();
}
- for (i = 0; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
ch = voe_base_->CreateChannel();
ExtendedTestTransport* ptrTransport =
new ExtendedTestTransport(voe_network);
@@ -669,17 +661,17 @@ int VoEExtendedTest::TestBase() {
voe_base_->DeleteChannel(ch);
// Multi-channel tests
- for (i = 0; i < kVoiceEngineMaxNumChannels; i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
ch = voe_base_->CreateChannel();
TEST_MUSTPASS(voe_base_->StartPlayout(ch));
MARK();
}
- for (i = 0; i < kVoiceEngineMaxNumChannels; i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
TEST_MUSTPASS(voe_base_->StopPlayout(i));
MARK();
voe_base_->DeleteChannel(i);
}
- for (i = 0; i < kVoiceEngineMaxNumChannels; i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
ch = voe_base_->CreateChannel();
TEST_MUSTPASS(voe_base_->StartPlayout(ch));
MARK();
@@ -791,7 +783,7 @@ int VoEExtendedTest::TestBase() {
voe_base_->DeleteChannel(ch);
// verify Set/Get for all supported modes and max number of channels
- for (i = 0; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
ch = voe_base_->CreateChannel();
// verify Set/Get for all supported modes
@@ -813,7 +805,7 @@ int VoEExtendedTest::TestBase() {
SleepMs(50);
}
- for (i = 0; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (i = 0; i < kTestMaxNumChannels; i++) {
voe_base_->DeleteChannel(i);
}
@@ -1306,10 +1298,9 @@ int VoEExtendedTest::TestCodec() {
CodecInst defaultCodec;
// check the channel parameter
- int nMaxChannels(voe_base_->MaxNumOfChannels());
- TEST_MUSTPASS(-1 != codec->GetSendCodec(nMaxChannels-1, cinst));
+ TEST_MUSTPASS(-1 != codec->GetSendCodec(kTestMaxNumChannels-1, cinst));
MARK(); // not created
- TEST_MUSTPASS(-1 != codec->GetSendCodec(nMaxChannels, cinst));
+ TEST_MUSTPASS(-1 != codec->GetSendCodec(kTestMaxNumChannels, cinst));
MARK(); // out of range
TEST_MUSTPASS(-1 != codec->GetSendCodec(-1, cinst));
MARK(); // out of range
@@ -3500,7 +3491,7 @@ int VoEExtendedTest::TestFile() {
TEST_LOG("StartRecordingCall, record both mic and file in specific"
" channels \n");
TEST_LOG("Create maxnumofchannels \n");
- for (int i = 1; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (int i = 1; i < kTestMaxNumChannels; i++) {
int ch = voe_base_->CreateChannel();
TEST_MUSTPASS(ch == -1);
TEST_MUSTPASS(voe_base_->StopPlayout(ch));
@@ -3573,7 +3564,7 @@ int VoEExtendedTest::TestFile() {
kFileFormatCompressedFile));
SleepMs(2500);
TEST_MUSTPASS(file->StopPlayingFileLocally(0));
- for (int i = 1; i < voe_base_->MaxNumOfChannels(); i++) {
+ for (int i = 1; i < kTestMaxNumChannels; i++) {
TEST_MUSTPASS(voe_base_->DeleteChannel(i));
}
diff --git a/voice_engine/test/auto_test/voe_stress_test.cc b/voice_engine/test/auto_test/voe_stress_test.cc
index bd154043..d2c19175 100644
--- a/voice_engine/test/auto_test/voe_stress_test.cc
+++ b/voice_engine/test/auto_test/voe_stress_test.cc
@@ -226,7 +226,7 @@ int VoEStressTest::CreateDeleteChannelsTest() {
// Make sure audio is OK after test has finished.
// Set up, start with maxChannels/2 channels
- const int maxChannels = base->MaxNumOfChannels();
+ const int maxChannels = 100;
VALIDATE_STRESS(maxChannels < 1); // Should always have at least one channel
bool* channelState = new bool[maxChannels];
memset(channelState, 0, maxChannels * sizeof(bool));
diff --git a/voice_engine/transmit_mixer.cc b/voice_engine/transmit_mixer.cc
index c7c1aaed..f5ec7f67 100644
--- a/voice_engine/transmit_mixer.cc
+++ b/voice_engine/transmit_mixer.cc
@@ -305,13 +305,11 @@ TransmitMixer::SetAudioProcessingModule(AudioProcessing* audioProcessingModule)
}
void TransmitMixer::GetSendCodecInfo(int* max_sample_rate, int* max_channels) {
- ScopedChannel sc(*_channelManagerPtr);
- void* iterator = NULL;
- Channel* channel = sc.GetFirstChannel(iterator);
-
*max_sample_rate = 8000;
*max_channels = 1;
- while (channel != NULL) {
+ for (ChannelManager::Iterator it(_channelManagerPtr); it.IsValid();
+ it.Increment()) {
+ Channel* channel = it.GetChannel();
if (channel->Sending()) {
CodecInst codec;
channel->GetSendCodec(codec);
@@ -321,7 +319,6 @@ void TransmitMixer::GetSendCodecInfo(int* max_sample_rate, int* max_channels) {
std::max(*max_sample_rate, codec.plfreq));
*max_channels = std::max(*max_channels, codec.channels);
}
- channel = sc.GetNextChannel(iterator);
}
}
@@ -424,11 +421,10 @@ TransmitMixer::DemuxAndMix()
WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1),
"TransmitMixer::DemuxAndMix()");
- ScopedChannel sc(*_channelManagerPtr);
- void* iterator(NULL);
- Channel* channelPtr = sc.GetFirstChannel(iterator);
- while (channelPtr != NULL)
+ for (ChannelManager::Iterator it(_channelManagerPtr); it.IsValid();
+ it.Increment())
{
+ Channel* channelPtr = it.GetChannel();
if (channelPtr->InputIsOnHold())
{
channelPtr->UpdateLocalTimeStamp();
@@ -438,7 +434,6 @@ TransmitMixer::DemuxAndMix()
channelPtr->Demultiplex(_audioFrame);
channelPtr->PrepareEncodeAndSend(_audioFrame.sample_rate_hz_);
}
- channelPtr = sc.GetNextChannel(iterator);
}
return 0;
}
@@ -446,8 +441,8 @@ TransmitMixer::DemuxAndMix()
void TransmitMixer::DemuxAndMix(const int voe_channels[],
int number_of_voe_channels) {
for (int i = 0; i < number_of_voe_channels; ++i) {
- voe::ScopedChannel sc(*_channelManagerPtr, voe_channels[i]);
- voe::Channel* channel_ptr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _channelManagerPtr->GetChannel(voe_channels[i]);
+ voe::Channel* channel_ptr = ch.channel();
if (channel_ptr) {
if (channel_ptr->InputIsOnHold()) {
channel_ptr->UpdateLocalTimeStamp();
@@ -466,16 +461,14 @@ TransmitMixer::EncodeAndSend()
WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1),
"TransmitMixer::EncodeAndSend()");
- ScopedChannel sc(*_channelManagerPtr);
- void* iterator(NULL);
- Channel* channelPtr = sc.GetFirstChannel(iterator);
- while (channelPtr != NULL)
+ for (ChannelManager::Iterator it(_channelManagerPtr); it.IsValid();
+ it.Increment())
{
+ Channel* channelPtr = it.GetChannel();
if (channelPtr->Sending() && !channelPtr->InputIsOnHold())
{
channelPtr->EncodeAndSend();
}
- channelPtr = sc.GetNextChannel(iterator);
}
return 0;
}
@@ -483,8 +476,8 @@ TransmitMixer::EncodeAndSend()
void TransmitMixer::EncodeAndSend(const int voe_channels[],
int number_of_voe_channels) {
for (int i = 0; i < number_of_voe_channels; ++i) {
- voe::ScopedChannel sc(*_channelManagerPtr, voe_channels[i]);
- voe::Channel* channel_ptr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _channelManagerPtr->GetChannel(voe_channels[i]);
+ voe::Channel* channel_ptr = ch.channel();
if (channel_ptr && channel_ptr->Sending() && !channel_ptr->InputIsOnHold())
channel_ptr->EncodeAndSend();
}
diff --git a/voice_engine/voe_audio_processing_impl.cc b/voice_engine/voe_audio_processing_impl.cc
index 430f86dc..a57ede93 100644
--- a/voice_engine/voe_audio_processing_impl.cc
+++ b/voice_engine/voe_audio_processing_impl.cc
@@ -342,8 +342,8 @@ int VoEAudioProcessingImpl::SetRxNsStatus(int channel,
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"SetRxNsStatus() failed to locate channel");
@@ -368,8 +368,8 @@ int VoEAudioProcessingImpl::GetRxNsStatus(int channel,
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetRxNsStatus() failed to locate channel");
@@ -395,8 +395,8 @@ int VoEAudioProcessingImpl::SetRxAgcStatus(int channel,
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"SetRxAgcStatus() failed to locate channel");
@@ -421,8 +421,8 @@ int VoEAudioProcessingImpl::GetRxAgcStatus(int channel,
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetRxAgcStatus() failed to locate channel");
@@ -446,8 +446,8 @@ int VoEAudioProcessingImpl::SetRxAgcConfig(int channel,
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"SetRxAgcConfig() failed to locate channel");
@@ -470,8 +470,8 @@ int VoEAudioProcessingImpl::GetRxAgcConfig(int channel, AgcConfig& config) {
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetRxAgcConfig() failed to locate channel");
@@ -771,8 +771,8 @@ int VoEAudioProcessingImpl::RegisterRxVadObserver(
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"RegisterRxVadObserver() failed to locate channel");
@@ -788,8 +788,8 @@ int VoEAudioProcessingImpl::DeRegisterRxVadObserver(int channel) {
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"DeRegisterRxVadObserver() failed to locate channel");
@@ -807,8 +807,8 @@ int VoEAudioProcessingImpl::VoiceActivityIndicator(int channel) {
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"DeRegisterRxVadObserver() failed to locate channel");
diff --git a/voice_engine/voe_base_impl.cc b/voice_engine/voe_base_impl.cc
index 3dddca56..3b7a193c 100644
--- a/voice_engine/voe_base_impl.cc
+++ b/voice_engine/voe_base_impl.cc
@@ -223,8 +223,9 @@ int VoEBaseImpl::OnDataAvailable(const int voe_channels[],
// No need to go through the APM, demultiplex the data to each VoE channel,
// encode and send to the network.
for (int i = 0; i < number_of_voe_channels; ++i) {
- voe::ScopedChannel sc(_shared->channel_manager(), voe_channels[i]);
- voe::Channel* channel_ptr = sc.ChannelPtr();
+ voe::ChannelOwner ch =
+ _shared->channel_manager().GetChannel(voe_channels[i]);
+ voe::Channel* channel_ptr = ch.channel();
if (!channel_ptr)
continue;
@@ -255,14 +256,12 @@ int VoEBaseImpl::RegisterVoiceEngineObserver(VoiceEngineObserver& observer)
}
// Register the observer in all active channels
- voe::ScopedChannel sc(_shared->channel_manager());
- void* iterator(NULL);
- voe::Channel* channelPtr = sc.GetFirstChannel(iterator);
- while (channelPtr != NULL)
- {
- channelPtr->RegisterVoiceEngineObserver(observer);
- channelPtr = sc.GetNextChannel(iterator);
+ for (voe::ChannelManager::Iterator it(&_shared->channel_manager());
+ it.IsValid();
+ it.Increment()) {
+ it.GetChannel()->RegisterVoiceEngineObserver(observer);
}
+
_shared->transmit_mixer()->RegisterVoiceEngineObserver(observer);
_voiceEngineObserverPtr = &observer;
@@ -287,13 +286,10 @@ int VoEBaseImpl::DeRegisterVoiceEngineObserver()
_voiceEngineObserverPtr = NULL;
// Deregister the observer in all active channels
- voe::ScopedChannel sc(_shared->channel_manager());
- void* iterator(NULL);
- voe::Channel* channelPtr = sc.GetFirstChannel(iterator);
- while (channelPtr != NULL)
- {
- channelPtr->DeRegisterVoiceEngineObserver();
- channelPtr = sc.GetNextChannel(iterator);
+ for (voe::ChannelManager::Iterator it(&_shared->channel_manager());
+ it.IsValid();
+ it.Increment()) {
+ it.GetChannel()->DeRegisterVoiceEngineObserver();
}
return 0;
@@ -538,18 +534,6 @@ int VoEBaseImpl::Terminate()
return TerminateInternal();
}
-int VoEBaseImpl::MaxNumOfChannels()
-{
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
- "MaxNumOfChannels()");
- int32_t maxNumOfChannels =
- _shared->channel_manager().MaxNumOfChannels();
- WEBRTC_TRACE(kTraceStateInfo, kTraceVoice,
- VoEId(_shared->instance_id(), -1),
- "MaxNumOfChannels() => %d", maxNumOfChannels);
- return (maxNumOfChannels);
-}
-
int VoEBaseImpl::CreateChannel()
{
WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
@@ -562,55 +546,40 @@ int VoEBaseImpl::CreateChannel()
return -1;
}
- int32_t channelId = -1;
-
- if (!_shared->channel_manager().CreateChannel(channelId))
- {
- _shared->SetLastError(VE_CHANNEL_NOT_CREATED, kTraceError,
- "CreateChannel() failed to allocate memory for channel");
- return -1;
+ voe::ChannelOwner channel_owner =
+ _shared->channel_manager().CreateChannel();
+
+ if (channel_owner.channel()->SetEngineInformation(
+ _shared->statistics(),
+ *_shared->output_mixer(),
+ *_shared->transmit_mixer(),
+ *_shared->process_thread(),
+ *_shared->audio_device(),
+ _voiceEngineObserverPtr,
+ &_callbackCritSect) != 0) {
+ _shared->SetLastError(
+ VE_CHANNEL_NOT_CREATED,
+ kTraceError,
+ "CreateChannel() failed to associate engine and channel."
+ " Destroying channel.");
+ _shared->channel_manager()
+ .DestroyChannel(channel_owner.channel()->ChannelId());
+ return -1;
+ } else if (channel_owner.channel()->Init() != 0) {
+ _shared->SetLastError(
+ VE_CHANNEL_NOT_CREATED,
+ kTraceError,
+ "CreateChannel() failed to initialize channel. Destroying"
+ " channel.");
+ _shared->channel_manager()
+ .DestroyChannel(channel_owner.channel()->ChannelId());
+ return -1;
}
- bool destroyChannel(false);
- {
- voe::ScopedChannel sc(_shared->channel_manager(), channelId);
- voe::Channel* channelPtr = sc.ChannelPtr();
- if (channelPtr == NULL)
- {
- _shared->SetLastError(VE_CHANNEL_NOT_CREATED, kTraceError,
- "CreateChannel() failed to allocate memory for channel");
- return -1;
- }
- else if (channelPtr->SetEngineInformation(_shared->statistics(),
- *_shared->output_mixer(),
- *_shared->transmit_mixer(),
- *_shared->process_thread(),
- *_shared->audio_device(),
- _voiceEngineObserverPtr,
- &_callbackCritSect) != 0)
- {
- destroyChannel = true;
- _shared->SetLastError(VE_CHANNEL_NOT_CREATED, kTraceError,
- "CreateChannel() failed to associate engine and channel."
- " Destroying channel.");
- }
- else if (channelPtr->Init() != 0)
- {
- destroyChannel = true;
- _shared->SetLastError(VE_CHANNEL_NOT_CREATED, kTraceError,
- "CreateChannel() failed to initialize channel. Destroying"
- " channel.");
- }
- }
- if (destroyChannel)
- {
- _shared->channel_manager().DestroyChannel(channelId);
- return -1;
- }
WEBRTC_TRACE(kTraceStateInfo, kTraceVoice,
VoEId(_shared->instance_id(), -1),
- "CreateChannel() => %d", channelId);
- return channelId;
+ "CreateChannel() => %d", channel_owner.channel()->ChannelId());
+ return channel_owner.channel()->ChannelId();
}
int VoEBaseImpl::DeleteChannel(int channel)
@@ -626,8 +595,8 @@ int VoEBaseImpl::DeleteChannel(int channel)
}
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -636,12 +605,7 @@ int VoEBaseImpl::DeleteChannel(int channel)
}
}
- if (_shared->channel_manager().DestroyChannel(channel) != 0)
- {
- _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
- "DeleteChannel() failed to destroy channel");
- return -1;
- }
+ _shared->channel_manager().DestroyChannel(channel);
if (StopSend() != 0)
{
@@ -666,8 +630,8 @@ int VoEBaseImpl::StartReceive(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -687,8 +651,8 @@ int VoEBaseImpl::StopReceive(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -708,8 +672,8 @@ int VoEBaseImpl::StartPlayout(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -739,8 +703,8 @@ int VoEBaseImpl::StopPlayout(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -766,8 +730,8 @@ int VoEBaseImpl::StartSend(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -797,8 +761,8 @@ int VoEBaseImpl::StopSend(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -943,8 +907,8 @@ int VoEBaseImpl::SetNetEQPlayoutMode(int channel, NetEqModes mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -963,8 +927,8 @@ int VoEBaseImpl::GetNetEQPlayoutMode(int channel, NetEqModes& mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -984,8 +948,8 @@ int VoEBaseImpl::SetOnHoldStatus(int channel, bool enable, OnHoldModes mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -1004,8 +968,8 @@ int VoEBaseImpl::GetOnHoldStatus(int channel, bool& enabled, OnHoldModes& mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -1043,47 +1007,21 @@ int32_t VoEBaseImpl::StartPlayout()
return 0;
}
-int32_t VoEBaseImpl::StopPlayout()
-{
- WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1),
- "VoEBaseImpl::StopPlayout()");
-
- int32_t numOfChannels = _shared->channel_manager().NumOfChannels();
- if (numOfChannels <= 0)
- {
- return 0;
- }
-
- uint16_t nChannelsPlaying(0);
- int32_t* channelsArray = new int32_t[numOfChannels];
-
- // Get number of playing channels
- _shared->channel_manager().GetChannelIds(channelsArray, numOfChannels);
- for (int i = 0; i < numOfChannels; i++)
- {
- voe::ScopedChannel sc(_shared->channel_manager(), channelsArray[i]);
- voe::Channel* chPtr = sc.ChannelPtr();
- if (chPtr)
- {
- if (chPtr->Playing())
- {
- nChannelsPlaying++;
- }
- }
- }
- delete[] channelsArray;
-
- // Stop audio-device playing if no channel is playing out
- if (nChannelsPlaying == 0)
- {
- if (_shared->audio_device()->StopPlayout() != 0)
- {
- _shared->SetLastError(VE_CANNOT_STOP_PLAYOUT, kTraceError,
- "StopPlayout() failed to stop playout");
- return -1;
- }
+int32_t VoEBaseImpl::StopPlayout() {
+ WEBRTC_TRACE(kTraceInfo,
+ kTraceVoice,
+ VoEId(_shared->instance_id(), -1),
+ "VoEBaseImpl::StopPlayout()");
+ // Stop audio-device playing if no channel is playing out
+ if (_shared->NumOfSendingChannels() == 0) {
+ if (_shared->audio_device()->StopPlayout() != 0) {
+ _shared->SetLastError(VE_CANNOT_STOP_PLAYOUT,
+ kTraceError,
+ "StopPlayout() failed to stop playout");
+ return -1;
}
- return 0;
+ }
+ return 0;
}
int32_t VoEBaseImpl::StartSend()
@@ -1142,17 +1080,7 @@ int32_t VoEBaseImpl::TerminateInternal()
"VoEBaseImpl::TerminateInternal()");
// Delete any remaining channel objects
- int32_t numOfChannels = _shared->channel_manager().NumOfChannels();
- if (numOfChannels > 0)
- {
- int32_t* channelsArray = new int32_t[numOfChannels];
- _shared->channel_manager().GetChannelIds(channelsArray, numOfChannels);
- for (int i = 0; i < numOfChannels; i++)
- {
- DeleteChannel(channelsArray[i]);
- }
- delete[] channelsArray;
- }
+ _shared->channel_manager().DestroyAllChannels();
if (_shared->process_thread())
{
diff --git a/voice_engine/voe_base_impl.h b/voice_engine/voe_base_impl.h
index b192ca20..6715c360 100644
--- a/voice_engine/voe_base_impl.h
+++ b/voice_engine/voe_base_impl.h
@@ -38,8 +38,6 @@ public:
virtual int Terminate();
- virtual int MaxNumOfChannels();
-
virtual int CreateChannel();
virtual int DeleteChannel(int channel);
diff --git a/voice_engine/voe_call_report_impl.cc b/voice_engine/voe_call_report_impl.cc
index cf76850d..861354f3 100644
--- a/voice_engine/voe_call_report_impl.cc
+++ b/voice_engine/voe_call_report_impl.cc
@@ -64,6 +64,7 @@ int VoECallReportImpl::ResetCallReportStatistics(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
+
assert(_shared->audio_processing() != NULL);
bool echoMode =
@@ -87,8 +88,8 @@ int VoECallReportImpl::ResetCallReportStatistics(int channel)
// Reset channel dependent statistics
if (channel != -1)
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -97,28 +98,13 @@ int VoECallReportImpl::ResetCallReportStatistics(int channel)
}
channelPtr->ResetDeadOrAliveCounters();
channelPtr->ResetRTCPStatistics();
- }
- else
- {
- int32_t numOfChannels =
- _shared->channel_manager().NumOfChannels();
- if (numOfChannels <= 0)
- {
- return 0;
- }
- int32_t* channelsArray = new int32_t[numOfChannels];
- _shared->channel_manager().GetChannelIds(channelsArray, numOfChannels);
- for (int i = 0; i < numOfChannels; i++)
- {
- voe::ScopedChannel sc(_shared->channel_manager(), channelsArray[i]);
- voe::Channel* channelPtr = sc.ChannelPtr();
- if (channelPtr)
- {
- channelPtr->ResetDeadOrAliveCounters();
- channelPtr->ResetRTCPStatistics();
- }
- }
- delete[] channelsArray;
+ } else {
+ for (voe::ChannelManager::Iterator it(&_shared->channel_manager());
+ it.IsValid();
+ it.Increment()) {
+ it.GetChannel()->ResetDeadOrAliveCounters();
+ it.GetChannel()->ResetRTCPStatistics();
+ }
}
return 0;
@@ -237,8 +223,8 @@ int VoECallReportImpl::GetRoundTripTimeSummary(int channel, StatVal& delaysMs)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -280,8 +266,8 @@ int VoECallReportImpl::GetDeadOrAliveSummaryInternal(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -333,48 +319,34 @@ int VoECallReportImpl::WriteReportToFile(const char* fileNameUTF8)
_file.WriteText("\nNetwork Packet Round Trip Time (RTT)\n");
_file.WriteText("------------------------------------\n\n");
- int32_t numOfChannels = _shared->channel_manager().NumOfChannels();
- if (numOfChannels <= 0)
- {
- return 0;
- }
- int32_t* channelsArray = new int32_t[numOfChannels];
- _shared->channel_manager().GetChannelIds(channelsArray, numOfChannels);
- for (int ch = 0; ch < numOfChannels; ch++)
- {
- voe::ScopedChannel sc(_shared->channel_manager(), channelsArray[ch]);
- voe::Channel* channelPtr = sc.ChannelPtr();
- if (channelPtr)
- {
- StatVal delaysMs;
- _file.WriteText("channel %d:\n", ch);
- channelPtr->GetRoundTripTimeSummary(delaysMs);
- _file.WriteText(" min:%5d [ms]\n", delaysMs.min);
- _file.WriteText(" max:%5d [ms]\n", delaysMs.max);
- _file.WriteText(" avg:%5d [ms]\n", delaysMs.average);
- }
+ if (_shared->channel_manager().NumOfChannels() == 0)
+ return 0;
+
+ for (voe::ChannelManager::Iterator it(&_shared->channel_manager());
+ it.IsValid();
+ it.Increment()) {
+ StatVal delaysMs;
+ _file.WriteText("channel %d:\n", it.GetChannel()->ChannelId());
+ it.GetChannel()->GetRoundTripTimeSummary(delaysMs);
+ _file.WriteText(" min:%5d [ms]\n", delaysMs.min);
+ _file.WriteText(" max:%5d [ms]\n", delaysMs.max);
+ _file.WriteText(" avg:%5d [ms]\n", delaysMs.average);
}
_file.WriteText("\nDead-or-Alive Connection Detections\n");
_file.WriteText("------------------------------------\n\n");
- for (int ch = 0; ch < numOfChannels; ch++)
- {
- voe::ScopedChannel sc(_shared->channel_manager(), channelsArray[ch]);
- voe::Channel* channelPtr = sc.ChannelPtr();
- if (channelPtr)
- {
- int nDead(0);
- int nAlive(0);
- _file.WriteText("channel %d:\n", ch);
- GetDeadOrAliveSummary(ch, nDead, nAlive);
- _file.WriteText(" #dead :%6d\n", nDead);
- _file.WriteText(" #alive:%6d\n", nAlive);
- }
+ for (voe::ChannelManager::Iterator it(&_shared->channel_manager());
+ it.IsValid();
+ it.Increment()) {
+ int dead = 0;
+ int alive = 0;
+ _file.WriteText("channel %d:\n", it.GetChannel()->ChannelId());
+ GetDeadOrAliveSummary(it.GetChannel()->ChannelId(), dead, alive);
+ _file.WriteText(" #dead :%6d\n", dead);
+ _file.WriteText(" #alive:%6d\n", alive);
}
- delete[] channelsArray;
-
EchoStatistics echo;
GetEchoMetricSummary(echo);
diff --git a/voice_engine/voe_codec_impl.cc b/voice_engine/voe_codec_impl.cc
index 6cc791af..3acd2bee 100644
--- a/voice_engine/voe_codec_impl.cc
+++ b/voice_engine/voe_codec_impl.cc
@@ -122,8 +122,8 @@ int VoECodecImpl::SetSendCodec(int channel, const CodecInst& codec)
"SetSendCodec() invalid number of channels");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -156,8 +156,8 @@ int VoECodecImpl::GetSendCodec(int channel, CodecInst& codec)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -189,8 +189,8 @@ int VoECodecImpl::GetRecCodec(int channel, CodecInst& codec)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -223,8 +223,8 @@ int VoECodecImpl::SetAMREncFormat(int channel, AmrMode mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -249,8 +249,8 @@ int VoECodecImpl::SetAMRDecFormat(int channel, AmrMode mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -277,8 +277,8 @@ int VoECodecImpl::SetAMRWbEncFormat(int channel, AmrMode mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -305,8 +305,8 @@ int VoECodecImpl::SetAMRWbDecFormat(int channel, AmrMode mode)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -334,8 +334,8 @@ int VoECodecImpl::SetRecPayloadType(int channel, const CodecInst& codec)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -354,8 +354,8 @@ int VoECodecImpl::GetRecPayloadType(int channel, CodecInst& codec)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -392,8 +392,8 @@ int VoECodecImpl::SetSendCNPayloadType(int channel, int type,
"SetSendCNPayloadType() invalid payload frequency");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -417,8 +417,8 @@ int VoECodecImpl::SetISACInitTargetRate(int channel, int rateBps,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -445,8 +445,8 @@ int VoECodecImpl::SetISACMaxRate(int channel, int rateBps)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -474,8 +474,8 @@ int VoECodecImpl::SetISACMaxPayloadSize(int channel, int sizeBytes)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -503,8 +503,8 @@ int VoECodecImpl::SetVADStatus(int channel, bool enable, VadModes mode,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -542,8 +542,8 @@ int VoECodecImpl::GetVADStatus(int channel, bool& enabled, VadModes& mode,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -696,8 +696,8 @@ int VoECodecImpl::SetSecondarySendCodec(int channel, const CodecInst& codec,
"SetSecondarySendCodec() invalid number of channels");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"SetSecondarySendCodec() failed to locate channel");
@@ -724,8 +724,8 @@ int VoECodecImpl::GetSecondarySendCodec(int channel, CodecInst& codec) {
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetSecondarySendCodec() failed to locate channel");
@@ -750,8 +750,8 @@ int VoECodecImpl::GetSecondarySendCodec(int channel, CodecInst& codec) {
int VoECodecImpl::RemoveSecondarySendCodec(int channel) {
WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
"RemoveSecondarySendCodec(channel=%d)", channel);
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"RemoveSecondarySendCodec() failed to locate "
diff --git a/voice_engine/voe_dtmf_impl.cc b/voice_engine/voe_dtmf_impl.cc
index 4d1a7a93..ac2c5466 100644
--- a/voice_engine/voe_dtmf_impl.cc
+++ b/voice_engine/voe_dtmf_impl.cc
@@ -67,8 +67,8 @@ int VoEDtmfImpl::SendTelephoneEvent(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -161,8 +161,8 @@ int VoEDtmfImpl::SetSendTelephoneEventPayloadType(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -182,8 +182,8 @@ int VoEDtmfImpl::GetSendTelephoneEventPayloadType(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -314,8 +314,8 @@ int VoEDtmfImpl::SetDtmfPlayoutStatus(int channel, bool enable)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -335,8 +335,8 @@ int VoEDtmfImpl::GetDtmfPlayoutStatus(int channel, bool& enabled)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_encryption_impl.cc b/voice_engine/voe_encryption_impl.cc
index cf91b961..518a1c61 100644
--- a/voice_engine/voe_encryption_impl.cc
+++ b/voice_engine/voe_encryption_impl.cc
@@ -59,8 +59,8 @@ int VoEEncryptionImpl::RegisterExternalEncryption(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -79,8 +79,8 @@ int VoEEncryptionImpl::DeRegisterExternalEncryption(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_external_media_impl.cc b/voice_engine/voe_external_media_impl.cc
index 531d3bc7..c76c280b 100644
--- a/voice_engine/voe_external_media_impl.cc
+++ b/voice_engine/voe_external_media_impl.cc
@@ -72,8 +72,9 @@ int VoEExternalMediaImpl::RegisterExternalMediaProcessing(
case kPlaybackPerChannel:
case kRecordingPerChannel:
{
- voe::ScopedChannel sc(shared_->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch =
+ shared_->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -115,8 +116,9 @@ int VoEExternalMediaImpl::DeRegisterExternalMediaProcessing(
case kPlaybackPerChannel:
case kRecordingPerChannel:
{
- voe::ScopedChannel sc(shared_->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch =
+ shared_->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -349,8 +351,8 @@ int VoEExternalMediaImpl::GetAudioFrame(int channel, int desired_sample_rate_hz,
shared_->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(shared_->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -387,8 +389,8 @@ int VoEExternalMediaImpl::SetExternalMixing(int channel, bool enable) {
shared_->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(shared_->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_file_impl.cc b/voice_engine/voe_file_impl.cc
index 0da21622..d8779c81 100644
--- a/voice_engine/voe_file_impl.cc
+++ b/voice_engine/voe_file_impl.cc
@@ -71,8 +71,8 @@ int VoEFileImpl::StartPlayingFileLocally(
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -107,8 +107,8 @@ int VoEFileImpl::StartPlayingFileLocally(int channel,
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -133,8 +133,8 @@ int VoEFileImpl::StopPlayingFileLocally(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -153,8 +153,8 @@ int VoEFileImpl::IsPlayingFileLocally(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -174,8 +174,8 @@ int VoEFileImpl::ScaleLocalFilePlayout(int channel, float scale)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -234,8 +234,8 @@ int VoEFileImpl::StartPlayingFileAsMicrophone(int channel,
else
{
// Add file after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -311,8 +311,8 @@ int VoEFileImpl::StartPlayingFileAsMicrophone(int channel,
else
{
// Add file after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -355,8 +355,8 @@ int VoEFileImpl::StopPlayingFileAsMicrophone(int channel)
else
{
// Stop adding file after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -383,8 +383,8 @@ int VoEFileImpl::IsPlayingFileAsMicrophone(int channel)
else
{
// Stop adding file after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -413,8 +413,8 @@ int VoEFileImpl::ScaleFileAsMicrophonePlayout(int channel, float scale)
else
{
// Stop adding file after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -448,8 +448,8 @@ int VoEFileImpl::StartRecordingPlayout(
else
{
// Add file after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -478,8 +478,8 @@ int VoEFileImpl::StartRecordingPlayout(
}
else
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -505,8 +505,8 @@ int VoEFileImpl::StopRecordingPlayout(int channel)
}
else
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -1342,8 +1342,8 @@ int VoEFileImpl::GetPlaybackPosition(int channel, int& positionMs)
WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
"GetPlaybackPosition(channel=%d)", channel);
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_neteq_stats_impl.cc b/voice_engine/voe_neteq_stats_impl.cc
index 661c8c65..264f4865 100644
--- a/voice_engine/voe_neteq_stats_impl.cc
+++ b/voice_engine/voe_neteq_stats_impl.cc
@@ -61,8 +61,8 @@ int VoENetEqStatsImpl::GetNetworkStatistics(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_network_impl.cc b/voice_engine/voe_network_impl.cc
index 62521706..615fd6a0 100644
--- a/voice_engine/voe_network_impl.cc
+++ b/voice_engine/voe_network_impl.cc
@@ -54,8 +54,8 @@ int VoENetworkImpl::RegisterExternalTransport(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -74,8 +74,8 @@ int VoENetworkImpl::DeRegisterExternalTransport(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -109,8 +109,8 @@ int VoENetworkImpl::ReceivedRTPPacket(int channel,
"ReceivedRTPPacket() invalid data vector");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -149,8 +149,8 @@ int VoENetworkImpl::ReceivedRTCPPacket(int channel, const void* data,
"ReceivedRTCPPacket() invalid data vector");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -187,8 +187,8 @@ int VoENetworkImpl::SetPacketTimeoutNotification(int channel,
"SetPacketTimeoutNotification() invalid timeout size");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -210,8 +210,8 @@ int VoENetworkImpl::GetPacketTimeoutNotification(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -233,8 +233,8 @@ int VoENetworkImpl::RegisterDeadOrAliveObserver(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -253,8 +253,8 @@ int VoENetworkImpl::DeRegisterDeadOrAliveObserver(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -284,8 +284,8 @@ int VoENetworkImpl::SetPeriodicDeadOrAliveStatus(int channel, bool enable,
"SetPeriodicDeadOrAliveStatus() invalid sample time");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -307,8 +307,8 @@ int VoENetworkImpl::GetPeriodicDeadOrAliveStatus(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_rtp_rtcp_impl.cc b/voice_engine/voe_rtp_rtcp_impl.cc
index f4554db2..945c5384 100644
--- a/voice_engine/voe_rtp_rtcp_impl.cc
+++ b/voice_engine/voe_rtp_rtcp_impl.cc
@@ -59,8 +59,8 @@ int VoERTP_RTCPImpl::RegisterRTPObserver(int channel, VoERTPObserver& observer)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -79,8 +79,8 @@ int VoERTP_RTCPImpl::DeRegisterRTPObserver(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -100,8 +100,8 @@ int VoERTP_RTCPImpl::RegisterRTCPObserver(int channel, VoERTCPObserver& observer
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -120,8 +120,8 @@ int VoERTP_RTCPImpl::DeRegisterRTCPObserver(int channel)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -140,8 +140,8 @@ int VoERTP_RTCPImpl::SetLocalSSRC(int channel, unsigned int ssrc)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -160,8 +160,8 @@ int VoERTP_RTCPImpl::GetLocalSSRC(int channel, unsigned int& ssrc)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -180,8 +180,8 @@ int VoERTP_RTCPImpl::GetRemoteSSRC(int channel, unsigned int& ssrc)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -200,8 +200,8 @@ int VoERTP_RTCPImpl::GetRemoteCSRCs(int channel, unsigned int arrCSRC[15])
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -235,8 +235,8 @@ int VoERTP_RTCPImpl::SetRTPAudioLevelIndicationStatus(int channel,
}
// Set state and ID for the specified channel.
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -258,8 +258,8 @@ int VoERTP_RTCPImpl::GetRTPAudioLevelIndicationStatus(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -278,8 +278,8 @@ int VoERTP_RTCPImpl::SetRTCPStatus(int channel, bool enable)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -298,8 +298,8 @@ int VoERTP_RTCPImpl::GetRTCPStatus(int channel, bool& enabled)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -318,8 +318,8 @@ int VoERTP_RTCPImpl::SetRTCP_CNAME(int channel, const char cName[256])
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -338,8 +338,8 @@ int VoERTP_RTCPImpl::GetRTCP_CNAME(int channel, char cName[256])
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -358,8 +358,8 @@ int VoERTP_RTCPImpl::GetRemoteRTCP_CNAME(int channel, char cName[256])
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -385,8 +385,8 @@ int VoERTP_RTCPImpl::GetRemoteRTCPData(
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -417,8 +417,8 @@ int VoERTP_RTCPImpl::SendApplicationDefinedRTCPPacket(
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -443,8 +443,8 @@ int VoERTP_RTCPImpl::GetRTPStatistics(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -465,8 +465,8 @@ int VoERTP_RTCPImpl::GetRTCPStatistics(int channel, CallStatistics& stats)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -484,8 +484,8 @@ int VoERTP_RTCPImpl::GetRemoteRTCPSenderInfo(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channel_ptr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channel_ptr = ch.channel();
if (channel_ptr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetRemoteRTCPSenderInfo() failed to locate channel");
@@ -502,8 +502,8 @@ int VoERTP_RTCPImpl::GetRemoteRTCPReportBlocks(
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channel_ptr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channel_ptr = ch.channel();
if (channel_ptr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetRemoteRTCPReportBlocks() failed to locate channel");
@@ -523,8 +523,8 @@ int VoERTP_RTCPImpl::SetFECStatus(int channel, bool enable, int redPayloadtype)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -552,8 +552,8 @@ int VoERTP_RTCPImpl::GetFECStatus(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -577,8 +577,8 @@ int VoERTP_RTCPImpl::SetNACKStatus(int channel,
"SetNACKStatus(channel=%d, enable=%d, maxNoPackets=%d)",
channel, enable, maxNoPackets);
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -603,8 +603,8 @@ int VoERTP_RTCPImpl::StartRTPDump(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -623,8 +623,8 @@ int VoERTP_RTCPImpl::StopRTPDump(int channel, RTPDirections direction)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -644,8 +644,8 @@ int VoERTP_RTCPImpl::RTPDumpIsActive(int channel, RTPDirections direction)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -665,17 +665,18 @@ int VoERTP_RTCPImpl::InsertExtraRTPPacket(int channel,
"InsertExtraRTPPacket(channel=%d, payloadType=%u,"
" markerBit=%u, payloadSize=%u)",
channel, payloadType, markerBit, payloadSize);
+
if (!_shared->statistics().Initialized())
{
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
- "StopRTPDump() failed to locate channel");
+ "InsertExtraRTPPacket() failed to locate channel");
return -1;
}
return channelPtr->InsertExtraRTPPacket(payloadType,
@@ -693,8 +694,8 @@ int VoERTP_RTCPImpl::GetLastRemoteTimeStamp(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voe_video_sync_impl.cc b/voice_engine/voe_video_sync_impl.cc
index 91c07503..5b3312c6 100644
--- a/voice_engine/voe_video_sync_impl.cc
+++ b/voice_engine/voe_video_sync_impl.cc
@@ -58,15 +58,15 @@ int VoEVideoSyncImpl::GetPlayoutTimestamp(int channel, unsigned int& timestamp)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
- if (channelPtr == NULL)
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channel_ptr = ch.channel();
+ if (channel_ptr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetPlayoutTimestamp() failed to locate channel");
return -1;
}
- return channelPtr->GetPlayoutTimestamp(timestamp);
+ return channel_ptr->GetPlayoutTimestamp(timestamp);
}
int VoEVideoSyncImpl::SetInitTimestamp(int channel,
@@ -82,8 +82,8 @@ int VoEVideoSyncImpl::SetInitTimestamp(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -106,8 +106,8 @@ int VoEVideoSyncImpl::SetInitSequenceNumber(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -129,8 +129,8 @@ int VoEVideoSyncImpl::SetMinimumPlayoutDelay(int channel,int delayMs)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -153,15 +153,15 @@ int VoEVideoSyncImpl::SetInitialPlayoutDelay(int channel, int delay_ms)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channel_ptr = sc.ChannelPtr();
- if (channel_ptr == NULL)
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
+ if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"SetInitialPlayoutDelay() failed to locate channel");
return -1;
}
- return channel_ptr->SetInitialPlayoutDelay(delay_ms);
+ return channelPtr->SetInitialPlayoutDelay(delay_ms);
}
int VoEVideoSyncImpl::GetDelayEstimate(int channel,
@@ -175,8 +175,8 @@ int VoEVideoSyncImpl::GetDelayEstimate(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetDelayEstimate() failed to locate channel");
@@ -226,8 +226,8 @@ int VoEVideoSyncImpl::GetRtpRtcp(int channel, RtpRtcp* &rtpRtcpModule)
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -246,8 +246,8 @@ int VoEVideoSyncImpl::GetLeastRequiredDelayMs(int channel) const {
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channel_ptr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channel_ptr = ch.channel();
if (channel_ptr == NULL) {
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
"GetLeastRequiredDelayMs() failed to locate channel");
diff --git a/voice_engine/voe_volume_control_impl.cc b/voice_engine/voe_volume_control_impl.cc
index c7555fcf..62f709f7 100644
--- a/voice_engine/voe_volume_control_impl.cc
+++ b/voice_engine/voe_volume_control_impl.cc
@@ -297,8 +297,8 @@ int VoEVolumeControlImpl::SetInputMute(int channel, bool enable)
else
{
// Mute after demultiplexing <=> affects one channel only
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -326,8 +326,8 @@ int VoEVolumeControlImpl::GetInputMute(int channel, bool& enabled)
}
else
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -422,8 +422,8 @@ int VoEVolumeControlImpl::GetSpeechOutputLevel(int channel,
}
else
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -472,8 +472,8 @@ int VoEVolumeControlImpl::GetSpeechOutputLevelFullRange(int channel,
}
else
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -503,8 +503,8 @@ int VoEVolumeControlImpl::SetChannelOutputVolumeScaling(int channel,
"SetChannelOutputVolumeScaling() invalid parameter");
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -524,8 +524,8 @@ int VoEVolumeControlImpl::GetChannelOutputVolumeScaling(int channel,
_shared->SetLastError(VE_NOT_INITED, kTraceError);
return -1;
}
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -577,8 +577,8 @@ int VoEVolumeControlImpl::SetOutputVolumePan(int channel,
else
{
// Per-channel balance (affects the signal before output mixing)
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
@@ -620,8 +620,8 @@ int VoEVolumeControlImpl::GetOutputVolumePan(int channel,
}
else
{
- voe::ScopedChannel sc(_shared->channel_manager(), channel);
- voe::Channel* channelPtr = sc.ChannelPtr();
+ voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+ voe::Channel* channelPtr = ch.channel();
if (channelPtr == NULL)
{
_shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
diff --git a/voice_engine/voice_engine.gyp b/voice_engine/voice_engine.gyp
index c20a3fcb..23c57da1 100644
--- a/voice_engine/voice_engine.gyp
+++ b/voice_engine/voice_engine.gyp
@@ -57,8 +57,6 @@
'channel.h',
'channel_manager.cc',
'channel_manager.h',
- 'channel_manager_base.cc',
- 'channel_manager_base.h',
'dtmf_inband.cc',
'dtmf_inband.h',
'dtmf_inband_queue.cc',
diff --git a/voice_engine/voice_engine_defines.h b/voice_engine/voice_engine_defines.h
index 2d69979e..2a904c7d 100644
--- a/voice_engine/voice_engine_defines.h
+++ b/voice_engine/voice_engine_defines.h
@@ -27,9 +27,6 @@
namespace webrtc {
-// TODO(ajm): There's not really a reason for this limitation. Remove it.
-enum { kVoiceEngineMaxNumChannels = 100 };
-
// VolumeControl
enum { kMinVolumeLevel = 0 };
enum { kMaxVolumeLevel = 255 };