Index: webrtc/modules/rtp_rtcp/source/rtp_utility.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc |
index d003c0bdb0a511f2190b51e6b1b46e17297c518f..65ec689e88b082ee3204c7b87c2ef3fcc0f9f648 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc |
@@ -10,8 +10,6 @@ |
#include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
-#include <string.h> |
- |
#include "webrtc/base/logging.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" |
#include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
@@ -258,6 +256,9 @@ bool RtpHeaderParser::Parse(RTPHeader* header, |
header->extension.hasVideoContentType = false; |
header->extension.videoContentType = VideoContentType::UNSPECIFIED; |
+ header->extension.hasVideoTiming = false; |
+ header->extension.videoTiming = {0u, 0u, 0u, 0u, 0u, false}; |
+ |
if (X) { |
/* RTP header extension, RFC 3550. |
0 1 2 3 |
@@ -469,6 +470,33 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( |
} |
break; |
} |
+ case kRtpExtensionVideoTiming: { |
+ if (len != 9) { |
+ LOG(LS_WARNING) << "Incorrect video timing len: " << len; |
+ return; |
+ } |
+ // 0 1 2 3 |
+ // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 |
+ // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
+ // | ID | len=9 | encode start ms delta | encode finish | |
+ // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
+ // | ms delta | packetizer finish ms delta | pacer exit | |
+ // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
+ // | ms delta | network timestamp ms delta | | |
+ // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
+ header->extension.hasVideoTiming = true; |
+ header->extension.videoTiming.encode_start_ms_delta = |
+ ByteReader<uint16_t, 2>::ReadBigEndian(ptr); |
+ header->extension.videoTiming.encode_finish_ms_delta = |
+ ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 2); |
+ header->extension.videoTiming.packetization_finish_ms_delta = |
+ ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 4); |
+ header->extension.videoTiming.pacer_exit_ms_delta = |
+ ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 6); |
+ header->extension.videoTiming.network_timstamp_ms_delta = |
+ ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 8); |
+ break; |
+ } |
sprang_webrtc
2017/05/31 11:12:55
Wouldn't it be possible to wrap |ptr| in an ArrayV
ilnik
2017/05/31 15:17:45
Done.
|
case kRtpExtensionRtpStreamId: { |
header->extension.stream_id.Set(rtc::MakeArrayView(ptr, len + 1)); |
break; |