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

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc

Issue 2217383002: Use RtpPacketToSend in RtpSenderVideo (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Ported PlayoutDelay extension support. Created 4 years, 3 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/modules/rtp_rtcp/source/rtp_header_extensions.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
index 2d5dbf91b4d242e2b432fc55d390d808f9b821f6..a3153d2190cacac464c9dbc5517254e9c73fb4c4 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
@@ -37,13 +37,18 @@ bool AbsoluteSendTime::IsSupportedFor(MediaType type) {
return true;
}
-bool AbsoluteSendTime::Parse(const uint8_t* data, uint32_t* time_24bits) {
- *time_24bits = ByteReader<uint32_t, 3>::ReadBigEndian(data);
+bool AbsoluteSendTime::Parse(const uint8_t* data, uint32_t* value) {
+ *value = ByteReader<uint32_t, 3>::ReadBigEndian(data);
return true;
}
bool AbsoluteSendTime::Write(uint8_t* data, int64_t time_ms) {
- ByteWriter<uint32_t, 3>::WriteBigEndian(data, MsTo24Bits(time_ms));
+ const uint32_t kAbsSendTimeFraction = 18;
+ uint32_t time_24_bits =
+ static_cast<uint32_t>(((time_ms << kAbsSendTimeFraction) + 500) / 1000) &
+ 0x00FFFFFF;
+
+ ByteWriter<uint32_t, 3>::WriteBigEndian(data, time_24_bits);
return true;
}
@@ -195,4 +200,52 @@ bool VideoOrientation::Write(uint8_t* data, uint8_t value) {
data[0] = value;
return true;
}
+
+// 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
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+// | ID | len=2 | MIN delay | MAX delay |
+// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+constexpr RTPExtensionType PlayoutDelayLimits::kId;
+constexpr uint8_t PlayoutDelayLimits::kValueSizeBytes;
+const char* PlayoutDelayLimits::kName =
+ "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay";
+bool PlayoutDelayLimits::IsSupportedFor(MediaType type) {
+ switch (type) {
+ case MediaType::ANY:
+ case MediaType::VIDEO:
+ return true;
+ case MediaType::AUDIO:
+ case MediaType::DATA:
+ return false;
+ }
+ RTC_NOTREACHED();
+ return false;
+}
+
+bool PlayoutDelayLimits::Parse(const uint8_t* data,
+ PlayoutDelay* playout_delay) {
+ RTC_DCHECK(playout_delay);
+ uint32_t raw = ByteReader<uint32_t, 3>::ReadBigEndian(data);
+ uint16_t min_raw = (raw >> 12);
+ uint16_t max_raw = (raw & 0xfff);
+ if (min_raw > max_raw)
+ return false;
+ playout_delay->min_ms = min_raw * kGranularityMs;
+ playout_delay->max_ms = max_raw * kGranularityMs;
+ return true;
+}
+
+bool PlayoutDelayLimits::Write(uint8_t* data,
+ const PlayoutDelay& playout_delay) {
+ RTC_DCHECK_LE(0, playout_delay.min_ms);
+ RTC_DCHECK_LE(playout_delay.min_ms, playout_delay.max_ms);
+ RTC_DCHECK_LE(playout_delay.max_ms, kMaxMs);
+ // Convert MS to value to be sent on extension header.
+ uint32_t min_delay = playout_delay.min_ms / kGranularityMs;
+ uint32_t max_delay = playout_delay.max_ms / kGranularityMs;
+ ByteWriter<uint32_t, 3>::WriteBigEndian(data, (min_delay << 12) | max_delay);
+ return true;
+}
+
} // namespace webrtc
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698