OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include <algorithm> | 10 #include <algorithm> |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 } | 152 } |
153 | 153 |
154 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { | 154 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { |
155 static const int kWidth = 320; | 155 static const int kWidth = 320; |
156 static const int kHeight = 240; | 156 static const int kHeight = 240; |
157 // This constant is chosen to be higher than the timeout in the video_render | 157 // This constant is chosen to be higher than the timeout in the video_render |
158 // module. This makes sure that frames aren't dropped if there are no other | 158 // module. This makes sure that frames aren't dropped if there are no other |
159 // frames in the queue. | 159 // frames in the queue. |
160 static const int kDelayRenderCallbackMs = 1000; | 160 static const int kDelayRenderCallbackMs = 1000; |
161 | 161 |
162 class Renderer : public VideoRenderer { | 162 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
163 public: | 163 public: |
164 Renderer() : event_(false, false) {} | 164 Renderer() : event_(false, false) {} |
165 | 165 |
166 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } | 166 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } |
167 | 167 |
168 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 168 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
169 | 169 |
170 rtc::Event event_; | 170 rtc::Event event_; |
171 } renderer; | 171 } renderer; |
172 | 172 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 | 215 |
216 Stop(); | 216 Stop(); |
217 | 217 |
218 sender_transport.StopSending(); | 218 sender_transport.StopSending(); |
219 receiver_transport.StopSending(); | 219 receiver_transport.StopSending(); |
220 | 220 |
221 DestroyStreams(); | 221 DestroyStreams(); |
222 } | 222 } |
223 | 223 |
224 TEST_F(EndToEndTest, TransmitsFirstFrame) { | 224 TEST_F(EndToEndTest, TransmitsFirstFrame) { |
225 class Renderer : public VideoRenderer { | 225 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
226 public: | 226 public: |
227 Renderer() : event_(false, false) {} | 227 Renderer() : event_(false, false) {} |
228 | 228 |
229 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } | 229 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } |
230 | 230 |
231 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 231 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
232 | 232 |
233 rtc::Event event_; | 233 rtc::Event event_; |
234 } renderer; | 234 } renderer; |
235 | 235 |
(...skipping 23 matching lines...) Expand all Loading... |
259 | 259 |
260 Stop(); | 260 Stop(); |
261 | 261 |
262 sender_transport.StopSending(); | 262 sender_transport.StopSending(); |
263 receiver_transport.StopSending(); | 263 receiver_transport.StopSending(); |
264 | 264 |
265 DestroyStreams(); | 265 DestroyStreams(); |
266 } | 266 } |
267 | 267 |
268 TEST_F(EndToEndTest, SendsAndReceivesVP9) { | 268 TEST_F(EndToEndTest, SendsAndReceivesVP9) { |
269 class VP9Observer : public test::EndToEndTest, public VideoRenderer { | 269 class VP9Observer : public test::EndToEndTest, |
| 270 public rtc::VideoSinkInterface<VideoFrame> { |
270 public: | 271 public: |
271 VP9Observer() | 272 VP9Observer() |
272 : EndToEndTest(2 * kDefaultTimeoutMs), | 273 : EndToEndTest(2 * kDefaultTimeoutMs), |
273 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), | 274 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), |
274 decoder_(VP9Decoder::Create()), | 275 decoder_(VP9Decoder::Create()), |
275 frame_counter_(0) {} | 276 frame_counter_(0) {} |
276 | 277 |
277 void PerformTest() override { | 278 void PerformTest() override { |
278 EXPECT_TRUE(Wait()) | 279 EXPECT_TRUE(Wait()) |
279 << "Timed out while waiting for enough frames to be decoded."; | 280 << "Timed out while waiting for enough frames to be decoded."; |
(...skipping 30 matching lines...) Expand all Loading... |
310 std::unique_ptr<webrtc::VideoDecoder> decoder_; | 311 std::unique_ptr<webrtc::VideoDecoder> decoder_; |
311 int frame_counter_; | 312 int frame_counter_; |
312 } test; | 313 } test; |
313 | 314 |
314 RunBaseTest(&test); | 315 RunBaseTest(&test); |
315 } | 316 } |
316 | 317 |
317 #if defined(WEBRTC_END_TO_END_H264_TESTS) | 318 #if defined(WEBRTC_END_TO_END_H264_TESTS) |
318 | 319 |
319 TEST_F(EndToEndTest, SendsAndReceivesH264) { | 320 TEST_F(EndToEndTest, SendsAndReceivesH264) { |
320 class H264Observer : public test::EndToEndTest, public VideoRenderer { | 321 class H264Observer : public test::EndToEndTest, |
| 322 public rtc::VideoSinkInterface<VideoFrame> { |
321 public: | 323 public: |
322 H264Observer() | 324 H264Observer() |
323 : EndToEndTest(2 * kDefaultTimeoutMs), | 325 : EndToEndTest(2 * kDefaultTimeoutMs), |
324 encoder_(VideoEncoder::Create(VideoEncoder::kH264)), | 326 encoder_(VideoEncoder::Create(VideoEncoder::kH264)), |
325 decoder_(H264Decoder::Create()), | 327 decoder_(H264Decoder::Create()), |
326 frame_counter_(0) {} | 328 frame_counter_(0) {} |
327 | 329 |
328 void PerformTest() override { | 330 void PerformTest() override { |
329 EXPECT_TRUE(Wait()) | 331 EXPECT_TRUE(Wait()) |
330 << "Timed out while waiting for enough frames to be decoded."; | 332 << "Timed out while waiting for enough frames to be decoded."; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 std::set<uint16_t> retransmitted_packets_; | 483 std::set<uint16_t> retransmitted_packets_; |
482 uint64_t sent_rtp_packets_; | 484 uint64_t sent_rtp_packets_; |
483 int packets_left_to_drop_; | 485 int packets_left_to_drop_; |
484 int nacks_left_ GUARDED_BY(&crit_); | 486 int nacks_left_ GUARDED_BY(&crit_); |
485 } test; | 487 } test; |
486 | 488 |
487 RunBaseTest(&test); | 489 RunBaseTest(&test); |
488 } | 490 } |
489 | 491 |
490 TEST_F(EndToEndTest, CanReceiveFec) { | 492 TEST_F(EndToEndTest, CanReceiveFec) { |
491 class FecRenderObserver : public test::EndToEndTest, public VideoRenderer { | 493 class FecRenderObserver : public test::EndToEndTest, |
| 494 public rtc::VideoSinkInterface<VideoFrame> { |
492 public: | 495 public: |
493 FecRenderObserver() | 496 FecRenderObserver() |
494 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} | 497 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} |
495 | 498 |
496 private: | 499 private: |
497 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 500 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
498 rtc::CritScope lock(&crit_); | 501 rtc::CritScope lock(&crit_); |
499 RTPHeader header; | 502 RTPHeader header; |
500 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 503 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
501 | 504 |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 } | 860 } |
858 | 861 |
859 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { | 862 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { |
860 DecodesRetransmittedFrame(true, true); | 863 DecodesRetransmittedFrame(true, true); |
861 } | 864 } |
862 | 865 |
863 TEST_F(EndToEndTest, UsesFrameCallbacks) { | 866 TEST_F(EndToEndTest, UsesFrameCallbacks) { |
864 static const int kWidth = 320; | 867 static const int kWidth = 320; |
865 static const int kHeight = 240; | 868 static const int kHeight = 240; |
866 | 869 |
867 class Renderer : public VideoRenderer { | 870 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
868 public: | 871 public: |
869 Renderer() : event_(false, false) {} | 872 Renderer() : event_(false, false) {} |
870 | 873 |
871 void OnFrame(const VideoFrame& video_frame) override { | 874 void OnFrame(const VideoFrame& video_frame) override { |
872 EXPECT_EQ(0, *video_frame.buffer(kYPlane)) | 875 EXPECT_EQ(0, *video_frame.buffer(kYPlane)) |
873 << "Rendered frame should have zero luma which is applied by the " | 876 << "Rendered frame should have zero luma which is applied by the " |
874 "pre-render callback."; | 877 "pre-render callback."; |
875 event_.Set(); | 878 event_.Set(); |
876 } | 879 } |
877 | 880 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 | 960 |
958 sender_transport.StopSending(); | 961 sender_transport.StopSending(); |
959 receiver_transport.StopSending(); | 962 receiver_transport.StopSending(); |
960 | 963 |
961 DestroyStreams(); | 964 DestroyStreams(); |
962 } | 965 } |
963 | 966 |
964 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { | 967 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { |
965 static const int kPacketsToDrop = 1; | 968 static const int kPacketsToDrop = 1; |
966 | 969 |
967 class PliObserver : public test::EndToEndTest, public VideoRenderer { | 970 class PliObserver : public test::EndToEndTest, |
| 971 public rtc::VideoSinkInterface<VideoFrame> { |
968 public: | 972 public: |
969 explicit PliObserver(int rtp_history_ms) | 973 explicit PliObserver(int rtp_history_ms) |
970 : EndToEndTest(kLongTimeoutMs), | 974 : EndToEndTest(kLongTimeoutMs), |
971 rtp_history_ms_(rtp_history_ms), | 975 rtp_history_ms_(rtp_history_ms), |
972 nack_enabled_(rtp_history_ms > 0), | 976 nack_enabled_(rtp_history_ms > 0), |
973 highest_dropped_timestamp_(0), | 977 highest_dropped_timestamp_(0), |
974 frames_to_drop_(0), | 978 frames_to_drop_(0), |
975 received_pli_(false) {} | 979 received_pli_(false) {} |
976 | 980 |
977 private: | 981 private: |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1318 return new test::DirectTransport(sender_call); | 1322 return new test::DirectTransport(sender_call); |
1319 } | 1323 } |
1320 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { | 1324 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { |
1321 return new test::DirectTransport(receiver_call); | 1325 return new test::DirectTransport(receiver_call); |
1322 } | 1326 } |
1323 }; | 1327 }; |
1324 | 1328 |
1325 // Each renderer verifies that it receives the expected resolution, and as soon | 1329 // Each renderer verifies that it receives the expected resolution, and as soon |
1326 // as every renderer has received a frame, the test finishes. | 1330 // as every renderer has received a frame, the test finishes. |
1327 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { | 1331 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { |
1328 class VideoOutputObserver : public VideoRenderer { | 1332 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { |
1329 public: | 1333 public: |
1330 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, | 1334 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, |
1331 uint32_t ssrc, | 1335 uint32_t ssrc, |
1332 test::FrameGeneratorCapturer** frame_generator) | 1336 test::FrameGeneratorCapturer** frame_generator) |
1333 : settings_(settings), | 1337 : settings_(settings), |
1334 ssrc_(ssrc), | 1338 ssrc_(ssrc), |
1335 frame_generator_(frame_generator), | 1339 frame_generator_(frame_generator), |
1336 done_(false, false) {} | 1340 done_(false, false) {} |
1337 | 1341 |
1338 void OnFrame(const VideoFrame& video_frame) override { | 1342 void OnFrame(const VideoFrame& video_frame) override { |
(...skipping 2263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3602 private: | 3606 private: |
3603 bool video_observed_; | 3607 bool video_observed_; |
3604 bool audio_observed_; | 3608 bool audio_observed_; |
3605 SequenceNumberUnwrapper unwrapper_; | 3609 SequenceNumberUnwrapper unwrapper_; |
3606 std::set<int64_t> received_packet_ids_; | 3610 std::set<int64_t> received_packet_ids_; |
3607 } test; | 3611 } test; |
3608 | 3612 |
3609 RunBaseTest(&test); | 3613 RunBaseTest(&test); |
3610 } | 3614 } |
3611 } // namespace webrtc | 3615 } // namespace webrtc |
OLD | NEW |