Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: webrtc/api/rtpparameters.h

Issue 2675173003: Adding "adapter" ORTC objects on top of ChannelManager/BaseChannel/etc. (Closed)
Patch Set: Add memcheck suppression for end-to-end tests. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/api/rtcerror.h ('k') | webrtc/api/udptransportinterface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/rtpparameters.h
diff --git a/webrtc/api/rtpparameters.h b/webrtc/api/rtpparameters.h
index f506c4031c3eacf6e923f3cea67d6f2f9586c4ee..e4fe47b845e30d0c9057b73ee3e9a8858152a5ee 100644
--- a/webrtc/api/rtpparameters.h
+++ b/webrtc/api/rtpparameters.h
@@ -16,6 +16,7 @@
#include <vector>
#include "webrtc/api/mediatypes.h"
+#include "webrtc/config.h"
#include "webrtc/base/optional.h"
namespace webrtc {
@@ -47,14 +48,13 @@ enum class FecMechanism {
// Used in RtcpFeedback struct.
enum class RtcpFeedbackType {
- ACK,
CCM,
NACK,
REMB, // "goog-remb"
TRANSPORT_CC,
};
-// Used in RtcpFeedback struct when type is ACK, NACK or CCM.
+// Used in RtcpFeedback struct when type is NACK or CCM.
enum class RtcpFeedbackMessageType {
// Equivalent to {type: "nack", parameter: undefined} in ORTC.
GENERIC_NACK,
@@ -76,7 +76,7 @@ enum class DegradationPreference {
enum class PriorityType { VERY_LOW, LOW, MEDIUM, HIGH };
struct RtcpFeedback {
- RtcpFeedbackType type = RtcpFeedbackType::ACK;
+ RtcpFeedbackType type = RtcpFeedbackType::CCM;
// Equivalent to ORTC "parameter" field with slight differences:
// 1. It's an enum instead of a string.
@@ -84,6 +84,12 @@ struct RtcpFeedback {
// rather than an unset "parameter" value.
rtc::Optional<RtcpFeedbackMessageType> message_type;
+ // Constructors for convenience.
+ RtcpFeedback() {}
+ explicit RtcpFeedback(RtcpFeedbackType type) : type(type) {}
+ RtcpFeedback(RtcpFeedbackType type, RtcpFeedbackMessageType message_type)
+ : type(type), message_type(message_type) {}
+
bool operator==(const RtcpFeedback& o) const {
return type == o.type && message_type == o.message_type;
}
@@ -126,7 +132,12 @@ struct RtpCodecCapability {
std::vector<RtcpFeedback> rtcp_feedback;
// Codec-specific parameters that must be signaled to the remote party.
+ //
// Corresponds to "a=fmtp" parameters in SDP.
+ //
+ // Contrary to ORTC, these parameters are named using all lowercase strings.
+ // This helps make the mapping to SDP simpler, if an application is using
+ // SDP. Boolean values are represented by the string "1".
std::unordered_map<std::string, std::string> parameters;
// Codec-specific parameters that may optionally be signaled to the remote
@@ -184,6 +195,12 @@ struct RtpHeaderExtensionCapability {
// TODO(deadbeef): Not implemented.
bool preferred_encrypt = false;
+ // Constructors for convenience.
+ RtpHeaderExtensionCapability() = default;
+ explicit RtpHeaderExtensionCapability(const std::string& uri) : uri(uri) {}
+ RtpHeaderExtensionCapability(const std::string& uri, int preferred_id)
+ : uri(uri), preferred_id(preferred_id) {}
+
bool operator==(const RtpHeaderExtensionCapability& o) const {
return uri == o.uri && preferred_id == o.preferred_id &&
preferred_encrypt == o.preferred_encrypt;
@@ -193,33 +210,23 @@ struct RtpHeaderExtensionCapability {
}
};
-// Used in RtpParameters; represents a specific configuration of a header
-// extension.
-struct RtpHeaderExtensionParameters {
- // URI of this extension, as defined in RFC5285.
- std::string uri;
-
- // ID value that goes in the packet.
- int id = 0;
-
- // If true, the value in the header is encrypted.
- // TODO(deadbeef): Not implemented.
- bool encrypt = false;
-
- bool operator==(const RtpHeaderExtensionParameters& o) const {
- return uri == o.uri && id == o.id && encrypt == o.encrypt;
- }
- bool operator!=(const RtpHeaderExtensionParameters& o) const {
- return !(*this == o);
- }
-};
+// See webrtc/config.h. Has "uri" and "id" fields.
+// TODO(deadbeef): This is missing the "encrypt" flag, which is unimplemented.
+typedef RtpExtension RtpHeaderExtensionParameters;
struct RtpFecParameters {
// If unset, a value is chosen by the implementation.
+ // Works just like RtpEncodingParameters::ssrc.
rtc::Optional<uint32_t> ssrc;
FecMechanism mechanism = FecMechanism::RED;
+ // Constructors for convenience.
+ RtpFecParameters() = default;
+ explicit RtpFecParameters(FecMechanism mechanism) : mechanism(mechanism) {}
+ RtpFecParameters(FecMechanism mechanism, uint32_t ssrc)
+ : ssrc(ssrc), mechanism(mechanism) {}
+
bool operator==(const RtpFecParameters& o) const {
return ssrc == o.ssrc && mechanism == o.mechanism;
}
@@ -228,33 +235,48 @@ struct RtpFecParameters {
struct RtpRtxParameters {
// If unset, a value is chosen by the implementation.
+ // Works just like RtpEncodingParameters::ssrc.
rtc::Optional<uint32_t> ssrc;
+ // Constructors for convenience.
+ RtpRtxParameters() = default;
+ explicit RtpRtxParameters(uint32_t ssrc) : ssrc(ssrc) {}
+
bool operator==(const RtpRtxParameters& o) const { return ssrc == o.ssrc; }
bool operator!=(const RtpRtxParameters& o) const { return !(*this == o); }
};
struct RtpEncodingParameters {
// If unset, a value is chosen by the implementation.
+ //
+ // Note that the chosen value is NOT returned by GetParameters, because it
+ // may change due to an SSRC conflict, in which case the conflict is handled
+ // internally without any event. Another way of looking at this is that an
+ // unset SSRC acts as a "wildcard" SSRC.
rtc::Optional<uint32_t> ssrc;
// Can be used to reference a codec in the |codecs| member of the
// RtpParameters that contains this RtpEncodingParameters. If unset, the
- // implementation will choose the first possible codec.
- // TODO(deadbeef): Not implemented.
+ // implementation will choose the first possible codec (if a sender), or
+ // prepare to receive any codec (for a receiver).
+ // TODO(deadbeef): Not implemented. Implementation of RtpSender will always
+ // choose the first codec from the list.
rtc::Optional<int> codec_payload_type;
// Specifies the FEC mechanism, if set.
- // TODO(deadbeef): Not implemented.
+ // TODO(deadbeef): Not implemented. Current implementation will use whatever
+ // FEC codecs are available, including red+ulpfec.
rtc::Optional<RtpFecParameters> fec;
// Specifies the RTX parameters, if set.
- // TODO(deadbeef): Not implemented.
+ // TODO(deadbeef): Not implemented with PeerConnection senders/receivers.
rtc::Optional<RtpRtxParameters> rtx;
// Only used for audio. If set, determines whether or not discontinuous
// transmission will be used, if an available codec supports it. If not
// set, the implementation default setting will be used.
+ // TODO(deadbeef): Not implemented. Current implementation will use a CN
+ // codec as long as it's present.
rtc::Optional<DtxStatus> dtx;
// The relative priority of this encoding.
@@ -264,7 +286,13 @@ struct RtpEncodingParameters {
// If set, this represents the Transport Independent Application Specific
// maximum bandwidth defined in RFC3890. If unset, there is no maximum
// bitrate.
+ //
// Just called "maxBitrate" in ORTC spec.
+ //
+ // TODO(deadbeef): With ORTC RtpSenders, this currently sets the total
+ // bandwidth for the entire bandwidth estimator (audio and video). This is
+ // just always how "b=AS" was handled, but it's not correct and should be
+ // fixed.
rtc::Optional<int> max_bitrate_bps;
// TODO(deadbeef): Not implemented.
@@ -281,7 +309,7 @@ struct RtpEncodingParameters {
// For an RtpSender, set to true to cause this encoding to be sent, and false
// for it not to be sent. For an RtpReceiver, set to true to cause the
// encoding to be decoded, and false for it to be ignored.
- // TODO(deadbeef): RtpReceiver part is not implemented.
+ // TODO(deadbeef): Not implemented for PeerConnection RtpReceivers.
bool active = true;
// Value to use for RID RTP header extension.
@@ -320,7 +348,7 @@ struct RtpCodecParameters {
cricket::MediaType kind = cricket::MEDIA_TYPE_AUDIO;
// Payload type used to identify this codec in RTP packets.
- // This MUST always be present, and must be unique across all codecs using
+ // This must always be present, and must be unique across all codecs using
// the same transport.
int payload_type = 0;
@@ -329,7 +357,9 @@ struct RtpCodecParameters {
// The number of audio channels used. Unset for video codecs. If unset for
// audio, the implementation default is used.
- // TODO(deadbeef): The "implementation default" part is unimplemented.
+ // TODO(deadbeef): The "implementation default" part isn't fully implemented.
+ // Only defaults to 1, even though some codecs (such as opus) should really
+ // default to 2.
rtc::Optional<int> num_channels;
// The maximum packetization time to be used by an RtpSender.
@@ -343,12 +373,18 @@ struct RtpCodecParameters {
rtc::Optional<int> ptime;
// Feedback mechanisms to be used for this codec.
- // TODO(deadbeef): Not implemented.
+ // TODO(deadbeef): Not implemented with PeerConnection senders/receivers.
std::vector<RtcpFeedback> rtcp_feedback;
// Codec-specific parameters that must be signaled to the remote party.
+ //
// Corresponds to "a=fmtp" parameters in SDP.
- // TODO(deadbeef): Not implemented.
+ //
+ // Contrary to ORTC, these parameters are named using all lowercase strings.
+ // This helps make the mapping to SDP simpler, if an application is using
+ // SDP. Boolean values are represented by the string "1".
+ //
+ // TODO(deadbeef): Not implemented with PeerConnection senders/receivers.
std::unordered_map<std::string, std::string> parameters;
bool operator==(const RtpCodecParameters& o) const {
@@ -370,7 +406,9 @@ struct RtpCapabilities {
// Supported RTP header extensions.
std::vector<RtpHeaderExtensionCapability> header_extensions;
- // Supported Forward Error Correction (FEC) mechanisms.
+ // Supported Forward Error Correction (FEC) mechanisms. Note that the RED,
+ // ulpfec and flexfec codecs used by these mechanisms will still appear in
+ // |codecs|.
std::vector<FecMechanism> fec;
bool operator==(const RtpCapabilities& o) const {
@@ -380,8 +418,8 @@ struct RtpCapabilities {
bool operator!=(const RtpCapabilities& o) const { return !(*this == o); }
};
-// Note that unlike in ORTC, an RtcpParameters is not included in
-// RtpParameters, because our API will include an additional "RtpTransport"
+// Note that unlike in ORTC, an RtcpParameters structure is not included in
+// RtpParameters, because our API includes an additional "RtpTransport"
// abstraction on which RTCP parameters are set.
struct RtpParameters {
// Used when calling getParameters/setParameters with a PeerConnection
@@ -397,7 +435,7 @@ struct RtpParameters {
std::vector<RtpCodecParameters> codecs;
- // TODO(deadbeef): Not implemented.
+ // TODO(deadbeef): Not implemented with PeerConnection senders/receivers.
std::vector<RtpHeaderExtensionParameters> header_extensions;
std::vector<RtpEncodingParameters> encodings;
« no previous file with comments | « webrtc/api/rtcerror.h ('k') | webrtc/api/udptransportinterface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698