Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Unified Diff: webrtc/video/rtc_event_log.cc

Issue 1257163003: Changed LogRtpHeader to read the header length from the packet (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changed integer literals to unsigned Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/video/rtc_event_log.cc
diff --git a/webrtc/video/rtc_event_log.cc b/webrtc/video/rtc_event_log.cc
index 476ee2afd79c82b9be6b41feb7424939842d942b..eb4340d0b9f520e11a118fcb0ee98c0638e26def 100644
--- a/webrtc/video/rtc_event_log.cc
+++ b/webrtc/video/rtc_event_log.cc
@@ -16,6 +16,7 @@
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/call.h"
+#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
#include "webrtc/system_wrappers/interface/clock.h"
#include "webrtc/system_wrappers/interface/file_wrapper.h"
@@ -44,8 +45,7 @@ class RtcEventLogImpl final : public RtcEventLog {
void LogRtpHeader(bool incoming,
MediaType media_type,
const uint8_t* header,
- size_t header_length,
- size_t total_length) override {}
+ size_t packet_length) override {}
void LogRtcpPacket(bool incoming,
MediaType media_type,
const uint8_t* packet,
@@ -67,8 +67,7 @@ class RtcEventLogImpl final : public RtcEventLog {
void LogRtpHeader(bool incoming,
MediaType media_type,
const uint8_t* header,
- size_t header_length,
- size_t total_length) override;
+ size_t packet_length) override;
void LogRtcpPacket(bool incoming,
MediaType media_type,
const uint8_t* packet,
@@ -284,13 +283,26 @@ void RtcEventLogImpl::LogVideoSendStreamConfig(
HandleEvent(&event);
}
-// TODO(terelius): It is more convenient and less error prone to parse the
-// header length from the packet instead of relying on the caller to provide it.
void RtcEventLogImpl::LogRtpHeader(bool incoming,
MediaType media_type,
const uint8_t* header,
- size_t header_length,
- size_t total_length) {
+ size_t packet_length) {
+ // Read header length (in bytes) from packet data.
+ if (packet_length < 12u) {
+ return; // Don't read outside the packet.
+ }
+ const bool x = (header[0] & 0x10) != 0;
+ const uint8_t cc = header[0] & 0x0f;
+ size_t header_length = 12u + cc * 4u;
+
+ if (x) {
+ if (packet_length < 12u + cc * 4u + 4u) {
+ return; // Don't read outside the packet.
+ }
+ size_t x_len = ByteReader<uint16_t>::ReadBigEndian(header + 14 + cc * 4);
+ header_length += (x_len + 1) * 4;
+ }
+
rtc::CritScope lock(&crit_);
rtclog::Event rtp_event;
const int64_t timestamp = clock_->TimeInMicroseconds();
@@ -298,7 +310,7 @@ void RtcEventLogImpl::LogRtpHeader(bool incoming,
rtp_event.set_type(rtclog::Event::RTP_EVENT);
rtp_event.mutable_rtp_packet()->set_incoming(incoming);
rtp_event.mutable_rtp_packet()->set_type(ConvertMediaType(media_type));
- rtp_event.mutable_rtp_packet()->set_packet_length(total_length);
+ rtp_event.mutable_rtp_packet()->set_packet_length(packet_length);
rtp_event.mutable_rtp_packet()->set_header(header, header_length);
HandleEvent(&rtp_event);
}

Powered by Google App Engine
This is Rietveld 408576698