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 1570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1581 } | 1581 } |
1582 | 1582 |
1583 parameters_.config.rtp.c_name = sp.cname; | 1583 parameters_.config.rtp.c_name = sp.cname; |
1584 if (rtp_extensions) { | 1584 if (rtp_extensions) { |
1585 parameters_.config.rtp.extensions = *rtp_extensions; | 1585 parameters_.config.rtp.extensions = *rtp_extensions; |
1586 } | 1586 } |
1587 parameters_.config.rtp.rtcp_mode = send_params.rtcp.reduced_size | 1587 parameters_.config.rtp.rtcp_mode = send_params.rtcp.reduced_size |
1588 ? webrtc::RtcpMode::kReducedSize | 1588 ? webrtc::RtcpMode::kReducedSize |
1589 : webrtc::RtcpMode::kCompound; | 1589 : webrtc::RtcpMode::kCompound; |
1590 if (codec_settings) { | 1590 if (codec_settings) { |
1591 SetCodec(*codec_settings); | 1591 SetCodec(*codec_settings, false); |
pthatcher1
2017/02/27 18:30:38
This would be much more clear as:
bool force_enco
sprang_webrtc
2017/02/27 19:37:23
Done.
| |
1592 } | 1592 } |
1593 } | 1593 } |
1594 | 1594 |
1595 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() { | 1595 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() { |
1596 if (stream_ != NULL) { | 1596 if (stream_ != NULL) { |
1597 call_->DestroyVideoSendStream(stream_); | 1597 call_->DestroyVideoSendStream(stream_); |
1598 } | 1598 } |
1599 DestroyVideoEncoder(&allocated_encoder_); | 1599 DestroyVideoEncoder(&allocated_encoder_); |
1600 } | 1600 } |
1601 | 1601 |
1602 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( | 1602 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetVideoSend( |
1603 bool enable, | 1603 bool enable, |
1604 const VideoOptions* options, | 1604 const VideoOptions* options, |
1605 rtc::VideoSourceInterface<webrtc::VideoFrame>* source) { | 1605 rtc::VideoSourceInterface<webrtc::VideoFrame>* source) { |
1606 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetVideoSend"); | 1606 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetVideoSend"); |
1607 RTC_DCHECK_RUN_ON(&thread_checker_); | 1607 RTC_DCHECK_RUN_ON(&thread_checker_); |
1608 | 1608 |
1609 // Ignore |options| pointer if |enable| is false. | 1609 // Ignore |options| pointer if |enable| is false. |
1610 bool options_present = enable && options; | 1610 bool options_present = enable && options; |
1611 | 1611 |
1612 if (options_present) { | 1612 if (options_present) { |
1613 VideoOptions old_options = parameters_.options; | 1613 VideoOptions old_options = parameters_.options; |
1614 parameters_.options.SetAll(*options); | 1614 parameters_.options.SetAll(*options); |
1615 if (parameters_.options.is_screencast.value_or(false) != | |
1616 old_options.is_screencast.value_or(false) && | |
1617 parameters_.codec_settings) { | |
1618 // If screen content settings change, we may need to recreate the codec | |
1619 // instance so that the correct type is used. | |
1620 SetCodec(*parameters_.codec_settings, true); | |
pthatcher1
2017/02/27 18:30:38
And here:
bool force_encoder_allocation = true;
S
sprang_webrtc
2017/02/27 19:37:23
Done.
| |
1621 // Mark screenshare parameter as being updated, then test for any other | |
1622 // changes that may require codec reconfiguration. | |
1623 old_options.is_screencast = options->is_screencast; | |
1624 } | |
1615 if (parameters_.options != old_options) { | 1625 if (parameters_.options != old_options) { |
1616 ReconfigureEncoder(); | 1626 ReconfigureEncoder(); |
1617 } | 1627 } |
1618 } | 1628 } |
1619 | 1629 |
1620 if (source_ && stream_) { | 1630 if (source_ && stream_) { |
1621 stream_->SetSource( | 1631 stream_->SetSource( |
1622 nullptr, webrtc::VideoSendStream::DegradationPreference::kBalanced); | 1632 nullptr, webrtc::VideoSendStream::DegradationPreference::kBalanced); |
1623 } | 1633 } |
1624 // Switch to the new source. | 1634 // Switch to the new source. |
(...skipping 13 matching lines...) Expand all Loading... | |
1638 return true; | 1648 return true; |
1639 } | 1649 } |
1640 | 1650 |
1641 const std::vector<uint32_t>& | 1651 const std::vector<uint32_t>& |
1642 WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const { | 1652 WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const { |
1643 return ssrcs_; | 1653 return ssrcs_; |
1644 } | 1654 } |
1645 | 1655 |
1646 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder | 1656 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder |
1647 WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder( | 1657 WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoder( |
1648 const VideoCodec& codec) { | 1658 const VideoCodec& codec, |
1659 bool force_encoder_allocation) { | |
1649 RTC_DCHECK_RUN_ON(&thread_checker_); | 1660 RTC_DCHECK_RUN_ON(&thread_checker_); |
1650 // Do not re-create encoders of the same type. | 1661 // Do not re-create encoders of the same type. |
1651 if (codec == allocated_encoder_.codec && | 1662 if (!force_encoder_allocation && codec == allocated_encoder_.codec && |
1652 allocated_encoder_.encoder != nullptr) { | 1663 allocated_encoder_.encoder != nullptr) { |
1653 return allocated_encoder_; | 1664 return allocated_encoder_; |
1654 } | 1665 } |
1655 | 1666 |
1656 // Try creating external encoder. | 1667 // Try creating external encoder. |
1657 if (external_encoder_factory_ != nullptr && | 1668 if (external_encoder_factory_ != nullptr && |
1658 FindMatchingCodec(external_encoder_factory_->supported_codecs(), codec)) { | 1669 FindMatchingCodec(external_encoder_factory_->supported_codecs(), codec)) { |
1659 webrtc::VideoEncoder* encoder = | 1670 webrtc::VideoEncoder* encoder = |
1660 external_encoder_factory_->CreateVideoEncoder(codec); | 1671 external_encoder_factory_->CreateVideoEncoder(codec); |
1661 if (encoder != nullptr) | 1672 if (encoder != nullptr) |
(...skipping 26 matching lines...) Expand all Loading... | |
1688 void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder( | 1699 void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder( |
1689 AllocatedEncoder* encoder) { | 1700 AllocatedEncoder* encoder) { |
1690 RTC_DCHECK_RUN_ON(&thread_checker_); | 1701 RTC_DCHECK_RUN_ON(&thread_checker_); |
1691 if (encoder->external) { | 1702 if (encoder->external) { |
1692 external_encoder_factory_->DestroyVideoEncoder(encoder->external_encoder); | 1703 external_encoder_factory_->DestroyVideoEncoder(encoder->external_encoder); |
1693 } | 1704 } |
1694 delete encoder->encoder; | 1705 delete encoder->encoder; |
1695 } | 1706 } |
1696 | 1707 |
1697 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec( | 1708 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodec( |
1698 const VideoCodecSettings& codec_settings) { | 1709 const VideoCodecSettings& codec_settings, |
1710 bool force_encoder_allocation) { | |
1699 RTC_DCHECK_RUN_ON(&thread_checker_); | 1711 RTC_DCHECK_RUN_ON(&thread_checker_); |
1700 parameters_.encoder_config = CreateVideoEncoderConfig(codec_settings.codec); | 1712 parameters_.encoder_config = CreateVideoEncoderConfig(codec_settings.codec); |
1701 RTC_DCHECK_GT(parameters_.encoder_config.number_of_streams, 0); | 1713 RTC_DCHECK_GT(parameters_.encoder_config.number_of_streams, 0); |
1702 | 1714 |
1703 AllocatedEncoder new_encoder = CreateVideoEncoder(codec_settings.codec); | 1715 AllocatedEncoder new_encoder = |
1716 CreateVideoEncoder(codec_settings.codec, force_encoder_allocation); | |
1704 parameters_.config.encoder_settings.encoder = new_encoder.encoder; | 1717 parameters_.config.encoder_settings.encoder = new_encoder.encoder; |
1705 parameters_.config.encoder_settings.full_overuse_time = new_encoder.external; | 1718 parameters_.config.encoder_settings.full_overuse_time = new_encoder.external; |
1706 parameters_.config.encoder_settings.payload_name = codec_settings.codec.name; | 1719 parameters_.config.encoder_settings.payload_name = codec_settings.codec.name; |
1707 parameters_.config.encoder_settings.payload_type = codec_settings.codec.id; | 1720 parameters_.config.encoder_settings.payload_type = codec_settings.codec.id; |
1708 if (new_encoder.external) { | 1721 if (new_encoder.external) { |
1709 webrtc::VideoCodecType type = | 1722 webrtc::VideoCodecType type = |
1710 webrtc::PayloadNameToCodecType(codec_settings.codec.name) | 1723 webrtc::PayloadNameToCodecType(codec_settings.codec.name) |
1711 .value_or(webrtc::kVideoCodecUnknown); | 1724 .value_or(webrtc::kVideoCodecUnknown); |
1712 parameters_.config.encoder_settings.internal_source = | 1725 parameters_.config.encoder_settings.internal_source = |
1713 external_encoder_factory_->EncoderTypeHasInternalSource(type); | 1726 external_encoder_factory_->EncoderTypeHasInternalSource(type); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1760 if (params.max_bandwidth_bps) { | 1773 if (params.max_bandwidth_bps) { |
1761 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; | 1774 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; |
1762 ReconfigureEncoder(); | 1775 ReconfigureEncoder(); |
1763 } | 1776 } |
1764 if (params.conference_mode) { | 1777 if (params.conference_mode) { |
1765 parameters_.conference_mode = *params.conference_mode; | 1778 parameters_.conference_mode = *params.conference_mode; |
1766 } | 1779 } |
1767 | 1780 |
1768 // Set codecs and options. | 1781 // Set codecs and options. |
1769 if (params.codec) { | 1782 if (params.codec) { |
1770 SetCodec(*params.codec); | 1783 SetCodec(*params.codec, false); |
1771 recreate_stream = false; // SetCodec has already recreated the stream. | 1784 recreate_stream = false; // SetCodec has already recreated the stream. |
1772 } else if (params.conference_mode && parameters_.codec_settings) { | 1785 } else if (params.conference_mode && parameters_.codec_settings) { |
1773 SetCodec(*parameters_.codec_settings); | 1786 SetCodec(*parameters_.codec_settings, false); |
pthatcher1
2017/02/27 18:30:38
And these two:
bool force_encoder_allocation = fa
sprang_webrtc
2017/02/27 19:37:23
Done.
| |
1774 recreate_stream = false; // SetCodec has already recreated the stream. | 1787 recreate_stream = false; // SetCodec has already recreated the stream. |
1775 } | 1788 } |
1776 if (recreate_stream) { | 1789 if (recreate_stream) { |
1777 LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters"; | 1790 LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetSendParameters"; |
1778 RecreateWebRtcStream(); | 1791 RecreateWebRtcStream(); |
1779 } | 1792 } |
1780 } | 1793 } |
1781 | 1794 |
1782 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters( | 1795 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters( |
1783 const webrtc::RtpParameters& new_parameters) { | 1796 const webrtc::RtpParameters& new_parameters) { |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2527 rtx_mapping[video_codecs[i].codec.id] != | 2540 rtx_mapping[video_codecs[i].codec.id] != |
2528 ulpfec_config.red_payload_type) { | 2541 ulpfec_config.red_payload_type) { |
2529 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2542 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2530 } | 2543 } |
2531 } | 2544 } |
2532 | 2545 |
2533 return video_codecs; | 2546 return video_codecs; |
2534 } | 2547 } |
2535 | 2548 |
2536 } // namespace cricket | 2549 } // namespace cricket |
OLD | NEW |