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

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

Issue 2579993003: Add support for content hints to VideoTrack. (Closed)
Patch Set: rename test + add comments Created 4 years 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 | « webrtc/api/rtpsender.h ('k') | 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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 } 236 }
237 } 237 }
238 238
239 VideoRtpSender::VideoRtpSender(VideoTrackInterface* track, 239 VideoRtpSender::VideoRtpSender(VideoTrackInterface* track,
240 const std::string& stream_id, 240 const std::string& stream_id,
241 cricket::VideoChannel* channel) 241 cricket::VideoChannel* channel)
242 : id_(track->id()), 242 : id_(track->id()),
243 stream_id_(stream_id), 243 stream_id_(stream_id),
244 channel_(channel), 244 channel_(channel),
245 track_(track), 245 track_(track),
246 cached_track_enabled_(track->enabled()) { 246 cached_track_enabled_(track->enabled()),
247 cached_track_content_hint_(track->content_hint()) {
247 track_->RegisterObserver(this); 248 track_->RegisterObserver(this);
248 } 249 }
249 250
250 VideoRtpSender::VideoRtpSender(VideoTrackInterface* track, 251 VideoRtpSender::VideoRtpSender(VideoTrackInterface* track,
251 cricket::VideoChannel* channel) 252 cricket::VideoChannel* channel)
252 : id_(track->id()), 253 : id_(track->id()),
253 stream_id_(rtc::CreateRandomUuid()), 254 stream_id_(rtc::CreateRandomUuid()),
254 channel_(channel), 255 channel_(channel),
255 track_(track), 256 track_(track),
256 cached_track_enabled_(track->enabled()) { 257 cached_track_enabled_(track->enabled()),
258 cached_track_content_hint_(track->content_hint()) {
257 track_->RegisterObserver(this); 259 track_->RegisterObserver(this);
258 } 260 }
259 261
260 VideoRtpSender::VideoRtpSender(cricket::VideoChannel* channel) 262 VideoRtpSender::VideoRtpSender(cricket::VideoChannel* channel)
261 : id_(rtc::CreateRandomUuid()), 263 : id_(rtc::CreateRandomUuid()),
262 stream_id_(rtc::CreateRandomUuid()), 264 stream_id_(rtc::CreateRandomUuid()),
263 channel_(channel) {} 265 channel_(channel) {}
264 266
265 VideoRtpSender::~VideoRtpSender() { 267 VideoRtpSender::~VideoRtpSender() {
266 Stop(); 268 Stop();
267 } 269 }
268 270
269 void VideoRtpSender::OnChanged() { 271 void VideoRtpSender::OnChanged() {
270 TRACE_EVENT0("webrtc", "VideoRtpSender::OnChanged"); 272 TRACE_EVENT0("webrtc", "VideoRtpSender::OnChanged");
271 RTC_DCHECK(!stopped_); 273 RTC_DCHECK(!stopped_);
272 if (cached_track_enabled_ != track_->enabled()) { 274 if (cached_track_enabled_ != track_->enabled() ||
275 cached_track_content_hint_ != track_->content_hint()) {
273 cached_track_enabled_ = track_->enabled(); 276 cached_track_enabled_ = track_->enabled();
277 cached_track_content_hint_ = track_->content_hint();
274 if (can_send_track()) { 278 if (can_send_track()) {
275 SetVideoSend(); 279 SetVideoSend();
276 } 280 }
277 } 281 }
278 } 282 }
279 283
280 bool VideoRtpSender::SetTrack(MediaStreamTrackInterface* track) { 284 bool VideoRtpSender::SetTrack(MediaStreamTrackInterface* track) {
281 TRACE_EVENT0("webrtc", "VideoRtpSender::SetTrack"); 285 TRACE_EVENT0("webrtc", "VideoRtpSender::SetTrack");
282 if (stopped_) { 286 if (stopped_) {
283 LOG(LS_ERROR) << "SetTrack can't be called on a stopped RtpSender."; 287 LOG(LS_ERROR) << "SetTrack can't be called on a stopped RtpSender.";
(...skipping 12 matching lines...) Expand all
296 } 300 }
297 301
298 // Attach to new track. 302 // Attach to new track.
299 bool prev_can_send_track = can_send_track(); 303 bool prev_can_send_track = can_send_track();
300 // Keep a reference to the old track to keep it alive until we call 304 // Keep a reference to the old track to keep it alive until we call
301 // SetVideoSend. 305 // SetVideoSend.
302 rtc::scoped_refptr<VideoTrackInterface> old_track = track_; 306 rtc::scoped_refptr<VideoTrackInterface> old_track = track_;
303 track_ = video_track; 307 track_ = video_track;
304 if (track_) { 308 if (track_) {
305 cached_track_enabled_ = track_->enabled(); 309 cached_track_enabled_ = track_->enabled();
310 cached_track_content_hint_ = track_->content_hint();
306 track_->RegisterObserver(this); 311 track_->RegisterObserver(this);
307 } 312 }
308 313
309 // Update video channel. 314 // Update video channel.
310 if (can_send_track()) { 315 if (can_send_track()) {
311 SetVideoSend(); 316 SetVideoSend();
312 } else if (prev_can_send_track) { 317 } else if (prev_can_send_track) {
313 ClearVideoSend(); 318 ClearVideoSend();
314 } 319 }
315 return true; 320 return true;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 if (!channel_) { 370 if (!channel_) {
366 LOG(LS_ERROR) << "SetVideoSend: No video channel exists."; 371 LOG(LS_ERROR) << "SetVideoSend: No video channel exists.";
367 return; 372 return;
368 } 373 }
369 cricket::VideoOptions options; 374 cricket::VideoOptions options;
370 VideoTrackSourceInterface* source = track_->GetSource(); 375 VideoTrackSourceInterface* source = track_->GetSource();
371 if (source) { 376 if (source) {
372 options.is_screencast = rtc::Optional<bool>(source->is_screencast()); 377 options.is_screencast = rtc::Optional<bool>(source->is_screencast());
373 options.video_noise_reduction = source->needs_denoising(); 378 options.video_noise_reduction = source->needs_denoising();
374 } 379 }
380 switch (cached_track_content_hint_) {
381 case VideoTrackInterface::ContentHint::kNone:
382 break;
383 case VideoTrackInterface::ContentHint::kFluid:
384 options.is_screencast = rtc::Optional<bool>(false);
385 break;
386 case VideoTrackInterface::ContentHint::kDetailed:
387 options.is_screencast = rtc::Optional<bool>(true);
388 break;
389 }
375 if (!channel_->SetVideoSend(ssrc_, track_->enabled(), &options, track_)) { 390 if (!channel_->SetVideoSend(ssrc_, track_->enabled(), &options, track_)) {
376 RTC_DCHECK(false); 391 RTC_DCHECK(false);
377 } 392 }
378 } 393 }
379 394
380 void VideoRtpSender::ClearVideoSend() { 395 void VideoRtpSender::ClearVideoSend() {
381 RTC_DCHECK(ssrc_ != 0); 396 RTC_DCHECK(ssrc_ != 0);
382 RTC_DCHECK(!stopped_); 397 RTC_DCHECK(!stopped_);
383 if (!channel_) { 398 if (!channel_) {
384 LOG(LS_WARNING) << "SetVideoSend: No video channel exists."; 399 LOG(LS_WARNING) << "SetVideoSend: No video channel exists.";
385 return; 400 return;
386 } 401 }
387 // Allow SetVideoSend to fail since |enable| is false and |source| is null. 402 // Allow SetVideoSend to fail since |enable| is false and |source| is null.
388 // This the normal case when the underlying media channel has already been 403 // This the normal case when the underlying media channel has already been
389 // deleted. 404 // deleted.
390 channel_->SetVideoSend(ssrc_, false, nullptr, nullptr); 405 channel_->SetVideoSend(ssrc_, false, nullptr, nullptr);
391 } 406 }
392 407
393 } // namespace webrtc 408 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtpsender.h ('k') | webrtc/api/rtpsenderreceiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698