Fix circular dependencies in webrtc_common.
One reason for the circular deps is that common_types.h is a
historical dumping ground for various structs and defines that
are believed to be generally useful. I tried moving things out
that did not appear to be used downstream (StreamCounters,
RtpCounters etc) and moved the things that seemed used
(RtpHeader + supporting structs) to a new file api/rtp_headers.h.
This makes their place in the api more clear while moving out
the things that don't belong in the API in the first place.
I had to extract out typedefs.h from webrtc_common to resolve
another circular dependency. I believe checks includes typedefs,
but common depends on checks.
Bug: webrtc:7745
Change-Id: I725d49616b1ec0cdc8b74be7c078f7a4d46f084b
Reviewed-on: https://webrtc-review.googlesource.com/33001
Commit-Queue: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21295}
diff --git a/modules/BUILD.gn b/modules/BUILD.gn
index 2c1a042..33394f4 100644
--- a/modules/BUILD.gn
+++ b/modules/BUILD.gn
@@ -34,6 +34,7 @@
]
deps = [
"..:webrtc_common",
+ "../:typedefs",
"../api:optional",
]
}
@@ -46,9 +47,12 @@
deps = [
":module_api_public",
"..:webrtc_common",
+ "../:typedefs",
+ "../api:libjingle_peerconnection_api",
"../api:optional",
"../api:video_frame_api",
"../api:video_frame_api_i420",
+ "../rtc_base:deprecation",
"../rtc_base:rtc_base_approved",
"video_coding:codec_globals_headers",
]
diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
index 9c674d4..6365d56 100644
--- a/modules/audio_coding/BUILD.gn
+++ b/modules/audio_coding/BUILD.gn
@@ -65,6 +65,7 @@
"acm2/rent_a_codec.h",
]
deps = [
+ "../../:typedefs",
"../../rtc_base:checks",
"../../api:array_view",
"../../api:optional",
@@ -96,6 +97,7 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
]
}
@@ -132,6 +134,8 @@
}
deps = audio_coding_deps + [
+ "../../rtc_base:deprecation",
+ "../../:typedefs",
"../../rtc_base:checks",
"../../system_wrappers:metrics_api",
"..:module_api",
@@ -177,6 +181,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api/audio_codecs:audio_codecs_api",
"../../common_audio",
@@ -241,6 +246,7 @@
]
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
]
}
@@ -282,6 +288,7 @@
]
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
]
}
@@ -461,6 +468,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../api/audio_codecs:audio_codecs_api",
"../../common_audio",
"../../rtc_base:checks",
@@ -569,6 +577,7 @@
deps = [
":isac_common",
"../..:webrtc_common",
+ "../../:typedefs",
"../../common_audio",
"../../rtc_base:checks",
"../../rtc_base:compile_assert_c",
@@ -675,6 +684,7 @@
deps = [
":isac_common",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api/audio_codecs:audio_codecs_api",
"../../common_audio",
"../../rtc_base:checks",
@@ -799,6 +809,7 @@
public_configs = [ ":pcm16b_config" ]
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
]
}
@@ -856,6 +867,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
]
@@ -1042,6 +1054,8 @@
":neteq_decoder_enum",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
+ "../../api:libjingle_peerconnection_api",
"../../api:optional",
"../../api/audio_codecs:audio_codecs_api",
"../../common_audio",
@@ -1084,6 +1098,8 @@
":neteq",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
+ "../../api:libjingle_peerconnection_api",
"../../api:optional",
"../../api/audio_codecs:audio_codecs_api",
"../../api/audio_codecs:builtin_audio_decoder_factory",
@@ -1121,7 +1137,9 @@
":pcm16b",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
+ "../../api:libjingle_peerconnection_api",
"../../common_audio",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
@@ -1169,6 +1187,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:optional",
"../../api/audio_codecs:audio_codecs_api",
@@ -1195,6 +1214,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../common_audio",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
@@ -1308,6 +1328,7 @@
":pcm16b_c",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../rtc_base:rtc_base_approved",
@@ -1339,6 +1360,7 @@
":neteq_test_support",
":neteq_test_tools",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api/audio_codecs/opus:audio_encoder_opus",
"../../rtc_base:protobuf_utils",
"../../rtc_base:rtc_base_approved",
@@ -1411,6 +1433,7 @@
":audio_coding_module_typedefs",
":audio_format_conversion",
"..:module_api",
+ "../../:typedefs",
"../../:webrtc_common",
"../../api:optional",
"../../rtc_base:rtc_base_approved",
@@ -1441,6 +1464,7 @@
":audio_coding",
":audio_format_conversion",
"..:module_api",
+ "../../:typedefs",
"../../:webrtc_common",
"../../api:optional",
"../../rtc_base:rtc_base_approved",
@@ -1519,6 +1543,7 @@
defines = []
deps = [
"..:module_api",
+ "../../:typedefs",
"../../rtc_base:checks",
]
sources = [
@@ -1567,7 +1592,9 @@
rtc_test("audio_codec_speed_tests") {
testonly = true
defines = []
- deps = []
+ deps = [
+ "../../:typedefs",
+ ]
sources = [
"codecs/isac/fix/test/isac_speed_test.cc",
"codecs/opus/opus_speed_test.cc",
@@ -1626,6 +1653,7 @@
":pcm16b",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api/audio_codecs:audio_codecs_api",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../rtc_base:checks",
@@ -1653,6 +1681,7 @@
":neteq_test_tools",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
@@ -1665,6 +1694,7 @@
testonly = true
deps = audio_coding_deps + [
+ "../../:typedefs",
":audio_coding",
":neteq_input_audio_tools",
"../../api/audio_codecs/g711:audio_encoder_g711",
@@ -1688,6 +1718,7 @@
testonly = true
deps = audio_coding_deps + [
+ "../../:typedefs",
"../../system_wrappers:system_wrappers_default",
"../rtp_rtcp:rtp_rtcp_format",
"../../api:array_view",
@@ -1768,6 +1799,7 @@
":neteq",
":neteq_test_support",
"../..:webrtc_common",
+ "../../:typedefs",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:system_wrappers_default",
"../../test:test_support",
@@ -1915,6 +1947,7 @@
deps = [
":g722",
"../..:webrtc_common",
+ "../../:typedefs",
]
}
@@ -2098,6 +2131,7 @@
":webrtc_opus",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api/audio_codecs:audio_codecs_api",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../api/audio_codecs:builtin_audio_encoder_factory",
diff --git a/modules/audio_coding/neteq/include/neteq.h b/modules/audio_coding/neteq/include/neteq.h
index 00ed7cd..0d47f21 100644
--- a/modules/audio_coding/neteq/include/neteq.h
+++ b/modules/audio_coding/neteq/include/neteq.h
@@ -18,6 +18,7 @@
#include "api/audio_codecs/audio_decoder.h"
#include "api/optional.h"
+#include "api/rtp_headers.h"
#include "common_types.h" // NOLINT(build/include)
#include "modules/audio_coding/neteq/neteq_decoder_enum.h"
#include "rtc_base/constructormagic.h"
diff --git a/modules/audio_coding/neteq/tools/packet.h b/modules/audio_coding/neteq/tools/packet.h
index a72f7d1..94d45c5 100644
--- a/modules/audio_coding/neteq/tools/packet.h
+++ b/modules/audio_coding/neteq/tools/packet.h
@@ -14,6 +14,7 @@
#include <list>
#include <memory>
+#include "api/rtp_headers.h" // NOLINT(build/include)
#include "common_types.h" // NOLINT(build/include)
#include "rtc_base/constructormagic.h"
#include "typedefs.h" // NOLINT(build/include)
diff --git a/modules/audio_coding/neteq/tools/rtp_generator.h b/modules/audio_coding/neteq/tools/rtp_generator.h
index b705f83..3b3cca9 100644
--- a/modules/audio_coding/neteq/tools/rtp_generator.h
+++ b/modules/audio_coding/neteq/tools/rtp_generator.h
@@ -11,6 +11,7 @@
#ifndef MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
#define MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
+#include "api/rtp_headers.h"
#include "common_types.h" // NOLINT(build/include)
#include "rtc_base/constructormagic.h"
#include "typedefs.h" // NOLINT(build/include)
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index 3174ee9..6c19146 100644
--- a/modules/audio_device/BUILD.gn
+++ b/modules/audio_device/BUILD.gn
@@ -100,6 +100,7 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../common_audio",
"../../rtc_base:checks",
diff --git a/modules/audio_mixer/BUILD.gn b/modules/audio_mixer/BUILD.gn
index cffd1a8..1318398 100644
--- a/modules/audio_mixer/BUILD.gn
+++ b/modules/audio_mixer/BUILD.gn
@@ -36,6 +36,7 @@
":audio_frame_manipulator",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:audio_mixer_api",
"../../audio/utility:audio_frame_operations",
diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index b190f02..d879076 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -226,10 +226,12 @@
":audio_processing_statistics",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:optional",
"../../audio/utility:audio_frame_operations",
"../../rtc_base:checks",
+ "../../rtc_base:deprecation",
"../../rtc_base:gtest_prod",
"../../rtc_base:protobuf_utils",
"../../rtc_base:sanitizer",
@@ -341,6 +343,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../common_audio",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
@@ -371,6 +374,7 @@
"../../api:array_view",
"../../common_audio:common_audio",
"../../rtc_base:rtc_base_approved",
+ "../../rtc_base:stringutils",
]
defines = []
if (apm_debug_dump) {
@@ -404,6 +408,7 @@
":apm_logging",
":audio_processing_statistics",
"../..:webrtc_common",
+ "../../:typedefs",
"../../common_audio:common_audio",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
@@ -582,6 +587,7 @@
":audioproc_test_utils",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:optional",
"../../common_audio:common_audio",
@@ -768,6 +774,7 @@
"../../rtc_base:protobuf_utils",
"../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_task_queue",
+ "../../rtc_base:stringutils",
"../../system_wrappers",
"../../system_wrappers:system_wrappers_default",
"../../test:test_support",
@@ -819,6 +826,7 @@
":audio_processing",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../common_audio:common_audio",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers",
@@ -838,6 +846,7 @@
deps = [
":audio_processing",
"../..:webrtc_common",
+ "../../:typedefs",
"../../system_wrappers",
"../../system_wrappers:metrics_default",
]
@@ -892,6 +901,7 @@
deps = [
":audioproc_debug_proto",
"../..:webrtc_common",
+ "../../:typedefs",
"../../rtc_base:protobuf_utils",
"../../rtc_base:rtc_base_approved",
]
diff --git a/modules/audio_processing/test/conversational_speech/BUILD.gn b/modules/audio_processing/test/conversational_speech/BUILD.gn
index 9cedd6e..00e4730 100644
--- a/modules/audio_processing/test/conversational_speech/BUILD.gn
+++ b/modules/audio_processing/test/conversational_speech/BUILD.gn
@@ -45,6 +45,7 @@
]
deps = [
"../../../..:webrtc_common",
+ "../../../../:typedefs",
"../../../../api:array_view",
"../../../../common_audio",
"../../../../rtc_base:checks",
@@ -65,6 +66,7 @@
deps = [
":lib",
"../../../..:webrtc_common",
+ "../../../../:typedefs",
"../../../../api:array_view",
"../../../../api:optional",
"../../../../common_audio",
diff --git a/modules/congestion_controller/BUILD.gn b/modules/congestion_controller/BUILD.gn
index 58d2e25..c014934 100644
--- a/modules/congestion_controller/BUILD.gn
+++ b/modules/congestion_controller/BUILD.gn
@@ -49,6 +49,7 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../logging:rtc_event_log_api",
"../../rtc_base:checks",
diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn
index 277683a..8e8d92d 100644
--- a/modules/desktop_capture/BUILD.gn
+++ b/modules/desktop_capture/BUILD.gn
@@ -28,6 +28,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../rtc_base:checks",
"../../rtc_base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806.
]
@@ -89,6 +90,7 @@
":desktop_capture_mock",
":primitives",
"../..:webrtc_common",
+ "../../:typedefs",
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:cpu_features_api",
@@ -333,6 +335,7 @@
deps = [
":primitives",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:refcountedbase",
"../../rtc_base:checks",
"../../rtc_base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806.
diff --git a/modules/include/module_common_types.h b/modules/include/module_common_types.h
index 1d89c7d..94ccbdc 100644
--- a/modules/include/module_common_types.h
+++ b/modules/include/module_common_types.h
@@ -18,6 +18,7 @@
#include <limits>
#include "api/optional.h"
+#include "api/rtp_headers.h"
#include "api/video/video_rotation.h"
#include "common_types.h" // NOLINT(build/include)
#include "modules/include/module_common_types_public.h"
diff --git a/modules/media_file/BUILD.gn b/modules/media_file/BUILD.gn
index a3f3312..589b281 100644
--- a/modules/media_file/BUILD.gn
+++ b/modules/media_file/BUILD.gn
@@ -35,6 +35,7 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../common_audio",
"../../rtc_base:rtc_base_approved",
]
diff --git a/modules/pacing/BUILD.gn b/modules/pacing/BUILD.gn
index 428a99e..6b76c64 100644
--- a/modules/pacing/BUILD.gn
+++ b/modules/pacing/BUILD.gn
@@ -34,6 +34,7 @@
deps = [
"..:module_api",
+ "../../:typedefs",
"../../:webrtc_common",
"../../api:optional",
"../../logging:rtc_event_log_api",
diff --git a/modules/remote_bitrate_estimator/BUILD.gn b/modules/remote_bitrate_estimator/BUILD.gn
index f0fac54..a5dd014 100644
--- a/modules/remote_bitrate_estimator/BUILD.gn
+++ b/modules/remote_bitrate_estimator/BUILD.gn
@@ -46,6 +46,7 @@
deps = [
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../modules:module_api",
"../../modules/rtp_rtcp:rtp_rtcp_format",
@@ -140,6 +141,7 @@
":remote_bitrate_estimator",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../rtc_base:checks",
"../../rtc_base:gtest_prod",
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index e3f35b8..4ae32cd 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -82,12 +82,14 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:libjingle_peerconnection_api",
"../../api:optional",
"../../api/audio_codecs:audio_codecs_api",
"../../common_video",
"../../rtc_base:checks",
+ "../../rtc_base:deprecation",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers",
]
@@ -192,6 +194,7 @@
":rtp_rtcp_format",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:libjingle_peerconnection_api",
"../../api:optional",
@@ -200,11 +203,13 @@
"../../common_video",
"../../logging:rtc_event_log_api",
"../../rtc_base:checks",
+ "../../rtc_base:deprecation",
"../../rtc_base:gtest_prod",
"../../rtc_base:rate_limiter",
"../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_numerics",
"../../rtc_base:sequenced_task_checker",
+ "../../rtc_base:stringutils",
"../../system_wrappers",
"../../system_wrappers:field_trial_api",
"../../system_wrappers:metrics_api",
@@ -398,6 +403,7 @@
":rtp_rtcp_format",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:array_view",
"../../api:libjingle_peerconnection_api",
"../../api:optional",
diff --git a/modules/rtp_rtcp/include/receive_statistics.h b/modules/rtp_rtcp/include/receive_statistics.h
index ee7dbbb..55c2c05 100644
--- a/modules/rtp_rtcp/include/receive_statistics.h
+++ b/modules/rtp_rtcp/include/receive_statistics.h
@@ -17,6 +17,7 @@
#include "modules/include/module.h"
#include "modules/include/module_common_types.h"
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
+#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "typedefs.h" // NOLINT(build/include)
namespace webrtc {
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
index af3714b..d9b082b 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.cc
@@ -12,6 +12,27 @@
namespace webrtc {
+StreamDataCounters::StreamDataCounters() : first_packet_time_ms(-1) {}
+
+constexpr size_t StreamId::kMaxSize;
+
+bool StreamId::IsLegalName(rtc::ArrayView<const char> name) {
+ return (name.size() <= kMaxSize && name.size() > 0 &&
+ std::all_of(name.data(), name.data() + name.size(), isalnum));
+}
+
+void StreamId::Set(const char* data, size_t size) {
+ // If |data| contains \0, the stream id size might become less than |size|.
+ RTC_CHECK_LE(size, kMaxSize);
+ memcpy(value_, data, size);
+ if (size < kMaxSize)
+ value_[size] = 0;
+}
+
+// StreamId is used as member of RTPHeader that is sometimes copied with memcpy
+// and thus assume trivial destructibility.
+static_assert(std::is_trivially_destructible<StreamId>::value, "");
+
PayloadUnion::PayloadUnion(const AudioPayload& payload)
: audio_payload_(payload) {}
PayloadUnion::PayloadUnion(const VideoPayload& payload)
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index 37ef332..97a2a98 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -16,6 +16,7 @@
#include <vector>
#include "api/audio_codecs/audio_format.h"
+#include "api/rtp_headers.h"
#include "common_types.h" // NOLINT(build/include)
#include "modules/include/module_common_types.h"
#include "rtc_base/deprecation.h"
@@ -496,5 +497,100 @@
virtual uint16_t AllocateSequenceNumber() = 0;
};
+struct RtpPacketCounter {
+ RtpPacketCounter()
+ : header_bytes(0), payload_bytes(0), padding_bytes(0), packets(0) {}
+
+ void Add(const RtpPacketCounter& other) {
+ header_bytes += other.header_bytes;
+ payload_bytes += other.payload_bytes;
+ padding_bytes += other.padding_bytes;
+ packets += other.packets;
+ }
+
+ void Subtract(const RtpPacketCounter& other) {
+ RTC_DCHECK_GE(header_bytes, other.header_bytes);
+ header_bytes -= other.header_bytes;
+ RTC_DCHECK_GE(payload_bytes, other.payload_bytes);
+ payload_bytes -= other.payload_bytes;
+ RTC_DCHECK_GE(padding_bytes, other.padding_bytes);
+ padding_bytes -= other.padding_bytes;
+ RTC_DCHECK_GE(packets, other.packets);
+ packets -= other.packets;
+ }
+
+ void AddPacket(size_t packet_length, const RTPHeader& header) {
+ ++packets;
+ header_bytes += header.headerLength;
+ padding_bytes += header.paddingLength;
+ payload_bytes +=
+ packet_length - (header.headerLength + header.paddingLength);
+ }
+
+ size_t TotalBytes() const {
+ return header_bytes + payload_bytes + padding_bytes;
+ }
+
+ size_t header_bytes; // Number of bytes used by RTP headers.
+ size_t payload_bytes; // Payload bytes, excluding RTP headers and padding.
+ size_t padding_bytes; // Number of padding bytes.
+ uint32_t packets; // Number of packets.
+};
+
+// Data usage statistics for a (rtp) stream.
+struct StreamDataCounters {
+ StreamDataCounters();
+
+ void Add(const StreamDataCounters& other) {
+ transmitted.Add(other.transmitted);
+ retransmitted.Add(other.retransmitted);
+ fec.Add(other.fec);
+ if (other.first_packet_time_ms != -1 &&
+ (other.first_packet_time_ms < first_packet_time_ms ||
+ first_packet_time_ms == -1)) {
+ // Use oldest time.
+ first_packet_time_ms = other.first_packet_time_ms;
+ }
+ }
+
+ void Subtract(const StreamDataCounters& other) {
+ transmitted.Subtract(other.transmitted);
+ retransmitted.Subtract(other.retransmitted);
+ fec.Subtract(other.fec);
+ if (other.first_packet_time_ms != -1 &&
+ (other.first_packet_time_ms > first_packet_time_ms ||
+ first_packet_time_ms == -1)) {
+ // Use youngest time.
+ first_packet_time_ms = other.first_packet_time_ms;
+ }
+ }
+
+ int64_t TimeSinceFirstPacketInMs(int64_t now_ms) const {
+ return (first_packet_time_ms == -1) ? -1 : (now_ms - first_packet_time_ms);
+ }
+
+ // Returns the number of bytes corresponding to the actual media payload (i.e.
+ // RTP headers, padding, retransmissions and fec packets are excluded).
+ // Note this function does not have meaning for an RTX stream.
+ size_t MediaPayloadBytes() const {
+ return transmitted.payload_bytes - retransmitted.payload_bytes -
+ fec.payload_bytes;
+ }
+
+ int64_t first_packet_time_ms; // Time when first packet is sent/received.
+ RtpPacketCounter transmitted; // Number of transmitted packets/bytes.
+ RtpPacketCounter retransmitted; // Number of retransmitted packets/bytes.
+ RtpPacketCounter fec; // Number of redundancy packets/bytes.
+};
+
+// Callback, called whenever byte/packet counts have been updated.
+class StreamDataCountersCallback {
+ public:
+ virtual ~StreamDataCountersCallback() {}
+
+ virtual void DataCountersUpdated(const StreamDataCounters& counters,
+ uint32_t ssrc) = 0;
+};
+
} // namespace webrtc
#endif // MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_DEFINES_H_
diff --git a/modules/utility/BUILD.gn b/modules/utility/BUILD.gn
index 7002fd2..e3de364 100644
--- a/modules/utility/BUILD.gn
+++ b/modules/utility/BUILD.gn
@@ -32,6 +32,7 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../audio/utility:audio_frame_operations",
"../../common_audio",
"../../rtc_base:checks",
diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn
index f5dfa05..2953053 100644
--- a/modules/video_capture/BUILD.gn
+++ b/modules/video_capture/BUILD.gn
@@ -28,10 +28,12 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:video_frame_api_i420",
"../../common_video",
"../../media:rtc_media_base",
"../../rtc_base:rtc_base_approved",
+ "../../rtc_base:stringutils",
"../../system_wrappers",
"//third_party/libyuv",
]
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 4e4ab75..02b0a1b 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -99,6 +99,7 @@
"..:module_api",
"..:module_api_public",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../api:video_frame_api_i420",
"../../call:video_stream_api",
@@ -127,6 +128,7 @@
deps = [
":video_coding_utility",
"../..:webrtc_common",
+ "../../:typedefs",
"../../test:test_support",
]
}
@@ -169,6 +171,7 @@
deps = [
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../api/video_codecs:video_codecs_api",
"../../common_video",
@@ -239,6 +242,7 @@
deps = [
":video_coding_utility",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:video_frame_api_i420",
"../../common_video:common_video",
"../../rtc_base:checks",
@@ -301,6 +305,7 @@
":video_coding_utility",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:optional",
"../../api/video_codecs:video_codecs_api",
"../../common_video",
@@ -431,6 +436,7 @@
":video_coding_utility",
":webrtc_vp8",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:video_frame_api_i420",
"../../api/video_codecs:video_codecs_api",
"../../common_video:common_video",
@@ -599,6 +605,7 @@
":webrtc_vp9",
"..:module_api",
"../..:webrtc_common",
+ "../../:typedefs",
"../../api:video_frame_api",
"../../api:video_frame_api_i420",
"../../api/video_codecs:video_codecs_api",