| 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> |
| 11 #include <list> | 11 #include <list> |
| 12 #include <map> | 12 #include <map> |
| 13 #include <memory> |
| 13 #include <sstream> | 14 #include <sstream> |
| 14 #include <string> | 15 #include <string> |
| 15 | 16 |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 18 |
| 18 #include "webrtc/base/checks.h" | 19 #include "webrtc/base/checks.h" |
| 19 #include "webrtc/base/event.h" | 20 #include "webrtc/base/event.h" |
| 20 #include "webrtc/base/scoped_ptr.h" | |
| 21 #include "webrtc/base/timeutils.h" | 21 #include "webrtc/base/timeutils.h" |
| 22 #include "webrtc/call.h" | 22 #include "webrtc/call.h" |
| 23 #include "webrtc/call/transport_adapter.h" | 23 #include "webrtc/call/transport_adapter.h" |
| 24 #include "webrtc/frame_callback.h" | 24 #include "webrtc/frame_callback.h" |
| 25 #include "webrtc/modules/include/module_common_types.h" | 25 #include "webrtc/modules/include/module_common_types.h" |
| 26 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" | 26 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
| 27 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 27 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
| 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
| 29 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" | 29 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" |
| 30 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" | 30 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 | 166 |
| 167 TestFrameCallback pre_render_callback; | 167 TestFrameCallback pre_render_callback; |
| 168 video_receive_configs_[0].pre_render_callback = &pre_render_callback; | 168 video_receive_configs_[0].pre_render_callback = &pre_render_callback; |
| 169 video_receive_configs_[0].renderer = &renderer; | 169 video_receive_configs_[0].renderer = &renderer; |
| 170 | 170 |
| 171 CreateVideoStreams(); | 171 CreateVideoStreams(); |
| 172 Start(); | 172 Start(); |
| 173 | 173 |
| 174 // Create frames that are smaller than the send width/height, this is done to | 174 // Create frames that are smaller than the send width/height, this is done to |
| 175 // check that the callbacks are done after processing video. | 175 // check that the callbacks are done after processing video. |
| 176 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 176 std::unique_ptr<test::FrameGenerator> frame_generator( |
| 177 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); | 177 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); |
| 178 video_send_stream_->Input()->IncomingCapturedFrame( | 178 video_send_stream_->Input()->IncomingCapturedFrame( |
| 179 *frame_generator->NextFrame()); | 179 *frame_generator->NextFrame()); |
| 180 EXPECT_TRUE(pre_render_callback.Wait()) | 180 EXPECT_TRUE(pre_render_callback.Wait()) |
| 181 << "Timed out while waiting for pre-render callback."; | 181 << "Timed out while waiting for pre-render callback."; |
| 182 EXPECT_TRUE(renderer.Wait()) | 182 EXPECT_TRUE(renderer.Wait()) |
| 183 << "Timed out while waiting for the frame to render."; | 183 << "Timed out while waiting for the frame to render."; |
| 184 | 184 |
| 185 Stop(); | 185 Stop(); |
| 186 | 186 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 213 sender_transport.SetReceiver(receiver_call_->Receiver()); | 213 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 214 receiver_transport.SetReceiver(sender_call_->Receiver()); | 214 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 215 | 215 |
| 216 CreateSendConfig(1, 0, &sender_transport); | 216 CreateSendConfig(1, 0, &sender_transport); |
| 217 CreateMatchingReceiveConfigs(&receiver_transport); | 217 CreateMatchingReceiveConfigs(&receiver_transport); |
| 218 video_receive_configs_[0].renderer = &renderer; | 218 video_receive_configs_[0].renderer = &renderer; |
| 219 | 219 |
| 220 CreateVideoStreams(); | 220 CreateVideoStreams(); |
| 221 Start(); | 221 Start(); |
| 222 | 222 |
| 223 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 223 std::unique_ptr<test::FrameGenerator> frame_generator( |
| 224 test::FrameGenerator::CreateChromaGenerator( | 224 test::FrameGenerator::CreateChromaGenerator( |
| 225 video_encoder_config_.streams[0].width, | 225 video_encoder_config_.streams[0].width, |
| 226 video_encoder_config_.streams[0].height)); | 226 video_encoder_config_.streams[0].height)); |
| 227 video_send_stream_->Input()->IncomingCapturedFrame( | 227 video_send_stream_->Input()->IncomingCapturedFrame( |
| 228 *frame_generator->NextFrame()); | 228 *frame_generator->NextFrame()); |
| 229 | 229 |
| 230 EXPECT_TRUE(renderer.Wait()) | 230 EXPECT_TRUE(renderer.Wait()) |
| 231 << "Timed out while waiting for the frame to render."; | 231 << "Timed out while waiting for the frame to render."; |
| 232 | 232 |
| 233 Stop(); | 233 Stop(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 void RenderFrame(const VideoFrame& video_frame, | 275 void RenderFrame(const VideoFrame& video_frame, |
| 276 int time_to_render_ms) override { | 276 int time_to_render_ms) override { |
| 277 const int kRequiredFrames = 500; | 277 const int kRequiredFrames = 500; |
| 278 if (++frame_counter_ == kRequiredFrames) | 278 if (++frame_counter_ == kRequiredFrames) |
| 279 observation_complete_.Set(); | 279 observation_complete_.Set(); |
| 280 } | 280 } |
| 281 | 281 |
| 282 bool IsTextureSupported() const override { return false; } | 282 bool IsTextureSupported() const override { return false; } |
| 283 | 283 |
| 284 private: | 284 private: |
| 285 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; | 285 std::unique_ptr<webrtc::VideoEncoder> encoder_; |
| 286 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; | 286 std::unique_ptr<webrtc::VideoDecoder> decoder_; |
| 287 int frame_counter_; | 287 int frame_counter_; |
| 288 } test; | 288 } test; |
| 289 | 289 |
| 290 RunBaseTest(&test); | 290 RunBaseTest(&test); |
| 291 } | 291 } |
| 292 | 292 |
| 293 #if defined(WEBRTC_END_TO_END_H264_TESTS) | 293 #if defined(WEBRTC_END_TO_END_H264_TESTS) |
| 294 | 294 |
| 295 TEST_F(EndToEndTest, SendsAndReceivesH264) { | 295 TEST_F(EndToEndTest, SendsAndReceivesH264) { |
| 296 class H264Observer : public test::EndToEndTest, public VideoRenderer { | 296 class H264Observer : public test::EndToEndTest, public VideoRenderer { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 void RenderFrame(const VideoFrame& video_frame, | 331 void RenderFrame(const VideoFrame& video_frame, |
| 332 int time_to_render_ms) override { | 332 int time_to_render_ms) override { |
| 333 const int kRequiredFrames = 500; | 333 const int kRequiredFrames = 500; |
| 334 if (++frame_counter_ == kRequiredFrames) | 334 if (++frame_counter_ == kRequiredFrames) |
| 335 observation_complete_.Set(); | 335 observation_complete_.Set(); |
| 336 } | 336 } |
| 337 | 337 |
| 338 bool IsTextureSupported() const override { return false; } | 338 bool IsTextureSupported() const override { return false; } |
| 339 | 339 |
| 340 private: | 340 private: |
| 341 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; | 341 std::unique_ptr<webrtc::VideoEncoder> encoder_; |
| 342 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; | 342 std::unique_ptr<webrtc::VideoDecoder> decoder_; |
| 343 int frame_counter_; | 343 int frame_counter_; |
| 344 } test; | 344 } test; |
| 345 | 345 |
| 346 RunBaseTest(&test); | 346 RunBaseTest(&test); |
| 347 } | 347 } |
| 348 | 348 |
| 349 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) | 349 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) |
| 350 | 350 |
| 351 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { | 351 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { |
| 352 class SyncRtcpObserver : public test::EndToEndTest { | 352 class SyncRtcpObserver : public test::EndToEndTest { |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 } | 809 } |
| 810 if (use_rtx) | 810 if (use_rtx) |
| 811 return kSendRtxPayloadType; | 811 return kSendRtxPayloadType; |
| 812 return kFakeVideoSendPayloadType; | 812 return kFakeVideoSendPayloadType; |
| 813 } | 813 } |
| 814 | 814 |
| 815 rtc::CriticalSection crit_; | 815 rtc::CriticalSection crit_; |
| 816 const int payload_type_; | 816 const int payload_type_; |
| 817 const uint32_t retransmission_ssrc_; | 817 const uint32_t retransmission_ssrc_; |
| 818 const int retransmission_payload_type_; | 818 const int retransmission_payload_type_; |
| 819 rtc::scoped_ptr<VideoEncoder> encoder_; | 819 std::unique_ptr<VideoEncoder> encoder_; |
| 820 const std::string payload_name_; | 820 const std::string payload_name_; |
| 821 int marker_bits_observed_; | 821 int marker_bits_observed_; |
| 822 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); | 822 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); |
| 823 bool frame_retransmitted_; | 823 bool frame_retransmitted_; |
| 824 } test(enable_rtx, enable_red); | 824 } test(enable_rtx, enable_red); |
| 825 | 825 |
| 826 RunBaseTest(&test); | 826 RunBaseTest(&test); |
| 827 } | 827 } |
| 828 | 828 |
| 829 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { | 829 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. | 901 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. |
| 902 | 902 |
| 903 CreateCalls(Call::Config(), Call::Config()); | 903 CreateCalls(Call::Config(), Call::Config()); |
| 904 | 904 |
| 905 test::DirectTransport sender_transport(sender_call_.get()); | 905 test::DirectTransport sender_transport(sender_call_.get()); |
| 906 test::DirectTransport receiver_transport(receiver_call_.get()); | 906 test::DirectTransport receiver_transport(receiver_call_.get()); |
| 907 sender_transport.SetReceiver(receiver_call_->Receiver()); | 907 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 908 receiver_transport.SetReceiver(sender_call_->Receiver()); | 908 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 909 | 909 |
| 910 CreateSendConfig(1, 0, &sender_transport); | 910 CreateSendConfig(1, 0, &sender_transport); |
| 911 rtc::scoped_ptr<VideoEncoder> encoder( | 911 std::unique_ptr<VideoEncoder> encoder( |
| 912 VideoEncoder::Create(VideoEncoder::kVp8)); | 912 VideoEncoder::Create(VideoEncoder::kVp8)); |
| 913 video_send_config_.encoder_settings.encoder = encoder.get(); | 913 video_send_config_.encoder_settings.encoder = encoder.get(); |
| 914 video_send_config_.encoder_settings.payload_name = "VP8"; | 914 video_send_config_.encoder_settings.payload_name = "VP8"; |
| 915 ASSERT_EQ(1u, video_encoder_config_.streams.size()) << "Test setup error."; | 915 ASSERT_EQ(1u, video_encoder_config_.streams.size()) << "Test setup error."; |
| 916 video_encoder_config_.streams[0].width = kWidth; | 916 video_encoder_config_.streams[0].width = kWidth; |
| 917 video_encoder_config_.streams[0].height = kHeight; | 917 video_encoder_config_.streams[0].height = kHeight; |
| 918 video_send_config_.pre_encode_callback = &pre_encode_callback; | 918 video_send_config_.pre_encode_callback = &pre_encode_callback; |
| 919 | 919 |
| 920 CreateMatchingReceiveConfigs(&receiver_transport); | 920 CreateMatchingReceiveConfigs(&receiver_transport); |
| 921 video_receive_configs_[0].pre_render_callback = &pre_render_callback; | 921 video_receive_configs_[0].pre_render_callback = &pre_render_callback; |
| 922 video_receive_configs_[0].renderer = &renderer; | 922 video_receive_configs_[0].renderer = &renderer; |
| 923 | 923 |
| 924 CreateVideoStreams(); | 924 CreateVideoStreams(); |
| 925 Start(); | 925 Start(); |
| 926 | 926 |
| 927 // Create frames that are smaller than the send width/height, this is done to | 927 // Create frames that are smaller than the send width/height, this is done to |
| 928 // check that the callbacks are done after processing video. | 928 // check that the callbacks are done after processing video. |
| 929 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 929 std::unique_ptr<test::FrameGenerator> frame_generator( |
| 930 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); | 930 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); |
| 931 video_send_stream_->Input()->IncomingCapturedFrame( | 931 video_send_stream_->Input()->IncomingCapturedFrame( |
| 932 *frame_generator->NextFrame()); | 932 *frame_generator->NextFrame()); |
| 933 | 933 |
| 934 EXPECT_TRUE(pre_encode_callback.Wait()) | 934 EXPECT_TRUE(pre_encode_callback.Wait()) |
| 935 << "Timed out while waiting for pre-encode callback."; | 935 << "Timed out while waiting for pre-encode callback."; |
| 936 EXPECT_TRUE(pre_render_callback.Wait()) | 936 EXPECT_TRUE(pre_render_callback.Wait()) |
| 937 << "Timed out while waiting for pre-render callback."; | 937 << "Timed out while waiting for pre-render callback."; |
| 938 EXPECT_TRUE(renderer.Wait()) | 938 EXPECT_TRUE(renderer.Wait()) |
| 939 << "Timed out while waiting for the frame to render."; | 939 << "Timed out while waiting for the frame to render."; |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1206 MultiStreamTest() { | 1206 MultiStreamTest() { |
| 1207 // TODO(sprang): Cleanup when msvc supports explicit initializers for array. | 1207 // TODO(sprang): Cleanup when msvc supports explicit initializers for array. |
| 1208 codec_settings[0] = {1, 640, 480}; | 1208 codec_settings[0] = {1, 640, 480}; |
| 1209 codec_settings[1] = {2, 320, 240}; | 1209 codec_settings[1] = {2, 320, 240}; |
| 1210 codec_settings[2] = {3, 240, 160}; | 1210 codec_settings[2] = {3, 240, 160}; |
| 1211 } | 1211 } |
| 1212 | 1212 |
| 1213 virtual ~MultiStreamTest() {} | 1213 virtual ~MultiStreamTest() {} |
| 1214 | 1214 |
| 1215 void RunTest() { | 1215 void RunTest() { |
| 1216 rtc::scoped_ptr<Call> sender_call(Call::Create(Call::Config())); | 1216 std::unique_ptr<Call> sender_call(Call::Create(Call::Config())); |
| 1217 rtc::scoped_ptr<Call> receiver_call(Call::Create(Call::Config())); | 1217 std::unique_ptr<Call> receiver_call(Call::Create(Call::Config())); |
| 1218 rtc::scoped_ptr<test::DirectTransport> sender_transport( | 1218 std::unique_ptr<test::DirectTransport> sender_transport( |
| 1219 CreateSendTransport(sender_call.get())); | 1219 CreateSendTransport(sender_call.get())); |
| 1220 rtc::scoped_ptr<test::DirectTransport> receiver_transport( | 1220 std::unique_ptr<test::DirectTransport> receiver_transport( |
| 1221 CreateReceiveTransport(receiver_call.get())); | 1221 CreateReceiveTransport(receiver_call.get())); |
| 1222 sender_transport->SetReceiver(receiver_call->Receiver()); | 1222 sender_transport->SetReceiver(receiver_call->Receiver()); |
| 1223 receiver_transport->SetReceiver(sender_call->Receiver()); | 1223 receiver_transport->SetReceiver(sender_call->Receiver()); |
| 1224 | 1224 |
| 1225 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams]; | 1225 std::unique_ptr<VideoEncoder> encoders[kNumStreams]; |
| 1226 for (size_t i = 0; i < kNumStreams; ++i) | 1226 for (size_t i = 0; i < kNumStreams; ++i) |
| 1227 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); | 1227 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); |
| 1228 | 1228 |
| 1229 VideoSendStream* send_streams[kNumStreams]; | 1229 VideoSendStream* send_streams[kNumStreams]; |
| 1230 VideoReceiveStream* receive_streams[kNumStreams]; | 1230 VideoReceiveStream* receive_streams[kNumStreams]; |
| 1231 | 1231 |
| 1232 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; | 1232 test::FrameGeneratorCapturer* frame_generators[kNumStreams]; |
| 1233 ScopedVector<VideoDecoder> allocated_decoders; | 1233 ScopedVector<VideoDecoder> allocated_decoders; |
| 1234 for (size_t i = 0; i < kNumStreams; ++i) { | 1234 for (size_t i = 0; i < kNumStreams; ++i) { |
| 1235 uint32_t ssrc = codec_settings[i].ssrc; | 1235 uint32_t ssrc = codec_settings[i].ssrc; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1367 frame_generator)); | 1367 frame_generator)); |
| 1368 } | 1368 } |
| 1369 | 1369 |
| 1370 void UpdateReceiveConfig( | 1370 void UpdateReceiveConfig( |
| 1371 size_t stream_index, | 1371 size_t stream_index, |
| 1372 VideoReceiveStream::Config* receive_config) override { | 1372 VideoReceiveStream::Config* receive_config) override { |
| 1373 receive_config->renderer = observers_[stream_index].get(); | 1373 receive_config->renderer = observers_[stream_index].get(); |
| 1374 } | 1374 } |
| 1375 | 1375 |
| 1376 private: | 1376 private: |
| 1377 rtc::scoped_ptr<VideoOutputObserver> observers_[kNumStreams]; | 1377 std::unique_ptr<VideoOutputObserver> observers_[kNumStreams]; |
| 1378 } tester; | 1378 } tester; |
| 1379 | 1379 |
| 1380 tester.RunTest(); | 1380 tester.RunTest(); |
| 1381 } | 1381 } |
| 1382 | 1382 |
| 1383 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { | 1383 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { |
| 1384 static const int kExtensionId = 5; | 1384 static const int kExtensionId = 5; |
| 1385 | 1385 |
| 1386 class RtpExtensionHeaderObserver : public test::DirectTransport { | 1386 class RtpExtensionHeaderObserver : public test::DirectTransport { |
| 1387 public: | 1387 public: |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1485 // Can't be sure until this point that rtx_to_media_ssrcs_ etc have | 1485 // Can't be sure until this point that rtx_to_media_ssrcs_ etc have |
| 1486 // been initialized and are OK to read. | 1486 // been initialized and are OK to read. |
| 1487 rtc::CritScope cs(&lock_); | 1487 rtc::CritScope cs(&lock_); |
| 1488 started_ = true; | 1488 started_ = true; |
| 1489 } | 1489 } |
| 1490 return done_.Wait(kDefaultTimeoutMs); | 1490 return done_.Wait(kDefaultTimeoutMs); |
| 1491 } | 1491 } |
| 1492 | 1492 |
| 1493 rtc::CriticalSection lock_; | 1493 rtc::CriticalSection lock_; |
| 1494 rtc::Event done_; | 1494 rtc::Event done_; |
| 1495 rtc::scoped_ptr<RtpHeaderParser> parser_; | 1495 std::unique_ptr<RtpHeaderParser> parser_; |
| 1496 SequenceNumberUnwrapper unwrapper_; | 1496 SequenceNumberUnwrapper unwrapper_; |
| 1497 std::set<int64_t> received_packed_ids_; | 1497 std::set<int64_t> received_packed_ids_; |
| 1498 std::set<uint32_t> streams_observed_; | 1498 std::set<uint32_t> streams_observed_; |
| 1499 std::map<uint32_t, std::set<uint16_t>> dropped_seq_; | 1499 std::map<uint32_t, std::set<uint16_t>> dropped_seq_; |
| 1500 const uint32_t& first_media_ssrc_; | 1500 const uint32_t& first_media_ssrc_; |
| 1501 const std::map<uint32_t, uint32_t>& rtx_to_media_ssrcs_; | 1501 const std::map<uint32_t, uint32_t>& rtx_to_media_ssrcs_; |
| 1502 bool padding_observed_; | 1502 bool padding_observed_; |
| 1503 bool rtx_padding_observed_; | 1503 bool rtx_padding_observed_; |
| 1504 bool retransmit_observed_; | 1504 bool retransmit_observed_; |
| 1505 bool started_; | 1505 bool started_; |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1699 void ExpectEqualFrames(const EncodedFrameTestObserver& observer) { | 1699 void ExpectEqualFrames(const EncodedFrameTestObserver& observer) { |
| 1700 ASSERT_EQ(length_, observer.length_) | 1700 ASSERT_EQ(length_, observer.length_) |
| 1701 << "Observed frames are of different lengths."; | 1701 << "Observed frames are of different lengths."; |
| 1702 EXPECT_EQ(frame_type_, observer.frame_type_) | 1702 EXPECT_EQ(frame_type_, observer.frame_type_) |
| 1703 << "Observed frames have different frame types."; | 1703 << "Observed frames have different frame types."; |
| 1704 EXPECT_EQ(0, memcmp(buffer_.get(), observer.buffer_.get(), length_)) | 1704 EXPECT_EQ(0, memcmp(buffer_.get(), observer.buffer_.get(), length_)) |
| 1705 << "Observed encoded frames have different content."; | 1705 << "Observed encoded frames have different content."; |
| 1706 } | 1706 } |
| 1707 | 1707 |
| 1708 private: | 1708 private: |
| 1709 rtc::scoped_ptr<uint8_t[]> buffer_; | 1709 std::unique_ptr<uint8_t[]> buffer_; |
| 1710 size_t length_; | 1710 size_t length_; |
| 1711 FrameType frame_type_; | 1711 FrameType frame_type_; |
| 1712 rtc::Event called_; | 1712 rtc::Event called_; |
| 1713 }; | 1713 }; |
| 1714 | 1714 |
| 1715 EncodedFrameTestObserver post_encode_observer; | 1715 EncodedFrameTestObserver post_encode_observer; |
| 1716 EncodedFrameTestObserver pre_decode_observer; | 1716 EncodedFrameTestObserver pre_decode_observer; |
| 1717 | 1717 |
| 1718 CreateCalls(Call::Config(), Call::Config()); | 1718 CreateCalls(Call::Config(), Call::Config()); |
| 1719 | 1719 |
| 1720 test::DirectTransport sender_transport(sender_call_.get()); | 1720 test::DirectTransport sender_transport(sender_call_.get()); |
| 1721 test::DirectTransport receiver_transport(receiver_call_.get()); | 1721 test::DirectTransport receiver_transport(receiver_call_.get()); |
| 1722 sender_transport.SetReceiver(receiver_call_->Receiver()); | 1722 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 1723 receiver_transport.SetReceiver(sender_call_->Receiver()); | 1723 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 1724 | 1724 |
| 1725 CreateSendConfig(1, 0, &sender_transport); | 1725 CreateSendConfig(1, 0, &sender_transport); |
| 1726 CreateMatchingReceiveConfigs(&receiver_transport); | 1726 CreateMatchingReceiveConfigs(&receiver_transport); |
| 1727 video_send_config_.post_encode_callback = &post_encode_observer; | 1727 video_send_config_.post_encode_callback = &post_encode_observer; |
| 1728 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer; | 1728 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer; |
| 1729 | 1729 |
| 1730 CreateVideoStreams(); | 1730 CreateVideoStreams(); |
| 1731 Start(); | 1731 Start(); |
| 1732 | 1732 |
| 1733 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 1733 std::unique_ptr<test::FrameGenerator> frame_generator( |
| 1734 test::FrameGenerator::CreateChromaGenerator( | 1734 test::FrameGenerator::CreateChromaGenerator( |
| 1735 video_encoder_config_.streams[0].width, | 1735 video_encoder_config_.streams[0].width, |
| 1736 video_encoder_config_.streams[0].height)); | 1736 video_encoder_config_.streams[0].height)); |
| 1737 video_send_stream_->Input()->IncomingCapturedFrame( | 1737 video_send_stream_->Input()->IncomingCapturedFrame( |
| 1738 *frame_generator->NextFrame()); | 1738 *frame_generator->NextFrame()); |
| 1739 | 1739 |
| 1740 EXPECT_TRUE(post_encode_observer.Wait()) | 1740 EXPECT_TRUE(post_encode_observer.Wait()) |
| 1741 << "Timed out while waiting for send-side encoded-frame callback."; | 1741 << "Timed out while waiting for send-side encoded-frame callback."; |
| 1742 | 1742 |
| 1743 EXPECT_TRUE(pre_decode_observer.Wait()) | 1743 EXPECT_TRUE(pre_decode_observer.Wait()) |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1953 poller_thread_.Stop(); | 1953 poller_thread_.Stop(); |
| 1954 } | 1954 } |
| 1955 | 1955 |
| 1956 private: | 1956 private: |
| 1957 enum TestState { kWaitForFirstRampUp, kWaitForRemb, kWaitForSecondRampUp }; | 1957 enum TestState { kWaitForFirstRampUp, kWaitForRemb, kWaitForSecondRampUp }; |
| 1958 | 1958 |
| 1959 Call* sender_call_; | 1959 Call* sender_call_; |
| 1960 Clock* const clock_; | 1960 Clock* const clock_; |
| 1961 uint32_t sender_ssrc_; | 1961 uint32_t sender_ssrc_; |
| 1962 int remb_bitrate_bps_; | 1962 int remb_bitrate_bps_; |
| 1963 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; | 1963 std::unique_ptr<RtpRtcp> rtp_rtcp_; |
| 1964 test::PacketTransport* receive_transport_; | 1964 test::PacketTransport* receive_transport_; |
| 1965 rtc::Event event_; | 1965 rtc::Event event_; |
| 1966 rtc::PlatformThread poller_thread_; | 1966 rtc::PlatformThread poller_thread_; |
| 1967 TestState state_; | 1967 TestState state_; |
| 1968 } test; | 1968 } test; |
| 1969 | 1969 |
| 1970 RunBaseTest(&test); | 1970 RunBaseTest(&test); |
| 1971 } | 1971 } |
| 1972 | 1972 |
| 1973 TEST_F(EndToEndTest, VerifyNackStats) { | 1973 TEST_F(EndToEndTest, VerifyNackStats) { |
| 1974 static const int kPacketNumberToDrop = 200; | 1974 static const int kPacketNumberToDrop = 200; |
| 1975 class NackObserver : public test::EndToEndTest { | 1975 class NackObserver : public test::EndToEndTest { |
| 1976 public: | 1976 public: |
| 1977 NackObserver() | 1977 NackObserver() |
| 1978 : EndToEndTest(kLongTimeoutMs), | 1978 : EndToEndTest(kLongTimeoutMs), |
| 1979 sent_rtp_packets_(0), | 1979 sent_rtp_packets_(0), |
| 1980 dropped_rtp_packet_(0), | 1980 dropped_rtp_packet_(0), |
| 1981 dropped_rtp_packet_requested_(false), | 1981 dropped_rtp_packet_requested_(false), |
| 1982 send_stream_(nullptr), | 1982 send_stream_(nullptr), |
| 1983 start_runtime_ms_(-1) {} | 1983 start_runtime_ms_(-1) {} |
| 1984 | 1984 |
| 1985 private: | 1985 private: |
| 1986 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1986 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 1987 rtc::CritScope lock(&crit_); | 1987 rtc::CritScope lock(&crit_); |
| 1988 if (++sent_rtp_packets_ == kPacketNumberToDrop) { | 1988 if (++sent_rtp_packets_ == kPacketNumberToDrop) { |
| 1989 rtc::scoped_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create()); | 1989 std::unique_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create()); |
| 1990 RTPHeader header; | 1990 RTPHeader header; |
| 1991 EXPECT_TRUE(parser->Parse(packet, length, &header)); | 1991 EXPECT_TRUE(parser->Parse(packet, length, &header)); |
| 1992 dropped_rtp_packet_ = header.sequenceNumber; | 1992 dropped_rtp_packet_ = header.sequenceNumber; |
| 1993 return DROP_PACKET; | 1993 return DROP_PACKET; |
| 1994 } | 1994 } |
| 1995 VerifyStats(); | 1995 VerifyStats(); |
| 1996 return SEND_PACKET; | 1996 return SEND_PACKET; |
| 1997 } | 1997 } |
| 1998 | 1998 |
| 1999 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 1999 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2155 receiver_call_ = receiver_call; | 2155 receiver_call_ = receiver_call; |
| 2156 } | 2156 } |
| 2157 | 2157 |
| 2158 void PerformTest() override { | 2158 void PerformTest() override { |
| 2159 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; | 2159 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; |
| 2160 } | 2160 } |
| 2161 | 2161 |
| 2162 const bool use_rtx_; | 2162 const bool use_rtx_; |
| 2163 const bool use_red_; | 2163 const bool use_red_; |
| 2164 const bool screenshare_; | 2164 const bool screenshare_; |
| 2165 const rtc::scoped_ptr<VideoEncoder> vp8_encoder_; | 2165 const std::unique_ptr<VideoEncoder> vp8_encoder_; |
| 2166 Call* sender_call_; | 2166 Call* sender_call_; |
| 2167 Call* receiver_call_; | 2167 Call* receiver_call_; |
| 2168 int64_t start_runtime_ms_; | 2168 int64_t start_runtime_ms_; |
| 2169 } test(use_rtx, use_red, screenshare); | 2169 } test(use_rtx, use_red, screenshare); |
| 2170 | 2170 |
| 2171 test::ClearHistograms(); | 2171 test::ClearHistograms(); |
| 2172 RunBaseTest(&test); | 2172 RunBaseTest(&test); |
| 2173 | 2173 |
| 2174 // Delete the call for Call stats to be reported. | 2174 // Delete the call for Call stats to be reported. |
| 2175 sender_call_.reset(); | 2175 sender_call_.reset(); |
| (...skipping 1349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3525 private: | 3525 private: |
| 3526 bool video_observed_; | 3526 bool video_observed_; |
| 3527 bool audio_observed_; | 3527 bool audio_observed_; |
| 3528 SequenceNumberUnwrapper unwrapper_; | 3528 SequenceNumberUnwrapper unwrapper_; |
| 3529 std::set<int64_t> received_packet_ids_; | 3529 std::set<int64_t> received_packet_ids_; |
| 3530 } test; | 3530 } test; |
| 3531 | 3531 |
| 3532 RunBaseTest(&test); | 3532 RunBaseTest(&test); |
| 3533 } | 3533 } |
| 3534 } // namespace webrtc | 3534 } // namespace webrtc |
| OLD | NEW |