Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 380 // Video receiver config. | 380 // Video receiver config. |
| 381 FrameReceiverConfig video_receiver_config = | 381 FrameReceiverConfig video_receiver_config = |
| 382 GetDefaultVideoReceiverConfig(); | 382 GetDefaultVideoReceiverConfig(); |
| 383 video_receiver_config.rtp_max_delay_ms = | 383 video_receiver_config.rtp_max_delay_ms = |
| 384 video_sender_config.max_playout_delay.InMilliseconds(); | 384 video_sender_config.max_playout_delay.InMilliseconds(); |
| 385 | 385 |
| 386 // Loopback transport. | 386 // Loopback transport. |
| 387 LoopBackTransport receiver_to_sender(receiver_env); | 387 LoopBackTransport receiver_to_sender(receiver_env); |
| 388 LoopBackTransport sender_to_receiver(sender_env); | 388 LoopBackTransport sender_to_receiver(sender_env); |
| 389 | 389 |
| 390 struct PacketProxy { | |
| 391 PacketProxy() : receiver(NULL) {} | |
| 392 void ReceivePacket(scoped_ptr<Packet> packet) { | |
| 393 if (receiver) receiver->ReceivePacket(packet.Pass()); | |
|
miu
2014/12/04 04:18:55
style nit: Need newline before start of then-claus
hubbe
2014/12/05 23:57:20
Done.
| |
| 394 } | |
| 395 CastReceiver* receiver; | |
| 396 }; | |
| 397 | |
| 398 PacketProxy packet_proxy; | |
| 399 | |
| 390 // Cast receiver. | 400 // Cast receiver. |
| 401 scoped_ptr<CastTransportSender> transport_receiver( | |
| 402 new CastTransportSenderImpl( | |
| 403 NULL, | |
| 404 &testing_clock, | |
| 405 net::IPEndPoint(), | |
| 406 net::IPEndPoint(), | |
| 407 make_scoped_ptr(new base::DictionaryValue), | |
| 408 base::Bind(&UpdateCastTransportStatus), | |
| 409 base::Bind(&LogTransportEvents, receiver_env), | |
| 410 base::TimeDelta::FromSeconds(1), | |
| 411 task_runner, | |
| 412 base::Bind(&PacketProxy::ReceivePacket, | |
| 413 base::Unretained(&packet_proxy)), | |
| 414 &receiver_to_sender)); | |
| 391 scoped_ptr<CastReceiver> cast_receiver( | 415 scoped_ptr<CastReceiver> cast_receiver( |
| 392 CastReceiver::Create(receiver_env, | 416 CastReceiver::Create(receiver_env, |
| 393 audio_receiver_config, | 417 audio_receiver_config, |
| 394 video_receiver_config, | 418 video_receiver_config, |
| 395 &receiver_to_sender)); | 419 transport_receiver.get())); |
| 420 | |
| 421 packet_proxy.receiver = cast_receiver.get(); | |
| 396 | 422 |
| 397 // Cast sender and transport sender. | 423 // Cast sender and transport sender. |
| 398 scoped_ptr<CastTransportSender> transport_sender( | 424 scoped_ptr<CastTransportSender> transport_sender( |
| 399 new CastTransportSenderImpl( | 425 new CastTransportSenderImpl( |
| 400 NULL, | 426 NULL, |
| 401 &testing_clock, | 427 &testing_clock, |
| 402 net::IPEndPoint(), | 428 net::IPEndPoint(), |
| 429 net::IPEndPoint(), | |
| 403 make_scoped_ptr(new base::DictionaryValue), | 430 make_scoped_ptr(new base::DictionaryValue), |
| 404 base::Bind(&UpdateCastTransportStatus), | 431 base::Bind(&UpdateCastTransportStatus), |
| 405 base::Bind(&LogTransportEvents, sender_env), | 432 base::Bind(&LogTransportEvents, sender_env), |
| 406 base::TimeDelta::FromSeconds(1), | 433 base::TimeDelta::FromSeconds(1), |
| 407 task_runner, | 434 task_runner, |
| 435 PacketReceiverCallback(), | |
| 408 &sender_to_receiver)); | 436 &sender_to_receiver)); |
| 409 scoped_ptr<CastSender> cast_sender( | 437 scoped_ptr<CastSender> cast_sender( |
| 410 CastSender::Create(sender_env, transport_sender.get())); | 438 CastSender::Create(sender_env, transport_sender.get())); |
| 411 | 439 |
| 412 // Initialize network simulation model. | 440 // Initialize network simulation model. |
| 413 const bool use_network_simulation = | 441 const bool use_network_simulation = |
| 414 model.type() == media::cast::proto::INTERRUPTED_POISSON_PROCESS; | 442 model.type() == media::cast::proto::INTERRUPTED_POISSON_PROCESS; |
| 415 scoped_ptr<test::InterruptedPoissonProcess> ipp; | 443 scoped_ptr<test::InterruptedPoissonProcess> ipp; |
| 416 if (use_network_simulation) { | 444 if (use_network_simulation) { |
| 417 LOG(INFO) << "Running Poisson based network simulation."; | 445 LOG(INFO) << "Running Poisson based network simulation."; |
| 418 const IPPModel& ipp_model = model.ipp(); | 446 const IPPModel& ipp_model = model.ipp(); |
| 419 std::vector<double> average_rates(ipp_model.average_rate_size()); | 447 std::vector<double> average_rates(ipp_model.average_rate_size()); |
| 420 std::copy(ipp_model.average_rate().begin(), | 448 std::copy(ipp_model.average_rate().begin(), |
| 421 ipp_model.average_rate().end(), | 449 ipp_model.average_rate().end(), |
| 422 average_rates.begin()); | 450 average_rates.begin()); |
| 423 ipp.reset(new test::InterruptedPoissonProcess( | 451 ipp.reset(new test::InterruptedPoissonProcess( |
| 424 average_rates, | 452 average_rates, |
| 425 ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0)); | 453 ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0)); |
| 426 receiver_to_sender.Initialize( | 454 receiver_to_sender.Initialize( |
| 427 ipp->NewBuffer(128 * 1024).Pass(), | 455 ipp->NewBuffer(128 * 1024).Pass(), |
| 428 transport_sender->PacketReceiverForTesting(), | 456 transport_sender->PacketReceiverForTesting(), |
| 429 task_runner, &testing_clock); | 457 task_runner, &testing_clock); |
| 430 sender_to_receiver.Initialize( | 458 sender_to_receiver.Initialize( |
| 431 ipp->NewBuffer(128 * 1024).Pass(), | 459 ipp->NewBuffer(128 * 1024).Pass(), |
| 432 cast_receiver->packet_receiver(), task_runner, | 460 transport_receiver->PacketReceiverForTesting(), task_runner, |
| 433 &testing_clock); | 461 &testing_clock); |
| 434 } else { | 462 } else { |
| 435 LOG(INFO) << "No network simulation."; | 463 LOG(INFO) << "No network simulation."; |
| 436 receiver_to_sender.Initialize( | 464 receiver_to_sender.Initialize( |
| 437 scoped_ptr<test::PacketPipe>(), | 465 scoped_ptr<test::PacketPipe>(), |
| 438 transport_sender->PacketReceiverForTesting(), | 466 transport_sender->PacketReceiverForTesting(), |
| 439 task_runner, &testing_clock); | 467 task_runner, &testing_clock); |
| 440 sender_to_receiver.Initialize( | 468 sender_to_receiver.Initialize( |
| 441 scoped_ptr<test::PacketPipe>(), | 469 scoped_ptr<test::PacketPipe>(), |
| 442 cast_receiver->packet_receiver(), task_runner, | 470 transport_receiver->PacketReceiverForTesting(), task_runner, |
| 443 &testing_clock); | 471 &testing_clock); |
| 444 } | 472 } |
| 445 | 473 |
| 446 // Initialize a fake media source and a tracker to encoded video frames. | 474 // Initialize a fake media source and a tracker to encoded video frames. |
| 447 const bool quality_test = !metrics_output_path.empty(); | 475 const bool quality_test = !metrics_output_path.empty(); |
| 448 FakeMediaSource media_source(task_runner, | 476 FakeMediaSource media_source(task_runner, |
| 449 &testing_clock, | 477 &testing_clock, |
| 450 video_sender_config, | 478 video_sender_config, |
| 451 quality_test); | 479 quality_test); |
| 452 scoped_ptr<EncodedVideoFrameTracker> video_frame_tracker; | 480 scoped_ptr<EncodedVideoFrameTracker> video_frame_tracker; |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 736 values.SetString("sim-id", sim_id); | 764 values.SetString("sim-id", sim_id); |
| 737 | 765 |
| 738 std::string extra_data; | 766 std::string extra_data; |
| 739 base::JSONWriter::Write(&values, &extra_data); | 767 base::JSONWriter::Write(&values, &extra_data); |
| 740 | 768 |
| 741 // Run. | 769 // Run. |
| 742 media::cast::RunSimulation(source_path, log_output_path, metrics_output_path, | 770 media::cast::RunSimulation(source_path, log_output_path, metrics_output_path, |
| 743 yuv_output_path, extra_data, model); | 771 yuv_output_path, extra_data, model); |
| 744 return 0; | 772 return 0; |
| 745 } | 773 } |
| OLD | NEW |