| /* |
| * 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 |