Index: talk/app/webrtc/mediastreamhandler.cc |
diff --git a/talk/app/webrtc/mediastreamhandler.cc b/talk/app/webrtc/mediastreamhandler.cc |
index f68699d6298c40bc6c6e111035ad6abc362652df..08be35ec865e080bccffc76368f934aa7f343035 100644 |
--- a/talk/app/webrtc/mediastreamhandler.cc |
+++ b/talk/app/webrtc/mediastreamhandler.cc |
@@ -90,7 +90,7 @@ LocalAudioTrackHandler::LocalAudioTrackHandler( |
audio_track_(track), |
provider_(provider), |
sink_adapter_(new LocalAudioSinkAdapter()) { |
- OnEnabledChanged(); |
+ Start(); |
track->AddSink(sink_adapter_.get()); |
} |
@@ -101,6 +101,10 @@ void LocalAudioTrackHandler::OnStateChanged() { |
// TODO(perkj): What should happen when the state change? |
} |
+void LocalAudioTrackHandler::Start() { |
+ OnEnabledChanged(); |
+} |
+ |
void LocalAudioTrackHandler::Stop() { |
audio_track_->RemoveSink(sink_adapter_.get()); |
cricket::AudioOptions options; |
@@ -132,13 +136,19 @@ RemoteAudioTrackHandler::RemoteAudioTrackHandler( |
audio_track_(track), |
provider_(provider) { |
track->GetSource()->RegisterAudioObserver(this); |
- OnEnabledChanged(); |
+ Start(); |
} |
RemoteAudioTrackHandler::~RemoteAudioTrackHandler() { |
audio_track_->GetSource()->UnregisterAudioObserver(this); |
} |
+void RemoteAudioTrackHandler::Start() { |
+ // TODO(deadbeef) - Should we remember the audio playout volume last set, |
+ // and set it again in case the audio channel was destroyed and recreated? |
+ OnEnabledChanged(); |
+} |
+ |
void RemoteAudioTrackHandler::Stop() { |
provider_->SetAudioPlayout(ssrc(), false, NULL); |
} |
@@ -166,10 +176,7 @@ LocalVideoTrackHandler::LocalVideoTrackHandler( |
: TrackHandler(track, ssrc), |
local_video_track_(track), |
provider_(provider) { |
- VideoSourceInterface* source = local_video_track_->GetSource(); |
- if (source) |
- provider_->SetCaptureDevice(ssrc, source->GetVideoCapturer()); |
- OnEnabledChanged(); |
+ Start(); |
} |
LocalVideoTrackHandler::~LocalVideoTrackHandler() { |
@@ -178,6 +185,13 @@ LocalVideoTrackHandler::~LocalVideoTrackHandler() { |
void LocalVideoTrackHandler::OnStateChanged() { |
} |
+void LocalVideoTrackHandler::Start() { |
+ VideoSourceInterface* source = local_video_track_->GetSource(); |
+ if (source) |
+ provider_->SetCaptureDevice(ssrc(), source->GetVideoCapturer()); |
+ OnEnabledChanged(); |
+} |
+ |
void LocalVideoTrackHandler::Stop() { |
provider_->SetCaptureDevice(ssrc(), NULL); |
provider_->SetVideoSend(ssrc(), false, NULL); |
@@ -199,14 +213,18 @@ RemoteVideoTrackHandler::RemoteVideoTrackHandler( |
: TrackHandler(track, ssrc), |
remote_video_track_(track), |
provider_(provider) { |
- OnEnabledChanged(); |
- provider_->SetVideoPlayout(ssrc, true, |
- remote_video_track_->GetSource()->FrameInput()); |
+ Start(); |
} |
RemoteVideoTrackHandler::~RemoteVideoTrackHandler() { |
} |
+void RemoteVideoTrackHandler::Start() { |
+ OnEnabledChanged(); |
+ provider_->SetVideoPlayout(ssrc(), true, |
+ remote_video_track_->GetSource()->FrameInput()); |
+} |
+ |
void RemoteVideoTrackHandler::Stop() { |
// Since cricket::VideoRenderer is not reference counted |
// we need to remove the renderer before we are deleted. |
@@ -301,6 +319,12 @@ void LocalMediaStreamHandler::AddVideoTrack(VideoTrackInterface* video_track, |
track_handlers_.push_back(handler); |
} |
+void LocalMediaStreamHandler::RestartAllTracks() { |
+ for (auto it : track_handlers_) { |
+ it->Start(); |
+ } |
+} |
+ |
RemoteMediaStreamHandler::RemoteMediaStreamHandler( |
MediaStreamInterface* stream, |
AudioProviderInterface* audio_provider, |
@@ -327,6 +351,12 @@ void RemoteMediaStreamHandler::AddVideoTrack(VideoTrackInterface* video_track, |
track_handlers_.push_back(handler); |
} |
+void RemoteMediaStreamHandler::RestartAllTracks() { |
+ for (auto it : track_handlers_) { |
+ it->Start(); |
+ } |
+} |
+ |
MediaStreamHandlerContainer::MediaStreamHandlerContainer( |
AudioProviderInterface* audio_provider, |
VideoProviderInterface* video_provider) |
@@ -396,6 +426,12 @@ void MediaStreamHandlerContainer::RemoveRemoteTrack( |
handler->RemoveTrack(track); |
} |
+void MediaStreamHandlerContainer::RestartAllRemoteTracks() { |
+ for (auto it : remote_streams_handlers_) { |
+ it->RestartAllTracks(); |
+ } |
+} |
+ |
void MediaStreamHandlerContainer::RemoveLocalStream( |
MediaStreamInterface* stream) { |
DeleteStreamHandler(&local_streams_handlers_, stream); |
@@ -438,6 +474,12 @@ void MediaStreamHandlerContainer::RemoveLocalTrack( |
handler->RemoveTrack(track); |
} |
+void MediaStreamHandlerContainer::RestartAllLocalTracks() { |
+ for (auto it : local_streams_handlers_) { |
+ it->RestartAllTracks(); |
+ } |
+} |
+ |
MediaStreamHandler* MediaStreamHandlerContainer::CreateRemoteStreamHandler( |
MediaStreamInterface* stream) { |
ASSERT(!FindStreamHandler(remote_streams_handlers_, stream)); |