From 3203b626f40b3ee474cdd47ab17c00697fa825aa Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Thu, 10 Oct 2024 12:31:47 +0000 Subject: [PATCH] Add AbslStringify for cricket::Codec This makes debug output easier to read. Bug: webrtc:360058654 Change-Id: I887be638489cde26868db0db2950262255213160 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/365144 Commit-Queue: Harald Alvestrand Reviewed-by: Florent Castelli Cr-Commit-Position: refs/heads/main@{#43216} --- media/BUILD.gn | 1 + media/DEPS | 3 +++ media/base/codec.h | 21 +++++++++++++++++++++ media/base/codec_unittest.cc | 7 +++++++ 4 files changed, 32 insertions(+) diff --git a/media/BUILD.gn b/media/BUILD.gn index 9810764709..02cf50374a 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -374,6 +374,7 @@ rtc_library("codec") { "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/container:inlined_vector", "//third_party/abseil-cpp/absl/strings", + "//third_party/abseil-cpp/absl/strings:str_format", "//third_party/abseil-cpp/absl/strings:string_view", ] } diff --git a/media/DEPS b/media/DEPS index ffa3c11a9a..414e08f206 100644 --- a/media/DEPS +++ b/media/DEPS @@ -37,4 +37,7 @@ specific_include_rules = { ".*fake_webrtc_call\.h": [ "+video/config", ], + ".*codec\.h": [ + "+absl/strings/str_format.h", + ] } diff --git a/media/base/codec.h b/media/base/codec.h index 75bbc88d08..5324abb9f4 100644 --- a/media/base/codec.h +++ b/media/base/codec.h @@ -17,6 +17,7 @@ #include #include "absl/container/inlined_vector.h" +#include "absl/strings/str_format.h" #include "absl/strings/string_view.h" #include "api/audio_codecs/audio_format.h" #include "api/rtp_parameters.h" @@ -174,6 +175,26 @@ struct RTC_EXPORT Codec { bool operator!=(const Codec& c) const { return !(*this == c); } + template + friend void AbslStringify(Sink& sink, const Codec& c) { + absl::Format(&sink, "[%d:", c.id); + switch (c.type) { + case Codec::Type::kAudio: + sink.Append("audio/"); + break; + case Codec::Type::kVideo: + sink.Append("video/"); + } + absl::Format(&sink, "%s/%d/%d", c.name, c.clockrate, c.channels); + for (auto param : c.params) { + sink.Append(";"); + sink.Append(param.first); + sink.Append("="); + sink.Append(param.second); + } + sink.Append("]"); + } + protected: // Creates an empty codec. explicit Codec(Type type); diff --git a/media/base/codec_unittest.cc b/media/base/codec_unittest.cc index c13cf1aca0..b3a9a910eb 100644 --- a/media/base/codec_unittest.cc +++ b/media/base/codec_unittest.cc @@ -640,3 +640,10 @@ TEST(CodecTest, H264CostrainedBaselineNotAddedIfAlreadySpecified) { EXPECT_EQ(supported_formats[3], kExplicitlySupportedFormats[3]); EXPECT_EQ(supported_formats.size(), kExplicitlySupportedFormats.size()); } + +TEST(CodecTest, AbslStringify) { + Codec codec = cricket::CreateAudioCodec(47, "custom-audio", 48000, 2); + EXPECT_EQ(absl::StrCat(codec), "[47:audio/custom-audio/48000/2]"); + codec.params["key"] = "value"; + EXPECT_EQ(absl::StrCat(codec), "[47:audio/custom-audio/48000/2;key=value]"); +}