diff --git a/webrtc/logging/rtc_event_log/rtc_event_log.cc b/webrtc/logging/rtc_event_log/rtc_event_log.cc index ff31cee1fc..00314e619d 100644 --- a/webrtc/logging/rtc_event_log/rtc_event_log.cc +++ b/webrtc/logging/rtc_event_log/rtc_event_log.cc @@ -22,7 +22,16 @@ #include "webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h" #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "webrtc/modules/rtp_rtcp/source/byte_io.h" -#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/psfb.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h" #include "webrtc/system_wrappers/include/clock.h" #include "webrtc/system_wrappers/include/file_wrapper.h" #include "webrtc/system_wrappers/include/logging.h" @@ -323,42 +332,34 @@ void RtcEventLogImpl::LogRtcpPacket(PacketDirection direction, rtcp_event->mutable_rtcp_packet()->set_incoming(direction == kIncomingPacket); rtcp_event->mutable_rtcp_packet()->set_type(ConvertMediaType(media_type)); - RTCPUtility::RtcpCommonHeader header; + rtcp::CommonHeader header; const uint8_t* block_begin = packet; const uint8_t* packet_end = packet + length; RTC_DCHECK(length <= IP_PACKET_SIZE); uint8_t buffer[IP_PACKET_SIZE]; uint32_t buffer_length = 0; while (block_begin < packet_end) { - if (!RtcpParseCommonHeader(block_begin, packet_end - block_begin, - &header)) { + if (!header.Parse(block_begin, packet_end - block_begin)) { break; // Incorrect message header. } - uint32_t block_size = header.BlockSize(); - switch (header.packet_type) { - case RTCPUtility::PT_SR: - FALLTHROUGH(); - case RTCPUtility::PT_RR: - FALLTHROUGH(); - case RTCPUtility::PT_BYE: - FALLTHROUGH(); - case RTCPUtility::PT_IJ: - FALLTHROUGH(); - case RTCPUtility::PT_RTPFB: - FALLTHROUGH(); - case RTCPUtility::PT_PSFB: - FALLTHROUGH(); - case RTCPUtility::PT_XR: + const uint8_t* next_block = header.NextPacket(); + uint32_t block_size = next_block - block_begin; + switch (header.type()) { + case rtcp::SenderReport::kPacketType: + case rtcp::ReceiverReport::kPacketType: + case rtcp::Bye::kPacketType: + case rtcp::ExtendedJitterReport::kPacketType: + case rtcp::Rtpfb::kPacketType: + case rtcp::Psfb::kPacketType: + case rtcp::ExtendedReports::kPacketType: // We log sender reports, receiver reports, bye messages // inter-arrival jitter, third-party loss reports, payload-specific // feedback and extended reports. memcpy(buffer + buffer_length, block_begin, block_size); buffer_length += block_size; break; - case RTCPUtility::PT_SDES: - FALLTHROUGH(); - case RTCPUtility::PT_APP: - FALLTHROUGH(); + case rtcp::Sdes::kPacketType: + case rtcp::App::kPacketType: default: // We don't log sender descriptions, application defined messages // or message blocks of unknown type. diff --git a/webrtc/tools/event_log_visualizer/analyzer.cc b/webrtc/tools/event_log_visualizer/analyzer.cc index d1dec22f0a..4ec1a2972a 100644 --- a/webrtc/tools/event_log_visualizer/analyzer.cc +++ b/webrtc/tools/event_log_visualizer/analyzer.cc @@ -29,7 +29,7 @@ #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" -#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/common_header.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" #include "webrtc/video_receive_stream.h" #include "webrtc/video_send_stream.h" @@ -392,35 +392,27 @@ EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log) parsed_log_.GetRtcpPacket(i, &direction, &media_type, packet, &total_length); - RtpUtility::RtpHeaderParser rtp_parser(packet, total_length); - RTPHeader parsed_header; - RTC_CHECK(rtp_parser.ParseRtcp(&parsed_header)); - uint32_t ssrc = parsed_header.ssrc; - - RTCPUtility::RTCPParserV2 rtcp_parser(packet, total_length, true); - RTC_CHECK(rtcp_parser.IsValid()); - - RTCPUtility::RTCPPacketTypes packet_type = rtcp_parser.Begin(); - while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { - switch (packet_type) { - case RTCPUtility::RTCPPacketTypes::kTransportFeedback: { - // Currently feedback is logged twice, both for audio and video. - // Only act on one of them. - if (media_type == MediaType::VIDEO) { - std::unique_ptr rtcp_packet( - rtcp_parser.ReleaseRtcpPacket()); + // Currently feedback is logged twice, both for audio and video. + // Only act on one of them. + if (media_type == MediaType::VIDEO) { + rtcp::CommonHeader header; + const uint8_t* packet_end = packet + total_length; + for (const uint8_t* block = packet; block < packet_end; + block = header.NextPacket()) { + RTC_CHECK(header.Parse(block, packet_end - block)); + if (header.type() == rtcp::TransportFeedback::kPacketType && + header.fmt() == rtcp::TransportFeedback::kFeedbackMessageType) { + std::unique_ptr rtcp_packet( + new rtcp::TransportFeedback()); + if (rtcp_packet->Parse(header)) { + uint32_t ssrc = rtcp_packet->sender_ssrc(); StreamId stream(ssrc, direction); uint64_t timestamp = parsed_log_.GetTimestamp(i); rtcp_packets_[stream].push_back(LoggedRtcpPacket( timestamp, kRtcpTransportFeedback, std::move(rtcp_packet))); } - break; } - default: - break; } - rtcp_parser.Iterate(); - packet_type = rtcp_parser.PacketType(); } break; }