| 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 #include "media/cast/sender/audio_sender.h" | 5 #include "media/cast/sender/audio_sender.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 |
| 9 #include <memory> |
| 8 #include <utility> | 10 #include <utility> |
| 9 | 11 |
| 10 #include "base/bind.h" | 12 #include "base/bind.h" |
| 11 #include "base/bind_helpers.h" | 13 #include "base/bind_helpers.h" |
| 12 #include "base/macros.h" | 14 #include "base/macros.h" |
| 13 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/ptr_util.h" |
| 14 #include "base/test/simple_test_tick_clock.h" | 16 #include "base/test/simple_test_tick_clock.h" |
| 15 #include "base/values.h" | 17 #include "base/values.h" |
| 16 #include "media/base/fake_single_thread_task_runner.h" | 18 #include "media/base/fake_single_thread_task_runner.h" |
| 17 #include "media/base/media.h" | 19 #include "media/base/media.h" |
| 18 #include "media/cast/cast_config.h" | 20 #include "media/cast/cast_config.h" |
| 19 #include "media/cast/cast_environment.h" | 21 #include "media/cast/cast_environment.h" |
| 20 #include "media/cast/constants.h" | 22 #include "media/cast/constants.h" |
| 21 #include "media/cast/net/cast_transport_config.h" | 23 #include "media/cast/net/cast_transport_config.h" |
| 22 #include "media/cast/net/cast_transport_impl.h" | 24 #include "media/cast/net/cast_transport_impl.h" |
| 23 #include "media/cast/test/utility/audio_utility.h" | 25 #include "media/cast/test/utility/audio_utility.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 36 } | 38 } |
| 37 | 39 |
| 38 class TransportClient : public CastTransport::Client { | 40 class TransportClient : public CastTransport::Client { |
| 39 public: | 41 public: |
| 40 TransportClient() {} | 42 TransportClient() {} |
| 41 | 43 |
| 42 void OnStatusChanged(CastTransportStatus status) final { | 44 void OnStatusChanged(CastTransportStatus status) final { |
| 43 EXPECT_EQ(TRANSPORT_AUDIO_INITIALIZED, status); | 45 EXPECT_EQ(TRANSPORT_AUDIO_INITIALIZED, status); |
| 44 }; | 46 }; |
| 45 void OnLoggingEventsReceived( | 47 void OnLoggingEventsReceived( |
| 46 scoped_ptr<std::vector<FrameEvent>> frame_events, | 48 std::unique_ptr<std::vector<FrameEvent>> frame_events, |
| 47 scoped_ptr<std::vector<PacketEvent>> packet_events) final{}; | 49 std::unique_ptr<std::vector<PacketEvent>> packet_events) final{}; |
| 48 void ProcessRtpPacket(scoped_ptr<Packet> packet) final{}; | 50 void ProcessRtpPacket(std::unique_ptr<Packet> packet) final{}; |
| 49 | 51 |
| 50 DISALLOW_COPY_AND_ASSIGN(TransportClient); | 52 DISALLOW_COPY_AND_ASSIGN(TransportClient); |
| 51 }; | 53 }; |
| 52 | 54 |
| 53 } // namespace | 55 } // namespace |
| 54 | 56 |
| 55 class TestPacketSender : public PacketTransport { | 57 class TestPacketSender : public PacketTransport { |
| 56 public: | 58 public: |
| 57 TestPacketSender() : number_of_rtp_packets_(0), number_of_rtcp_packets_(0) {} | 59 TestPacketSender() : number_of_rtp_packets_(0), number_of_rtcp_packets_(0) {} |
| 58 | 60 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 }; | 92 }; |
| 91 | 93 |
| 92 class AudioSenderTest : public ::testing::Test { | 94 class AudioSenderTest : public ::testing::Test { |
| 93 protected: | 95 protected: |
| 94 AudioSenderTest() { | 96 AudioSenderTest() { |
| 95 InitializeMediaLibrary(); | 97 InitializeMediaLibrary(); |
| 96 testing_clock_ = new base::SimpleTestTickClock(); | 98 testing_clock_ = new base::SimpleTestTickClock(); |
| 97 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); | 99 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); |
| 98 task_runner_ = new FakeSingleThreadTaskRunner(testing_clock_); | 100 task_runner_ = new FakeSingleThreadTaskRunner(testing_clock_); |
| 99 cast_environment_ = | 101 cast_environment_ = |
| 100 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_), | 102 new CastEnvironment(std::unique_ptr<base::TickClock>(testing_clock_), |
| 101 task_runner_, task_runner_, task_runner_); | 103 task_runner_, task_runner_, task_runner_); |
| 102 audio_config_.codec = CODEC_AUDIO_OPUS; | 104 audio_config_.codec = CODEC_AUDIO_OPUS; |
| 103 audio_config_.use_external_encoder = false; | 105 audio_config_.use_external_encoder = false; |
| 104 audio_config_.frequency = kDefaultAudioSamplingRate; | 106 audio_config_.frequency = kDefaultAudioSamplingRate; |
| 105 audio_config_.channels = 2; | 107 audio_config_.channels = 2; |
| 106 audio_config_.bitrate = kDefaultAudioEncoderBitrate; | 108 audio_config_.bitrate = kDefaultAudioEncoderBitrate; |
| 107 audio_config_.rtp_payload_type = 127; | 109 audio_config_.rtp_payload_type = 127; |
| 108 | 110 |
| 109 transport_ = new TestPacketSender(); | 111 transport_ = new TestPacketSender(); |
| 110 transport_sender_.reset( | 112 transport_sender_.reset( |
| 111 new CastTransportImpl(testing_clock_, base::TimeDelta(), | 113 new CastTransportImpl(testing_clock_, base::TimeDelta(), |
| 112 make_scoped_ptr(new TransportClient()), | 114 base::WrapUnique(new TransportClient()), |
| 113 make_scoped_ptr(transport_), task_runner_)); | 115 base::WrapUnique(transport_), task_runner_)); |
| 114 OperationalStatus operational_status = STATUS_UNINITIALIZED; | 116 OperationalStatus operational_status = STATUS_UNINITIALIZED; |
| 115 audio_sender_.reset(new AudioSender( | 117 audio_sender_.reset(new AudioSender( |
| 116 cast_environment_, | 118 cast_environment_, |
| 117 audio_config_, | 119 audio_config_, |
| 118 base::Bind(&SaveOperationalStatus, &operational_status), | 120 base::Bind(&SaveOperationalStatus, &operational_status), |
| 119 transport_sender_.get())); | 121 transport_sender_.get())); |
| 120 task_runner_->RunTasks(); | 122 task_runner_->RunTasks(); |
| 121 CHECK_EQ(STATUS_INITIALIZED, operational_status); | 123 CHECK_EQ(STATUS_INITIALIZED, operational_status); |
| 122 } | 124 } |
| 123 | 125 |
| 124 ~AudioSenderTest() override {} | 126 ~AudioSenderTest() override {} |
| 125 | 127 |
| 126 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. | 128 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. |
| 127 TestPacketSender* transport_; // Owned by CastTransport. | 129 TestPacketSender* transport_; // Owned by CastTransport. |
| 128 scoped_ptr<CastTransportImpl> transport_sender_; | 130 std::unique_ptr<CastTransportImpl> transport_sender_; |
| 129 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; | 131 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; |
| 130 scoped_ptr<AudioSender> audio_sender_; | 132 std::unique_ptr<AudioSender> audio_sender_; |
| 131 scoped_refptr<CastEnvironment> cast_environment_; | 133 scoped_refptr<CastEnvironment> cast_environment_; |
| 132 AudioSenderConfig audio_config_; | 134 AudioSenderConfig audio_config_; |
| 133 }; | 135 }; |
| 134 | 136 |
| 135 TEST_F(AudioSenderTest, Encode20ms) { | 137 TEST_F(AudioSenderTest, Encode20ms) { |
| 136 const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(20); | 138 const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(20); |
| 137 scoped_ptr<AudioBus> bus( | 139 std::unique_ptr<AudioBus> bus( |
| 138 TestAudioBusFactory(audio_config_.channels, | 140 TestAudioBusFactory(audio_config_.channels, audio_config_.frequency, |
| 139 audio_config_.frequency, | 141 TestAudioBusFactory::kMiddleANoteFreq, 0.5f) |
| 140 TestAudioBusFactory::kMiddleANoteFreq, | 142 .NextAudioBus(kDuration)); |
| 141 0.5f).NextAudioBus(kDuration)); | |
| 142 | 143 |
| 143 audio_sender_->InsertAudio(std::move(bus), testing_clock_->NowTicks()); | 144 audio_sender_->InsertAudio(std::move(bus), testing_clock_->NowTicks()); |
| 144 task_runner_->RunTasks(); | 145 task_runner_->RunTasks(); |
| 145 EXPECT_LE(1, transport_->number_of_rtp_packets()); | 146 EXPECT_LE(1, transport_->number_of_rtp_packets()); |
| 146 EXPECT_LE(1, transport_->number_of_rtcp_packets()); | 147 EXPECT_LE(1, transport_->number_of_rtcp_packets()); |
| 147 } | 148 } |
| 148 | 149 |
| 149 TEST_F(AudioSenderTest, RtcpTimer) { | 150 TEST_F(AudioSenderTest, RtcpTimer) { |
| 150 const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(20); | 151 const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(20); |
| 151 scoped_ptr<AudioBus> bus( | 152 std::unique_ptr<AudioBus> bus( |
| 152 TestAudioBusFactory(audio_config_.channels, | 153 TestAudioBusFactory(audio_config_.channels, audio_config_.frequency, |
| 153 audio_config_.frequency, | 154 TestAudioBusFactory::kMiddleANoteFreq, 0.5f) |
| 154 TestAudioBusFactory::kMiddleANoteFreq, | 155 .NextAudioBus(kDuration)); |
| 155 0.5f).NextAudioBus(kDuration)); | |
| 156 | 156 |
| 157 audio_sender_->InsertAudio(std::move(bus), testing_clock_->NowTicks()); | 157 audio_sender_->InsertAudio(std::move(bus), testing_clock_->NowTicks()); |
| 158 task_runner_->RunTasks(); | 158 task_runner_->RunTasks(); |
| 159 | 159 |
| 160 // Make sure that we send at least one RTCP packet. | 160 // Make sure that we send at least one RTCP packet. |
| 161 base::TimeDelta max_rtcp_timeout = | 161 base::TimeDelta max_rtcp_timeout = |
| 162 base::TimeDelta::FromMilliseconds(1 + kRtcpReportIntervalMs * 3 / 2); | 162 base::TimeDelta::FromMilliseconds(1 + kRtcpReportIntervalMs * 3 / 2); |
| 163 testing_clock_->Advance(max_rtcp_timeout); | 163 testing_clock_->Advance(max_rtcp_timeout); |
| 164 task_runner_->RunTasks(); | 164 task_runner_->RunTasks(); |
| 165 EXPECT_LE(1, transport_->number_of_rtp_packets()); | 165 EXPECT_LE(1, transport_->number_of_rtp_packets()); |
| 166 EXPECT_LE(1, transport_->number_of_rtcp_packets()); | 166 EXPECT_LE(1, transport_->number_of_rtcp_packets()); |
| 167 } | 167 } |
| 168 | 168 |
| 169 } // namespace cast | 169 } // namespace cast |
| 170 } // namespace media | 170 } // namespace media |
| OLD | NEW |