blob: 52c5bb0eacc605e11739a0749067bb91f4444218 [file] [log] [blame]
Steve Anton1d03a752017-11-27 22:30:091/*
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
Steve Anton10542f22019-01-11 17:11:0011#include "pc/rtp_media_utils.h"
Steve Anton1d03a752017-11-27 22:30:0912
Yves Gerey3e707812018-11-28 15:47:4913#include "rtc_base/checks.h"
14
Steve Anton1d03a752017-11-27 22:30:0915namespace webrtc {
16
17RtpTransceiverDirection RtpTransceiverDirectionFromSendRecv(bool send,
18 bool recv) {
19 if (send && recv) {
20 return RtpTransceiverDirection::kSendRecv;
21 } else if (send && !recv) {
22 return RtpTransceiverDirection::kSendOnly;
23 } else if (!send && recv) {
24 return RtpTransceiverDirection::kRecvOnly;
25 } else {
26 return RtpTransceiverDirection::kInactive;
27 }
28}
29
30bool RtpTransceiverDirectionHasSend(RtpTransceiverDirection direction) {
31 return direction == RtpTransceiverDirection::kSendRecv ||
32 direction == RtpTransceiverDirection::kSendOnly;
33}
34
35bool RtpTransceiverDirectionHasRecv(RtpTransceiverDirection direction) {
36 return direction == RtpTransceiverDirection::kSendRecv ||
37 direction == RtpTransceiverDirection::kRecvOnly;
38}
39
40RtpTransceiverDirection RtpTransceiverDirectionReversed(
41 RtpTransceiverDirection direction) {
42 switch (direction) {
43 case RtpTransceiverDirection::kSendRecv:
44 case RtpTransceiverDirection::kInactive:
Harald Alvestrand6060df52020-08-11 07:54:0245 case RtpTransceiverDirection::kStopped:
Steve Anton1d03a752017-11-27 22:30:0946 return direction;
47 case RtpTransceiverDirection::kSendOnly:
48 return RtpTransceiverDirection::kRecvOnly;
49 case RtpTransceiverDirection::kRecvOnly:
50 return RtpTransceiverDirection::kSendOnly;
Markus Handell45c104b2020-03-11 09:51:1351 default:
Artem Titovd3251962021-11-15 15:57:0752 RTC_DCHECK_NOTREACHED();
Markus Handell45c104b2020-03-11 09:51:1353 return direction;
Steve Anton1d03a752017-11-27 22:30:0954 }
Steve Anton1d03a752017-11-27 22:30:0955}
56
Steve Anton22da89f2018-01-25 21:58:0757RtpTransceiverDirection RtpTransceiverDirectionWithSendSet(
58 RtpTransceiverDirection direction,
59 bool send) {
60 return RtpTransceiverDirectionFromSendRecv(
61 send, RtpTransceiverDirectionHasRecv(direction));
62}
63
64RtpTransceiverDirection RtpTransceiverDirectionWithRecvSet(
65 RtpTransceiverDirection direction,
66 bool recv) {
67 return RtpTransceiverDirectionFromSendRecv(
68 RtpTransceiverDirectionHasSend(direction), recv);
69}
70
Steve Anton4e70a722017-11-28 22:57:1071const char* RtpTransceiverDirectionToString(RtpTransceiverDirection direction) {
72 switch (direction) {
73 case RtpTransceiverDirection::kSendRecv:
74 return "kSendRecv";
75 case RtpTransceiverDirection::kSendOnly:
76 return "kSendOnly";
77 case RtpTransceiverDirection::kRecvOnly:
78 return "kRecvOnly";
79 case RtpTransceiverDirection::kInactive:
80 return "kInactive";
Markus Handell45c104b2020-03-11 09:51:1381 case RtpTransceiverDirection::kStopped:
82 return "kStopped";
Steve Anton4e70a722017-11-28 22:57:1083 }
Artem Titovd3251962021-11-15 15:57:0784 RTC_DCHECK_NOTREACHED();
Steve Anton4e70a722017-11-28 22:57:1085 return "";
86}
87
Guido Urdaneta70c2db12019-04-16 10:24:1488RtpTransceiverDirection RtpTransceiverDirectionIntersection(
89 RtpTransceiverDirection lhs,
90 RtpTransceiverDirection rhs) {
91 return RtpTransceiverDirectionFromSendRecv(
92 RtpTransceiverDirectionHasSend(lhs) &&
93 RtpTransceiverDirectionHasSend(rhs),
94 RtpTransceiverDirectionHasRecv(lhs) &&
95 RtpTransceiverDirectionHasRecv(rhs));
96}
97
Steve Anton1d03a752017-11-27 22:30:0998} // namespace webrtc