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