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