OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory = nullptr) | 25 rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory = nullptr) |
26 : voice_engine_(decoder_factory) { | 26 : voice_engine_(decoder_factory) { |
27 webrtc::AudioState::Config audio_state_config; | 27 webrtc::AudioState::Config audio_state_config; |
28 audio_state_config.voice_engine = &voice_engine_; | 28 audio_state_config.voice_engine = &voice_engine_; |
29 webrtc::Call::Config config(&event_log_); | 29 webrtc::Call::Config config(&event_log_); |
30 config.audio_state = webrtc::AudioState::Create(audio_state_config); | 30 config.audio_state = webrtc::AudioState::Create(audio_state_config); |
31 call_.reset(webrtc::Call::Create(config)); | 31 call_.reset(webrtc::Call::Create(config)); |
32 } | 32 } |
33 | 33 |
34 webrtc::Call* operator->() { return call_.get(); } | 34 webrtc::Call* operator->() { return call_.get(); } |
| 35 webrtc::test::MockVoiceEngine* voice_engine() { return &voice_engine_; } |
35 | 36 |
36 private: | 37 private: |
37 testing::NiceMock<webrtc::test::MockVoiceEngine> voice_engine_; | 38 testing::NiceMock<webrtc::test::MockVoiceEngine> voice_engine_; |
38 webrtc::RtcEventLogNullImpl event_log_; | 39 webrtc::RtcEventLogNullImpl event_log_; |
39 std::unique_ptr<webrtc::Call> call_; | 40 std::unique_ptr<webrtc::Call> call_; |
40 }; | 41 }; |
41 } // namespace | 42 } // namespace |
42 | 43 |
43 namespace webrtc { | 44 namespace webrtc { |
44 | 45 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 streams.push_front(stream); | 112 streams.push_front(stream); |
112 } | 113 } |
113 } | 114 } |
114 for (auto s : streams) { | 115 for (auto s : streams) { |
115 call->DestroyAudioReceiveStream(s); | 116 call->DestroyAudioReceiveStream(s); |
116 } | 117 } |
117 streams.clear(); | 118 streams.clear(); |
118 } | 119 } |
119 } | 120 } |
120 | 121 |
| 122 TEST(CallTest, CreateDestroy_AssociateAudioSendReceiveStreams_RecvFirst) { |
| 123 rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory( |
| 124 new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>); |
| 125 CallHelper call(decoder_factory); |
| 126 |
| 127 constexpr int kRecvChannelId = 101; |
| 128 |
| 129 // Set up the mock to create a channel proxy which we know of, so that we can |
| 130 // add our expectations to it. |
| 131 test::MockVoEChannelProxy* recv_channel_proxy = nullptr; |
| 132 EXPECT_CALL(*call.voice_engine(), ChannelProxyFactory(testing::_)) |
| 133 .WillRepeatedly(testing::Invoke([&](int channel_id) { |
| 134 test::MockVoEChannelProxy* channel_proxy = |
| 135 new testing::NiceMock<test::MockVoEChannelProxy>(); |
| 136 EXPECT_CALL(*channel_proxy, GetAudioDecoderFactory()) |
| 137 .WillRepeatedly(testing::ReturnRef(decoder_factory)); |
| 138 // If being called for the send channel, save a pointer to the channel |
| 139 // proxy for later. |
| 140 if (channel_id == kRecvChannelId) { |
| 141 EXPECT_FALSE(recv_channel_proxy); |
| 142 recv_channel_proxy = channel_proxy; |
| 143 } |
| 144 return channel_proxy; |
| 145 })); |
| 146 |
| 147 AudioReceiveStream::Config recv_config; |
| 148 recv_config.rtp.remote_ssrc = 42; |
| 149 recv_config.rtp.local_ssrc = 777; |
| 150 recv_config.voe_channel_id = kRecvChannelId; |
| 151 recv_config.decoder_factory = decoder_factory; |
| 152 AudioReceiveStream* recv_stream = call->CreateAudioReceiveStream(recv_config); |
| 153 EXPECT_NE(recv_stream, nullptr); |
| 154 |
| 155 EXPECT_CALL(*recv_channel_proxy, AssociateSendChannel(testing::_)).Times(1); |
| 156 AudioSendStream::Config send_config(nullptr); |
| 157 send_config.rtp.ssrc = 777; |
| 158 send_config.voe_channel_id = 123; |
| 159 AudioSendStream* send_stream = call->CreateAudioSendStream(send_config); |
| 160 EXPECT_NE(send_stream, nullptr); |
| 161 |
| 162 EXPECT_CALL(*recv_channel_proxy, DisassociateSendChannel()).Times(1); |
| 163 call->DestroyAudioSendStream(send_stream); |
| 164 |
| 165 EXPECT_CALL(*recv_channel_proxy, DisassociateSendChannel()).Times(1); |
| 166 call->DestroyAudioReceiveStream(recv_stream); |
| 167 } |
| 168 |
| 169 TEST(CallTest, CreateDestroy_AssociateAudioSendReceiveStreams_SendFirst) { |
| 170 rtc::scoped_refptr<webrtc::AudioDecoderFactory> decoder_factory( |
| 171 new rtc::RefCountedObject<webrtc::MockAudioDecoderFactory>); |
| 172 CallHelper call(decoder_factory); |
| 173 |
| 174 constexpr int kRecvChannelId = 101; |
| 175 |
| 176 // Set up the mock to create a channel proxy which we know of, so that we can |
| 177 // add our expectations to it. |
| 178 test::MockVoEChannelProxy* recv_channel_proxy = nullptr; |
| 179 EXPECT_CALL(*call.voice_engine(), ChannelProxyFactory(testing::_)) |
| 180 .WillRepeatedly(testing::Invoke([&](int channel_id) { |
| 181 test::MockVoEChannelProxy* channel_proxy = |
| 182 new testing::NiceMock<test::MockVoEChannelProxy>(); |
| 183 EXPECT_CALL(*channel_proxy, GetAudioDecoderFactory()) |
| 184 .WillRepeatedly(testing::ReturnRef(decoder_factory)); |
| 185 // If being called for the send channel, save a pointer to the channel |
| 186 // proxy for later. |
| 187 if (channel_id == kRecvChannelId) { |
| 188 EXPECT_FALSE(recv_channel_proxy); |
| 189 recv_channel_proxy = channel_proxy; |
| 190 // We need to set this expectation here since the channel proxy is |
| 191 // created as a side effect of CreateAudioReceiveStream(). |
| 192 EXPECT_CALL(*recv_channel_proxy, |
| 193 AssociateSendChannel(testing::_)).Times(1); |
| 194 } |
| 195 return channel_proxy; |
| 196 })); |
| 197 |
| 198 AudioSendStream::Config send_config(nullptr); |
| 199 send_config.rtp.ssrc = 777; |
| 200 send_config.voe_channel_id = 123; |
| 201 AudioSendStream* send_stream = call->CreateAudioSendStream(send_config); |
| 202 EXPECT_NE(send_stream, nullptr); |
| 203 |
| 204 AudioReceiveStream::Config recv_config; |
| 205 recv_config.rtp.remote_ssrc = 42; |
| 206 recv_config.rtp.local_ssrc = 777; |
| 207 recv_config.voe_channel_id = kRecvChannelId; |
| 208 recv_config.decoder_factory = decoder_factory; |
| 209 AudioReceiveStream* recv_stream = call->CreateAudioReceiveStream(recv_config); |
| 210 EXPECT_NE(recv_stream, nullptr); |
| 211 |
| 212 EXPECT_CALL(*recv_channel_proxy, DisassociateSendChannel()).Times(1); |
| 213 call->DestroyAudioReceiveStream(recv_stream); |
| 214 |
| 215 call->DestroyAudioSendStream(send_stream); |
| 216 } |
| 217 |
121 TEST(CallTest, CreateDestroy_FlexfecReceiveStream) { | 218 TEST(CallTest, CreateDestroy_FlexfecReceiveStream) { |
122 CallHelper call; | 219 CallHelper call; |
123 FlexfecReceiveStream::Config config; | 220 FlexfecReceiveStream::Config config; |
124 config.flexfec_payload_type = 118; | 221 config.flexfec_payload_type = 118; |
125 config.flexfec_ssrc = 38837212; | 222 config.flexfec_ssrc = 38837212; |
126 config.protected_media_ssrcs = {27273}; | 223 config.protected_media_ssrcs = {27273}; |
127 | 224 |
128 FlexfecReceiveStream* stream = call->CreateFlexfecReceiveStream(config); | 225 FlexfecReceiveStream* stream = call->CreateFlexfecReceiveStream(config); |
129 EXPECT_NE(stream, nullptr); | 226 EXPECT_NE(stream, nullptr); |
130 call->DestroyFlexfecReceiveStream(stream); | 227 call->DestroyFlexfecReceiveStream(stream); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 stream = call->CreateFlexfecReceiveStream(config); | 279 stream = call->CreateFlexfecReceiveStream(config); |
183 EXPECT_NE(stream, nullptr); | 280 EXPECT_NE(stream, nullptr); |
184 streams.push_back(stream); | 281 streams.push_back(stream); |
185 | 282 |
186 for (auto s : streams) { | 283 for (auto s : streams) { |
187 call->DestroyFlexfecReceiveStream(s); | 284 call->DestroyFlexfecReceiveStream(s); |
188 } | 285 } |
189 } | 286 } |
190 | 287 |
191 } // namespace webrtc | 288 } // namespace webrtc |
OLD | NEW |