summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/pc/rtp_media_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/pc/rtp_media_utils.cc')
-rw-r--r--third_party/libwebrtc/pc/rtp_media_utils.cc98
1 files changed, 98 insertions, 0 deletions
diff --git a/third_party/libwebrtc/pc/rtp_media_utils.cc b/third_party/libwebrtc/pc/rtp_media_utils.cc
new file mode 100644
index 0000000000..52c5bb0eac
--- /dev/null
+++ b/third_party/libwebrtc/pc/rtp_media_utils.cc
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "pc/rtp_media_utils.h"
+
+#include "rtc_base/checks.h"
+
+namespace webrtc {
+
+RtpTransceiverDirection RtpTransceiverDirectionFromSendRecv(bool send,
+ bool recv) {
+ if (send && recv) {
+ return RtpTransceiverDirection::kSendRecv;
+ } else if (send && !recv) {
+ return RtpTransceiverDirection::kSendOnly;
+ } else if (!send && recv) {
+ return RtpTransceiverDirection::kRecvOnly;
+ } else {
+ return RtpTransceiverDirection::kInactive;
+ }
+}
+
+bool RtpTransceiverDirectionHasSend(RtpTransceiverDirection direction) {
+ return direction == RtpTransceiverDirection::kSendRecv ||
+ direction == RtpTransceiverDirection::kSendOnly;
+}
+
+bool RtpTransceiverDirectionHasRecv(RtpTransceiverDirection direction) {
+ return direction == RtpTransceiverDirection::kSendRecv ||
+ direction == RtpTransceiverDirection::kRecvOnly;
+}
+
+RtpTransceiverDirection RtpTransceiverDirectionReversed(
+ RtpTransceiverDirection direction) {
+ switch (direction) {
+ case RtpTransceiverDirection::kSendRecv:
+ case RtpTransceiverDirection::kInactive:
+ case RtpTransceiverDirection::kStopped:
+ return direction;
+ case RtpTransceiverDirection::kSendOnly:
+ return RtpTransceiverDirection::kRecvOnly;
+ case RtpTransceiverDirection::kRecvOnly:
+ return RtpTransceiverDirection::kSendOnly;
+ default:
+ RTC_DCHECK_NOTREACHED();
+ return direction;
+ }
+}
+
+RtpTransceiverDirection RtpTransceiverDirectionWithSendSet(
+ RtpTransceiverDirection direction,
+ bool send) {
+ return RtpTransceiverDirectionFromSendRecv(
+ send, RtpTransceiverDirectionHasRecv(direction));
+}
+
+RtpTransceiverDirection RtpTransceiverDirectionWithRecvSet(
+ RtpTransceiverDirection direction,
+ bool recv) {
+ return RtpTransceiverDirectionFromSendRecv(
+ RtpTransceiverDirectionHasSend(direction), recv);
+}
+
+const char* RtpTransceiverDirectionToString(RtpTransceiverDirection direction) {
+ switch (direction) {
+ case RtpTransceiverDirection::kSendRecv:
+ return "kSendRecv";
+ case RtpTransceiverDirection::kSendOnly:
+ return "kSendOnly";
+ case RtpTransceiverDirection::kRecvOnly:
+ return "kRecvOnly";
+ case RtpTransceiverDirection::kInactive:
+ return "kInactive";
+ case RtpTransceiverDirection::kStopped:
+ return "kStopped";
+ }
+ RTC_DCHECK_NOTREACHED();
+ return "";
+}
+
+RtpTransceiverDirection RtpTransceiverDirectionIntersection(
+ RtpTransceiverDirection lhs,
+ RtpTransceiverDirection rhs) {
+ return RtpTransceiverDirectionFromSendRecv(
+ RtpTransceiverDirectionHasSend(lhs) &&
+ RtpTransceiverDirectionHasSend(rhs),
+ RtpTransceiverDirectionHasRecv(lhs) &&
+ RtpTransceiverDirectionHasRecv(rhs));
+}
+
+} // namespace webrtc