| Index: talk/app/webrtc/rtpsender.cc
|
| diff --git a/talk/app/webrtc/rtpsender.cc b/talk/app/webrtc/rtpsender.cc
|
| index a30bf0b163616f7022530f7c993d9ad153561969..5e627a9fbbe61a0af25e57d5a64053418542a2c8 100644
|
| --- a/talk/app/webrtc/rtpsender.cc
|
| +++ b/talk/app/webrtc/rtpsender.cc
|
| @@ -273,6 +273,8 @@ bool VideoRtpSender::SetTrack(MediaStreamTrackInterface* track) {
|
| // Detach from old track.
|
| if (track_) {
|
| track_->UnregisterObserver(this);
|
| + track_->RemoveSink(sink_);
|
| + sink_ = nullptr;
|
| }
|
|
|
| // Attach to new track.
|
| @@ -286,6 +288,8 @@ bool VideoRtpSender::SetTrack(MediaStreamTrackInterface* track) {
|
| // Update video provider.
|
| if (can_send_track()) {
|
| VideoSourceInterface* source = track_->GetSource();
|
| + sink_ = provider_->GetSink(ssrc_);
|
| + RTC_CHECK(sink_);
|
| // TODO(deadbeef): If SetTrack is called with a disabled track, and the
|
| // previous track was enabled, this could cause a frame from the new track
|
| // to slip out. Really, what we need is for SetCaptureDevice and
|
| @@ -295,6 +299,7 @@ bool VideoRtpSender::SetTrack(MediaStreamTrackInterface* track) {
|
| provider_->SetCaptureDevice(ssrc_,
|
| source ? source->GetVideoCapturer() : nullptr);
|
| SetVideoSend();
|
| + track_->AddSink(sink_);
|
| } else if (prev_can_send_track) {
|
| provider_->SetCaptureDevice(ssrc_, nullptr);
|
| provider_->SetVideoSend(ssrc_, false, nullptr);
|
| @@ -310,6 +315,8 @@ void VideoRtpSender::SetSsrc(uint32_t ssrc) {
|
| if (can_send_track()) {
|
| provider_->SetCaptureDevice(ssrc_, nullptr);
|
| provider_->SetVideoSend(ssrc_, false, nullptr);
|
| + track_->RemoveSink(sink_);
|
| + sink_ = nullptr;
|
| }
|
| ssrc_ = ssrc;
|
| if (can_send_track()) {
|
| @@ -317,6 +324,8 @@ void VideoRtpSender::SetSsrc(uint32_t ssrc) {
|
| provider_->SetCaptureDevice(ssrc_,
|
| source ? source->GetVideoCapturer() : nullptr);
|
| SetVideoSend();
|
| + sink_ = provider_->GetSink(ssrc_);
|
| + track_->AddSink(sink_);
|
| }
|
| }
|
|
|
| @@ -327,6 +336,9 @@ void VideoRtpSender::Stop() {
|
| }
|
| if (track_) {
|
| track_->UnregisterObserver(this);
|
| + RTC_DCHECK(sink_);
|
| + RTC_DCHECK(sink_ == provider_->GetSink(ssrc_));
|
| + track_->RemoveSink(sink_);
|
| }
|
| if (can_send_track()) {
|
| provider_->SetCaptureDevice(ssrc_, nullptr);
|
|
|