Chromium Code Reviews| 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 |