OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 } | 726 } |
727 | 727 |
728 // Handle max bitrate. | 728 // Handle max bitrate. |
729 if (params.max_bandwidth_bps != bitrate_config_.max_bitrate_bps && | 729 if (params.max_bandwidth_bps != bitrate_config_.max_bitrate_bps && |
730 params.max_bandwidth_bps >= 0) { | 730 params.max_bandwidth_bps >= 0) { |
731 // 0 uncaps max bitrate (-1). | 731 // 0 uncaps max bitrate (-1). |
732 changed_params->max_bandwidth_bps = rtc::Optional<int>( | 732 changed_params->max_bandwidth_bps = rtc::Optional<int>( |
733 params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps); | 733 params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps); |
734 } | 734 } |
735 | 735 |
736 // Handle options. | |
737 // TODO(pbos): Require VideoSendParameters to contain a full set of options | |
738 // and check if params.options != options_ instead of applying a delta. | |
739 VideoOptions new_options = options_; | |
740 new_options.SetAll(params.options); | |
741 if (!(new_options == options_)) { | |
742 changed_params->options = rtc::Optional<VideoOptions>(new_options); | |
743 } | |
744 | |
745 // Handle RTCP mode. | 736 // Handle RTCP mode. |
746 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { | 737 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { |
747 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( | 738 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( |
748 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize | 739 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize |
749 : webrtc::RtcpMode::kCompound); | 740 : webrtc::RtcpMode::kCompound); |
750 } | 741 } |
751 | 742 |
752 return true; | 743 return true; |
753 } | 744 } |
754 | 745 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 bitrate_config_.min_bitrate_bps > max_bitrate_bps) { | 784 bitrate_config_.min_bitrate_bps > max_bitrate_bps) { |
794 bitrate_config_.min_bitrate_bps = max_bitrate_bps; | 785 bitrate_config_.min_bitrate_bps = max_bitrate_bps; |
795 } | 786 } |
796 bitrate_config_changed = true; | 787 bitrate_config_changed = true; |
797 } | 788 } |
798 | 789 |
799 if (bitrate_config_changed) { | 790 if (bitrate_config_changed) { |
800 call_->SetBitrateConfig(bitrate_config_); | 791 call_->SetBitrateConfig(bitrate_config_); |
801 } | 792 } |
802 | 793 |
803 if (changed_params.options) | |
804 options_.SetAll(*changed_params.options); | |
805 | |
806 { | 794 { |
807 rtc::CritScope stream_lock(&stream_crit_); | 795 rtc::CritScope stream_lock(&stream_crit_); |
808 for (auto& kv : send_streams_) { | 796 for (auto& kv : send_streams_) { |
809 kv.second->SetSendParameters(changed_params); | 797 kv.second->SetSendParameters(changed_params); |
810 } | 798 } |
811 if (changed_params.codec) { | 799 if (changed_params.codec) { |
812 // Update receive feedback parameters from new codec. | 800 // Update receive feedback parameters from new codec. |
813 LOG(LS_INFO) | 801 LOG(LS_INFO) |
814 << "SetFeedbackOptions on all the receive streams because the send " | 802 << "SetFeedbackOptions on all the receive streams because the send " |
815 "codec has changed."; | 803 "codec has changed."; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 LOG(LS_INFO) << "SetVideoSend (ssrc= " << ssrc << ", enable = " << enable | 931 LOG(LS_INFO) << "SetVideoSend (ssrc= " << ssrc << ", enable = " << enable |
944 << "options: " << (options ? options->ToString() : "nullptr") | 932 << "options: " << (options ? options->ToString() : "nullptr") |
945 << ")."; | 933 << ")."; |
946 | 934 |
947 // TODO(solenberg): The state change should be fully rolled back if any one of | 935 // TODO(solenberg): The state change should be fully rolled back if any one of |
948 // these calls fail. | 936 // these calls fail. |
949 if (!MuteStream(ssrc, !enable)) { | 937 if (!MuteStream(ssrc, !enable)) { |
950 return false; | 938 return false; |
951 } | 939 } |
952 if (enable && options) { | 940 if (enable && options) { |
953 VideoSendParameters new_params = send_params_; | 941 SetOptions(ssrc, *options); |
954 new_params.options.SetAll(*options); | |
955 SetSendParameters(send_params_); | |
956 } | 942 } |
957 return true; | 943 return true; |
958 } | 944 } |
959 | 945 |
960 bool WebRtcVideoChannel2::ValidateSendSsrcAvailability( | 946 bool WebRtcVideoChannel2::ValidateSendSsrcAvailability( |
961 const StreamParams& sp) const { | 947 const StreamParams& sp) const { |
962 for (uint32_t ssrc : sp.ssrcs) { | 948 for (uint32_t ssrc : sp.ssrcs) { |
963 if (send_ssrcs_.find(ssrc) != send_ssrcs_.end()) { | 949 if (send_ssrcs_.find(ssrc) != send_ssrcs_.end()) { |
964 LOG(LS_ERROR) << "Send stream with SSRC '" << ssrc << "' already exists."; | 950 LOG(LS_ERROR) << "Send stream with SSRC '" << ssrc << "' already exists."; |
965 return false; | 951 return false; |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 if (send_streams_.find(ssrc) == send_streams_.end()) { | 1355 if (send_streams_.find(ssrc) == send_streams_.end()) { |
1370 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; | 1356 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; |
1371 return false; | 1357 return false; |
1372 } | 1358 } |
1373 | 1359 |
1374 send_streams_[ssrc]->MuteStream(mute); | 1360 send_streams_[ssrc]->MuteStream(mute); |
1375 return true; | 1361 return true; |
1376 } | 1362 } |
1377 | 1363 |
1378 // TODO(pbos): Remove SetOptions in favor of SetSendParameters. | 1364 // TODO(pbos): Remove SetOptions in favor of SetSendParameters. |
1379 void WebRtcVideoChannel2::SetOptions(const VideoOptions& options) { | 1365 void WebRtcVideoChannel2::SetOptions(uint32_t ssrc, |
1380 VideoSendParameters new_params = send_params_; | 1366 const VideoOptions& options) { |
1381 new_params.options.SetAll(options); | 1367 LOG(LS_INFO) << "SetOptions: ssrc " << ssrc << ": " << options.ToString(); |
1382 SetSendParameters(send_params_); | 1368 |
| 1369 rtc::CritScope stream_lock(&stream_crit_); |
| 1370 if (send_streams_.find(ssrc) == send_streams_.end()) { |
| 1371 return; |
| 1372 } |
| 1373 send_streams_[ssrc]->SetOptions(options); |
1383 } | 1374 } |
1384 | 1375 |
1385 void WebRtcVideoChannel2::SetInterface(NetworkInterface* iface) { | 1376 void WebRtcVideoChannel2::SetInterface(NetworkInterface* iface) { |
1386 MediaChannel::SetInterface(iface); | 1377 MediaChannel::SetInterface(iface); |
1387 // Set the RTP recv/send buffer to a bigger size | 1378 // Set the RTP recv/send buffer to a bigger size |
1388 MediaChannel::SetOption(NetworkInterface::ST_RTP, | 1379 MediaChannel::SetOption(NetworkInterface::ST_RTP, |
1389 rtc::Socket::OPT_RCVBUF, | 1380 rtc::Socket::OPT_RCVBUF, |
1390 kVideoRtpBufferSize); | 1381 kVideoRtpBufferSize); |
1391 | 1382 |
1392 // Speculative change to increase the outbound socket buffer size. | 1383 // Speculative change to increase the outbound socket buffer size. |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1787 recreate_stream = true; | 1778 recreate_stream = true; |
1788 } | 1779 } |
1789 if (params.max_bandwidth_bps) { | 1780 if (params.max_bandwidth_bps) { |
1790 // Max bitrate has changed, reconfigure encoder settings on the next frame | 1781 // Max bitrate has changed, reconfigure encoder settings on the next frame |
1791 // or stream recreation. | 1782 // or stream recreation. |
1792 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; | 1783 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; |
1793 pending_encoder_reconfiguration_ = true; | 1784 pending_encoder_reconfiguration_ = true; |
1794 } | 1785 } |
1795 // Set codecs and options. | 1786 // Set codecs and options. |
1796 if (params.codec) { | 1787 if (params.codec) { |
1797 SetCodecAndOptions(*params.codec, | 1788 SetCodecAndOptions(*params.codec, parameters_.options); |
1798 params.options ? *params.options : parameters_.options); | |
1799 return; | 1789 return; |
1800 } else if (params.options) { | |
1801 // Reconfigure if codecs are already set. | |
1802 if (parameters_.codec_settings) { | |
1803 SetCodecAndOptions(*parameters_.codec_settings, *params.options); | |
1804 return; | |
1805 } else { | |
1806 parameters_.options = *params.options; | |
1807 } | |
1808 } | 1790 } |
1809 if (recreate_stream) { | 1791 if (recreate_stream) { |
1810 LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters"; | 1792 LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters"; |
1811 RecreateWebRtcStream(); | 1793 RecreateWebRtcStream(); |
1812 } | 1794 } |
1813 } | 1795 } |
1814 | 1796 |
1815 webrtc::VideoEncoderConfig | 1797 webrtc::VideoEncoderConfig |
1816 WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig( | 1798 WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig( |
1817 const Dimensions& dimensions, | 1799 const Dimensions& dimensions, |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2483 rtx_mapping[video_codecs[i].codec.id] != | 2465 rtx_mapping[video_codecs[i].codec.id] != |
2484 fec_settings.red_payload_type) { | 2466 fec_settings.red_payload_type) { |
2485 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2467 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2486 } | 2468 } |
2487 } | 2469 } |
2488 | 2470 |
2489 return video_codecs; | 2471 return video_codecs; |
2490 } | 2472 } |
2491 | 2473 |
2492 } // namespace cricket | 2474 } // namespace cricket |
OLD | NEW |