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