diff options
Diffstat (limited to 'rtc_tools')
-rw-r--r-- | rtc_tools/BUILD.gn | 3 | ||||
-rw-r--r-- | rtc_tools/frame_analyzer/video_geometry_aligner.cc | 2 | ||||
-rw-r--r-- | rtc_tools/rtc_event_log_visualizer/analyze_audio.cc | 2 | ||||
-rw-r--r-- | rtc_tools/rtc_event_log_visualizer/analyzer.cc | 21 | ||||
-rw-r--r-- | rtc_tools/rtc_event_log_visualizer/log_simulation.cc | 7 | ||||
-rw-r--r-- | rtc_tools/rtp_generator/rtp_generator.cc | 14 | ||||
-rw-r--r-- | rtc_tools/video_file_reader.cc | 7 | ||||
-rw-r--r-- | rtc_tools/video_replay.cc | 48 |
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; } } |