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 |