Index: webrtc/modules/audio_coding/neteq/tools/rtc_event_log_source.cc |
diff --git a/webrtc/modules/audio_coding/neteq/tools/rtc_event_log_source.cc b/webrtc/modules/audio_coding/neteq/tools/rtc_event_log_source.cc |
index dad72eaecd185b1c81a04eeb8aedc7b0a0a02364..9192839be30566f5ffe2d295cc005e57cb5e182a 100644 |
--- a/webrtc/modules/audio_coding/neteq/tools/rtc_event_log_source.cc |
+++ b/webrtc/modules/audio_coding/neteq/tools/rtc_event_log_source.cc |
@@ -16,51 +16,15 @@ |
#include <limits> |
#include "webrtc/base/checks.h" |
+#include "webrtc/call.h" |
#include "webrtc/call/rtc_event_log.h" |
#include "webrtc/modules/audio_coding/neteq/tools/packet.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
-// Files generated at build-time by the protobuf compiler. |
-#ifdef WEBRTC_ANDROID_PLATFORM_BUILD |
-#include "external/webrtc/webrtc/call/rtc_event_log.pb.h" |
-#else |
-#include "webrtc/call/rtc_event_log.pb.h" |
-#endif |
namespace webrtc { |
namespace test { |
-namespace { |
- |
-const rtclog::RtpPacket* GetRtpPacket(const rtclog::Event& event) { |
- if (!event.has_type() || event.type() != rtclog::Event::RTP_EVENT) |
- return nullptr; |
- if (!event.has_timestamp_us() || !event.has_rtp_packet()) |
- return nullptr; |
- const rtclog::RtpPacket& rtp_packet = event.rtp_packet(); |
- if (!rtp_packet.has_type() || rtp_packet.type() != rtclog::AUDIO || |
- !rtp_packet.has_incoming() || !rtp_packet.incoming() || |
- !rtp_packet.has_packet_length() || rtp_packet.packet_length() == 0 || |
- !rtp_packet.has_header() || rtp_packet.header().size() == 0 || |
- rtp_packet.packet_length() < rtp_packet.header().size()) |
- return nullptr; |
- return &rtp_packet; |
-} |
- |
-const rtclog::AudioPlayoutEvent* GetAudioPlayoutEvent( |
- const rtclog::Event& event) { |
- if (!event.has_type() || event.type() != rtclog::Event::AUDIO_PLAYOUT_EVENT) |
- return nullptr; |
- if (!event.has_timestamp_us() || !event.has_audio_playout_event()) |
- return nullptr; |
- const rtclog::AudioPlayoutEvent& playout_event = event.audio_playout_event(); |
- if (!playout_event.has_local_ssrc()) |
- return nullptr; |
- return &playout_event; |
-} |
- |
-} // namespace |
- |
RtcEventLogSource* RtcEventLogSource::Create(const std::string& file_name) { |
RtcEventLogSource* source = new RtcEventLogSource(); |
RTC_CHECK(source->OpenFile(file_name)); |
@@ -76,42 +40,57 @@ bool RtcEventLogSource::RegisterRtpHeaderExtension(RTPExtensionType type, |
} |
Packet* RtcEventLogSource::NextPacket() { |
- while (rtp_packet_index_ < event_log_->stream_size()) { |
- const rtclog::Event& event = event_log_->stream(rtp_packet_index_); |
- const rtclog::RtpPacket* rtp_packet = GetRtpPacket(event); |
- rtp_packet_index_++; |
- if (rtp_packet) { |
- uint8_t* packet_header = new uint8_t[rtp_packet->header().size()]; |
- memcpy(packet_header, rtp_packet->header().data(), |
- rtp_packet->header().size()); |
- Packet* packet = new Packet(packet_header, rtp_packet->header().size(), |
- rtp_packet->packet_length(), |
- event.timestamp_us() / 1000, *parser_.get()); |
- if (packet->valid_header()) { |
- // Check if the packet should not be filtered out. |
- if (!filter_.test(packet->header().payloadType) && |
- !(use_ssrc_filter_ && packet->header().ssrc != ssrc_)) |
- return packet; |
- } else { |
- std::cout << "Warning: Packet with index " << (rtp_packet_index_ - 1) |
- << " has an invalid header and will be ignored." << std::endl; |
+ while (rtp_packet_index_ < parsed_stream_.GetNumberOfEvents()) { |
+ if (parsed_stream_.GetEventType(rtp_packet_index_) == |
+ ParsedRtcEventLog::RTP_EVENT) { |
+ PacketDirection direction; |
+ MediaType media_type; |
+ size_t header_length; |
+ size_t packet_length; |
+ uint64_t timestamp_us = parsed_stream_.GetTimestamp(rtp_packet_index_); |
+ parsed_stream_.GetRtpHeader(rtp_packet_index_, &direction, &media_type, |
+ nullptr, &header_length, &packet_length); |
+ if (direction == kIncomingPacket && media_type == MediaType::AUDIO) { |
+ uint8_t* packet_header = new uint8_t[header_length]; |
+ parsed_stream_.GetRtpHeader(rtp_packet_index_, nullptr, nullptr, |
+ packet_header, nullptr, nullptr); |
+ Packet* packet = new Packet(packet_header, header_length, packet_length, |
+ static_cast<double>(timestamp_us) / 1000, |
+ *parser_.get()); |
+ if (packet->valid_header()) { |
+ // Check if the packet should not be filtered out. |
+ if (!filter_.test(packet->header().payloadType) && |
+ !(use_ssrc_filter_ && packet->header().ssrc != ssrc_)) { |
+ rtp_packet_index_++; |
+ return packet; |
+ } |
+ } else { |
+ std::cout << "Warning: Packet with index " << rtp_packet_index_ |
+ << " has an invalid header and will be ignored." |
+ << std::endl; |
+ } |
+ // The packet has either an invalid header or needs to be filtered out, |
+ // so it can be deleted. |
+ delete packet; |
} |
- // The packet has either an invalid header or needs to be filtered out, so |
- // it can be deleted. |
- delete packet; |
} |
+ rtp_packet_index_++; |
} |
return nullptr; |
} |
int64_t RtcEventLogSource::NextAudioOutputEventMs() { |
- while (audio_output_index_ < event_log_->stream_size()) { |
- const rtclog::Event& event = event_log_->stream(audio_output_index_); |
- const rtclog::AudioPlayoutEvent* playout_event = |
- GetAudioPlayoutEvent(event); |
+ while (audio_output_index_ < parsed_stream_.GetNumberOfEvents()) { |
+ if (parsed_stream_.GetEventType(audio_output_index_) == |
+ ParsedRtcEventLog::AUDIO_PLAYOUT_EVENT) { |
+ uint64_t timestamp_us = parsed_stream_.GetTimestamp(audio_output_index_); |
+ // We call GetAudioPlayout only to check that the protobuf event is |
+ // well-formed. |
+ parsed_stream_.GetAudioPlayout(audio_output_index_, nullptr); |
+ audio_output_index_++; |
+ return timestamp_us / 1000; |
+ } |
audio_output_index_++; |
- if (playout_event) |
- return event.timestamp_us() / 1000; |
} |
return std::numeric_limits<int64_t>::max(); |
} |
@@ -120,8 +99,7 @@ RtcEventLogSource::RtcEventLogSource() |
: PacketSource(), parser_(RtpHeaderParser::Create()) {} |
bool RtcEventLogSource::OpenFile(const std::string& file_name) { |
- event_log_.reset(new rtclog::EventStream()); |
- return RtcEventLog::ParseRtcEventLog(file_name, event_log_.get()); |
+ return parsed_stream_.ParseFile(file_name); |
} |
} // namespace test |