Index: webrtc/test/layer_filtering_transport.cc |
diff --git a/webrtc/test/layer_filtering_transport.cc b/webrtc/test/layer_filtering_transport.cc |
index 7d7288a0b56addc655fa62d21e58812dddb4af53..d5f97d5162dddb6cb9f0d0fc74032803881e453e 100644 |
--- a/webrtc/test/layer_filtering_transport.cc |
+++ b/webrtc/test/layer_filtering_transport.cc |
@@ -16,6 +16,7 @@ |
#include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
#include "webrtc/rtc_base/checks.h" |
#include "webrtc/test/layer_filtering_transport.h" |
+#include "webrtc/test/rtp_file_reader.h" |
ilnik
2017/08/23 08:24:25
Why reader is needed here?
sprang_webrtc
2017/08/23 10:32:05
Oops. Autocomplete. rtp_file_writer was included f
|
namespace webrtc { |
namespace test { |
@@ -28,13 +29,16 @@ LayerFilteringTransport::LayerFilteringTransport( |
uint8_t vp9_video_payload_type, |
int selected_tl, |
int selected_sl, |
- const std::map<uint8_t, MediaType>& payload_type_map) |
+ const std::map<uint8_t, MediaType>& payload_type_map, |
+ std::unique_ptr<test::RtpFileWriter> rtp_file_writer) |
: DirectTransport(task_queue, config, send_call, payload_type_map), |
vp8_video_payload_type_(vp8_video_payload_type), |
vp9_video_payload_type_(vp9_video_payload_type), |
selected_tl_(selected_tl), |
selected_sl_(selected_sl), |
- discarded_last_packet_(false) {} |
+ discarded_last_packet_(false), |
+ start_ms_(rtc::TimeMillis()), |
+ rtp_file_writer_(std::move(rtp_file_writer)) {} |
bool LayerFilteringTransport::DiscardedLastPacket() const { |
return discarded_last_packet_; |
@@ -43,8 +47,17 @@ bool LayerFilteringTransport::DiscardedLastPacket() const { |
bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
size_t length, |
const PacketOptions& options) { |
+ RtpPacket rtp_packet; |
+ RTC_DCHECK_LE(length, IP_PACKET_SIZE); |
+ memcpy(rtp_packet.data, packet, length); |
+ rtp_packet.length = length; |
+ rtp_packet.original_length = length; |
+ rtp_packet.time_ms = rtc::TimeMillis() - start_ms_; |
+ |
if (selected_tl_ == -1 && selected_sl_ == -1) { |
// Nothing to change, forward the packet immediately. |
+ if (rtp_file_writer_.get()) |
+ rtp_file_writer_->WritePacket(&rtp_packet); |
return test::DirectTransport::SendRtp(packet, length, options); |
} |
@@ -53,10 +66,6 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
RTPHeader header; |
parser.Parse(&header); |
- RTC_DCHECK_LE(length, 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_) { |
const uint8_t* payload = packet + header.headerLength; |
@@ -86,10 +95,10 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
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. |
+ rtp_packet.data[0] |= (1 << 5); // P = 1. |
+ rtp_packet.data[1] &= 0x7F; // M = 0. |
discarded_last_packet_ = true; |
- temp_buffer[header.headerLength] = 1; // One byte of padding. |
+ rtp_packet.data[header.headerLength] = 1; // One byte of padding. |
} |
} else { |
RTC_NOTREACHED() << "Parse error"; |
@@ -100,9 +109,12 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
// make sure the marker bit is set properly, and that sequence numbers are |
// continuous. |
if (set_marker_bit) |
- temp_buffer[1] |= kRtpMarkerBitMask; |
+ rtp_packet.data[1] |= kRtpMarkerBitMask; |
+ |
+ if (rtp_file_writer_.get()) |
+ rtp_file_writer_->WritePacket(&rtp_packet); |
- return test::DirectTransport::SendRtp(temp_buffer, length, options); |
+ return test::DirectTransport::SendRtp(rtp_packet.data, length, options); |
} |
} // namespace test |