diff --git a/api/audio_codecs/audio_format.cc b/api/audio_codecs/audio_format.cc index 9db5ce01dc..82c166f5c0 100644 --- a/api/audio_codecs/audio_format.cc +++ b/api/audio_codecs/audio_format.cc @@ -68,6 +68,20 @@ void swap(SdpAudioFormat& a, SdpAudioFormat& b) { swap(a.parameters, b.parameters); } +std::ostream& operator<<(std::ostream& os, const SdpAudioFormat& saf) { + os << "{name: " << saf.name; + os << ", clockrate_hz: " << saf.clockrate_hz; + os << ", num_channels: " << saf.num_channels; + os << ", parameters: {"; + const char* sep = ""; + for (const auto& kv : saf.parameters) { + os << sep << kv.first << ": " << kv.second; + sep = ", "; + } + os << "}}"; + return os; +} + AudioCodecInfo::AudioCodecInfo(int sample_rate_hz, size_t num_channels, int bitrate_bps) @@ -94,4 +108,23 @@ AudioCodecInfo::AudioCodecInfo(int sample_rate_hz, RTC_DCHECK_GE(max_bitrate_bps, default_bitrate_bps); } +std::ostream& operator<<(std::ostream& os, const AudioCodecInfo& aci) { + os << "{sample_rate_hz: " << aci.sample_rate_hz; + os << ", num_channels: " << aci.num_channels; + os << ", default_bitrate_bps: " << aci.default_bitrate_bps; + os << ", min_bitrate_bps: " << aci.min_bitrate_bps; + os << ", max_bitrate_bps: " << aci.max_bitrate_bps; + os << ", allow_comfort_noise: " << aci.allow_comfort_noise; + os << ", supports_network_adaption: " << aci.supports_network_adaption; + os << "}"; + return os; +} + +std::ostream& operator<<(std::ostream& os, const AudioCodecSpec& acs) { + os << "{format: " << acs.format; + os << ", info: " << acs.info; + os << "}"; + return os; +} + } // namespace webrtc diff --git a/api/audio_codecs/audio_format.h b/api/audio_codecs/audio_format.h index 553ab8fb25..2a85c6f553 100644 --- a/api/audio_codecs/audio_format.h +++ b/api/audio_codecs/audio_format.h @@ -12,6 +12,7 @@ #define API_AUDIO_CODECS_AUDIO_FORMAT_H_ #include +#include #include #include @@ -61,6 +62,7 @@ struct SdpAudioFormat { }; void swap(SdpAudioFormat& a, SdpAudioFormat& b); +std::ostream& operator<<(std::ostream& os, const SdpAudioFormat& saf); // Information about how an audio format is treated by the codec implementation. // Contains basic information, such as sample rate and number of channels, which @@ -119,6 +121,8 @@ struct AudioCodecInfo { // network conditions. }; +std::ostream& operator<<(std::ostream& os, const AudioCodecInfo& aci); + // AudioCodecSpec ties an audio format to specific information about the codec // and its implementation. struct AudioCodecSpec { @@ -132,6 +136,8 @@ struct AudioCodecSpec { AudioCodecInfo info; }; +std::ostream& operator<<(std::ostream& os, const AudioCodecSpec& acs); + } // namespace webrtc #endif // API_AUDIO_CODECS_AUDIO_FORMAT_H_ diff --git a/api/rtcerror.cc b/api/rtcerror.cc index 55ac15e196..5a8ba033e8 100644 --- a/api/rtcerror.cc +++ b/api/rtcerror.cc @@ -93,6 +93,10 @@ void RTCError::set_message(std::string&& message) { } } +std::ostream& operator<<(std::ostream& stream, RTCErrorType error) { + return stream << ToString(error); +} + // TODO(jonasolsson): Change to use absl::string_view when it's available. std::string ToString(RTCErrorType error) { int index = static_cast(error); diff --git a/api/rtcerror.h b/api/rtcerror.h index c87ce91650..d7dec29d43 100644 --- a/api/rtcerror.h +++ b/api/rtcerror.h @@ -11,9 +11,7 @@ #ifndef API_RTCERROR_H_ #define API_RTCERROR_H_ -#ifdef UNIT_TEST #include -#endif // UNIT_TEST #include #include // For std::move. @@ -145,15 +143,9 @@ class RTCError { // error type. // // Only intended to be used for logging/disagnostics. -std::string ToString(RTCErrorType error); +std::ostream& operator<<(std::ostream& stream, RTCErrorType error); -#ifdef UNIT_TEST -inline std::ostream& operator<<( // no-presubmit-check TODO(webrtc:8982) - std::ostream& stream, // no-presubmit-check TODO(webrtc:8982) - RTCErrorType error) { - return stream << ToString(error); -} -#endif // UNIT_TEST +std::string ToString(RTCErrorType error); // Helper macro that can be used by implementations to create an error with a // message and log it. |message| should be a string literal or movable diff --git a/api/rtptransceiverinterface.h b/api/rtptransceiverinterface.h index 7d2a1dffe2..78055797d2 100644 --- a/api/rtptransceiverinterface.h +++ b/api/rtptransceiverinterface.h @@ -30,6 +30,9 @@ enum class RtpTransceiverDirection { kInactive }; +// This is provided as a debugging aid. The format of the output is unspecified. +std::ostream& operator<<(std::ostream& os, RtpTransceiverDirection direction); + // Structure for initializing an RtpTransceiver in a call to // PeerConnectionInterface::AddTransceiver. // https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiverinit diff --git a/common_types.h b/common_types.h index 580f83ac4c..ae47811f73 100644 --- a/common_types.h +++ b/common_types.h @@ -223,6 +223,16 @@ struct CodecInst { } bool operator!=(const CodecInst& other) const { return !(*this == other); } + + friend std::ostream& operator<<(std::ostream& os, const CodecInst& ci) { + os << "{pltype: " << ci.pltype; + os << ", plname: " << ci.plname; + os << ", plfreq: " << ci.plfreq; + os << ", pacsize: " << ci.pacsize; + os << ", channels: " << ci.channels; + os << ", rate: " << ci.rate << "}"; + return os; + } }; // RTP diff --git a/media/base/codec.h b/media/base/codec.h index 7bbb7db850..30844c7120 100644 --- a/media/base/codec.h +++ b/media/base/codec.h @@ -149,6 +149,28 @@ struct AudioCodec : public Codec { } }; +inline std::ostream& operator<<(std::ostream& os, const AudioCodec& ac) { + os << "{id: " << ac.id; + os << ", name: " << ac.name; + os << ", clockrate: " << ac.clockrate; + os << ", bitrate: " << ac.bitrate; + os << ", channels: " << ac.channels; + os << ", params: {"; + const char* sep = ""; + for (const auto& kv : ac.params) { + os << sep << kv.first << ": " << kv.second; + sep = ", "; + } + os << "}, feedback_params: {"; + sep = ""; + for (const FeedbackParam& fp : ac.feedback_params.params()) { + os << sep << fp.id() << ": " << fp.param(); + sep = ", "; + } + os << "}}"; + return os; +} + struct VideoCodec : public Codec { // Creates a codec with the given parameters. VideoCodec(int id, const std::string& name); diff --git a/modules/video_coding/codecs/h264/include/h264_globals.h b/modules/video_coding/codecs/h264/include/h264_globals.h index bfeba673a9..365dbca5d2 100644 --- a/modules/video_coding/codecs/h264/include/h264_globals.h +++ b/modules/video_coding/codecs/h264/include/h264_globals.h @@ -53,6 +53,11 @@ inline std::string ToString(H264PacketizationMode mode) { return ""; } +inline std::ostream& operator<<(std::ostream& stream, + H264PacketizationMode mode) { + return stream << ToString(mode); +} + struct NaluInfo { uint8_t type; int sps_id; diff --git a/pc/rtpmediautils.h b/pc/rtpmediautils.h index 5f02d89907..6de6f8f0af 100644 --- a/pc/rtpmediautils.h +++ b/pc/rtpmediautils.h @@ -44,14 +44,6 @@ RtpTransceiverDirection RtpTransceiverDirectionWithRecvSet( // Returns an unspecified string representation of the given direction. const char* RtpTransceiverDirectionToString(RtpTransceiverDirection direction); -#ifdef UNIT_TEST -inline std::ostream& operator<<( // no-presubmit-check TODO(webrtc:8982) - std::ostream& os, // no-presubmit-check TODO(webrtc:8982) - RtpTransceiverDirection direction) { - return os << RtpTransceiverDirectionToString(direction); -} -#endif // UNIT_TEST - } // namespace webrtc #endif // PC_RTPMEDIAUTILS_H_ diff --git a/pc/rtptransceiver.cc b/pc/rtptransceiver.cc index 37770b524d..41ee487642 100644 --- a/pc/rtptransceiver.cc +++ b/pc/rtptransceiver.cc @@ -16,6 +16,10 @@ namespace webrtc { +std::ostream& operator<<(std::ostream& os, RtpTransceiverDirection direction) { + return os << RtpTransceiverDirectionToString(direction); +} + RtpTransceiver::RtpTransceiver(cricket::MediaType media_type) : unified_plan_(false), media_type_(media_type) { RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO || diff --git a/rtc_base/ipaddress.cc b/rtc_base/ipaddress.cc index e6a02c4a8a..3f7698acb3 100644 --- a/rtc_base/ipaddress.cc +++ b/rtc_base/ipaddress.cc @@ -120,6 +120,11 @@ bool IPAddress::operator <(const IPAddress &other) const { return false; } +std::ostream& operator<<(std::ostream& os, const IPAddress& ip) { + os << ip.ToString(); + return os; +} + in6_addr IPAddress::ipv6_address() const { return u_.ip6; } @@ -211,6 +216,10 @@ const InterfaceAddress& InterfaceAddress::operator=( return *this; } +std::ostream& operator<<(std::ostream& os, const InterfaceAddress& ip) { + return os << ip.ToString(); +} + std::string InterfaceAddress::ToString() const { std::string result = IPAddress::ToString(); diff --git a/rtc_base/ipaddress.h b/rtc_base/ipaddress.h index c965cf14e7..aa8bb1a320 100644 --- a/rtc_base/ipaddress.h +++ b/rtc_base/ipaddress.h @@ -83,13 +83,7 @@ class IPAddress { bool operator!=(const IPAddress& other) const; bool operator <(const IPAddress& other) const; bool operator >(const IPAddress& other) const; - -#ifdef UNIT_TEST - inline std::ostream& operator<<( // no-presubmit-check TODO(webrtc:8982) - std::ostream& os) { // no-presubmit-check TODO(webrtc:8982) - return os << ToString(); - } -#endif // UNIT_TEST + friend std::ostream& operator<<(std::ostream& os, const IPAddress& addr); int family() const { return family_; } in_addr ipv4_address() const; @@ -147,6 +141,8 @@ class InterfaceAddress : public IPAddress { bool operator!=(const InterfaceAddress& other) const; int ipv6_flags() const { return ipv6_flags_; } + friend std::ostream& operator<<(std::ostream& os, + const InterfaceAddress& addr); std::string ToString() const; diff --git a/rtc_base/socketaddress.cc b/rtc_base/socketaddress.cc index a58c001d32..bddb7bcfd0 100644 --- a/rtc_base/socketaddress.cc +++ b/rtc_base/socketaddress.cc @@ -199,6 +199,11 @@ bool SocketAddress::FromString(const std::string& str) { return true; } +std::ostream& operator<<(std::ostream& os, const SocketAddress& addr) { + os << addr.HostAsURIString() << ":" << addr.port(); + return os; +} + bool SocketAddress::IsAnyIP() const { return IPIsAny(ip_); } diff --git a/rtc_base/socketaddress.h b/rtc_base/socketaddress.h index 90919c2318..d58eed8428 100644 --- a/rtc_base/socketaddress.h +++ b/rtc_base/socketaddress.h @@ -13,9 +13,6 @@ #include #include -#ifdef UNIT_TEST -#include // no-presubmit-check TODO(webrtc:8982) -#endif // UNIT_TEST #include #include "rtc_base/basictypes.h" #include "rtc_base/ipaddress.h" @@ -129,12 +126,7 @@ class SocketAddress { // Parses hostname:port and [hostname]:port. bool FromString(const std::string& str); -#ifdef UNIT_TEST - inline std::ostream& operator<<( // no-presubmit-check TODO(webrtc:8982) - std::ostream& os) { // no-presubmit-check TODO(webrtc:8982) - return os << HostAsURIString() << ":" << port(); - } -#endif // UNIT_TEST + friend std::ostream& operator<<(std::ostream& os, const SocketAddress& addr); // Determines whether this represents a missing / any IP address. // That is, 0.0.0.0 or ::.