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

Side by Side Diff: webrtc/api/rtpsender.cc

Issue 1894283002: Fixing a segfault that can occur when changing the track of an RtpSender. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/api/rtpsenderreceiver_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 track_->RemoveSink(sink_adapter_.get()); 115 track_->RemoveSink(sink_adapter_.get());
116 track_->UnregisterObserver(this); 116 track_->UnregisterObserver(this);
117 } 117 }
118 118
119 if (can_send_track() && stats_) { 119 if (can_send_track() && stats_) {
120 stats_->RemoveLocalAudioTrack(track_.get(), ssrc_); 120 stats_->RemoveLocalAudioTrack(track_.get(), ssrc_);
121 } 121 }
122 122
123 // Attach to new track. 123 // Attach to new track.
124 bool prev_can_send_track = can_send_track(); 124 bool prev_can_send_track = can_send_track();
125 // Keep a reference to the old track to keep it alive until we call
126 // SetAudioSend.
127 rtc::scoped_refptr<AudioTrackInterface> old_track = track_;
125 track_ = audio_track; 128 track_ = audio_track;
126 if (track_) { 129 if (track_) {
127 cached_track_enabled_ = track_->enabled(); 130 cached_track_enabled_ = track_->enabled();
128 track_->RegisterObserver(this); 131 track_->RegisterObserver(this);
129 track_->AddSink(sink_adapter_.get()); 132 track_->AddSink(sink_adapter_.get());
130 } 133 }
131 134
132 // Update audio provider. 135 // Update audio provider.
133 if (can_send_track()) { 136 if (can_send_track()) {
134 SetAudioSend(); 137 SetAudioSend();
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 } 272 }
270 VideoTrackInterface* video_track = static_cast<VideoTrackInterface*>(track); 273 VideoTrackInterface* video_track = static_cast<VideoTrackInterface*>(track);
271 274
272 // Detach from old track. 275 // Detach from old track.
273 if (track_) { 276 if (track_) {
274 track_->UnregisterObserver(this); 277 track_->UnregisterObserver(this);
275 } 278 }
276 279
277 // Attach to new track. 280 // Attach to new track.
278 bool prev_can_send_track = can_send_track(); 281 bool prev_can_send_track = can_send_track();
282 // Keep a reference to the old track to keep it alive until we call
283 // SetSource.
284 rtc::scoped_refptr<VideoTrackInterface> old_track = track_;
279 track_ = video_track; 285 track_ = video_track;
280 if (track_) { 286 if (track_) {
281 cached_track_enabled_ = track_->enabled(); 287 cached_track_enabled_ = track_->enabled();
282 track_->RegisterObserver(this); 288 track_->RegisterObserver(this);
283 } 289 }
284 290
285 // Update video provider. 291 // Update video provider.
286 if (can_send_track()) { 292 if (can_send_track()) {
287 // TODO(deadbeef): If SetTrack is called with a disabled track, and the 293 // TODO(deadbeef): If SetTrack is called with a disabled track, and the
288 // previous track was enabled, this could cause a frame from the new track 294 // previous track was enabled, this could cause a frame from the new track
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 RtpParameters VideoRtpSender::GetParameters() const { 352 RtpParameters VideoRtpSender::GetParameters() const {
347 return provider_->GetVideoRtpParameters(ssrc_); 353 return provider_->GetVideoRtpParameters(ssrc_);
348 } 354 }
349 355
350 bool VideoRtpSender::SetParameters(const RtpParameters& parameters) { 356 bool VideoRtpSender::SetParameters(const RtpParameters& parameters) {
351 TRACE_EVENT0("webrtc", "VideoRtpSender::SetParameters"); 357 TRACE_EVENT0("webrtc", "VideoRtpSender::SetParameters");
352 return provider_->SetVideoRtpParameters(ssrc_, parameters); 358 return provider_->SetVideoRtpParameters(ssrc_, parameters);
353 } 359 }
354 360
355 } // namespace webrtc 361 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/api/rtpsenderreceiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698