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

Unified Diff: webrtc/test/layer_filtering_transport.cc

Issue 1327153002: Replace spatial layers with padding packets in LayerFilteringTransport (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Addressing comments Created 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/test/layer_filtering_transport.cc
diff --git a/webrtc/test/layer_filtering_transport.cc b/webrtc/test/layer_filtering_transport.cc
index 102f63eb3f55d9d2f1319e0d44d73d3c02c183be..d5c54f50ca4bd6bade5bae3457c094fba8334869 100644
--- a/webrtc/test/layer_filtering_transport.cc
+++ b/webrtc/test/layer_filtering_transport.cc
@@ -39,6 +39,7 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, size_t length) {
return test::DirectTransport::SendRtp(packet, length);
}
+ bool discard = false;
bool set_marker_bit = false;
rtc::scoped_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create());
RTPHeader header;
@@ -73,7 +74,7 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, size_t length) {
temporalIdx >= tl_discard_threshold_) ||
(sl_discard_threshold_ > 0 && spatialIdx != kNoSpatialIdx &&
spatialIdx >= sl_discard_threshold_)) {
- return true; // Discard the packet.
+ discard = true;
}
} else {
RTC_NOTREACHED() << "Parse error";
@@ -86,13 +87,48 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, size_t length) {
// We are discarding some of the packets (specifically, whole layers), so
// make sure the marker bit is set properly, and that sequence numbers are
// continuous.
- if (set_marker_bit) {
+ if (set_marker_bit)
temp_buffer[1] |= kRtpMarkerBitMask;
- }
- ByteWriter<uint16_t>::WriteBigEndian(&temp_buffer[2], current_seq_num_);
- ++current_seq_num_; // Increase only if packet not discarded.
+ if (discard && header.headerLength != length) {
+ // Min and max padding according to RTP specification.
+ const size_t kMaxPaddingBytes = 255;
+ const size_t kMinPaddingBytes = 1;
+ DCHECK_LT(header.headerLength, length);
+ temp_buffer[0] |= 0x20; // Padding bit.
+ temp_buffer[1] &= ~kRtpMarkerBitMask;
+ size_t bytes_left = length;
+ while (bytes_left > 0) {
+ size_t padding_length;
+ if (bytes_left >=
+ kMaxPaddingBytes + kMinPaddingBytes + header.headerLength * 2) {
+ // Room left for another padding packet even after emitting one of
+ // maximum size.
+ padding_length = kMaxPaddingBytes;
+ } else if (bytes_left > kMaxPaddingBytes + header.headerLength) {
+ // If we make this padding packet the maximum size, the remained of the
+ // buffer won't fit a packet of minimum size.
+ padding_length =
+ kMaxPaddingBytes - header.headerLength - kMinPaddingBytes;
+ } else {
+ DCHECK_LT(header.headerLength, bytes_left);
+ padding_length = bytes_left - header.headerLength;
+ }
+ DCHECK_GE(padding_length, kMinPaddingBytes);
+ uint16_t seq_num = ++current_seq_num_;
+ ByteWriter<uint16_t>::WriteBigEndian(&temp_buffer[2], seq_num);
+ size_t packet_length = header.headerLength + padding_length;
+ temp_buffer[packet_length - 1] = static_cast<uint8_t>(padding_length);
+ bool result = test::DirectTransport::SendRtp(temp_buffer, packet_length);
+ DCHECK(result);
+ DCHECK_GE(bytes_left, packet_length);
+ bytes_left -= packet_length;
+ }
+ return true;
+ }
+ uint16_t seq_num = ++current_seq_num_;
+ ByteWriter<uint16_t>::WriteBigEndian(&temp_buffer[2], seq_num);
return test::DirectTransport::SendRtp(temp_buffer, length);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698