Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(499)

Unified Diff: webrtc/call/call.cc

Issue 1397123003: Add AudioSendStream to Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: merge+comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/call/call.cc
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
index a32a8239437374293405e735a0f117c780ab81b4..6d9bf40ae8a228321dd8b8cabcd91f6312672528 100644
--- a/webrtc/call/call.cc
+++ b/webrtc/call/call.cc
@@ -14,6 +14,7 @@
#include <vector>
#include "webrtc/audio/audio_receive_stream.h"
+#include "webrtc/audio/audio_send_stream.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/scoped_ptr.h"
#include "webrtc/base/thread_annotations.h"
@@ -103,6 +104,7 @@ class Call : public webrtc::Call, public PacketReceiver {
bool network_enabled_ GUARDED_BY(network_enabled_crit_);
rtc::scoped_ptr<RWLockWrapper> receive_crit_;
+ // Audio and Video receive streams are owned by the client that creates them.
std::map<uint32_t, AudioReceiveStream*> audio_receive_ssrcs_
GUARDED_BY(receive_crit_);
std::map<uint32_t, VideoReceiveStream*> video_receive_ssrcs_
@@ -113,6 +115,8 @@ class Call : public webrtc::Call, public PacketReceiver {
GUARDED_BY(receive_crit_);
rtc::scoped_ptr<RWLockWrapper> send_crit_;
+ // Audio and Video send streams are owned by the client that creates them.
+ std::map<uint32_t, AudioSendStream*> audio_send_ssrcs_ GUARDED_BY(send_crit_);
std::map<uint32_t, VideoSendStream*> video_send_ssrcs_ GUARDED_BY(send_crit_);
std::set<VideoSendStream*> video_send_streams_ GUARDED_BY(send_crit_);
@@ -164,11 +168,12 @@ Call::Call(const Call::Config& config)
}
Call::~Call() {
- RTC_CHECK_EQ(0u, video_send_ssrcs_.size());
- RTC_CHECK_EQ(0u, video_send_streams_.size());
- RTC_CHECK_EQ(0u, audio_receive_ssrcs_.size());
- RTC_CHECK_EQ(0u, video_receive_ssrcs_.size());
- RTC_CHECK_EQ(0u, video_receive_streams_.size());
+ RTC_CHECK(audio_send_ssrcs_.empty());
+ RTC_CHECK(video_send_ssrcs_.empty());
+ RTC_CHECK(video_send_streams_.empty());
+ RTC_CHECK(audio_receive_ssrcs_.empty());
+ RTC_CHECK(video_receive_ssrcs_.empty());
+ RTC_CHECK(video_receive_streams_.empty());
module_process_thread_->Stop();
Trace::ReturnTrace();
@@ -178,14 +183,36 @@ PacketReceiver* Call::Receiver() { return this; }
webrtc::AudioSendStream* Call::CreateAudioSendStream(
const webrtc::AudioSendStream::Config& config) {
- // TODO(pbos): When adding AudioSendStream, add both TRACE_EVENT0 and config
- // logging to AudioSendStream constructor.
- return nullptr;
+ TRACE_EVENT0("webrtc", "Call::CreateAudioSendStream");
+ AudioSendStream* send_stream = new AudioSendStream(config);
+ {
+ rtc::CritScope lock(&network_enabled_crit_);
+ WriteLockScoped write_lock(*send_crit_);
+ RTC_DCHECK(audio_send_ssrcs_.find(config.rtp.ssrc) ==
+ audio_send_ssrcs_.end());
+ audio_send_ssrcs_[config.rtp.ssrc] = send_stream;
tommi 2015/10/16 11:15:33 nit: could use insert() since the lookup should no
the sun 2015/10/16 11:30:01 I'm keeping it consistent with how the other metho
+
+ if (!network_enabled_)
+ send_stream->SignalNetworkState(kNetworkDown);
+ }
+ return send_stream;
}
void Call::DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) {
- // TODO(pbos): When adding AudioSendStream, add both TRACE_EVENT0 and config
- // logging to AudioSendStream destructor.
+ TRACE_EVENT0("webrtc", "Call::DestroyAudioSendStream");
+ RTC_DCHECK(send_stream != nullptr);
+
+ send_stream->Stop();
+
+ webrtc::internal::AudioSendStream* audio_send_stream =
+ static_cast<webrtc::internal::AudioSendStream*>(send_stream);
tommi 2015/10/16 11:15:33 nice :)
the sun 2015/10/16 11:30:01 Acknowledged.
+ {
+ WriteLockScoped write_lock(*send_crit_);
+ size_t num_deleted = audio_send_ssrcs_.erase(
+ audio_send_stream->config().rtp.ssrc);
+ RTC_DCHECK(num_deleted == 1);
+ }
+ delete audio_send_stream;
}
webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream(
@@ -207,8 +234,8 @@ void Call::DestroyAudioReceiveStream(
webrtc::AudioReceiveStream* receive_stream) {
TRACE_EVENT0("webrtc", "Call::DestroyAudioReceiveStream");
RTC_DCHECK(receive_stream != nullptr);
- AudioReceiveStream* audio_receive_stream =
- static_cast<AudioReceiveStream*>(receive_stream);
+ webrtc::internal::AudioReceiveStream* audio_receive_stream =
+ static_cast<webrtc::internal::AudioReceiveStream*>(receive_stream);
{
WriteLockScoped write_lock(*receive_crit_);
size_t num_deleted = audio_receive_ssrcs_.erase(
@@ -362,6 +389,7 @@ Call::Stats Call::GetStats() const {
stats.pacer_delay_ms = channel_group_->GetPacerQueuingDelayMs();
{
ReadLockScoped read_lock(*send_crit_);
+ // TODO(solenberg): Add audio send streams.
for (const auto& kv : video_send_ssrcs_) {
int rtt_ms = kv.second->GetRtt();
if (rtt_ms > 0)
@@ -401,6 +429,9 @@ void Call::SignalNetworkState(NetworkState state) {
channel_group_->SignalNetworkState(state);
{
ReadLockScoped write_lock(*send_crit_);
+ for (auto& kv : audio_send_ssrcs_) {
+ kv.second->SignalNetworkState(state);
+ }
for (auto& kv : video_send_ssrcs_) {
kv.second->SignalNetworkState(state);
}

Powered by Google App Engine
This is Rietveld 408576698