Index: webrtc/ortc/rtpparametersconversion.cc |
diff --git a/webrtc/ortc/rtpparametersconversion.cc b/webrtc/ortc/rtpparametersconversion.cc |
index 63ee9c74dac6aec07b304fa73739a4834e2d145b..083c3b09c4bd6117eeca3b26472165f6f9f1c309 100644 |
--- a/webrtc/ortc/rtpparametersconversion.cc |
+++ b/webrtc/ortc/rtpparametersconversion.cc |
@@ -277,6 +277,22 @@ rtc::Optional<RtcpFeedback> ToRtcpFeedback( |
return rtc::Optional<RtcpFeedback>(); |
} |
+std::vector<RtpEncodingParameters> ToRtpEncodings( |
+ const cricket::StreamParamsVec& stream_params) { |
+ std::vector<RtpEncodingParameters> rtp_encodings; |
+ for (const cricket::StreamParams& stream_param : stream_params) { |
+ RtpEncodingParameters rtp_encoding; |
+ rtp_encoding.ssrc.emplace(stream_param.first_ssrc()); |
+ uint32_t rtx_ssrc = 0; |
+ if (stream_param.GetFidSsrc(stream_param.first_ssrc(), &rtx_ssrc)) { |
+ RtpRtxParameters rtx_param(rtx_ssrc); |
+ rtp_encoding.rtx.emplace(rtx_param); |
+ } |
+ rtp_encodings.push_back(std::move(rtp_encoding)); |
+ } |
+ return rtp_encodings; |
+} |
+ |
template <typename C> |
cricket::MediaType KindOfCodec(); |
@@ -332,6 +348,47 @@ template RtpCodecCapability ToRtpCodecCapability<cricket::AudioCodec>( |
template RtpCodecCapability ToRtpCodecCapability<cricket::VideoCodec>( |
const cricket::VideoCodec& cricket_codec); |
+template <typename C> |
+static void ToRtpCodecParametersTypeSpecific(const C& cricket_codec, |
+ RtpCodecParameters* codec); |
+template <> |
+void ToRtpCodecParametersTypeSpecific<cricket::AudioCodec>( |
+ const cricket::AudioCodec& cricket_codec, |
+ RtpCodecParameters* codec) { |
+ codec->num_channels = |
+ rtc::Optional<int>(static_cast<int>(cricket_codec.channels)); |
+} |
+ |
+template <> |
+void ToRtpCodecParametersTypeSpecific<cricket::VideoCodec>( |
+ const cricket::VideoCodec& cricket_codec, |
+ RtpCodecParameters* codec) {} |
+ |
+template <typename C> |
+RtpCodecParameters ToRtpCodecParameters(const C& cricket_codec) { |
+ RtpCodecParameters codec_param; |
+ codec_param.name = cricket_codec.name; |
+ codec_param.kind = KindOfCodec<C>(); |
+ codec_param.clock_rate.emplace(cricket_codec.clockrate); |
+ codec_param.payload_type = cricket_codec.id; |
+ for (const cricket::FeedbackParam& cricket_feedback : |
+ cricket_codec.feedback_params.params()) { |
+ rtc::Optional<RtcpFeedback> feedback = ToRtcpFeedback(cricket_feedback); |
+ if (feedback) { |
+ codec_param.rtcp_feedback.push_back(feedback.MoveValue()); |
+ } |
+ } |
+ ToRtpCodecParametersTypeSpecific(cricket_codec, &codec_param); |
+ codec_param.parameters.insert(cricket_codec.params.begin(), |
+ cricket_codec.params.end()); |
+ return codec_param; |
+} |
+ |
+template RtpCodecParameters ToRtpCodecParameters<cricket::AudioCodec>( |
+ const cricket::AudioCodec& cricket_codec); |
+template RtpCodecParameters ToRtpCodecParameters<cricket::VideoCodec>( |
+ const cricket::VideoCodec& cricket_codec); |
+ |
template <class C> |
RtpCapabilities ToRtpCapabilities( |
const std::vector<C>& cricket_codecs, |
@@ -373,4 +430,30 @@ template RtpCapabilities ToRtpCapabilities<cricket::VideoCodec>( |
const std::vector<cricket::VideoCodec>& cricket_codecs, |
const cricket::RtpHeaderExtensions& cricket_extensions); |
+template <class C> |
+RtpParameters ToRtpParameters( |
+ const std::vector<C>& cricket_codecs, |
+ const cricket::RtpHeaderExtensions& cricket_extensions, |
+ const cricket::StreamParamsVec& stream_params) { |
+ RtpParameters rtp_parameters; |
+ for (const C& cricket_codec : cricket_codecs) { |
+ rtp_parameters.codecs.push_back(ToRtpCodecParameters(cricket_codec)); |
+ } |
+ for (const RtpExtension& cricket_extension : cricket_extensions) { |
+ rtp_parameters.header_extensions.emplace_back(cricket_extension.uri, |
+ cricket_extension.id); |
+ } |
+ rtp_parameters.encodings = ToRtpEncodings(stream_params); |
+ return rtp_parameters; |
+} |
+ |
+template RtpParameters ToRtpParameters<cricket::AudioCodec>( |
+ const std::vector<cricket::AudioCodec>& cricket_codecs, |
+ const cricket::RtpHeaderExtensions& cricket_extensions, |
+ const cricket::StreamParamsVec& stream_params); |
+template RtpParameters ToRtpParameters<cricket::VideoCodec>( |
+ const std::vector<cricket::VideoCodec>& cricket_codecs, |
+ const cricket::RtpHeaderExtensions& cricket_extensions, |
+ const cricket::StreamParamsVec& stream_params); |
+ |
} // namespace webrtc |