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

Side by Side Diff: media/cast/test/simulator.cc

Issue 1515023002: Simplify interface for media/cast: CastTransportSenderImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « media/cast/test/sender.cc ('k') | media/cast/test/utility/in_process_receiver.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Simulate end to end streaming. 5 // Simulate end to end streaming.
6 // 6 //
7 // Input: 7 // Input:
8 // --source= 8 // --source=
9 // WebM used as the source of video and audio frames. 9 // WebM used as the source of video and audio frames.
10 // --output= 10 // --output=
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 const std::string as_str = 107 const std::string as_str =
108 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switch_name); 108 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switch_name);
109 if (as_str.empty()) 109 if (as_str.empty())
110 return default_value; 110 return default_value;
111 int as_int; 111 int as_int;
112 CHECK(base::StringToInt(as_str, &as_int)); 112 CHECK(base::StringToInt(as_str, &as_int));
113 CHECK_GT(as_int, 0); 113 CHECK_GT(as_int, 0);
114 return as_int; 114 return as_int;
115 } 115 }
116 116
117 void UpdateCastTransportStatus(CastTransportStatus status) {
118 LOG(INFO) << "Cast transport status: " << status;
119 }
120
121 void LogAudioOperationalStatus(OperationalStatus status) { 117 void LogAudioOperationalStatus(OperationalStatus status) {
122 LOG(INFO) << "Audio status: " << status; 118 LOG(INFO) << "Audio status: " << status;
123 } 119 }
124 120
125 void LogVideoOperationalStatus(OperationalStatus status) { 121 void LogVideoOperationalStatus(OperationalStatus status) {
126 LOG(INFO) << "Video status: " << status; 122 LOG(INFO) << "Video status: " << status;
127 } 123 }
128 124
125 struct PacketProxy {
126 PacketProxy() : receiver(NULL) {}
127 void ReceivePacket(scoped_ptr<Packet> packet) {
128 if (receiver)
129 receiver->ReceivePacket(std::move(packet));
130 }
131 CastReceiver* receiver;
132 };
133
134 class TransportClient : public CastTransportSender::Client {
135 public:
136 TransportClient(LogEventDispatcher* log_event_dispatcher,
137 PacketProxy* packet_proxy)
138 : log_event_dispatcher_(log_event_dispatcher),
139 packet_proxy_(packet_proxy) {}
140
141 void OnStatusChanged(CastTransportStatus status) final {
142 LOG(INFO) << "Cast transport status: " << status;
143 };
144 void OnLoggingEventsReceived(
145 scoped_ptr<std::vector<FrameEvent>> frame_events,
146 scoped_ptr<std::vector<PacketEvent>> packet_events) final {
147 DCHECK(log_event_dispatcher_);
148 log_event_dispatcher_->DispatchBatchOfEvents(std::move(frame_events),
149 std::move(packet_events));
150 };
151 void ProcessRtpPacket(scoped_ptr<Packet> packet) final {
152 if (packet_proxy_)
153 packet_proxy_->ReceivePacket(std::move(packet));
154 };
155
156 private:
157 LogEventDispatcher* const log_event_dispatcher_; // Not owned by this class.
158 PacketProxy* const packet_proxy_; // Not owned by this class.
159
160 DISALLOW_COPY_AND_ASSIGN(TransportClient);
161 };
162
129 // Maintains a queue of encoded video frames. 163 // Maintains a queue of encoded video frames.
130 // This works by tracking FRAME_CAPTURE_END and FRAME_ENCODED events. 164 // This works by tracking FRAME_CAPTURE_END and FRAME_ENCODED events.
131 // If a video frame is detected to be encoded it transfers a frame 165 // If a video frame is detected to be encoded it transfers a frame
132 // from FakeMediaSource to its internal queue. Otherwise it drops a 166 // from FakeMediaSource to its internal queue. Otherwise it drops a
133 // frame from FakeMediaSource. 167 // frame from FakeMediaSource.
134 class EncodedVideoFrameTracker : public RawEventSubscriber { 168 class EncodedVideoFrameTracker : public RawEventSubscriber {
135 public: 169 public:
136 EncodedVideoFrameTracker(FakeMediaSource* media_source) 170 EncodedVideoFrameTracker(FakeMediaSource* media_source)
137 : media_source_(media_source), 171 : media_source_(media_source),
138 last_frame_event_type_(UNKNOWN) {} 172 last_frame_event_type_(UNKNOWN) {}
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 video_sender_config.max_playout_delay = 372 video_sender_config.max_playout_delay =
339 audio_sender_config.max_playout_delay; 373 audio_sender_config.max_playout_delay;
340 video_sender_config.max_frame_rate = GetIntegerSwitchValue(kMaxFrameRate, 30); 374 video_sender_config.max_frame_rate = GetIntegerSwitchValue(kMaxFrameRate, 30);
341 375
342 // Video receiver config. 376 // Video receiver config.
343 FrameReceiverConfig video_receiver_config = 377 FrameReceiverConfig video_receiver_config =
344 GetDefaultVideoReceiverConfig(); 378 GetDefaultVideoReceiverConfig();
345 video_receiver_config.rtp_max_delay_ms = 379 video_receiver_config.rtp_max_delay_ms =
346 video_sender_config.max_playout_delay.InMilliseconds(); 380 video_sender_config.max_playout_delay.InMilliseconds();
347 381
348 // Loopback transport. 382 // Loopback transport. Owned by CastTransportSender.
349 LoopBackTransport receiver_to_sender(receiver_env); 383 LoopBackTransport* receiver_to_sender = new LoopBackTransport(receiver_env);
350 LoopBackTransport sender_to_receiver(sender_env); 384 LoopBackTransport* sender_to_receiver = new LoopBackTransport(sender_env);
351
352 struct PacketProxy {
353 PacketProxy() : receiver(NULL) {}
354 void ReceivePacket(scoped_ptr<Packet> packet) {
355 if (receiver)
356 receiver->ReceivePacket(std::move(packet));
357 }
358 CastReceiver* receiver;
359 };
360 385
361 PacketProxy packet_proxy; 386 PacketProxy packet_proxy;
362 387
363 // Cast receiver. 388 // Cast receiver.
364 scoped_ptr<CastTransportSender> transport_receiver( 389 scoped_ptr<CastTransportSender> transport_receiver(
365 new CastTransportSenderImpl( 390 new CastTransportSenderImpl(
366 nullptr, &testing_clock, net::IPEndPoint(), net::IPEndPoint(), 391 &testing_clock, base::TimeDelta::FromSeconds(1),
367 make_scoped_ptr(new base::DictionaryValue), 392 make_scoped_ptr(
368 base::Bind(&UpdateCastTransportStatus), 393 new TransportClient(receiver_env->logger(), &packet_proxy)),
369 base::Bind(&LogEventDispatcher::DispatchBatchOfEvents, 394 make_scoped_ptr(receiver_to_sender), task_runner));
370 base::Unretained(receiver_env->logger())),
371 base::TimeDelta::FromSeconds(1), task_runner,
372 base::Bind(&PacketProxy::ReceivePacket,
373 base::Unretained(&packet_proxy)),
374 &receiver_to_sender));
375 scoped_ptr<CastReceiver> cast_receiver( 395 scoped_ptr<CastReceiver> cast_receiver(
376 CastReceiver::Create(receiver_env, 396 CastReceiver::Create(receiver_env,
377 audio_receiver_config, 397 audio_receiver_config,
378 video_receiver_config, 398 video_receiver_config,
379 transport_receiver.get())); 399 transport_receiver.get()));
380 400
381 packet_proxy.receiver = cast_receiver.get(); 401 packet_proxy.receiver = cast_receiver.get();
382 402
383 // Cast sender and transport sender. 403 // Cast sender and transport sender.
384 scoped_ptr<CastTransportSender> transport_sender(new CastTransportSenderImpl( 404 scoped_ptr<CastTransportSender> transport_sender(new CastTransportSenderImpl(
385 nullptr, &testing_clock, net::IPEndPoint(), net::IPEndPoint(), 405 &testing_clock, base::TimeDelta::FromSeconds(1),
386 make_scoped_ptr(new base::DictionaryValue), 406 make_scoped_ptr(new TransportClient(sender_env->logger(), nullptr)),
387 base::Bind(&UpdateCastTransportStatus), 407 make_scoped_ptr(sender_to_receiver), task_runner));
388 base::Bind(&LogEventDispatcher::DispatchBatchOfEvents,
389 base::Unretained(sender_env->logger())),
390 base::TimeDelta::FromSeconds(1), task_runner, PacketReceiverCallback(),
391 &sender_to_receiver));
392 scoped_ptr<CastSender> cast_sender( 408 scoped_ptr<CastSender> cast_sender(
393 CastSender::Create(sender_env, transport_sender.get())); 409 CastSender::Create(sender_env, transport_sender.get()));
394 410
395 // Initialize network simulation model. 411 // Initialize network simulation model.
396 const bool use_network_simulation = 412 const bool use_network_simulation =
397 model.type() == media::cast::proto::INTERRUPTED_POISSON_PROCESS; 413 model.type() == media::cast::proto::INTERRUPTED_POISSON_PROCESS;
398 scoped_ptr<test::InterruptedPoissonProcess> ipp; 414 scoped_ptr<test::InterruptedPoissonProcess> ipp;
399 if (use_network_simulation) { 415 if (use_network_simulation) {
400 LOG(INFO) << "Running Poisson based network simulation."; 416 LOG(INFO) << "Running Poisson based network simulation.";
401 const IPPModel& ipp_model = model.ipp(); 417 const IPPModel& ipp_model = model.ipp();
402 std::vector<double> average_rates(ipp_model.average_rate_size()); 418 std::vector<double> average_rates(ipp_model.average_rate_size());
403 std::copy(ipp_model.average_rate().begin(), 419 std::copy(ipp_model.average_rate().begin(),
404 ipp_model.average_rate().end(), 420 ipp_model.average_rate().end(),
405 average_rates.begin()); 421 average_rates.begin());
406 ipp.reset(new test::InterruptedPoissonProcess( 422 ipp.reset(new test::InterruptedPoissonProcess(
407 average_rates, 423 average_rates,
408 ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0)); 424 ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0));
409 receiver_to_sender.Initialize(ipp->NewBuffer(128 * 1024), 425 receiver_to_sender->Initialize(ipp->NewBuffer(128 * 1024),
410 transport_sender->PacketReceiverForTesting(), 426 transport_sender->PacketReceiverForTesting(),
411 task_runner, &testing_clock); 427 task_runner, &testing_clock);
412 sender_to_receiver.Initialize( 428 sender_to_receiver->Initialize(
413 ipp->NewBuffer(128 * 1024), 429 ipp->NewBuffer(128 * 1024),
414 transport_receiver->PacketReceiverForTesting(), task_runner, 430 transport_receiver->PacketReceiverForTesting(), task_runner,
415 &testing_clock); 431 &testing_clock);
416 } else { 432 } else {
417 LOG(INFO) << "No network simulation."; 433 LOG(INFO) << "No network simulation.";
418 receiver_to_sender.Initialize( 434 receiver_to_sender->Initialize(scoped_ptr<test::PacketPipe>(),
419 scoped_ptr<test::PacketPipe>(), 435 transport_sender->PacketReceiverForTesting(),
420 transport_sender->PacketReceiverForTesting(), 436 task_runner, &testing_clock);
421 task_runner, &testing_clock); 437 sender_to_receiver->Initialize(
422 sender_to_receiver.Initialize(
423 scoped_ptr<test::PacketPipe>(), 438 scoped_ptr<test::PacketPipe>(),
424 transport_receiver->PacketReceiverForTesting(), task_runner, 439 transport_receiver->PacketReceiverForTesting(), task_runner,
425 &testing_clock); 440 &testing_clock);
426 } 441 }
427 442
428 // Initialize a fake media source and a tracker to encoded video frames. 443 // Initialize a fake media source and a tracker to encoded video frames.
429 const bool quality_test = !metrics_output_path.empty(); 444 const bool quality_test = !metrics_output_path.empty();
430 FakeMediaSource media_source(task_runner, 445 FakeMediaSource media_source(task_runner,
431 &testing_clock, 446 &testing_clock,
432 audio_sender_config, 447 audio_sender_config,
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 values.SetString("sim-id", sim_id); 733 values.SetString("sim-id", sim_id);
719 734
720 std::string extra_data; 735 std::string extra_data;
721 base::JSONWriter::Write(values, &extra_data); 736 base::JSONWriter::Write(values, &extra_data);
722 737
723 // Run. 738 // Run.
724 media::cast::RunSimulation(source_path, log_output_path, metrics_output_path, 739 media::cast::RunSimulation(source_path, log_output_path, metrics_output_path,
725 yuv_output_path, extra_data, model); 740 yuv_output_path, extra_data, model);
726 return 0; 741 return 0;
727 } 742 }
OLDNEW
« no previous file with comments | « media/cast/test/sender.cc ('k') | media/cast/test/utility/in_process_receiver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698