| Index: talk/app/webrtc/peerconnection.cc
|
| diff --git a/talk/app/webrtc/peerconnection.cc b/talk/app/webrtc/peerconnection.cc
|
| index 3c0dc83aa387c21994fb0962308e39c86c9599a5..b1e146c9a4cd0ed73dfbc9fc4e6e6f7d8bf528c4 100644
|
| --- a/talk/app/webrtc/peerconnection.cc
|
| +++ b/talk/app/webrtc/peerconnection.cc
|
| @@ -453,27 +453,16 @@ bool ConvertRtcOptionsForOffer(
|
| return false;
|
| }
|
|
|
| - // According to the spec, offer to receive audio/video if the constraint is
|
| - // not set and there are send streams.
|
| - if (rtc_options.offer_to_receive_audio == RTCOfferAnswerOptions::kUndefined) {
|
| - session_options->recv_audio =
|
| - session_options->HasSendMediaStream(cricket::MEDIA_TYPE_AUDIO);
|
| - } else {
|
| + if (rtc_options.offer_to_receive_audio != RTCOfferAnswerOptions::kUndefined) {
|
| session_options->recv_audio = (rtc_options.offer_to_receive_audio > 0);
|
| }
|
| - if (rtc_options.offer_to_receive_video == RTCOfferAnswerOptions::kUndefined) {
|
| - session_options->recv_video =
|
| - session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO);
|
| - } else {
|
| + if (rtc_options.offer_to_receive_video != RTCOfferAnswerOptions::kUndefined) {
|
| session_options->recv_video = (rtc_options.offer_to_receive_video > 0);
|
| }
|
|
|
| session_options->vad_enabled = rtc_options.voice_activity_detection;
|
| session_options->transport_options.ice_restart = rtc_options.ice_restart;
|
| - session_options->bundle_enabled =
|
| - rtc_options.use_rtp_mux &&
|
| - (session_options->has_audio() || session_options->has_video() ||
|
| - session_options->has_data());
|
| + session_options->bundle_enabled = rtc_options.use_rtp_mux;
|
|
|
| return true;
|
| }
|
| @@ -515,10 +504,6 @@ bool ParseConstraintsForAnswer(const MediaConstraintsInterface* constraints,
|
| // kUseRtpMux defaults to true according to spec.
|
| session_options->bundle_enabled = true;
|
| }
|
| - session_options->bundle_enabled =
|
| - session_options->bundle_enabled &&
|
| - (session_options->has_audio() || session_options->has_video() ||
|
| - session_options->has_data());
|
|
|
| if (FindConstraint(constraints, MediaConstraintsInterface::kIceRestart,
|
| &value, &mandatory_constraints_satisfied)) {
|
| @@ -1033,8 +1018,8 @@ void PeerConnection::SetRemoteDescription(
|
| audio_content->description);
|
| UpdateRemoteStreamsList(desc->streams(), desc->type(), new_streams);
|
| remote_info_.default_audio_track_needed =
|
| - MediaContentDirectionHasSend(desc->direction()) &&
|
| - desc->streams().empty();
|
| + !remote_desc->msid_supported() && desc->streams().empty() &&
|
| + MediaContentDirectionHasSend(desc->direction());
|
| }
|
|
|
| // Find all video rtp streams and create corresponding remote VideoTracks
|
| @@ -1046,8 +1031,8 @@ void PeerConnection::SetRemoteDescription(
|
| video_content->description);
|
| UpdateRemoteStreamsList(desc->streams(), desc->type(), new_streams);
|
| remote_info_.default_video_track_needed =
|
| - MediaContentDirectionHasSend(desc->direction()) &&
|
| - desc->streams().empty();
|
| + !remote_desc->msid_supported() && desc->streams().empty() &&
|
| + MediaContentDirectionHasSend(desc->direction());
|
| }
|
|
|
| // Update the DataChannels with the information from the remote peer.
|
| @@ -1386,12 +1371,28 @@ void PeerConnection::PostCreateSessionDescriptionFailure(
|
| bool PeerConnection::GetOptionsForOffer(
|
| const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options,
|
| cricket::MediaSessionOptions* session_options) {
|
| - SetStreams(session_options, local_streams_, rtp_data_channels_);
|
| -
|
| if (!ConvertRtcOptionsForOffer(rtc_options, session_options)) {
|
| return false;
|
| }
|
|
|
| + SetStreams(session_options, local_streams_, rtp_data_channels_);
|
| + // Offer to receive audio/video if the constraint is not set and there are
|
| + // send streams, or we're currently receiving.
|
| + if (rtc_options.offer_to_receive_audio == RTCOfferAnswerOptions::kUndefined) {
|
| + session_options->recv_audio =
|
| + session_options->HasSendMediaStream(cricket::MEDIA_TYPE_AUDIO) ||
|
| + !remote_audio_tracks_.empty();
|
| + }
|
| + if (rtc_options.offer_to_receive_video == RTCOfferAnswerOptions::kUndefined) {
|
| + session_options->recv_video =
|
| + session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO) ||
|
| + !remote_video_tracks_.empty();
|
| + }
|
| + session_options->bundle_enabled =
|
| + session_options->bundle_enabled &&
|
| + (session_options->has_audio() || session_options->has_video() ||
|
| + session_options->has_data());
|
| +
|
| if (session_->data_channel_type() == cricket::DCT_SCTP && HasDataChannels()) {
|
| session_options->data_channel_type = cricket::DCT_SCTP;
|
| }
|
| @@ -1401,14 +1402,18 @@ bool PeerConnection::GetOptionsForOffer(
|
| bool PeerConnection::GetOptionsForAnswer(
|
| const MediaConstraintsInterface* constraints,
|
| cricket::MediaSessionOptions* session_options) {
|
| - SetStreams(session_options, local_streams_, rtp_data_channels_);
|
| session_options->recv_audio = false;
|
| session_options->recv_video = false;
|
| -
|
| if (!ParseConstraintsForAnswer(constraints, session_options)) {
|
| return false;
|
| }
|
|
|
| + SetStreams(session_options, local_streams_, rtp_data_channels_);
|
| + session_options->bundle_enabled =
|
| + session_options->bundle_enabled &&
|
| + (session_options->has_audio() || session_options->has_video() ||
|
| + session_options->has_data());
|
| +
|
| // RTP data channel is handled in MediaSessionOptions::AddStream. SCTP streams
|
| // are not signaled in the SDP so does not go through that path and must be
|
| // handled here.
|
|
|