1 /* 2 * Copyright 2017 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef PC_RTP_PARAMETERS_CONVERSION_H_ 12 #define PC_RTP_PARAMETERS_CONVERSION_H_ 13 14 #include <vector> 15 16 #include "absl/types/optional.h" 17 #include "api/rtc_error.h" 18 #include "api/rtp_parameters.h" 19 #include "media/base/codec.h" 20 #include "media/base/stream_params.h" 21 #include "pc/session_description.h" 22 23 namespace webrtc { 24 25 // NOTE: Some functions are templated for convenience, such that template-based 26 // code dealing with AudioContentDescription and VideoContentDescription can 27 // use this easily. Such methods are usable with cricket::AudioCodec and 28 // cricket::VideoCodec. 29 30 //*************************************************************************** 31 // Functions for converting from new webrtc:: structures to old cricket:: 32 // structures. 33 // 34 // As the return values imply, all of these functions do validation of the 35 // parameters and return an error if they're invalid. It's expected that any 36 // default values (such as video clock rate of 90000) have been filled by the 37 // time the webrtc:: structure is being converted to the cricket:: one. 38 // 39 // These are expected to be used when parameters are passed into an RtpSender 40 // or RtpReceiver, and need to be validated and converted so they can be 41 // applied to the media engine level. 42 //*************************************************************************** 43 44 // Returns error on invalid input. Certain message types are only valid for 45 // certain feedback types. 46 RTCErrorOr<cricket::FeedbackParam> ToCricketFeedbackParam( 47 const RtcpFeedback& feedback); 48 49 // Verifies that the codec kind is correct, and it has mandatory parameters 50 // filled, with values in valid ranges. 51 template <typename C> 52 RTCErrorOr<C> ToCricketCodec(const RtpCodecParameters& codec); 53 54 // Verifies that payload types aren't duplicated, in addition to normal 55 // validation. 56 template <typename C> 57 RTCErrorOr<std::vector<C>> ToCricketCodecs( 58 const std::vector<RtpCodecParameters>& codecs); 59 60 // SSRCs are allowed to be ommitted. This may be used for receive parameters 61 // where SSRCs are unsignaled. 62 RTCErrorOr<cricket::StreamParamsVec> ToCricketStreamParamsVec( 63 const std::vector<RtpEncodingParameters>& encodings); 64 65 //***************************************************************************** 66 // Functions for converting from old cricket:: structures to new webrtc:: 67 // structures. Unlike the above functions, these are permissive with regards to 68 // input validation; it's assumed that any necessary validation already 69 // occurred. 70 // 71 // These are expected to be used either to convert from audio/video engine 72 // capabilities to RtpCapabilities, or to convert from already-parsed SDP 73 // (in the form of cricket:: structures) to webrtc:: structures. The latter 74 // functionality is not yet implemented. 75 //***************************************************************************** 76 77 // Returns empty value if `cricket_feedback` is a feedback type not 78 // supported/recognized. 79 absl::optional<RtcpFeedback> ToRtcpFeedback( 80 const cricket::FeedbackParam& cricket_feedback); 81 82 std::vector<RtpEncodingParameters> ToRtpEncodings( 83 const cricket::StreamParamsVec& stream_params); 84 85 template <typename C> 86 RtpCodecParameters ToRtpCodecParameters(const C& cricket_codec); 87 88 template <typename C> 89 RtpCodecCapability ToRtpCodecCapability(const C& cricket_codec); 90 91 template <class C> 92 RtpCapabilities ToRtpCapabilities( 93 const std::vector<C>& cricket_codecs, 94 const cricket::RtpHeaderExtensions& cricket_extensions); 95 96 template <class C> 97 RtpParameters ToRtpParameters( 98 const std::vector<C>& cricket_codecs, 99 const cricket::RtpHeaderExtensions& cricket_extensions, 100 const cricket::StreamParamsVec& stream_params); 101 102 } // namespace webrtc 103 104 #endif // PC_RTP_PARAMETERS_CONVERSION_H_ 105