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..e180be827103aab93925d076d67b59a280028e3e 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_writer.h" |
namespace webrtc { |
namespace test { |
@@ -28,13 +29,19 @@ 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), |
+ receiver_(nullptr), |
+ start_ms_(rtc::TimeMillis()), |
+ rtp_file_writer_(std::move(rtp_file_writer)) { |
+ DirectTransport::SetReceiver(this); |
+} |
bool LayerFilteringTransport::DiscardedLastPacket() const { |
return discarded_last_packet_; |
@@ -43,6 +50,7 @@ bool LayerFilteringTransport::DiscardedLastPacket() const { |
bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
size_t length, |
const PacketOptions& options) { |
+ |
if (selected_tl_ == -1 && selected_sl_ == -1) { |
// Nothing to change, forward the packet immediately. |
return test::DirectTransport::SendRtp(packet, length, options); |
@@ -52,7 +60,6 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
RtpUtility::RtpHeaderParser parser(packet, length); |
RTPHeader header; |
parser.Parse(&header); |
- |
RTC_DCHECK_LE(length, IP_PACKET_SIZE); |
uint8_t temp_buffer[IP_PACKET_SIZE]; |
memcpy(temp_buffer, packet, length); |
@@ -105,5 +112,29 @@ bool LayerFilteringTransport::SendRtp(const uint8_t* packet, |
return test::DirectTransport::SendRtp(temp_buffer, length, options); |
} |
+void LayerFilteringTransport::SetReceiver(PacketReceiver* receiver) { |
+ receiver_ = receiver; |
+} |
+ |
+PacketReceiver::DeliveryStatus LayerFilteringTransport::DeliverPacket( |
stefan-webrtc
2017/08/24 12:52:18
Maybe we should make this a feature of DirectTrans
|
+ MediaType media_type, |
+ const uint8_t* packet, |
+ size_t length, |
+ const PacketTime& packet_time) { |
+ if (rtp_file_writer_.get()) { |
+ 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_; |
+ rtp_file_writer_->WritePacket(&rtp_packet); |
+ } |
+ |
+ if (!receiver_) |
+ return PacketReceiver::DELIVERY_PACKET_ERROR; |
+ return receiver_->DeliverPacket(media_type, packet, length, packet_time); |
+} |
+ |
} // namespace test |
} // namespace webrtc |