aboutsummaryrefslogtreecommitdiff
path: root/rtc_tools
diff options
context:
space:
mode:
Diffstat (limited to 'rtc_tools')
-rw-r--r--rtc_tools/BUILD.gn3
-rw-r--r--rtc_tools/frame_analyzer/video_geometry_aligner.cc2
-rw-r--r--rtc_tools/rtc_event_log_visualizer/analyze_audio.cc2
-rw-r--r--rtc_tools/rtc_event_log_visualizer/analyzer.cc21
-rw-r--r--rtc_tools/rtc_event_log_visualizer/log_simulation.cc7
-rw-r--r--rtc_tools/rtp_generator/rtp_generator.cc14
-rw-r--r--rtc_tools/video_file_reader.cc7
-rw-r--r--rtc_tools/video_replay.cc48
8 files changed, 61 insertions, 43 deletions
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 202095789c..b841228a8e 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -243,6 +243,7 @@ if (!is_component_build) {
"../call:call_interfaces",
"../common_video",
"../media:rtc_internal_video_codecs",
+ "../modules/rtp_rtcp:rtp_rtcp_format",
"../modules/video_coding:video_coding_utility",
"../rtc_base:checks",
"../rtc_base:rtc_json",
@@ -397,11 +398,13 @@ if (!build_with_chromium) {
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_numerics",
"../rtc_base:stringutils",
+ "../system_wrappers",
"../test:explicit_key_value_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/base:core_headers",
+ "//third_party/abseil-cpp/absl/functional:bind_front",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
diff --git a/rtc_tools/frame_analyzer/video_geometry_aligner.cc b/rtc_tools/frame_analyzer/video_geometry_aligner.cc
index db397bc3a5..88da26d4d0 100644
--- a/rtc_tools/frame_analyzer/video_geometry_aligner.cc
+++ b/rtc_tools/frame_analyzer/video_geometry_aligner.cc
@@ -61,7 +61,7 @@ rtc::scoped_refptr<I420BufferInterface> CropAndZoom(
adjusted_frame->MutableDataY(), adjusted_frame->StrideY(),
adjusted_frame->MutableDataU(), adjusted_frame->StrideU(),
adjusted_frame->MutableDataV(), adjusted_frame->StrideV(),
- frame->width(), frame->height(), libyuv::kFilterBilinear);
+ frame->width(), frame->height(), libyuv::kFilterBox);
return adjusted_frame;
}
diff --git a/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc b/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc
index becc0044ab..51cc3b9245 100644
--- a/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc
+++ b/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc
@@ -314,7 +314,7 @@ std::unique_ptr<test::NetEqStatsGetter> CreateNetEqTestAndRun(
std::unique_ptr<test::VoidAudioSink> output(new test::VoidAudioSink());
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory =
- new rtc::RefCountedObject<ReplacementAudioDecoderFactory>(
+ rtc::make_ref_counted<ReplacementAudioDecoderFactory>(
replacement_file_name, file_sample_rate_hz);
test::NetEqTest::DecoderMap codecs = {
diff --git a/rtc_tools/rtc_event_log_visualizer/analyzer.cc b/rtc_tools/rtc_event_log_visualizer/analyzer.cc
index d6acda9ec3..0f727f2815 100644
--- a/rtc_tools/rtc_event_log_visualizer/analyzer.cc
+++ b/rtc_tools/rtc_event_log_visualizer/analyzer.cc
@@ -19,6 +19,7 @@
#include <utility>
#include "absl/algorithm/container.h"
+#include "absl/functional/bind_front.h"
#include "absl/strings/string_view.h"
#include "api/function_view.h"
#include "api/network_state_predictor.h"
@@ -1266,7 +1267,7 @@ void EventLogAnalyzer::CreateSendSideBweSimulationGraph(Plot* plot) {
const RtpPacketType& rtp_packet = *rtp_iterator->second;
if (rtp_packet.rtp.header.extension.hasTransportSequenceNumber) {
RtpPacketSendInfo packet_info;
- packet_info.ssrc = rtp_packet.rtp.header.ssrc;
+ packet_info.media_ssrc = rtp_packet.rtp.header.ssrc;
packet_info.transport_sequence_number =
rtp_packet.rtp.header.extension.transportSequenceNumber;
packet_info.rtp_sequence_number = rtp_packet.rtp.header.sequenceNumber;
@@ -1367,13 +1368,11 @@ void EventLogAnalyzer::CreateSendSideBweSimulationGraph(Plot* plot) {
void EventLogAnalyzer::CreateReceiveSideBweSimulationGraph(Plot* plot) {
using RtpPacketType = LoggedRtpPacketIncoming;
- class RembInterceptingPacketRouter : public PacketRouter {
+ class RembInterceptor {
public:
- void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs,
- uint32_t bitrate_bps) override {
+ void SendRemb(uint32_t bitrate_bps, std::vector<uint32_t> ssrcs) {
last_bitrate_bps_ = bitrate_bps;
bitrate_updated_ = true;
- PacketRouter::OnReceiveBitrateChanged(ssrcs, bitrate_bps);
}
uint32_t last_bitrate_bps() const { return last_bitrate_bps_; }
bool GetAndResetBitrateUpdated() {
@@ -1400,10 +1399,10 @@ void EventLogAnalyzer::CreateReceiveSideBweSimulationGraph(Plot* plot) {
}
SimulatedClock clock(0);
- RembInterceptingPacketRouter packet_router;
- // TODO(terelius): The PacketRouter is used as the RemoteBitrateObserver.
- // Is this intentional?
- ReceiveSideCongestionController rscc(&clock, &packet_router);
+ RembInterceptor remb_interceptor;
+ ReceiveSideCongestionController rscc(
+ &clock, [](auto...) {},
+ absl::bind_front(&RembInterceptor::SendRemb, &remb_interceptor), nullptr);
// TODO(holmer): Log the call config and use that here instead.
// static const uint32_t kDefaultStartBitrateBps = 300000;
// rscc.SetBweBitrates(0, kDefaultStartBitrateBps, -1);
@@ -1428,9 +1427,9 @@ void EventLogAnalyzer::CreateReceiveSideBweSimulationGraph(Plot* plot) {
float x = config_.GetCallTimeSec(clock.TimeInMicroseconds());
acked_time_series.points.emplace_back(x, y);
}
- if (packet_router.GetAndResetBitrateUpdated() ||
+ if (remb_interceptor.GetAndResetBitrateUpdated() ||
clock.TimeInMicroseconds() - last_update_us >= 1e6) {
- uint32_t y = packet_router.last_bitrate_bps() / 1000;
+ uint32_t y = remb_interceptor.last_bitrate_bps() / 1000;
float x = config_.GetCallTimeSec(clock.TimeInMicroseconds());
time_series.points.emplace_back(x, y);
last_update_us = clock.TimeInMicroseconds();
diff --git a/rtc_tools/rtc_event_log_visualizer/log_simulation.cc b/rtc_tools/rtc_event_log_visualizer/log_simulation.cc
index 0e5b5d04a9..c0b418de4b 100644
--- a/rtc_tools/rtc_event_log_visualizer/log_simulation.cc
+++ b/rtc_tools/rtc_event_log_visualizer/log_simulation.cc
@@ -14,6 +14,7 @@
#include "logging/rtc_event_log/rtc_event_processor.h"
#include "modules/rtp_rtcp/source/time_util.h"
+#include "system_wrappers/include/clock.h"
namespace webrtc {
@@ -83,7 +84,7 @@ void LogBasedNetworkControllerSimulation::OnPacketSent(
}
RtpPacketSendInfo packet_info;
- packet_info.ssrc = packet.ssrc;
+ packet_info.media_ssrc = packet.ssrc;
packet_info.transport_sequence_number = packet.transport_seq_no;
packet_info.rtp_sequence_number = packet.stream_seq_no;
packet_info.length = packet.size;
@@ -142,11 +143,13 @@ void LogBasedNetworkControllerSimulation::OnReceiverReport(
HandleStateUpdate(controller_->OnTransportLossReport(msg));
}
+ Clock* clock = Clock::GetRealTimeClock();
TimeDelta rtt = TimeDelta::PlusInfinity();
for (auto& rb : report.rr.report_blocks()) {
if (rb.last_sr()) {
+ Timestamp report_log_time = Timestamp::Micros(report.log_time_us());
uint32_t receive_time_ntp =
- CompactNtp(TimeMicrosToNtp(report.log_time_us()));
+ CompactNtp(clock->ConvertTimestampToNtpTime(report_log_time));
uint32_t rtt_ntp =
receive_time_ntp - rb.delay_since_last_sr() - rb.last_sr();
rtt = std::min(rtt, TimeDelta::Millis(CompactNtpRttToMs(rtt_ntp)));
diff --git a/rtc_tools/rtp_generator/rtp_generator.cc b/rtc_tools/rtp_generator/rtp_generator.cc
index 21826c8dff..3180897ec5 100644
--- a/rtc_tools/rtp_generator/rtp_generator.cc
+++ b/rtc_tools/rtp_generator/rtp_generator.cc
@@ -188,15 +188,17 @@ RtpGenerator::RtpGenerator(const RtpGeneratorOptions& options)
PayloadStringToCodecType(video_config.rtp.payload_name);
if (video_config.rtp.payload_name == cricket::kVp8CodecName) {
VideoCodecVP8 settings = VideoEncoder::GetDefaultVp8Settings();
- encoder_config.encoder_specific_settings = new rtc::RefCountedObject<
- VideoEncoderConfig::Vp8EncoderSpecificSettings>(settings);
+ encoder_config.encoder_specific_settings =
+ rtc::make_ref_counted<VideoEncoderConfig::Vp8EncoderSpecificSettings>(
+ settings);
} else if (video_config.rtp.payload_name == cricket::kVp9CodecName) {
VideoCodecVP9 settings = VideoEncoder::GetDefaultVp9Settings();
- encoder_config.encoder_specific_settings = new rtc::RefCountedObject<
- VideoEncoderConfig::Vp9EncoderSpecificSettings>(settings);
+ encoder_config.encoder_specific_settings =
+ rtc::make_ref_counted<VideoEncoderConfig::Vp9EncoderSpecificSettings>(
+ settings);
} else if (video_config.rtp.payload_name == cricket::kH264CodecName) {
VideoCodecH264 settings = VideoEncoder::GetDefaultH264Settings();
- encoder_config.encoder_specific_settings = new rtc::RefCountedObject<
+ encoder_config.encoder_specific_settings = rtc::make_ref_counted<
VideoEncoderConfig::H264EncoderSpecificSettings>(settings);
}
encoder_config.video_format.name = video_config.rtp.payload_name;
@@ -217,7 +219,7 @@ RtpGenerator::RtpGenerator(const RtpGeneratorOptions& options)
}
encoder_config.video_stream_factory =
- new rtc::RefCountedObject<cricket::EncoderStreamFactory>(
+ rtc::make_ref_counted<cricket::EncoderStreamFactory>(
video_config.rtp.payload_name, /*max qp*/ 56, /*screencast*/ false,
/*screenshare enabled*/ false);
diff --git a/rtc_tools/video_file_reader.cc b/rtc_tools/video_file_reader.cc
index b01fc0fcdd..bfdcba45fa 100644
--- a/rtc_tools/video_file_reader.cc
+++ b/rtc_tools/video_file_reader.cc
@@ -224,8 +224,8 @@ rtc::scoped_refptr<Video> OpenY4mFile(const std::string& file_name) {
}
RTC_LOG(LS_INFO) << "Video has " << frame_positions.size() << " frames";
- return new rtc::RefCountedObject<VideoFile>(*width, *height, frame_positions,
- file);
+ return rtc::make_ref_counted<VideoFile>(*width, *height, frame_positions,
+ file);
}
rtc::scoped_refptr<Video> OpenYuvFile(const std::string& file_name,
@@ -266,8 +266,7 @@ rtc::scoped_refptr<Video> OpenYuvFile(const std::string& file_name,
}
RTC_LOG(LS_INFO) << "Video has " << frame_positions.size() << " frames";
- return new rtc::RefCountedObject<VideoFile>(width, height, frame_positions,
- file);
+ return rtc::make_ref_counted<VideoFile>(width, height, frame_positions, file);
}
rtc::scoped_refptr<Video> OpenYuvOrY4mFile(const std::string& file_name,
diff --git a/rtc_tools/video_replay.cc b/rtc_tools/video_replay.cc
index 1faad28ff1..d96c7be410 100644
--- a/rtc_tools/video_replay.cc
+++ b/rtc_tools/video_replay.cc
@@ -25,6 +25,7 @@
#include "call/call.h"
#include "common_video/libyuv/include/webrtc_libyuv.h"
#include "media/engine/internal_decoder_factory.h"
+#include "modules/rtp_rtcp/source/rtp_packet.h"
#include "modules/video_coding/utility/ivf_file_writer.h"
#include "rtc_base/checks.h"
#include "rtc_base/string_to_number.h"
@@ -39,7 +40,6 @@
#include "test/gtest.h"
#include "test/null_transport.h"
#include "test/rtp_file_reader.h"
-#include "test/rtp_header_parser.h"
#include "test/run_loop.h"
#include "test/run_test.h"
#include "test/test_video_capturer.h"
@@ -119,6 +119,18 @@ ABSL_FLAG(std::string, decoder_ivf_filename, "", "Decoder ivf output file");
// Flag for video codec.
ABSL_FLAG(std::string, codec, "VP8", "Video codec");
+// Flags for rtp start and stop timestamp.
+ABSL_FLAG(uint32_t,
+ start_timestamp,
+ 0,
+ "RTP start timestamp, packets with smaller timestamp will be ignored "
+ "(no wraparound)");
+ABSL_FLAG(uint32_t,
+ stop_timestamp,
+ 4294967295,
+ "RTP stop timestamp, packets with larger timestamp will be ignored "
+ "(no wraparound)");
+
namespace {
static bool ValidatePayloadType(int32_t payload_type) {
@@ -520,6 +532,8 @@ class RtpReplayer final {
int num_packets = 0;
std::map<uint32_t, int> unknown_packets;
rtc::Event event(/*manual_reset=*/false, /*initially_signalled=*/false);
+ uint32_t start_timestamp = absl::GetFlag(FLAGS_start_timestamp);
+ uint32_t stop_timestamp = absl::GetFlag(FLAGS_stop_timestamp);
while (true) {
int64_t now_ms = rtc::TimeMillis();
if (replay_start_ms == -1) {
@@ -530,6 +544,13 @@ class RtpReplayer final {
if (!rtp_reader->NextPacket(&packet)) {
break;
}
+ rtc::CopyOnWriteBuffer packet_buffer(packet.data, packet.length);
+ RtpPacket header;
+ header.Parse(packet_buffer);
+ if (header.Timestamp() < start_timestamp ||
+ header.Timestamp() > stop_timestamp) {
+ continue;
+ }
int64_t deliver_in_ms = replay_start_ms + packet.time_ms - now_ms;
if (deliver_in_ms > 0) {
@@ -539,10 +560,9 @@ class RtpReplayer final {
++num_packets;
PacketReceiver::DeliveryStatus result = PacketReceiver::DELIVERY_OK;
worker_thread->PostTask(ToQueuedTask([&]() {
- result = call->Receiver()->DeliverPacket(
- webrtc::MediaType::VIDEO,
- rtc::CopyOnWriteBuffer(packet.data, packet.length),
- /* packet_time_us */ -1);
+ result = call->Receiver()->DeliverPacket(webrtc::MediaType::VIDEO,
+ std::move(packet_buffer),
+ /* packet_time_us */ -1);
event.Set();
}));
event.Wait(/*give_up_after_ms=*/10000);
@@ -550,25 +570,17 @@ class RtpReplayer final {
case PacketReceiver::DELIVERY_OK:
break;
case PacketReceiver::DELIVERY_UNKNOWN_SSRC: {
- RTPHeader header;
- std::unique_ptr<RtpHeaderParser> parser(
- RtpHeaderParser::CreateForTest());
- parser->Parse(packet.data, packet.length, &header);
- if (unknown_packets[header.ssrc] == 0)
- fprintf(stderr, "Unknown SSRC: %u!\n", header.ssrc);
- ++unknown_packets[header.ssrc];
+ if (unknown_packets[header.Ssrc()] == 0)
+ fprintf(stderr, "Unknown SSRC: %u!\n", header.Ssrc());
+ ++unknown_packets[header.Ssrc()];
break;
}
case PacketReceiver::DELIVERY_PACKET_ERROR: {
fprintf(stderr,
"Packet error, corrupt packets or incorrect setup?\n");
- RTPHeader header;
- std::unique_ptr<RtpHeaderParser> parser(
- RtpHeaderParser::CreateForTest());
- parser->Parse(packet.data, packet.length, &header);
fprintf(stderr, "Packet len=%zu pt=%u seq=%u ts=%u ssrc=0x%8x\n",
- packet.length, header.payloadType, header.sequenceNumber,
- header.timestamp, header.ssrc);
+ packet.length, header.PayloadType(), header.SequenceNumber(),
+ header.Timestamp(), header.Ssrc());
break;
}
}