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

Unified Diff: webrtc/test/layer_filtering_transport.cc

Issue 1412233003: Support simulcast and spatial layers in VideoQualityTest (PERF NOTE) (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase + suppress log spamming Created 5 years, 1 month 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 | « webrtc/test/layer_filtering_transport.h ('k') | webrtc/video/full_stack.cc » ('j') | 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 a4ebf47f93ae559e024b5981814f38941977934b..5533a4cd468df63e4a89e93684305c829a1bb12a 100644
--- a/webrtc/test/layer_filtering_transport.cc
+++ b/webrtc/test/layer_filtering_transport.cc
@@ -9,9 +9,7 @@
*/
#include "webrtc/base/checks.h"
-#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
-#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_format.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
#include "webrtc/test/layer_filtering_transport.h"
@@ -24,33 +22,35 @@ LayerFilteringTransport::LayerFilteringTransport(
Call* send_call,
uint8_t vp8_video_payload_type,
uint8_t vp9_video_payload_type,
- uint8_t tl_discard_threshold,
- uint8_t sl_discard_threshold)
+ int selected_tl,
+ int selected_sl)
: test::DirectTransport(config, send_call),
vp8_video_payload_type_(vp8_video_payload_type),
vp9_video_payload_type_(vp9_video_payload_type),
- tl_discard_threshold_(tl_discard_threshold),
- sl_discard_threshold_(sl_discard_threshold) {}
+ selected_tl_(selected_tl),
+ selected_sl_(selected_sl),
+ discarded_last_packet_(false) {}
-uint16_t LayerFilteringTransport::NextSequenceNumber(uint32_t ssrc) {
- auto it = current_seq_nums_.find(ssrc);
- if (it == current_seq_nums_.end())
- return current_seq_nums_[ssrc] = 10000;
- return ++it->second;
+bool LayerFilteringTransport::DiscardedLastPacket() const {
+ return discarded_last_packet_;
}
bool LayerFilteringTransport::SendRtp(const uint8_t* packet,
size_t length,
const PacketOptions& options) {
- if (tl_discard_threshold_ == 0 && sl_discard_threshold_ == 0) {
+ if (selected_tl_ == -1 && selected_sl_ == -1) {
// Nothing to change, forward the packet immediately.
return test::DirectTransport::SendRtp(packet, length, options);
}
bool set_marker_bit = false;
- rtc::scoped_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create());
+ RtpUtility::RtpHeaderParser parser(packet, length);
RTPHeader header;
- parser->Parse(packet, length, &header);
+ parser.Parse(header);
+
+ RTC_DCHECK_LE(length, static_cast<size_t>(IP_PACKET_SIZE));
+ uint8_t temp_buffer[IP_PACKET_SIZE];
+ memcpy(temp_buffer, packet, length);
if (header.payloadType == vp8_video_payload_type_ ||
header.payloadType == vp9_video_payload_type_) {
@@ -65,40 +65,38 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet,
RtpDepacketizer::Create(is_vp8 ? kRtpVideoVp8 : kRtpVideoVp9));
RtpDepacketizer::ParsedPayload parsed_payload;
if (depacketizer->Parse(&parsed_payload, payload, payload_data_length)) {
- const uint8_t temporalIdx =
+ const int temporal_idx = static_cast<int>(
is_vp8 ? parsed_payload.type.Video.codecHeader.VP8.temporalIdx
- : parsed_payload.type.Video.codecHeader.VP9.temporal_idx;
- const uint8_t spatialIdx =
+ : parsed_payload.type.Video.codecHeader.VP9.temporal_idx);
+ const int spatial_idx = static_cast<int>(
is_vp8 ? kNoSpatialIdx
- : parsed_payload.type.Video.codecHeader.VP9.spatial_idx;
- if (sl_discard_threshold_ > 0 &&
- spatialIdx == sl_discard_threshold_ - 1 &&
+ : parsed_payload.type.Video.codecHeader.VP9.spatial_idx);
+ if (selected_sl_ >= 0 && spatial_idx == selected_sl_ &&
parsed_payload.type.Video.codecHeader.VP9.end_of_frame) {
// This layer is now the last in the superframe.
set_marker_bit = true;
- }
- if ((tl_discard_threshold_ > 0 && temporalIdx != kNoTemporalIdx &&
- temporalIdx >= tl_discard_threshold_) ||
- (sl_discard_threshold_ > 0 && spatialIdx != kNoSpatialIdx &&
- spatialIdx >= sl_discard_threshold_)) {
- return true; // Discard the packet.
+ } else if ((selected_tl_ >= 0 && temporal_idx != kNoTemporalIdx &&
+ temporal_idx > selected_tl_) ||
+ (selected_sl_ >= 0 && spatial_idx != kNoSpatialIdx &&
+ spatial_idx > selected_sl_)) {
+ // Truncate packet to a padding packet.
+ length = header.headerLength + 1;
+ temp_buffer[0] |= (1 << 5); // P = 1.
+ temp_buffer[1] &= 0x7F; // M = 0.
+ discarded_last_packet_ = true;
+ temp_buffer[header.headerLength] = 1; // One byte of padding.
}
} else {
RTC_NOTREACHED() << "Parse error";
}
}
- uint8_t temp_buffer[IP_PACKET_SIZE];
- memcpy(temp_buffer, packet, 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)
temp_buffer[1] |= kRtpMarkerBitMask;
- uint16_t seq_num = NextSequenceNumber(header.ssrc);
- ByteWriter<uint16_t>::WriteBigEndian(&temp_buffer[2], seq_num);
return test::DirectTransport::SendRtp(temp_buffer, length, options);
}
« no previous file with comments | « webrtc/test/layer_filtering_transport.h ('k') | webrtc/video/full_stack.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698