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

Side by Side Diff: talk/app/webrtc/mediastreamsignaling.cc

Issue 1231613002: Fixing scenario where track is rejected and later un-rejected. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Removing debug log messages Created 5 years, 5 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
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 MaybeCreateDefaultStream(); 519 MaybeCreateDefaultStream();
520 } 520 }
521 521
522 void MediaStreamSignaling::OnLocalDescriptionChanged( 522 void MediaStreamSignaling::OnLocalDescriptionChanged(
523 const SessionDescriptionInterface* desc) { 523 const SessionDescriptionInterface* desc) {
524 const cricket::ContentInfo* audio_content = 524 const cricket::ContentInfo* audio_content =
525 GetFirstAudioContent(desc->description()); 525 GetFirstAudioContent(desc->description());
526 if (audio_content) { 526 if (audio_content) {
527 if (audio_content->rejected) { 527 if (audio_content->rejected) {
528 RejectRemoteTracks(cricket::MEDIA_TYPE_AUDIO); 528 RejectRemoteTracks(cricket::MEDIA_TYPE_AUDIO);
529 } else {
530 AcceptRemoteTracks(cricket::MEDIA_TYPE_AUDIO);
529 } 531 }
530 const cricket::AudioContentDescription* audio_desc = 532 const cricket::AudioContentDescription* audio_desc =
531 static_cast<const cricket::AudioContentDescription*>( 533 static_cast<const cricket::AudioContentDescription*>(
532 audio_content->description); 534 audio_content->description);
533 UpdateLocalTracks(audio_desc->streams(), audio_desc->type()); 535 UpdateLocalTracks(audio_desc->streams(), audio_desc->type());
534 } 536 }
535 537
536 const cricket::ContentInfo* video_content = 538 const cricket::ContentInfo* video_content =
537 GetFirstVideoContent(desc->description()); 539 GetFirstVideoContent(desc->description());
538 if (video_content) { 540 if (video_content) {
539 if (video_content->rejected) { 541 if (video_content->rejected) {
540 RejectRemoteTracks(cricket::MEDIA_TYPE_VIDEO); 542 RejectRemoteTracks(cricket::MEDIA_TYPE_VIDEO);
543 } else {
544 AcceptRemoteTracks(cricket::MEDIA_TYPE_VIDEO);
541 } 545 }
542 const cricket::VideoContentDescription* video_desc = 546 const cricket::VideoContentDescription* video_desc =
543 static_cast<const cricket::VideoContentDescription*>( 547 static_cast<const cricket::VideoContentDescription*>(
544 video_content->description); 548 video_content->description);
545 UpdateLocalTracks(video_desc->streams(), video_desc->type()); 549 UpdateLocalTracks(video_desc->streams(), video_desc->type());
546 } 550 }
547 551
548 const cricket::ContentInfo* data_content = 552 const cricket::ContentInfo* data_content =
549 GetFirstDataContent(desc->description()); 553 GetFirstDataContent(desc->description());
550 if (data_content) { 554 if (data_content) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 VideoTrackInterface* track = stream->FindVideoTrack(info.track_id); 700 VideoTrackInterface* track = stream->FindVideoTrack(info.track_id);
697 // There's no guarantee the track is still available, e.g. the track may 701 // There's no guarantee the track is still available, e.g. the track may
698 // have been removed from the stream by javascript. 702 // have been removed from the stream by javascript.
699 if (track) { 703 if (track) {
700 track->set_state(webrtc::MediaStreamTrackInterface::kEnded); 704 track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
701 } 705 }
702 } 706 }
703 } 707 }
704 } 708 }
705 709
710 void MediaStreamSignaling::AcceptRemoteTracks(cricket::MediaType media_type) {
pthatcher1 2015/07/08 20:45:32 Can you avoid duplication by making a helper metho
Taylor Brandstetter 2015/07/08 23:04:03 Sure, that should be fine as long as accepting/rej
711 TrackInfos* current_tracks = GetRemoteTracks(media_type);
712 for (TrackInfos::iterator track_it = current_tracks->begin();
713 track_it != current_tracks->end(); ++track_it) {
714 const TrackInfo& info = *track_it;
715 MediaStreamInterface* stream = remote_streams_->find(info.stream_label);
716 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
717 AudioTrackInterface* track = stream->FindAudioTrack(info.track_id);
718 if (track) {
719 track->set_state(webrtc::MediaStreamTrackInterface::kLive);
720 }
721 }
722 if (media_type == cricket::MEDIA_TYPE_VIDEO) {
723 VideoTrackInterface* track = stream->FindVideoTrack(info.track_id);
724 if (track) {
725 track->set_state(webrtc::MediaStreamTrackInterface::kLive);
726 }
727 }
728 }
729 }
730
706 void MediaStreamSignaling::UpdateEndedRemoteMediaStreams() { 731 void MediaStreamSignaling::UpdateEndedRemoteMediaStreams() {
707 std::vector<scoped_refptr<MediaStreamInterface> > streams_to_remove; 732 std::vector<scoped_refptr<MediaStreamInterface> > streams_to_remove;
708 for (size_t i = 0; i < remote_streams_->count(); ++i) { 733 for (size_t i = 0; i < remote_streams_->count(); ++i) {
709 MediaStreamInterface*stream = remote_streams_->at(i); 734 MediaStreamInterface*stream = remote_streams_->at(i);
710 if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) { 735 if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) {
711 streams_to_remove.push_back(stream); 736 streams_to_remove.push_back(stream);
712 } 737 }
713 } 738 }
714 739
715 std::vector<scoped_refptr<MediaStreamInterface> >::const_iterator it; 740 std::vector<scoped_refptr<MediaStreamInterface> >::const_iterator it;
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 int MediaStreamSignaling::FindDataChannelBySid(int sid) const { 1046 int MediaStreamSignaling::FindDataChannelBySid(int sid) const {
1022 for (size_t i = 0; i < sctp_data_channels_.size(); ++i) { 1047 for (size_t i = 0; i < sctp_data_channels_.size(); ++i) {
1023 if (sctp_data_channels_[i]->id() == sid) { 1048 if (sctp_data_channels_[i]->id() == sid) {
1024 return static_cast<int>(i); 1049 return static_cast<int>(i);
1025 } 1050 }
1026 } 1051 }
1027 return -1; 1052 return -1;
1028 } 1053 }
1029 1054
1030 } // namespace webrtc 1055 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698