Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(802)

Unified Diff: webrtc/ortc/rtpparametersconversion.cc

Issue 2735853004: Add the function ToRtpParameters. (Closed)
Patch Set: Change the return type of ToRtpEncodings. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/ortc/rtpparametersconversion.cc
diff --git a/webrtc/ortc/rtpparametersconversion.cc b/webrtc/ortc/rtpparametersconversion.cc
index 63ee9c74dac6aec07b304fa73739a4834e2d145b..dfbde883f41e50c3e0d6285f9b8937161a19a678 100644
--- a/webrtc/ortc/rtpparametersconversion.cc
+++ b/webrtc/ortc/rtpparametersconversion.cc
@@ -277,6 +277,23 @@ rtc::Optional<RtcpFeedback> ToRtcpFeedback(
return rtc::Optional<RtcpFeedback>();
}
+std::vector<RtpEncodingParameters> ToRtpEncodings(
+ const cricket::StreamParamsVec& stream_params) {
+ std::vector<RtpEncodingParameters> rtp_encodings;
+ if (stream_params.size() > 0) {
Taylor Brandstetter 2017/03/08 22:35:49 What if there are more than 1 StreamParams? The si
Zhi Huang 2017/03/08 23:56:49 Oh, I was wrong. I thought that since ORTC api doe
Taylor Brandstetter 2017/03/09 00:41:43 You're right that the ORTC RtpSender/RtpReceiver d
+ const cricket::StreamParams& stream_param = stream_params[0];
+ RtpEncodingParameters rtp_encoding;
+ rtp_encoding.ssrc = rtc::Optional<uint32_t>(stream_param.first_ssrc());
Taylor Brandstetter 2017/03/08 22:35:49 nit: Instead of "= rtc::Optional...", you can do "
Zhi Huang 2017/03/08 23:56:49 Done.
+ uint32_t rtx_ssrc = 0;
+ if (stream_param.GetFidSsrc(stream_param.first_ssrc(), &rtx_ssrc)) {
+ RtpRtxParameters rtx_param(rtx_ssrc);
+ rtp_encoding.rtx = rtc::Optional<RtpRtxParameters>(rtx_param);
+ }
+ rtp_encodings.push_back(std::move(rtp_encoding));
+ }
+ return rtp_encodings;
+}
+
template <typename C>
cricket::MediaType KindOfCodec();
@@ -332,6 +349,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 +431,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

Powered by Google App Engine
This is Rietveld 408576698