OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
11 * this list of conditions and the following disclaimer in the documentation | 11 * this list of conditions and the following disclaimer in the documentation |
12 * and/or other materials provided with the distribution. | 12 * and/or other materials provided with the distribution. |
13 * 3. The name of the author may not be used to endorse or promote products | 13 * 3. The name of the author may not be used to endorse or promote products |
14 * derived from this software without specific prior written permission. | 14 * derived from this software without specific prior written permission. |
15 * | 15 * |
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED | 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #include <string> | 28 #include <string> |
| 29 #include <utility> |
29 | 30 |
30 #include "talk/app/webrtc/audiotrack.h" | 31 #include "talk/app/webrtc/audiotrack.h" |
31 #include "talk/app/webrtc/mediastream.h" | 32 #include "talk/app/webrtc/mediastream.h" |
32 #include "talk/app/webrtc/remoteaudiosource.h" | 33 #include "talk/app/webrtc/remoteaudiosource.h" |
| 34 #include "talk/app/webrtc/remoteaudiotrack.h" |
33 #include "talk/app/webrtc/rtpreceiver.h" | 35 #include "talk/app/webrtc/rtpreceiver.h" |
34 #include "talk/app/webrtc/rtpsender.h" | 36 #include "talk/app/webrtc/rtpsender.h" |
35 #include "talk/app/webrtc/streamcollection.h" | 37 #include "talk/app/webrtc/streamcollection.h" |
36 #include "talk/app/webrtc/videosource.h" | 38 #include "talk/app/webrtc/videosource.h" |
37 #include "talk/app/webrtc/videotrack.h" | 39 #include "talk/app/webrtc/videotrack.h" |
38 #include "talk/media/base/fakevideocapturer.h" | 40 #include "talk/media/base/fakevideocapturer.h" |
39 #include "talk/media/base/mediachannel.h" | 41 #include "talk/media/base/mediachannel.h" |
40 #include "testing/gmock/include/gmock/gmock.h" | 42 #include "testing/gmock/include/gmock/gmock.h" |
41 #include "testing/gtest/include/gtest/gtest.h" | 43 #include "testing/gtest/include/gtest/gtest.h" |
42 #include "webrtc/base/gunit.h" | 44 #include "webrtc/base/gunit.h" |
43 | 45 |
44 using ::testing::_; | 46 using ::testing::_; |
45 using ::testing::Exactly; | 47 using ::testing::Exactly; |
46 | 48 |
47 static const char kStreamLabel1[] = "local_stream_1"; | 49 static const char kStreamLabel1[] = "local_stream_1"; |
48 static const char kVideoTrackId[] = "video_1"; | 50 static const char kVideoTrackId[] = "video_1"; |
49 static const char kAudioTrackId[] = "audio_1"; | 51 static const char kAudioTrackId[] = "audio_1"; |
50 static const uint32_t kVideoSsrc = 98; | 52 static const uint32_t kVideoSsrc = 98; |
51 static const uint32_t kVideoSsrc2 = 100; | 53 static const uint32_t kVideoSsrc2 = 100; |
52 static const uint32_t kAudioSsrc = 99; | 54 static const uint32_t kAudioSsrc = 99; |
53 static const uint32_t kAudioSsrc2 = 101; | 55 static const uint32_t kAudioSsrc2 = 101; |
54 | 56 |
55 namespace webrtc { | 57 namespace webrtc { |
56 | 58 |
57 // Helper class to test RtpSender/RtpReceiver. | 59 // Helper class to test RtpSender/RtpReceiver. |
58 class MockAudioProvider : public AudioProviderInterface { | 60 class MockAudioProvider : public AudioProviderInterface { |
59 public: | 61 public: |
60 virtual ~MockAudioProvider() {} | 62 ~MockAudioProvider() override {} |
| 63 |
61 MOCK_METHOD2(SetAudioPlayout, | 64 MOCK_METHOD2(SetAudioPlayout, |
62 void(uint32_t ssrc, | 65 void(uint32_t ssrc, |
63 bool enable)); | 66 bool enable)); |
64 MOCK_METHOD4(SetAudioSend, | 67 MOCK_METHOD4(SetAudioSend, |
65 void(uint32_t ssrc, | 68 void(uint32_t ssrc, |
66 bool enable, | 69 bool enable, |
67 const cricket::AudioOptions& options, | 70 const cricket::AudioOptions& options, |
68 cricket::AudioRenderer* renderer)); | 71 cricket::AudioRenderer* renderer)); |
69 MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume)); | 72 MOCK_METHOD2(SetAudioPlayoutVolume, void(uint32_t ssrc, double volume)); |
| 73 |
| 74 void SetRawAudioSink(uint32_t, |
| 75 rtc::scoped_ptr<AudioSinkInterface> sink) override { |
| 76 sink_ = std::move(sink); |
| 77 } |
| 78 |
| 79 private: |
| 80 rtc::scoped_ptr<AudioSinkInterface> sink_; |
70 }; | 81 }; |
71 | 82 |
72 // Helper class to test RtpSender/RtpReceiver. | 83 // Helper class to test RtpSender/RtpReceiver. |
73 class MockVideoProvider : public VideoProviderInterface { | 84 class MockVideoProvider : public VideoProviderInterface { |
74 public: | 85 public: |
75 virtual ~MockVideoProvider() {} | 86 virtual ~MockVideoProvider() {} |
76 MOCK_METHOD2(SetCaptureDevice, | 87 MOCK_METHOD2(SetCaptureDevice, |
77 bool(uint32_t ssrc, cricket::VideoCapturer* camera)); | 88 bool(uint32_t ssrc, cricket::VideoCapturer* camera)); |
78 MOCK_METHOD3(SetVideoPlayout, | 89 MOCK_METHOD3(SetVideoPlayout, |
79 void(uint32_t ssrc, | 90 void(uint32_t ssrc, |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 audio_rtp_sender_ = nullptr; | 155 audio_rtp_sender_ = nullptr; |
145 } | 156 } |
146 | 157 |
147 void DestroyVideoRtpSender() { | 158 void DestroyVideoRtpSender() { |
148 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, NULL)).Times(1); | 159 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc, NULL)).Times(1); |
149 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1); | 160 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc, false, _)).Times(1); |
150 video_rtp_sender_ = nullptr; | 161 video_rtp_sender_ = nullptr; |
151 } | 162 } |
152 | 163 |
153 void CreateAudioRtpReceiver() { | 164 void CreateAudioRtpReceiver() { |
154 audio_track_ = | 165 audio_track_ = RemoteAudioTrack::Create( |
155 AudioTrack::Create(kAudioTrackId, RemoteAudioSource::Create().get()); | 166 kAudioTrackId, RemoteAudioSource::Create(kAudioSsrc, NULL)); |
156 EXPECT_TRUE(stream_->AddTrack(audio_track_)); | 167 EXPECT_TRUE(stream_->AddTrack(audio_track_)); |
157 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true)); | 168 EXPECT_CALL(audio_provider_, SetAudioPlayout(kAudioSsrc, true)); |
158 audio_rtp_receiver_ = new AudioRtpReceiver(stream_->GetAudioTracks()[0], | 169 audio_rtp_receiver_ = new AudioRtpReceiver(stream_->GetAudioTracks()[0], |
159 kAudioSsrc, &audio_provider_); | 170 kAudioSsrc, &audio_provider_); |
160 } | 171 } |
161 | 172 |
162 void CreateVideoRtpReceiver() { | 173 void CreateVideoRtpReceiver() { |
163 EXPECT_CALL(video_provider_, | 174 EXPECT_CALL(video_provider_, |
164 SetVideoPlayout(kVideoSsrc, true, | 175 SetVideoPlayout(kVideoSsrc, true, |
165 video_track_->GetSource()->FrameInput())); | 176 video_track_->GetSource()->FrameInput())); |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 video_track_->GetSource()->GetVideoCapturer())); | 492 video_track_->GetSource()->GetVideoCapturer())); |
482 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, true, _)); | 493 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, true, _)); |
483 sender->SetSsrc(kVideoSsrc2); | 494 sender->SetSsrc(kVideoSsrc2); |
484 | 495 |
485 // Calls expected from destructor. | 496 // Calls expected from destructor. |
486 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc2, nullptr)).Times(1); | 497 EXPECT_CALL(video_provider_, SetCaptureDevice(kVideoSsrc2, nullptr)).Times(1); |
487 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _)).Times(1); | 498 EXPECT_CALL(video_provider_, SetVideoSend(kVideoSsrc2, false, _)).Times(1); |
488 } | 499 } |
489 | 500 |
490 } // namespace webrtc | 501 } // namespace webrtc |
OLD | NEW |