|  | /* | 
|  | *  Copyright 2017 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #ifndef PC_RTP_PARAMETERS_CONVERSION_H_ | 
|  | #define PC_RTP_PARAMETERS_CONVERSION_H_ | 
|  |  | 
|  | #include <iosfwd> | 
|  | #include <vector> | 
|  |  | 
|  | #include "absl/types/optional.h" | 
|  | #include "api/rtc_error.h" | 
|  | #include "api/rtp_parameters.h" | 
|  | #include "media/base/codec.h" | 
|  | #include "media/base/stream_params.h" | 
|  | #include "pc/session_description.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | // NOTE: Some functions are templated for convenience, such that template-based | 
|  | // code dealing with AudioContentDescription and VideoContentDescription can | 
|  | // use this easily. Such methods are usable with cricket::AudioCodec and | 
|  | // cricket::VideoCodec. | 
|  |  | 
|  | //*************************************************************************** | 
|  | // Functions for converting from new webrtc:: structures to old cricket:: | 
|  | // structures. | 
|  | // | 
|  | // As the return values imply, all of these functions do validation of the | 
|  | // parameters and return an error if they're invalid. It's expected that any | 
|  | // default values (such as video clock rate of 90000) have been filled by the | 
|  | // time the webrtc:: structure is being converted to the cricket:: one. | 
|  | // | 
|  | // These are expected to be used when parameters are passed into an RtpSender | 
|  | // or RtpReceiver, and need to be validated and converted so they can be | 
|  | // applied to the media engine level. | 
|  | //*************************************************************************** | 
|  |  | 
|  | // Returns error on invalid input. Certain message types are only valid for | 
|  | // certain feedback types. | 
|  | RTCErrorOr<cricket::FeedbackParam> ToCricketFeedbackParam( | 
|  | const RtcpFeedback& feedback); | 
|  |  | 
|  | // Verifies that the codec kind is correct, and it has mandatory parameters | 
|  | // filled, with values in valid ranges. | 
|  | template <typename C> | 
|  | RTCErrorOr<C> ToCricketCodec(const RtpCodecParameters& codec); | 
|  |  | 
|  | // Verifies that payload types aren't duplicated, in addition to normal | 
|  | // validation. | 
|  | template <typename C> | 
|  | RTCErrorOr<std::vector<C>> ToCricketCodecs( | 
|  | const std::vector<RtpCodecParameters>& codecs); | 
|  |  | 
|  | // SSRCs are allowed to be ommitted. This may be used for receive parameters | 
|  | // where SSRCs are unsignaled. | 
|  | RTCErrorOr<cricket::StreamParamsVec> ToCricketStreamParamsVec( | 
|  | const std::vector<RtpEncodingParameters>& encodings); | 
|  |  | 
|  | //***************************************************************************** | 
|  | // Functions for converting from old cricket:: structures to new webrtc:: | 
|  | // structures. Unlike the above functions, these are permissive with regards to | 
|  | // input validation; it's assumed that any necessary validation already | 
|  | // occurred. | 
|  | // | 
|  | // These are expected to be used either to convert from audio/video engine | 
|  | // capabilities to RtpCapabilities, or to convert from already-parsed SDP | 
|  | // (in the form of cricket:: structures) to webrtc:: structures. The latter | 
|  | // functionality is not yet implemented. | 
|  | //***************************************************************************** | 
|  |  | 
|  | // Returns empty value if |cricket_feedback| is a feedback type not | 
|  | // supported/recognized. | 
|  | absl::optional<RtcpFeedback> ToRtcpFeedback( | 
|  | const cricket::FeedbackParam& cricket_feedback); | 
|  |  | 
|  | std::vector<RtpEncodingParameters> ToRtpEncodings( | 
|  | const cricket::StreamParamsVec& stream_params); | 
|  |  | 
|  | template <typename C> | 
|  | RtpCodecParameters ToRtpCodecParameters(const C& cricket_codec); | 
|  |  | 
|  | template <typename C> | 
|  | RtpCodecCapability ToRtpCodecCapability(const C& cricket_codec); | 
|  |  | 
|  | template <class C> | 
|  | RtpCapabilities ToRtpCapabilities( | 
|  | const std::vector<C>& 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); | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // PC_RTP_PARAMETERS_CONVERSION_H_ |