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

Unified Diff: webrtc/test/fake_network_pipe.cc

Issue 2794243002: Making FakeNetworkPipe demux audio and video packets. (Closed)
Patch Set: fixing android Created 3 years, 8 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
Index: webrtc/test/fake_network_pipe.cc
diff --git a/webrtc/test/fake_network_pipe.cc b/webrtc/test/fake_network_pipe.cc
index 103416779a7ffdc8d15f6d7685505f4c2c4a6292..a614cc316f0275c3be81eaff7fcb3dc90ddc5fae 100644
--- a/webrtc/test/fake_network_pipe.cc
+++ b/webrtc/test/fake_network_pipe.cc
@@ -19,6 +19,7 @@
#include "webrtc/base/logging.h"
#include "webrtc/call/call.h"
+#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
#include "webrtc/system_wrappers/include/clock.h"
namespace webrtc {
@@ -27,18 +28,46 @@ namespace {
constexpr int64_t kDefaultProcessIntervalMs = 5;
}
+DemuxerImpl::DemuxerImpl(const std::map<uint8_t, MediaType>& payload_type_map)
+ : packet_receiver_(nullptr), payload_type_map_(payload_type_map) {}
+
+void DemuxerImpl::SetReceiver(PacketReceiver* receiver) {
+ packet_receiver_ = receiver;
+}
+
+void DemuxerImpl::DeliverPacket(const NetworkPacket* packet,
+ const PacketTime& packet_time) {
+ // No packet receiver means that this demuxer will terminate the flow of
+ // packets.
+ if (!packet_receiver_)
+ return;
+ const uint8_t* const packet_data = packet->data();
+ const size_t packet_length = packet->data_length();
+ MediaType media_type = MediaType::ANY;
+ if (!RtpHeaderParser::IsRtcp(packet_data, packet_length)) {
+ RTC_CHECK_GE(packet_length, 2);
+ const uint8_t payload_type = packet_data[1] & 0x7f;
+ std::map<uint8_t, MediaType>::const_iterator it =
+ payload_type_map_.find(payload_type);
+ RTC_CHECK(it != payload_type_map_.end())
+ << "payload type " << static_cast<int>(payload_type) << " unknown.";
+ media_type = it->second;
+ }
+ packet_receiver_->DeliverPacket(media_type, packet_data, packet_length,
+ packet_time);
+}
+
FakeNetworkPipe::FakeNetworkPipe(Clock* clock,
const FakeNetworkPipe::Config& config,
- MediaType media_type)
- : FakeNetworkPipe(clock, config, media_type, 1) {}
+ std::unique_ptr<Demuxer> demuxer)
+ : FakeNetworkPipe(clock, config, std::move(demuxer), 1) {}
FakeNetworkPipe::FakeNetworkPipe(Clock* clock,
const FakeNetworkPipe::Config& config,
- MediaType media_type,
+ std::unique_ptr<Demuxer> demuxer,
uint64_t seed)
: clock_(clock),
- media_type_(media_type),
- packet_receiver_(NULL),
+ demuxer_(std::move(demuxer)),
random_(seed),
config_(),
dropped_packets_(0),
@@ -62,7 +91,8 @@ FakeNetworkPipe::~FakeNetworkPipe() {
}
void FakeNetworkPipe::SetReceiver(PacketReceiver* receiver) {
- packet_receiver_ = receiver;
+ RTC_CHECK(demuxer_);
+ demuxer_->SetReceiver(receiver);
}
void FakeNetworkPipe::SetConfig(const FakeNetworkPipe::Config& config) {
@@ -89,10 +119,7 @@ void FakeNetworkPipe::SetConfig(const FakeNetworkPipe::Config& config) {
}
void FakeNetworkPipe::SendPacket(const uint8_t* data, size_t data_length) {
- // A NULL packet_receiver_ means that this pipe will terminate the flow of
- // packets.
- if (packet_receiver_ == NULL)
- return;
+ RTC_CHECK(demuxer_);
rtc::CritScope crit(&lock_);
if (config_.queue_length_packets > 0 &&
capacity_link_.size() >= config_.queue_length_packets) {
@@ -202,8 +229,7 @@ void FakeNetworkPipe::Process() {
while (!packets_to_deliver.empty()) {
NetworkPacket* packet = packets_to_deliver.front();
packets_to_deliver.pop();
- packet_receiver_->DeliverPacket(media_type_, packet->data(),
- packet->data_length(), PacketTime());
+ demuxer_->DeliverPacket(packet, PacketTime());
delete packet;
}

Powered by Google App Engine
This is Rietveld 408576698