OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 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, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 52 |
53 static const cricket::VideoCodec kVp8Codec(100, "VP8", 640, 400, 30, 0); | 53 static const cricket::VideoCodec kVp8Codec(100, "VP8", 640, 400, 30, 0); |
54 static const cricket::VideoCodec kVp9Codec(101, "VP9", 640, 400, 30, 0); | 54 static const cricket::VideoCodec kVp9Codec(101, "VP9", 640, 400, 30, 0); |
55 static const cricket::VideoCodec kH264Codec(102, "H264", 640, 400, 30, 0); | 55 static const cricket::VideoCodec kH264Codec(102, "H264", 640, 400, 30, 0); |
56 | 56 |
57 static const cricket::VideoCodec kRedCodec(116, "red", 0, 0, 0, 0); | 57 static const cricket::VideoCodec kRedCodec(116, "red", 0, 0, 0, 0); |
58 static const cricket::VideoCodec kUlpfecCodec(117, "ulpfec", 0, 0, 0, 0); | 58 static const cricket::VideoCodec kUlpfecCodec(117, "ulpfec", 0, 0, 0, 0); |
59 | 59 |
60 static const uint8_t kRedRtxPayloadType = 125; | 60 static const uint8_t kRedRtxPayloadType = 125; |
61 | 61 |
62 static const uint32 kSsrcs1[] = {1}; | 62 static const uint32_t kSsrcs1[] = {1}; |
63 static const uint32 kSsrcs3[] = {1, 2, 3}; | 63 static const uint32_t kSsrcs3[] = {1, 2, 3}; |
64 static const uint32 kRtxSsrcs1[] = {4}; | 64 static const uint32_t kRtxSsrcs1[] = {4}; |
65 static const uint32 kIncomingUnsignalledSsrc = 0xC0FFEE; | 65 static const uint32_t kIncomingUnsignalledSsrc = 0xC0FFEE; |
66 static const char kUnsupportedExtensionName[] = | 66 static const char kUnsupportedExtensionName[] = |
67 "urn:ietf:params:rtp-hdrext:unsupported"; | 67 "urn:ietf:params:rtp-hdrext:unsupported"; |
68 | 68 |
69 void VerifyCodecHasDefaultFeedbackParams(const cricket::VideoCodec& codec) { | 69 void VerifyCodecHasDefaultFeedbackParams(const cricket::VideoCodec& codec) { |
70 EXPECT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( | 70 EXPECT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( |
71 cricket::kRtcpFbParamNack, cricket::kParamValueEmpty))); | 71 cricket::kRtcpFbParamNack, cricket::kParamValueEmpty))); |
72 EXPECT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( | 72 EXPECT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( |
73 cricket::kRtcpFbParamNack, cricket::kRtcpFbNackParamPli))); | 73 cricket::kRtcpFbParamNack, cricket::kRtcpFbNackParamPli))); |
74 EXPECT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( | 74 EXPECT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( |
75 cricket::kRtcpFbParamRemb, cricket::kParamValueEmpty))); | 75 cricket::kRtcpFbParamRemb, cricket::kParamValueEmpty))); |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 channel->SetSend(true); | 480 channel->SetSend(true); |
481 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0]; | 481 FakeVideoSendStream* stream = fake_call->GetVideoSendStreams()[0]; |
482 | 482 |
483 FakeVideoCapturer capturer1; | 483 FakeVideoCapturer capturer1; |
484 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer1)); | 484 EXPECT_TRUE(channel->SetCapturer(kSsrc, &capturer1)); |
485 | 485 |
486 cricket::CapturedFrame frame; | 486 cricket::CapturedFrame frame; |
487 frame.width = 1280; | 487 frame.width = 1280; |
488 frame.height = 720; | 488 frame.height = 720; |
489 frame.fourcc = cricket::FOURCC_I420; | 489 frame.fourcc = cricket::FOURCC_I420; |
490 frame.data_size = static_cast<uint32>( | 490 frame.data_size = static_cast<uint32_t>( |
491 cricket::VideoFrame::SizeOf(frame.width, frame.height)); | 491 cricket::VideoFrame::SizeOf(frame.width, frame.height)); |
492 rtc::scoped_ptr<char[]> data(new char[frame.data_size]); | 492 rtc::scoped_ptr<char[]> data(new char[frame.data_size]); |
493 frame.data = data.get(); | 493 frame.data = data.get(); |
494 memset(frame.data, 1, frame.data_size); | 494 memset(frame.data, 1, frame.data_size); |
495 frame.elapsed_time = 0; | 495 frame.elapsed_time = 0; |
496 const int kInitialTimestamp = 123456; | 496 const int kInitialTimestamp = 123456; |
497 frame.time_stamp = kInitialTimestamp; | 497 frame.time_stamp = kInitialTimestamp; |
498 | 498 |
499 // Deliver initial frame. | 499 // Deliver initial frame. |
500 capturer1.SignalCapturedFrame(&frame); | 500 capturer1.SignalCapturedFrame(&frame); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 | 553 |
554 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { | 554 TEST_F(WebRtcVideoEngine2Test, UsesSimulcastAdapterForVp8Factories) { |
555 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 555 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
556 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 556 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
557 std::vector<cricket::VideoCodec> codecs; | 557 std::vector<cricket::VideoCodec> codecs; |
558 codecs.push_back(kVp8Codec); | 558 codecs.push_back(kVp8Codec); |
559 | 559 |
560 rtc::scoped_ptr<VideoMediaChannel> channel( | 560 rtc::scoped_ptr<VideoMediaChannel> channel( |
561 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 561 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
562 | 562 |
563 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); | 563 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
564 | 564 |
565 EXPECT_TRUE( | 565 EXPECT_TRUE( |
566 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); | 566 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); |
567 EXPECT_TRUE(channel->SetSend(true)); | 567 EXPECT_TRUE(channel->SetSend(true)); |
568 | 568 |
569 cricket::FakeVideoCapturer capturer; | 569 cricket::FakeVideoCapturer capturer; |
570 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); | 570 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); |
571 EXPECT_EQ(cricket::CS_RUNNING, | 571 EXPECT_EQ(cricket::CS_RUNNING, |
572 capturer.Start(capturer.GetSupportedFormats()->front())); | 572 capturer.Start(capturer.GetSupportedFormats()->front())); |
573 EXPECT_TRUE(capturer.CaptureFrame()); | 573 EXPECT_TRUE(capturer.CaptureFrame()); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 631 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
632 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); | 632 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecVP8, "VP8"); |
633 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 633 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
634 | 634 |
635 std::vector<cricket::VideoCodec> codecs; | 635 std::vector<cricket::VideoCodec> codecs; |
636 codecs.push_back(kVp8Codec); | 636 codecs.push_back(kVp8Codec); |
637 | 637 |
638 rtc::scoped_ptr<VideoMediaChannel> channel( | 638 rtc::scoped_ptr<VideoMediaChannel> channel( |
639 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 639 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
640 | 640 |
641 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); | 641 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
642 | 642 |
643 EXPECT_TRUE( | 643 EXPECT_TRUE( |
644 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); | 644 channel->AddSendStream(CreateSimStreamParams("cname", ssrcs))); |
645 EXPECT_TRUE(channel->SetSend(true)); | 645 EXPECT_TRUE(channel->SetSend(true)); |
646 | 646 |
647 // Send a fake frame, or else the media engine will configure the simulcast | 647 // Send a fake frame, or else the media engine will configure the simulcast |
648 // encoder adapter at a low-enough size that it'll only create a single | 648 // encoder adapter at a low-enough size that it'll only create a single |
649 // encoder layer. | 649 // encoder layer. |
650 cricket::FakeVideoCapturer capturer; | 650 cricket::FakeVideoCapturer capturer; |
651 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); | 651 EXPECT_TRUE(channel->SetCapturer(ssrcs.front(), &capturer)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 | 687 |
688 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { | 688 TEST_F(WebRtcVideoEngine2Test, SimulcastDisabledForH264) { |
689 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; | 689 cricket::FakeWebRtcVideoEncoderFactory encoder_factory; |
690 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); | 690 encoder_factory.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264"); |
691 std::vector<cricket::VideoCodec> codecs; | 691 std::vector<cricket::VideoCodec> codecs; |
692 codecs.push_back(kH264Codec); | 692 codecs.push_back(kH264Codec); |
693 | 693 |
694 rtc::scoped_ptr<VideoMediaChannel> channel( | 694 rtc::scoped_ptr<VideoMediaChannel> channel( |
695 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); | 695 SetUpForExternalEncoderFactory(&encoder_factory, codecs)); |
696 | 696 |
697 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); | 697 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
698 EXPECT_TRUE( | 698 EXPECT_TRUE( |
699 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); | 699 channel->AddSendStream(cricket::CreateSimStreamParams("cname", ssrcs))); |
700 // Set the stream to 720p. This should trigger a "real" encoder | 700 // Set the stream to 720p. This should trigger a "real" encoder |
701 // initialization. | 701 // initialization. |
702 cricket::VideoFormat format( | 702 cricket::VideoFormat format( |
703 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); | 703 1280, 720, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420); |
704 EXPECT_TRUE(channel->SetSendStreamFormat(ssrcs[0], format)); | 704 EXPECT_TRUE(channel->SetSendStreamFormat(ssrcs[0], format)); |
705 ASSERT_EQ(1u, encoder_factory.encoders().size()); | 705 ASSERT_EQ(1u, encoder_factory.encoders().size()); |
706 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; | 706 FakeWebRtcVideoEncoder* encoder = encoder_factory.encoders()[0]; |
707 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); | 707 EXPECT_EQ(webrtc::kVideoCodecH264, encoder->GetCodecSettings().codecType); |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 return AddSendStream( | 1074 return AddSendStream( |
1075 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1075 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
1076 } | 1076 } |
1077 return AddSendStream(CreateSimStreamParams("cname", ssrcs)); | 1077 return AddSendStream(CreateSimStreamParams("cname", ssrcs)); |
1078 } | 1078 } |
1079 | 1079 |
1080 rtc::scoped_ptr<FakeCall> fake_call_; | 1080 rtc::scoped_ptr<FakeCall> fake_call_; |
1081 rtc::scoped_ptr<VideoMediaChannel> channel_; | 1081 rtc::scoped_ptr<VideoMediaChannel> channel_; |
1082 cricket::VideoSendParameters send_parameters_; | 1082 cricket::VideoSendParameters send_parameters_; |
1083 cricket::VideoRecvParameters recv_parameters_; | 1083 cricket::VideoRecvParameters recv_parameters_; |
1084 uint32 last_ssrc_; | 1084 uint32_t last_ssrc_; |
1085 }; | 1085 }; |
1086 | 1086 |
1087 TEST_F(WebRtcVideoChannel2Test, SetsSyncGroupFromSyncLabel) { | 1087 TEST_F(WebRtcVideoChannel2Test, SetsSyncGroupFromSyncLabel) { |
1088 const uint32 kVideoSsrc = 123; | 1088 const uint32_t kVideoSsrc = 123; |
1089 const std::string kSyncLabel = "AvSyncLabel"; | 1089 const std::string kSyncLabel = "AvSyncLabel"; |
1090 | 1090 |
1091 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kVideoSsrc); | 1091 cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kVideoSsrc); |
1092 sp.sync_label = kSyncLabel; | 1092 sp.sync_label = kSyncLabel; |
1093 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 1093 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
1094 | 1094 |
1095 EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size()); | 1095 EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size()); |
1096 EXPECT_EQ(kSyncLabel, | 1096 EXPECT_EQ(kSyncLabel, |
1097 fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group) | 1097 fake_call_->GetVideoReceiveStreams()[0]->GetConfig().sync_group) |
1098 << "SyncGroup should be set based on sync_label"; | 1098 << "SyncGroup should be set based on sync_label"; |
1099 } | 1099 } |
1100 | 1100 |
1101 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithSimAndRtx) { | 1101 TEST_F(WebRtcVideoChannel2Test, RecvStreamWithSimAndRtx) { |
1102 cricket::VideoSendParameters parameters; | 1102 cricket::VideoSendParameters parameters; |
1103 parameters.codecs = engine_.codecs(); | 1103 parameters.codecs = engine_.codecs(); |
1104 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1104 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1105 EXPECT_TRUE(channel_->SetSend(true)); | 1105 EXPECT_TRUE(channel_->SetSend(true)); |
1106 parameters.options.conference_mode.Set(true); | 1106 parameters.options.conference_mode.Set(true); |
1107 EXPECT_TRUE(channel_->SetSendParameters(parameters)); | 1107 EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
1108 | 1108 |
1109 // Send side. | 1109 // Send side. |
1110 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 1110 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); |
1111 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 1111 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
1112 FakeVideoSendStream* send_stream = AddSendStream( | 1112 FakeVideoSendStream* send_stream = AddSendStream( |
1113 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1113 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
1114 | 1114 |
1115 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); | 1115 ASSERT_EQ(rtx_ssrcs.size(), send_stream->GetConfig().rtp.rtx.ssrcs.size()); |
1116 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) | 1116 for (size_t i = 0; i < rtx_ssrcs.size(); ++i) |
1117 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); | 1117 EXPECT_EQ(rtx_ssrcs[i], send_stream->GetConfig().rtp.rtx.ssrcs[i]); |
1118 | 1118 |
1119 // Receiver side. | 1119 // Receiver side. |
1120 FakeVideoReceiveStream* recv_stream = AddRecvStream( | 1120 FakeVideoReceiveStream* recv_stream = AddRecvStream( |
1121 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1121 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1856 } | 1856 } |
1857 | 1857 |
1858 TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) { | 1858 TEST_F(WebRtcVideoChannel2Test, SetDefaultSendCodecs) { |
1859 ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); | 1859 ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); |
1860 | 1860 |
1861 VideoCodec codec; | 1861 VideoCodec codec; |
1862 EXPECT_TRUE(channel_->GetSendCodec(&codec)); | 1862 EXPECT_TRUE(channel_->GetSendCodec(&codec)); |
1863 EXPECT_TRUE(codec.Matches(engine_.codecs()[0])); | 1863 EXPECT_TRUE(codec.Matches(engine_.codecs()[0])); |
1864 | 1864 |
1865 // Using a RTX setup to verify that the default RTX payload type is good. | 1865 // Using a RTX setup to verify that the default RTX payload type is good. |
1866 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 1866 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); |
1867 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 1867 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
1868 FakeVideoSendStream* stream = AddSendStream( | 1868 FakeVideoSendStream* stream = AddSendStream( |
1869 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 1869 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); |
1870 webrtc::VideoSendStream::Config config = stream->GetConfig(); | 1870 webrtc::VideoSendStream::Config config = stream->GetConfig(); |
1871 | 1871 |
1872 // Make sure NACK and FEC are enabled on the correct payload types. | 1872 // Make sure NACK and FEC are enabled on the correct payload types. |
1873 EXPECT_EQ(1000, config.rtp.nack.rtp_history_ms); | 1873 EXPECT_EQ(1000, config.rtp.nack.rtp_history_ms); |
1874 EXPECT_EQ(default_ulpfec_codec_.id, config.rtp.fec.ulpfec_payload_type); | 1874 EXPECT_EQ(default_ulpfec_codec_.id, config.rtp.fec.ulpfec_payload_type); |
1875 EXPECT_EQ(default_red_codec_.id, config.rtp.fec.red_payload_type); | 1875 EXPECT_EQ(default_red_codec_.id, config.rtp.fec.red_payload_type); |
1876 | 1876 |
1877 EXPECT_EQ(1u, config.rtp.rtx.ssrcs.size()); | 1877 EXPECT_EQ(1u, config.rtp.rtx.ssrcs.size()); |
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2578 info.bw_estimations[0].actual_enc_bitrate); | 2578 info.bw_estimations[0].actual_enc_bitrate); |
2579 EXPECT_EQ(1 + 3 + 5 + 7, info.bw_estimations[0].transmit_bitrate) | 2579 EXPECT_EQ(1 + 3 + 5 + 7, info.bw_estimations[0].transmit_bitrate) |
2580 << "Bandwidth stats should take all streams into account."; | 2580 << "Bandwidth stats should take all streams into account."; |
2581 EXPECT_EQ(2 + 4 + 6 + 8, info.bw_estimations[0].retransmit_bitrate) | 2581 EXPECT_EQ(2 + 4 + 6 + 8, info.bw_estimations[0].retransmit_bitrate) |
2582 << "Bandwidth stats should take all streams into account."; | 2582 << "Bandwidth stats should take all streams into account."; |
2583 } | 2583 } |
2584 | 2584 |
2585 TEST_F(WebRtcVideoChannel2Test, DefaultReceiveStreamReconfiguresToUseRtx) { | 2585 TEST_F(WebRtcVideoChannel2Test, DefaultReceiveStreamReconfiguresToUseRtx) { |
2586 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 2586 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
2587 | 2587 |
2588 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 2588 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); |
2589 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 2589 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
2590 | 2590 |
2591 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); | 2591 ASSERT_EQ(0u, fake_call_->GetVideoReceiveStreams().size()); |
2592 const size_t kDataLength = 12; | 2592 const size_t kDataLength = 12; |
2593 uint8_t data[kDataLength]; | 2593 uint8_t data[kDataLength]; |
2594 memset(data, 0, sizeof(data)); | 2594 memset(data, 0, sizeof(data)); |
2595 rtc::SetBE32(&data[8], ssrcs[0]); | 2595 rtc::SetBE32(&data[8], ssrcs[0]); |
2596 rtc::Buffer packet(data, kDataLength); | 2596 rtc::Buffer packet(data, kDataLength); |
2597 rtc::PacketTime packet_time; | 2597 rtc::PacketTime packet_time; |
2598 channel_->OnPacketReceived(&packet, packet_time); | 2598 channel_->OnPacketReceived(&packet, packet_time); |
2599 | 2599 |
2600 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) | 2600 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) |
2601 << "No default receive stream created."; | 2601 << "No default receive stream created."; |
2602 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 2602 FakeVideoReceiveStream* recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
2603 EXPECT_EQ(0u, recv_stream->GetConfig().rtp.rtx.size()) | 2603 EXPECT_EQ(0u, recv_stream->GetConfig().rtp.rtx.size()) |
2604 << "Default receive stream should not have configured RTX"; | 2604 << "Default receive stream should not have configured RTX"; |
2605 | 2605 |
2606 EXPECT_TRUE(channel_->AddRecvStream( | 2606 EXPECT_TRUE(channel_->AddRecvStream( |
2607 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); | 2607 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs))); |
2608 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) | 2608 ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size()) |
2609 << "AddRecvStream should've reconfigured, not added a new receiver."; | 2609 << "AddRecvStream should've reconfigured, not added a new receiver."; |
2610 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 2610 recv_stream = fake_call_->GetVideoReceiveStreams()[0]; |
2611 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.rtx.size()); | 2611 ASSERT_EQ(1u, recv_stream->GetConfig().rtp.rtx.size()); |
2612 EXPECT_EQ(rtx_ssrcs[0], | 2612 EXPECT_EQ(rtx_ssrcs[0], |
2613 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc); | 2613 recv_stream->GetConfig().rtp.rtx.begin()->second.ssrc); |
2614 } | 2614 } |
2615 | 2615 |
2616 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { | 2616 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithMissingSsrcsForRtx) { |
2617 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 2617 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
2618 | 2618 |
2619 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 2619 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); |
2620 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 2620 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
2621 | 2621 |
2622 StreamParams sp = | 2622 StreamParams sp = |
2623 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); | 2623 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); |
2624 sp.ssrcs = ssrcs; // Without RTXs, this is the important part. | 2624 sp.ssrcs = ssrcs; // Without RTXs, this is the important part. |
2625 | 2625 |
2626 EXPECT_FALSE(channel_->AddSendStream(sp)); | 2626 EXPECT_FALSE(channel_->AddSendStream(sp)); |
2627 EXPECT_FALSE(channel_->AddRecvStream(sp)); | 2627 EXPECT_FALSE(channel_->AddRecvStream(sp)); |
2628 } | 2628 } |
2629 | 2629 |
2630 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithOverlappingRtxSsrcs) { | 2630 TEST_F(WebRtcVideoChannel2Test, RejectsAddingStreamsWithOverlappingRtxSsrcs) { |
2631 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 2631 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
2632 | 2632 |
2633 const std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs1); | 2633 const std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs1); |
2634 const std::vector<uint32> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); | 2634 const std::vector<uint32_t> rtx_ssrcs = MAKE_VECTOR(kRtxSsrcs1); |
2635 | 2635 |
2636 StreamParams sp = | 2636 StreamParams sp = |
2637 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); | 2637 cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs); |
2638 | 2638 |
2639 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2639 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2640 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2640 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2641 | 2641 |
2642 // The RTX SSRC is already used in previous streams, using it should fail. | 2642 // The RTX SSRC is already used in previous streams, using it should fail. |
2643 sp = cricket::StreamParams::CreateLegacy(rtx_ssrcs[0]); | 2643 sp = cricket::StreamParams::CreateLegacy(rtx_ssrcs[0]); |
2644 EXPECT_FALSE(channel_->AddSendStream(sp)); | 2644 EXPECT_FALSE(channel_->AddSendStream(sp)); |
2645 EXPECT_FALSE(channel_->AddRecvStream(sp)); | 2645 EXPECT_FALSE(channel_->AddRecvStream(sp)); |
2646 | 2646 |
2647 // After removing the original stream this should be fine to add (makes sure | 2647 // After removing the original stream this should be fine to add (makes sure |
2648 // that RTX ssrcs are not forever taken). | 2648 // that RTX ssrcs are not forever taken). |
2649 EXPECT_TRUE(channel_->RemoveSendStream(ssrcs[0])); | 2649 EXPECT_TRUE(channel_->RemoveSendStream(ssrcs[0])); |
2650 EXPECT_TRUE(channel_->RemoveRecvStream(ssrcs[0])); | 2650 EXPECT_TRUE(channel_->RemoveRecvStream(ssrcs[0])); |
2651 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2651 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2652 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2652 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2653 } | 2653 } |
2654 | 2654 |
2655 TEST_F(WebRtcVideoChannel2Test, | 2655 TEST_F(WebRtcVideoChannel2Test, |
2656 RejectsAddingStreamsWithOverlappingSimulcastSsrcs) { | 2656 RejectsAddingStreamsWithOverlappingSimulcastSsrcs) { |
2657 static const uint32 kFirstStreamSsrcs[] = {1, 2, 3}; | 2657 static const uint32_t kFirstStreamSsrcs[] = {1, 2, 3}; |
2658 static const uint32 kOverlappingStreamSsrcs[] = {4, 3, 5}; | 2658 static const uint32_t kOverlappingStreamSsrcs[] = {4, 3, 5}; |
2659 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 2659 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
2660 | 2660 |
2661 StreamParams sp = | 2661 StreamParams sp = |
2662 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kFirstStreamSsrcs)); | 2662 cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kFirstStreamSsrcs)); |
2663 | 2663 |
2664 EXPECT_TRUE(channel_->AddSendStream(sp)); | 2664 EXPECT_TRUE(channel_->AddSendStream(sp)); |
2665 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 2665 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
2666 | 2666 |
2667 // One of the SSRCs is already used in previous streams, using it should fail. | 2667 // One of the SSRCs is already used in previous streams, using it should fail. |
2668 sp = cricket::CreateSimStreamParams("cname", | 2668 sp = cricket::CreateSimStreamParams("cname", |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2974 void VerifySimulcastSettings(const VideoCodec& codec, | 2974 void VerifySimulcastSettings(const VideoCodec& codec, |
2975 VideoOptions::HighestBitrate bitrate_mode, | 2975 VideoOptions::HighestBitrate bitrate_mode, |
2976 size_t num_configured_streams, | 2976 size_t num_configured_streams, |
2977 size_t expected_num_streams, | 2977 size_t expected_num_streams, |
2978 SimulcastBitrateMode simulcast_bitrate_mode) { | 2978 SimulcastBitrateMode simulcast_bitrate_mode) { |
2979 cricket::VideoSendParameters parameters; | 2979 cricket::VideoSendParameters parameters; |
2980 parameters.options.video_highest_bitrate.Set(bitrate_mode); | 2980 parameters.options.video_highest_bitrate.Set(bitrate_mode); |
2981 parameters.codecs.push_back(codec); | 2981 parameters.codecs.push_back(codec); |
2982 ASSERT_TRUE(channel_->SetSendParameters(parameters)); | 2982 ASSERT_TRUE(channel_->SetSendParameters(parameters)); |
2983 | 2983 |
2984 std::vector<uint32> ssrcs = MAKE_VECTOR(kSsrcs3); | 2984 std::vector<uint32_t> ssrcs = MAKE_VECTOR(kSsrcs3); |
2985 RTC_DCHECK(num_configured_streams <= ssrcs.size()); | 2985 RTC_DCHECK(num_configured_streams <= ssrcs.size()); |
2986 ssrcs.resize(num_configured_streams); | 2986 ssrcs.resize(num_configured_streams); |
2987 | 2987 |
2988 FakeVideoSendStream* stream = | 2988 FakeVideoSendStream* stream = |
2989 AddSendStream(CreateSimStreamParams("cname", ssrcs)); | 2989 AddSendStream(CreateSimStreamParams("cname", ssrcs)); |
2990 // Send a full-size frame to trigger a stream reconfiguration to use all | 2990 // Send a full-size frame to trigger a stream reconfiguration to use all |
2991 // expected simulcast layers. | 2991 // expected simulcast layers. |
2992 cricket::FakeVideoCapturer capturer; | 2992 cricket::FakeVideoCapturer capturer; |
2993 EXPECT_TRUE(channel_->SetCapturer(ssrcs.front(), &capturer)); | 2993 EXPECT_TRUE(channel_->SetCapturer(ssrcs.front(), &capturer)); |
2994 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat( | 2994 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(cricket::VideoFormat( |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3083 EXPECT_TRUE(channel_->AddRecvStream(sp)); | 3083 EXPECT_TRUE(channel_->AddRecvStream(sp)); |
3084 std::vector<FakeVideoReceiveStream*> streams = | 3084 std::vector<FakeVideoReceiveStream*> streams = |
3085 fake_call_.GetVideoReceiveStreams(); | 3085 fake_call_.GetVideoReceiveStreams(); |
3086 EXPECT_EQ(num_streams + 1, streams.size()); | 3086 EXPECT_EQ(num_streams + 1, streams.size()); |
3087 return streams[streams.size() - 1]; | 3087 return streams[streams.size() - 1]; |
3088 } | 3088 } |
3089 | 3089 |
3090 FakeCall fake_call_; | 3090 FakeCall fake_call_; |
3091 WebRtcVideoEngine2 engine_; | 3091 WebRtcVideoEngine2 engine_; |
3092 rtc::scoped_ptr<VideoMediaChannel> channel_; | 3092 rtc::scoped_ptr<VideoMediaChannel> channel_; |
3093 uint32 last_ssrc_; | 3093 uint32_t last_ssrc_; |
3094 }; | 3094 }; |
3095 | 3095 |
3096 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) { | 3096 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith2SimulcastStreams) { |
3097 VerifySimulcastSettings(kVp8Codec, VideoOptions::NORMAL, 2, 2, SBM_NORMAL); | 3097 VerifySimulcastSettings(kVp8Codec, VideoOptions::NORMAL, 2, 2, SBM_NORMAL); |
3098 } | 3098 } |
3099 | 3099 |
3100 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { | 3100 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { |
3101 VerifySimulcastSettings( | 3101 VerifySimulcastSettings( |
3102 kVp8Codec720p, VideoOptions::NORMAL, 3, 3, SBM_NORMAL); | 3102 kVp8Codec720p, VideoOptions::NORMAL, 3, 3, SBM_NORMAL); |
3103 } | 3103 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3207 // Ensures that the correct settings are applied to the codec when two temporal | 3207 // Ensures that the correct settings are applied to the codec when two temporal |
3208 // layer screencasting is enabled, and that the correct simulcast settings are | 3208 // layer screencasting is enabled, and that the correct simulcast settings are |
3209 // reapplied when disabling screencasting. | 3209 // reapplied when disabling screencasting. |
3210 TEST_F(WebRtcVideoChannel2SimulcastTest, | 3210 TEST_F(WebRtcVideoChannel2SimulcastTest, |
3211 DISABLED_TwoTemporalLayerScreencastSettings) { | 3211 DISABLED_TwoTemporalLayerScreencastSettings) { |
3212 // TODO(pbos): Implement. | 3212 // TODO(pbos): Implement. |
3213 FAIL() << "Not implemented."; | 3213 FAIL() << "Not implemented."; |
3214 } | 3214 } |
3215 | 3215 |
3216 } // namespace cricket | 3216 } // namespace cricket |
OLD | NEW |