1 /*
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 
11 #ifndef PC_RTP_MEDIA_UTILS_H_
12 #define PC_RTP_MEDIA_UTILS_H_
13 
14 #include "api/rtp_transceiver_direction.h"
15 #include "api/rtp_transceiver_interface.h"
16 
17 namespace webrtc {
18 
19 // Returns the RtpTransceiverDirection that satisfies specified send and receive
20 // conditions.
21 RtpTransceiverDirection RtpTransceiverDirectionFromSendRecv(bool send,
22                                                             bool recv);
23 
24 // Returns true only if the direction will send media.
25 bool RtpTransceiverDirectionHasSend(RtpTransceiverDirection direction);
26 
27 // Returns true only if the direction will receive media.
28 bool RtpTransceiverDirectionHasRecv(RtpTransceiverDirection direction);
29 
30 // Returns the RtpTransceiverDirection which is the reverse of the given
31 // direction.
32 RtpTransceiverDirection RtpTransceiverDirectionReversed(
33     RtpTransceiverDirection direction);
34 
35 // Returns the RtpTransceiverDirection with its send component set to |send|.
36 RtpTransceiverDirection RtpTransceiverDirectionWithSendSet(
37     RtpTransceiverDirection direction,
38     bool send = true);
39 
40 // Returns the RtpTransceiverDirection with its recv component set to |recv|.
41 RtpTransceiverDirection RtpTransceiverDirectionWithRecvSet(
42     RtpTransceiverDirection direction,
43     bool recv = true);
44 
45 // Returns an unspecified string representation of the given direction.
46 const char* RtpTransceiverDirectionToString(RtpTransceiverDirection direction);
47 
48 // Returns the intersection of the directions of two transceivers.
49 RtpTransceiverDirection RtpTransceiverDirectionIntersection(
50     RtpTransceiverDirection lhs,
51     RtpTransceiverDirection rhs);
52 
53 #ifdef WEBRTC_UNIT_TEST
54 inline std::ostream& operator<<(  // no-presubmit-check TODO(webrtc:8982)
55     std::ostream& os,             // no-presubmit-check TODO(webrtc:8982)
56     RtpTransceiverDirection direction) {
57   return os << RtpTransceiverDirectionToString(direction);
58 }
59 #endif  // WEBRTC_UNIT_TEST
60 
61 }  // namespace webrtc
62 
63 #endif  // PC_RTP_MEDIA_UTILS_H_
64