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