Chromium Code Reviews| 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 |