xref: /aosp_15_r20/external/webrtc/pc/rtp_parameters_conversion.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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