Index: media/cast/test/simulator.cc |
diff --git a/media/cast/test/simulator.cc b/media/cast/test/simulator.cc |
index a2aa6e45b91b7e84d153ceba5cf4a5e4753660df..78c1ccf661409863d762653937d2239a333e8da6 100644 |
--- a/media/cast/test/simulator.cc |
+++ b/media/cast/test/simulator.cc |
@@ -114,10 +114,6 @@ int GetIntegerSwitchValue(const char* switch_name, int default_value) { |
return as_int; |
} |
-void UpdateCastTransportStatus(CastTransportStatus status) { |
- LOG(INFO) << "Cast transport status: " << status; |
-} |
- |
void LogAudioOperationalStatus(OperationalStatus status) { |
LOG(INFO) << "Audio status: " << status; |
} |
@@ -126,6 +122,44 @@ void LogVideoOperationalStatus(OperationalStatus status) { |
LOG(INFO) << "Video status: " << status; |
} |
+struct PacketProxy { |
+ PacketProxy() : receiver(NULL) {} |
+ void ReceivePacket(scoped_ptr<Packet> packet) { |
+ if (receiver) |
+ receiver->ReceivePacket(std::move(packet)); |
+ } |
+ CastReceiver* receiver; |
+}; |
+ |
+class TransportClient : public CastTransportSender::Client { |
+ public: |
+ TransportClient(LogEventDispatcher* log_event_dispatcher, |
+ PacketProxy* packet_proxy) |
+ : log_event_dispatcher_(log_event_dispatcher), |
+ packet_proxy_(packet_proxy) {} |
+ |
+ void OnStatusChanged(CastTransportStatus status) final { |
+ LOG(INFO) << "Cast transport status: " << status; |
+ }; |
+ void OnLoggingEventsReceived( |
+ scoped_ptr<std::vector<FrameEvent>> frame_events, |
+ scoped_ptr<std::vector<PacketEvent>> packet_events) final { |
+ DCHECK(log_event_dispatcher_); |
+ log_event_dispatcher_->DispatchBatchOfEvents(std::move(frame_events), |
+ std::move(packet_events)); |
+ }; |
+ void ProcessRtpPacket(scoped_ptr<Packet> packet) final { |
+ if (packet_proxy_) |
+ packet_proxy_->ReceivePacket(std::move(packet)); |
+ }; |
+ |
+ private: |
+ LogEventDispatcher* const log_event_dispatcher_; // Not owned by this class. |
+ PacketProxy* const packet_proxy_; // Not owned by this class. |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TransportClient); |
+}; |
+ |
// Maintains a queue of encoded video frames. |
// This works by tracking FRAME_CAPTURE_END and FRAME_ENCODED events. |
// If a video frame is detected to be encoded it transfers a frame |
@@ -345,33 +379,19 @@ void RunSimulation(const base::FilePath& source_path, |
video_receiver_config.rtp_max_delay_ms = |
video_sender_config.max_playout_delay.InMilliseconds(); |
- // Loopback transport. |
- LoopBackTransport receiver_to_sender(receiver_env); |
- LoopBackTransport sender_to_receiver(sender_env); |
- |
- struct PacketProxy { |
- PacketProxy() : receiver(NULL) {} |
- void ReceivePacket(scoped_ptr<Packet> packet) { |
- if (receiver) |
- receiver->ReceivePacket(std::move(packet)); |
- } |
- CastReceiver* receiver; |
- }; |
+ // Loopback transport. Owned by CastTransportSender. |
+ LoopBackTransport* receiver_to_sender = new LoopBackTransport(receiver_env); |
+ LoopBackTransport* sender_to_receiver = new LoopBackTransport(sender_env); |
PacketProxy packet_proxy; |
// Cast receiver. |
scoped_ptr<CastTransportSender> transport_receiver( |
new CastTransportSenderImpl( |
- nullptr, &testing_clock, net::IPEndPoint(), net::IPEndPoint(), |
- make_scoped_ptr(new base::DictionaryValue), |
- base::Bind(&UpdateCastTransportStatus), |
- base::Bind(&LogEventDispatcher::DispatchBatchOfEvents, |
- base::Unretained(receiver_env->logger())), |
- base::TimeDelta::FromSeconds(1), task_runner, |
- base::Bind(&PacketProxy::ReceivePacket, |
- base::Unretained(&packet_proxy)), |
- &receiver_to_sender)); |
+ &testing_clock, base::TimeDelta::FromSeconds(1), |
+ make_scoped_ptr( |
+ new TransportClient(receiver_env->logger(), &packet_proxy)), |
+ make_scoped_ptr(receiver_to_sender), task_runner)); |
scoped_ptr<CastReceiver> cast_receiver( |
CastReceiver::Create(receiver_env, |
audio_receiver_config, |
@@ -382,13 +402,9 @@ void RunSimulation(const base::FilePath& source_path, |
// Cast sender and transport sender. |
scoped_ptr<CastTransportSender> transport_sender(new CastTransportSenderImpl( |
- nullptr, &testing_clock, net::IPEndPoint(), net::IPEndPoint(), |
- make_scoped_ptr(new base::DictionaryValue), |
- base::Bind(&UpdateCastTransportStatus), |
- base::Bind(&LogEventDispatcher::DispatchBatchOfEvents, |
- base::Unretained(sender_env->logger())), |
- base::TimeDelta::FromSeconds(1), task_runner, PacketReceiverCallback(), |
- &sender_to_receiver)); |
+ &testing_clock, base::TimeDelta::FromSeconds(1), |
+ make_scoped_ptr(new TransportClient(sender_env->logger(), nullptr)), |
+ make_scoped_ptr(sender_to_receiver), task_runner)); |
scoped_ptr<CastSender> cast_sender( |
CastSender::Create(sender_env, transport_sender.get())); |
@@ -406,20 +422,19 @@ void RunSimulation(const base::FilePath& source_path, |
ipp.reset(new test::InterruptedPoissonProcess( |
average_rates, |
ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0)); |
- receiver_to_sender.Initialize(ipp->NewBuffer(128 * 1024), |
- transport_sender->PacketReceiverForTesting(), |
- task_runner, &testing_clock); |
- sender_to_receiver.Initialize( |
+ receiver_to_sender->Initialize(ipp->NewBuffer(128 * 1024), |
+ transport_sender->PacketReceiverForTesting(), |
+ task_runner, &testing_clock); |
+ sender_to_receiver->Initialize( |
ipp->NewBuffer(128 * 1024), |
transport_receiver->PacketReceiverForTesting(), task_runner, |
&testing_clock); |
} else { |
LOG(INFO) << "No network simulation."; |
- receiver_to_sender.Initialize( |
- scoped_ptr<test::PacketPipe>(), |
- transport_sender->PacketReceiverForTesting(), |
- task_runner, &testing_clock); |
- sender_to_receiver.Initialize( |
+ receiver_to_sender->Initialize(scoped_ptr<test::PacketPipe>(), |
+ transport_sender->PacketReceiverForTesting(), |
+ task_runner, &testing_clock); |
+ sender_to_receiver->Initialize( |
scoped_ptr<test::PacketPipe>(), |
transport_receiver->PacketReceiverForTesting(), task_runner, |
&testing_clock); |