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 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 } | 116 } |
117 | 117 |
118 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { | 118 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { |
119 static const int kWidth = 320; | 119 static const int kWidth = 320; |
120 static const int kHeight = 240; | 120 static const int kHeight = 240; |
121 // This constant is chosen to be higher than the timeout in the video_render | 121 // This constant is chosen to be higher than the timeout in the video_render |
122 // module. This makes sure that frames aren't dropped if there are no other | 122 // module. This makes sure that frames aren't dropped if there are no other |
123 // frames in the queue. | 123 // frames in the queue. |
124 static const int kDelayRenderCallbackMs = 1000; | 124 static const int kDelayRenderCallbackMs = 1000; |
125 | 125 |
126 class Renderer : public VideoRenderer { | 126 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
127 public: | 127 public: |
128 Renderer() : event_(false, false) {} | 128 Renderer() : event_(false, false) {} |
129 | 129 |
130 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } | 130 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } |
131 | 131 |
132 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 132 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
133 | 133 |
134 rtc::Event event_; | 134 rtc::Event event_; |
135 } renderer; | 135 } renderer; |
136 | 136 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 | 179 |
180 Stop(); | 180 Stop(); |
181 | 181 |
182 sender_transport.StopSending(); | 182 sender_transport.StopSending(); |
183 receiver_transport.StopSending(); | 183 receiver_transport.StopSending(); |
184 | 184 |
185 DestroyStreams(); | 185 DestroyStreams(); |
186 } | 186 } |
187 | 187 |
188 TEST_F(EndToEndTest, TransmitsFirstFrame) { | 188 TEST_F(EndToEndTest, TransmitsFirstFrame) { |
189 class Renderer : public VideoRenderer { | 189 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
190 public: | 190 public: |
191 Renderer() : event_(false, false) {} | 191 Renderer() : event_(false, false) {} |
192 | 192 |
193 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } | 193 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } |
194 | 194 |
195 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 195 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
196 | 196 |
197 rtc::Event event_; | 197 rtc::Event event_; |
198 } renderer; | 198 } renderer; |
199 | 199 |
(...skipping 23 matching lines...) Expand all Loading... |
223 | 223 |
224 Stop(); | 224 Stop(); |
225 | 225 |
226 sender_transport.StopSending(); | 226 sender_transport.StopSending(); |
227 receiver_transport.StopSending(); | 227 receiver_transport.StopSending(); |
228 | 228 |
229 DestroyStreams(); | 229 DestroyStreams(); |
230 } | 230 } |
231 | 231 |
232 TEST_F(EndToEndTest, SendsAndReceivesVP9) { | 232 TEST_F(EndToEndTest, SendsAndReceivesVP9) { |
233 class VP9Observer : public test::EndToEndTest, public VideoRenderer { | 233 class VP9Observer : public test::EndToEndTest, |
| 234 public rtc::VideoSinkInterface<VideoFrame> { |
234 public: | 235 public: |
235 VP9Observer() | 236 VP9Observer() |
236 : EndToEndTest(2 * kDefaultTimeoutMs), | 237 : EndToEndTest(2 * kDefaultTimeoutMs), |
237 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), | 238 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), |
238 decoder_(VP9Decoder::Create()), | 239 decoder_(VP9Decoder::Create()), |
239 frame_counter_(0) {} | 240 frame_counter_(0) {} |
240 | 241 |
241 void PerformTest() override { | 242 void PerformTest() override { |
242 EXPECT_TRUE(Wait()) | 243 EXPECT_TRUE(Wait()) |
243 << "Timed out while waiting for enough frames to be decoded."; | 244 << "Timed out while waiting for enough frames to be decoded."; |
(...skipping 30 matching lines...) Expand all Loading... |
274 std::unique_ptr<webrtc::VideoDecoder> decoder_; | 275 std::unique_ptr<webrtc::VideoDecoder> decoder_; |
275 int frame_counter_; | 276 int frame_counter_; |
276 } test; | 277 } test; |
277 | 278 |
278 RunBaseTest(&test); | 279 RunBaseTest(&test); |
279 } | 280 } |
280 | 281 |
281 #if defined(WEBRTC_END_TO_END_H264_TESTS) | 282 #if defined(WEBRTC_END_TO_END_H264_TESTS) |
282 | 283 |
283 TEST_F(EndToEndTest, SendsAndReceivesH264) { | 284 TEST_F(EndToEndTest, SendsAndReceivesH264) { |
284 class H264Observer : public test::EndToEndTest, public VideoRenderer { | 285 class H264Observer : public test::EndToEndTest, |
| 286 public rtc::VideoSinkInterface<VideoFrame> { |
285 public: | 287 public: |
286 H264Observer() | 288 H264Observer() |
287 : EndToEndTest(2 * kDefaultTimeoutMs), | 289 : EndToEndTest(2 * kDefaultTimeoutMs), |
288 encoder_(VideoEncoder::Create(VideoEncoder::kH264)), | 290 encoder_(VideoEncoder::Create(VideoEncoder::kH264)), |
289 decoder_(H264Decoder::Create()), | 291 decoder_(H264Decoder::Create()), |
290 frame_counter_(0) {} | 292 frame_counter_(0) {} |
291 | 293 |
292 void PerformTest() override { | 294 void PerformTest() override { |
293 EXPECT_TRUE(Wait()) | 295 EXPECT_TRUE(Wait()) |
294 << "Timed out while waiting for enough frames to be decoded."; | 296 << "Timed out while waiting for enough frames to be decoded."; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 std::set<uint16_t> retransmitted_packets_; | 447 std::set<uint16_t> retransmitted_packets_; |
446 uint64_t sent_rtp_packets_; | 448 uint64_t sent_rtp_packets_; |
447 int packets_left_to_drop_; | 449 int packets_left_to_drop_; |
448 int nacks_left_ GUARDED_BY(&crit_); | 450 int nacks_left_ GUARDED_BY(&crit_); |
449 } test; | 451 } test; |
450 | 452 |
451 RunBaseTest(&test); | 453 RunBaseTest(&test); |
452 } | 454 } |
453 | 455 |
454 TEST_F(EndToEndTest, CanReceiveFec) { | 456 TEST_F(EndToEndTest, CanReceiveFec) { |
455 class FecRenderObserver : public test::EndToEndTest, public VideoRenderer { | 457 class FecRenderObserver : public test::EndToEndTest, |
| 458 public rtc::VideoSinkInterface<VideoFrame> { |
456 public: | 459 public: |
457 FecRenderObserver() | 460 FecRenderObserver() |
458 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} | 461 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} |
459 | 462 |
460 private: | 463 private: |
461 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 464 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
462 rtc::CritScope lock(&crit_); | 465 rtc::CritScope lock(&crit_); |
463 RTPHeader header; | 466 RTPHeader header; |
464 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 467 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
465 | 468 |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 } | 824 } |
822 | 825 |
823 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { | 826 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { |
824 DecodesRetransmittedFrame(true, true); | 827 DecodesRetransmittedFrame(true, true); |
825 } | 828 } |
826 | 829 |
827 TEST_F(EndToEndTest, UsesFrameCallbacks) { | 830 TEST_F(EndToEndTest, UsesFrameCallbacks) { |
828 static const int kWidth = 320; | 831 static const int kWidth = 320; |
829 static const int kHeight = 240; | 832 static const int kHeight = 240; |
830 | 833 |
831 class Renderer : public VideoRenderer { | 834 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
832 public: | 835 public: |
833 Renderer() : event_(false, false) {} | 836 Renderer() : event_(false, false) {} |
834 | 837 |
835 void OnFrame(const VideoFrame& video_frame) override { | 838 void OnFrame(const VideoFrame& video_frame) override { |
836 EXPECT_EQ(0, *video_frame.buffer(kYPlane)) | 839 EXPECT_EQ(0, *video_frame.buffer(kYPlane)) |
837 << "Rendered frame should have zero luma which is applied by the " | 840 << "Rendered frame should have zero luma which is applied by the " |
838 "pre-render callback."; | 841 "pre-render callback."; |
839 event_.Set(); | 842 event_.Set(); |
840 } | 843 } |
841 | 844 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
921 | 924 |
922 sender_transport.StopSending(); | 925 sender_transport.StopSending(); |
923 receiver_transport.StopSending(); | 926 receiver_transport.StopSending(); |
924 | 927 |
925 DestroyStreams(); | 928 DestroyStreams(); |
926 } | 929 } |
927 | 930 |
928 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { | 931 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { |
929 static const int kPacketsToDrop = 1; | 932 static const int kPacketsToDrop = 1; |
930 | 933 |
931 class PliObserver : public test::EndToEndTest, public VideoRenderer { | 934 class PliObserver : public test::EndToEndTest, |
| 935 public rtc::VideoSinkInterface<VideoFrame> { |
932 public: | 936 public: |
933 explicit PliObserver(int rtp_history_ms) | 937 explicit PliObserver(int rtp_history_ms) |
934 : EndToEndTest(kLongTimeoutMs), | 938 : EndToEndTest(kLongTimeoutMs), |
935 rtp_history_ms_(rtp_history_ms), | 939 rtp_history_ms_(rtp_history_ms), |
936 nack_enabled_(rtp_history_ms > 0), | 940 nack_enabled_(rtp_history_ms > 0), |
937 highest_dropped_timestamp_(0), | 941 highest_dropped_timestamp_(0), |
938 frames_to_drop_(0), | 942 frames_to_drop_(0), |
939 received_pli_(false) {} | 943 received_pli_(false) {} |
940 | 944 |
941 private: | 945 private: |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1282 return new test::DirectTransport(sender_call); | 1286 return new test::DirectTransport(sender_call); |
1283 } | 1287 } |
1284 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { | 1288 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { |
1285 return new test::DirectTransport(receiver_call); | 1289 return new test::DirectTransport(receiver_call); |
1286 } | 1290 } |
1287 }; | 1291 }; |
1288 | 1292 |
1289 // Each renderer verifies that it receives the expected resolution, and as soon | 1293 // Each renderer verifies that it receives the expected resolution, and as soon |
1290 // as every renderer has received a frame, the test finishes. | 1294 // as every renderer has received a frame, the test finishes. |
1291 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { | 1295 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { |
1292 class VideoOutputObserver : public VideoRenderer { | 1296 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { |
1293 public: | 1297 public: |
1294 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, | 1298 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, |
1295 uint32_t ssrc, | 1299 uint32_t ssrc, |
1296 test::FrameGeneratorCapturer** frame_generator) | 1300 test::FrameGeneratorCapturer** frame_generator) |
1297 : settings_(settings), | 1301 : settings_(settings), |
1298 ssrc_(ssrc), | 1302 ssrc_(ssrc), |
1299 frame_generator_(frame_generator), | 1303 frame_generator_(frame_generator), |
1300 done_(false, false) {} | 1304 done_(false, false) {} |
1301 | 1305 |
1302 void OnFrame(const VideoFrame& video_frame) override { | 1306 void OnFrame(const VideoFrame& video_frame) override { |
(...skipping 2197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3500 private: | 3504 private: |
3501 bool video_observed_; | 3505 bool video_observed_; |
3502 bool audio_observed_; | 3506 bool audio_observed_; |
3503 SequenceNumberUnwrapper unwrapper_; | 3507 SequenceNumberUnwrapper unwrapper_; |
3504 std::set<int64_t> received_packet_ids_; | 3508 std::set<int64_t> received_packet_ids_; |
3505 } test; | 3509 } test; |
3506 | 3510 |
3507 RunBaseTest(&test); | 3511 RunBaseTest(&test); |
3508 } | 3512 } |
3509 } // namespace webrtc | 3513 } // namespace webrtc |
OLD | NEW |