| /* | |
| * 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 "api/rtp_transceiver_direction.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 |