Make the media content send only if offerToReceive is false while local streams exist. We previously do not add the media content if offerToReceive is false. BUG=3833 R=pthatcher@webrtc.org Review URL: https://webrtc-codereview.appspot.com/26609004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7390 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/session/media/mediasession.cc b/talk/session/media/mediasession.cc index 92dd257..54eeffa 100644 --- a/talk/session/media/mediasession.cc +++ b/talk/session/media/mediasession.cc
@@ -1075,37 +1075,33 @@ return type_str; } -void MediaSessionOptions::AddStream(MediaType type, +void MediaSessionOptions::AddSendStream(MediaType type, const std::string& id, const std::string& sync_label) { - AddStreamInternal(type, id, sync_label, 1); + AddSendStreamInternal(type, id, sync_label, 1); } -void MediaSessionOptions::AddVideoStream( +void MediaSessionOptions::AddSendVideoStream( const std::string& id, const std::string& sync_label, int num_sim_layers) { - AddStreamInternal(MEDIA_TYPE_VIDEO, id, sync_label, num_sim_layers); + AddSendStreamInternal(MEDIA_TYPE_VIDEO, id, sync_label, num_sim_layers); } -void MediaSessionOptions::AddStreamInternal( +void MediaSessionOptions::AddSendStreamInternal( MediaType type, const std::string& id, const std::string& sync_label, int num_sim_layers) { streams.push_back(Stream(type, id, sync_label, num_sim_layers)); - if (type == MEDIA_TYPE_VIDEO) - has_video = true; - else if (type == MEDIA_TYPE_AUDIO) - has_audio = true; // If we haven't already set the data_channel_type, and we add a // stream, we assume it's an RTP data stream. - else if (type == MEDIA_TYPE_DATA && data_channel_type == DCT_NONE) + if (type == MEDIA_TYPE_DATA && data_channel_type == DCT_NONE) data_channel_type = DCT_RTP; } -void MediaSessionOptions::RemoveStream(MediaType type, +void MediaSessionOptions::RemoveSendStream(MediaType type, const std::string& id) { Streams::iterator stream_it = streams.begin(); for (; stream_it != streams.end(); ++stream_it) { @@ -1117,6 +1113,16 @@ ASSERT(false); } +bool MediaSessionOptions::HasSendMediaStream(MediaType type) const { + Streams::const_iterator stream_it = streams.begin(); + for (; stream_it != streams.end(); ++stream_it) { + if (stream_it->type == type) { + return true; + } + } + return false; +} + MediaSessionDescriptionFactory::MediaSessionDescriptionFactory( const TransportDescriptionFactory* transport_desc_factory) : secure_(SEC_DISABLED), @@ -1195,14 +1201,15 @@ } } } + // Append contents that are not in |current_description|. - if (!audio_added && options.has_audio && + if (!audio_added && options.has_audio() && !AddAudioContentForOffer(options, current_description, audio_rtp_extensions, audio_codecs, ¤t_streams, offer.get())) { return NULL; } - if (!video_added && options.has_video && + if (!video_added && options.has_video() && !AddVideoContentForOffer(options, current_description, video_rtp_extensions, video_codecs, ¤t_streams, offer.get())) { @@ -1460,6 +1467,10 @@ bool secure_transport = (transport_desc_factory_->secure() != SEC_DISABLED); SetMediaProtocol(secure_transport, audio.get()); + if (!options.recv_audio) { + audio->set_direction(MD_SENDONLY); + } + desc->AddContent(CN_AUDIO, NS_JINGLE_RTP, audio.release()); if (!AddTransportOffer(CN_AUDIO, options.transport_options, current_description, desc)) { @@ -1500,6 +1511,11 @@ bool secure_transport = (transport_desc_factory_->secure() != SEC_DISABLED); SetMediaProtocol(secure_transport, video.get()); + + if (!options.recv_video) { + video->set_direction(MD_SENDONLY); + } + desc->AddContent(CN_VIDEO, NS_JINGLE_RTP, video.release()); if (!AddTransportOffer(CN_VIDEO, options.transport_options, current_description, desc)) { @@ -1610,7 +1626,7 @@ return false; // Fails the session setup. } - bool rejected = !options.has_audio || audio_content->rejected || + bool rejected = !options.has_audio() || audio_content->rejected || !IsMediaProtocolSupported(MEDIA_TYPE_AUDIO, audio_answer->protocol(), audio_transport->secure()); @@ -1663,7 +1679,7 @@ video_answer.get())) { return false; } - bool rejected = !options.has_video || video_content->rejected || + bool rejected = !options.has_video() || video_content->rejected || !IsMediaProtocolSupported(MEDIA_TYPE_VIDEO, video_answer->protocol(), video_transport->secure());