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

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

Issue 1247443005: Revert of Fixing scenario where track is rejected and later un-rejected. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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
« no previous file with comments | « talk/app/webrtc/mediastreamsignaling.h ('k') | talk/app/webrtc/peerconnection.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 * 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 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 } 518 }
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 SetRemoteTracksState(cricket::MEDIA_TYPE_AUDIO, 528 RejectRemoteTracks(cricket::MEDIA_TYPE_AUDIO);
529 MediaStreamTrackInterface::kEnded);
530 } else {
531 // This is needed in case the local description caused the track to be
532 // rejected, then later accepted, without being destroyed.
533 SetRemoteTracksState(cricket::MEDIA_TYPE_AUDIO,
534 MediaStreamTrackInterface::kLive);
535 } 529 }
536 const cricket::AudioContentDescription* audio_desc = 530 const cricket::AudioContentDescription* audio_desc =
537 static_cast<const cricket::AudioContentDescription*>( 531 static_cast<const cricket::AudioContentDescription*>(
538 audio_content->description); 532 audio_content->description);
539 UpdateLocalTracks(audio_desc->streams(), audio_desc->type()); 533 UpdateLocalTracks(audio_desc->streams(), audio_desc->type());
540 } 534 }
541 535
542 const cricket::ContentInfo* video_content = 536 const cricket::ContentInfo* video_content =
543 GetFirstVideoContent(desc->description()); 537 GetFirstVideoContent(desc->description());
544 if (video_content) { 538 if (video_content) {
545 if (video_content->rejected) { 539 if (video_content->rejected) {
546 SetRemoteTracksState(cricket::MEDIA_TYPE_VIDEO, 540 RejectRemoteTracks(cricket::MEDIA_TYPE_VIDEO);
547 MediaStreamTrackInterface::kEnded);
548 } else {
549 // This is needed in case the local description caused the track to be
550 // rejected, then later accepted, without being destroyed.
551 SetRemoteTracksState(cricket::MEDIA_TYPE_VIDEO,
552 MediaStreamTrackInterface::kLive);
553 } 541 }
554 const cricket::VideoContentDescription* video_desc = 542 const cricket::VideoContentDescription* video_desc =
555 static_cast<const cricket::VideoContentDescription*>( 543 static_cast<const cricket::VideoContentDescription*>(
556 video_content->description); 544 video_content->description);
557 UpdateLocalTracks(video_desc->streams(), video_desc->type()); 545 UpdateLocalTracks(video_desc->streams(), video_desc->type());
558 } 546 }
559 547
560 const cricket::ContentInfo* data_content = 548 const cricket::ContentInfo* data_content =
561 GetFirstDataContent(desc->description()); 549 GetFirstDataContent(desc->description());
562 if (data_content) { 550 if (data_content) {
563 const cricket::DataContentDescription* data_desc = 551 const cricket::DataContentDescription* data_desc =
564 static_cast<const cricket::DataContentDescription*>( 552 static_cast<const cricket::DataContentDescription*>(
565 data_content->description); 553 data_content->description);
566 if (rtc::starts_with( 554 if (rtc::starts_with(
567 data_desc->protocol().data(), cricket::kMediaProtocolRtpPrefix)) { 555 data_desc->protocol().data(), cricket::kMediaProtocolRtpPrefix)) {
568 UpdateLocalRtpDataChannels(data_desc->streams()); 556 UpdateLocalRtpDataChannels(data_desc->streams());
569 } 557 }
570 } 558 }
571 } 559 }
572 560
573 void MediaStreamSignaling::OnAudioChannelClose() { 561 void MediaStreamSignaling::OnAudioChannelClose() {
574 SetRemoteTracksState(cricket::MEDIA_TYPE_AUDIO, 562 RejectRemoteTracks(cricket::MEDIA_TYPE_AUDIO);
575 MediaStreamTrackInterface::kEnded);
576 } 563 }
577 564
578 void MediaStreamSignaling::OnVideoChannelClose() { 565 void MediaStreamSignaling::OnVideoChannelClose() {
579 SetRemoteTracksState(cricket::MEDIA_TYPE_VIDEO, 566 RejectRemoteTracks(cricket::MEDIA_TYPE_VIDEO);
580 MediaStreamTrackInterface::kEnded);
581 } 567 }
582 568
583 void MediaStreamSignaling::OnDataChannelClose() { 569 void MediaStreamSignaling::OnDataChannelClose() {
584 // Use a temporary copy of the RTP/SCTP DataChannel list because the 570 // Use a temporary copy of the RTP/SCTP DataChannel list because the
585 // DataChannel may callback to us and try to modify the list. 571 // DataChannel may callback to us and try to modify the list.
586 RtpDataChannels temp_rtp_dcs; 572 RtpDataChannels temp_rtp_dcs;
587 temp_rtp_dcs.swap(rtp_data_channels_); 573 temp_rtp_dcs.swap(rtp_data_channels_);
588 RtpDataChannels::iterator it1 = temp_rtp_dcs.begin(); 574 RtpDataChannels::iterator it1 = temp_rtp_dcs.begin();
589 for (; it1 != temp_rtp_dcs.end(); ++it1) { 575 for (; it1 != temp_rtp_dcs.end(); ++it1) {
590 it1->second->OnDataEngineClose(); 576 it1->second->OnDataEngineClose();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 if (video_track) { 671 if (video_track) {
686 video_track->set_state(webrtc::MediaStreamTrackInterface::kEnded); 672 video_track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
687 stream->RemoveTrack(video_track); 673 stream->RemoveTrack(video_track);
688 stream_observer_->OnRemoveRemoteVideoTrack(stream, video_track); 674 stream_observer_->OnRemoveRemoteVideoTrack(stream, video_track);
689 } 675 }
690 } else { 676 } else {
691 ASSERT(false && "Invalid media type"); 677 ASSERT(false && "Invalid media type");
692 } 678 }
693 } 679 }
694 680
695 void MediaStreamSignaling::SetRemoteTracksState( 681 void MediaStreamSignaling::RejectRemoteTracks(cricket::MediaType media_type) {
696 cricket::MediaType media_type,
697 MediaStreamTrackInterface::TrackState state) {
698 TrackInfos* current_tracks = GetRemoteTracks(media_type); 682 TrackInfos* current_tracks = GetRemoteTracks(media_type);
699 for (TrackInfos::iterator track_it = current_tracks->begin(); 683 for (TrackInfos::iterator track_it = current_tracks->begin();
700 track_it != current_tracks->end(); ++track_it) { 684 track_it != current_tracks->end(); ++track_it) {
701 const TrackInfo& info = *track_it; 685 const TrackInfo& info = *track_it;
702 MediaStreamInterface* stream = remote_streams_->find(info.stream_label); 686 MediaStreamInterface* stream = remote_streams_->find(info.stream_label);
703 if (media_type == cricket::MEDIA_TYPE_AUDIO) { 687 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
704 AudioTrackInterface* track = stream->FindAudioTrack(info.track_id); 688 AudioTrackInterface* track = stream->FindAudioTrack(info.track_id);
705 // There's no guarantee the track is still available, e.g. the track may 689 // There's no guarantee the track is still available, e.g. the track may
706 // have been removed from the stream by javascript. 690 // have been removed from the stream by javascript.
707 if (track) { 691 if (track) {
708 track->set_state(state); 692 track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
709 } 693 }
710 } 694 }
711 if (media_type == cricket::MEDIA_TYPE_VIDEO) { 695 if (media_type == cricket::MEDIA_TYPE_VIDEO) {
712 VideoTrackInterface* track = stream->FindVideoTrack(info.track_id); 696 VideoTrackInterface* track = stream->FindVideoTrack(info.track_id);
713 // There's no guarantee the track is still available, e.g. the track may 697 // There's no guarantee the track is still available, e.g. the track may
714 // have been removed from the stream by javascript. 698 // have been removed from the stream by javascript.
715 if (track) { 699 if (track) {
716 track->set_state(state); 700 track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
717 } 701 }
718 } 702 }
719 } 703 }
720 } 704 }
721 705
722 void MediaStreamSignaling::UpdateEndedRemoteMediaStreams() { 706 void MediaStreamSignaling::UpdateEndedRemoteMediaStreams() {
723 std::vector<scoped_refptr<MediaStreamInterface> > streams_to_remove; 707 std::vector<scoped_refptr<MediaStreamInterface> > streams_to_remove;
724 for (size_t i = 0; i < remote_streams_->count(); ++i) { 708 for (size_t i = 0; i < remote_streams_->count(); ++i) {
725 MediaStreamInterface*stream = remote_streams_->at(i); 709 MediaStreamInterface*stream = remote_streams_->at(i);
726 if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) { 710 if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) {
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 int MediaStreamSignaling::FindDataChannelBySid(int sid) const { 1021 int MediaStreamSignaling::FindDataChannelBySid(int sid) const {
1038 for (size_t i = 0; i < sctp_data_channels_.size(); ++i) { 1022 for (size_t i = 0; i < sctp_data_channels_.size(); ++i) {
1039 if (sctp_data_channels_[i]->id() == sid) { 1023 if (sctp_data_channels_[i]->id() == sid) {
1040 return static_cast<int>(i); 1024 return static_cast<int>(i);
1041 } 1025 }
1042 } 1026 }
1043 return -1; 1027 return -1;
1044 } 1028 }
1045 1029
1046 } // namespace webrtc 1030 } // namespace webrtc
OLDNEW
« no previous file with comments | « talk/app/webrtc/mediastreamsignaling.h ('k') | talk/app/webrtc/peerconnection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698