| 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 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamCcm, kRtcpFbCcmParamFir)); | 175 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamCcm, kRtcpFbCcmParamFir)); |
| 176 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty)); | 176 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kParamValueEmpty)); |
| 177 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtcpFbNackParamPli)); | 177 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamNack, kRtcpFbNackParamPli)); |
| 178 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamRemb, kParamValueEmpty)); | 178 codec->AddFeedbackParam(FeedbackParam(kRtcpFbParamRemb, kParamValueEmpty)); |
| 179 codec->AddFeedbackParam( | 179 codec->AddFeedbackParam( |
| 180 FeedbackParam(kRtcpFbParamTransportCc, kParamValueEmpty)); | 180 FeedbackParam(kRtcpFbParamTransportCc, kParamValueEmpty)); |
| 181 } | 181 } |
| 182 | 182 |
| 183 static VideoCodec MakeVideoCodecWithDefaultFeedbackParams(int payload_type, | 183 static VideoCodec MakeVideoCodecWithDefaultFeedbackParams(int payload_type, |
| 184 const char* name) { | 184 const char* name) { |
| 185 VideoCodec codec(payload_type, name, kDefaultVideoMaxWidth, | 185 VideoCodec codec(payload_type, name); |
| 186 kDefaultVideoMaxHeight, kDefaultVideoMaxFramerate); | |
| 187 AddDefaultFeedbackParams(&codec); | 186 AddDefaultFeedbackParams(&codec); |
| 188 return codec; | 187 return codec; |
| 189 } | 188 } |
| 190 | 189 |
| 191 static std::string CodecVectorToString(const std::vector<VideoCodec>& codecs) { | 190 static std::string CodecVectorToString(const std::vector<VideoCodec>& codecs) { |
| 192 std::stringstream out; | 191 std::stringstream out; |
| 193 out << '{'; | 192 out << '{'; |
| 194 for (size_t i = 0; i < codecs.size(); ++i) { | 193 for (size_t i = 0; i < codecs.size(); ++i) { |
| 195 out << codecs[i].ToString(); | 194 out << codecs[i].ToString(); |
| 196 if (i != codecs.size() - 1) { | 195 if (i != codecs.size() - 1) { |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 // we only support up to 8 external payload types. | 666 // we only support up to 8 external payload types. |
| 668 // TODO(deadbeef): mediasession.cc already has code to dynamically | 667 // TODO(deadbeef): mediasession.cc already has code to dynamically |
| 669 // determine a payload type. We should be able to just leave the payload | 668 // determine a payload type. We should be able to just leave the payload |
| 670 // type empty and let mediasession determine it. However, currently RTX | 669 // type empty and let mediasession determine it. However, currently RTX |
| 671 // codecs are associated to codecs by payload type, meaning we DO need | 670 // codecs are associated to codecs by payload type, meaning we DO need |
| 672 // to allocate unique payload types here. So to make this change we would | 671 // to allocate unique payload types here. So to make this change we would |
| 673 // need to make RTX codecs associated by name instead. | 672 // need to make RTX codecs associated by name instead. |
| 674 const int kExternalVideoPayloadTypeBase = 120; | 673 const int kExternalVideoPayloadTypeBase = 120; |
| 675 size_t payload_type = kExternalVideoPayloadTypeBase + i; | 674 size_t payload_type = kExternalVideoPayloadTypeBase + i; |
| 676 RTC_DCHECK(payload_type < 128); | 675 RTC_DCHECK(payload_type < 128); |
| 677 VideoCodec codec(static_cast<int>(payload_type), codecs[i].name, | 676 VideoCodec codec(static_cast<int>(payload_type), codecs[i].name); |
| 678 codecs[i].max_width, codecs[i].max_height, | |
| 679 codecs[i].max_fps); | |
| 680 | 677 |
| 681 AddDefaultFeedbackParams(&codec); | 678 AddDefaultFeedbackParams(&codec); |
| 682 AddCodecAndMaybeRtxCodec(codec, &supported_codecs); | 679 AddCodecAndMaybeRtxCodec(codec, &supported_codecs); |
| 683 } | 680 } |
| 684 LOG(LS_INFO) << "Supported codecs (incl. external codecs): " | 681 LOG(LS_INFO) << "Supported codecs (incl. external codecs): " |
| 685 << CodecVectorToString(supported_codecs); | 682 << CodecVectorToString(supported_codecs); |
| 686 LOG(LS_INFO) << "Codecs supported by the external encoder factory: " | 683 LOG(LS_INFO) << "Codecs supported by the external encoder factory: " |
| 687 << out.str(); | 684 << out.str(); |
| 688 return supported_codecs; | 685 return supported_codecs; |
| 689 } | 686 } |
| (...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1998 parameters_.max_bitrate_bps); | 1995 parameters_.max_bitrate_bps); |
| 1999 | 1996 |
| 2000 int codec_max_bitrate_kbps; | 1997 int codec_max_bitrate_kbps; |
| 2001 if (codec.GetParam(kCodecParamMaxBitrate, &codec_max_bitrate_kbps)) { | 1998 if (codec.GetParam(kCodecParamMaxBitrate, &codec_max_bitrate_kbps)) { |
| 2002 stream_max_bitrate = codec_max_bitrate_kbps * 1000; | 1999 stream_max_bitrate = codec_max_bitrate_kbps * 1000; |
| 2003 } | 2000 } |
| 2004 encoder_config.max_bitrate_bps = stream_max_bitrate; | 2001 encoder_config.max_bitrate_bps = stream_max_bitrate; |
| 2005 | 2002 |
| 2006 int max_qp = kDefaultQpMax; | 2003 int max_qp = kDefaultQpMax; |
| 2007 codec.GetParam(kCodecParamMaxQuantization, &max_qp); | 2004 codec.GetParam(kCodecParamMaxQuantization, &max_qp); |
| 2008 int max_framerate = | |
| 2009 codec.framerate != 0 ? codec.framerate : kDefaultVideoMaxFramerate; | |
| 2010 | |
| 2011 encoder_config.video_stream_factory = | 2005 encoder_config.video_stream_factory = |
| 2012 new rtc::RefCountedObject<EncoderStreamFactory>( | 2006 new rtc::RefCountedObject<EncoderStreamFactory>( |
| 2013 codec.name, max_qp, max_framerate, is_screencast, | 2007 codec.name, max_qp, kDefaultVideoMaxFramerate, is_screencast, |
| 2014 parameters_.conference_mode); | 2008 parameters_.conference_mode); |
| 2015 return encoder_config; | 2009 return encoder_config; |
| 2016 } | 2010 } |
| 2017 | 2011 |
| 2018 void WebRtcVideoChannel2::WebRtcVideoSendStream::ReconfigureEncoder() { | 2012 void WebRtcVideoChannel2::WebRtcVideoSendStream::ReconfigureEncoder() { |
| 2019 RTC_DCHECK_RUN_ON(&thread_checker_); | 2013 RTC_DCHECK_RUN_ON(&thread_checker_); |
| 2020 if (!stream_) { | 2014 if (!stream_) { |
| 2021 // The webrtc::VideoSendStream |stream_|has not yet been created but other | 2015 // The webrtc::VideoSendStream |stream_|has not yet been created but other |
| 2022 // parameters has changed. | 2016 // parameters has changed. |
| 2023 return; | 2017 return; |
| (...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2692 rtx_mapping[video_codecs[i].codec.id] != | 2686 rtx_mapping[video_codecs[i].codec.id] != |
| 2693 ulpfec_config.red_payload_type) { | 2687 ulpfec_config.red_payload_type) { |
| 2694 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2688 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
| 2695 } | 2689 } |
| 2696 } | 2690 } |
| 2697 | 2691 |
| 2698 return video_codecs; | 2692 return video_codecs; |
| 2699 } | 2693 } |
| 2700 | 2694 |
| 2701 } // namespace cricket | 2695 } // namespace cricket |
| OLD | NEW |