| 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 22 matching lines...) Expand all Loading... |
| 33 #include "talk/media/base/videoengine_unittest.h" | 33 #include "talk/media/base/videoengine_unittest.h" |
| 34 #include "talk/media/webrtc/fakewebrtccall.h" | 34 #include "talk/media/webrtc/fakewebrtccall.h" |
| 35 #include "talk/media/webrtc/fakewebrtcvideoengine.h" | 35 #include "talk/media/webrtc/fakewebrtcvideoengine.h" |
| 36 #include "talk/media/webrtc/simulcast.h" | 36 #include "talk/media/webrtc/simulcast.h" |
| 37 #include "talk/media/webrtc/webrtcvideochannelfactory.h" | 37 #include "talk/media/webrtc/webrtcvideochannelfactory.h" |
| 38 #include "talk/media/webrtc/webrtcvideoengine2.h" | 38 #include "talk/media/webrtc/webrtcvideoengine2.h" |
| 39 #include "talk/media/webrtc/webrtcvoiceengine.h" | 39 #include "talk/media/webrtc/webrtcvoiceengine.h" |
| 40 #include "webrtc/base/arraysize.h" | 40 #include "webrtc/base/arraysize.h" |
| 41 #include "webrtc/base/gunit.h" | 41 #include "webrtc/base/gunit.h" |
| 42 #include "webrtc/base/stringutils.h" | 42 #include "webrtc/base/stringutils.h" |
| 43 #include "webrtc/test/field_trial.h" |
| 43 #include "webrtc/video_encoder.h" | 44 #include "webrtc/video_encoder.h" |
| 44 | 45 |
| 45 namespace { | 46 namespace { |
| 46 static const int kDefaultQpMax = 56; | 47 static const int kDefaultQpMax = 56; |
| 47 static const int kDefaultFramerate = 30; | 48 static const int kDefaultFramerate = 30; |
| 48 | 49 |
| 49 static const cricket::VideoCodec kVp8Codec720p(100, "VP8", 1280, 720, 30, 0); | 50 static const cricket::VideoCodec kVp8Codec720p(100, "VP8", 1280, 720, 30, 0); |
| 50 static const cricket::VideoCodec kVp8Codec360p(100, "VP8", 640, 360, 30, 0); | 51 static const cricket::VideoCodec kVp8Codec360p(100, "VP8", 640, 360, 30, 0); |
| 51 static const cricket::VideoCodec kVp8Codec270p(100, "VP8", 480, 270, 30, 0); | 52 static const cricket::VideoCodec kVp8Codec270p(100, "VP8", 480, 270, 30, 0); |
| 52 | 53 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 it = rtx_types.find(config.rtp.fec.red_payload_type); | 102 it = rtx_types.find(config.rtp.fec.red_payload_type); |
| 102 EXPECT_TRUE(it != rtx_types.end() && | 103 EXPECT_TRUE(it != rtx_types.end() && |
| 103 it->second == config.rtp.fec.red_rtx_payload_type); | 104 it->second == config.rtp.fec.red_rtx_payload_type); |
| 104 } | 105 } |
| 105 } | 106 } |
| 106 } // namespace | 107 } // namespace |
| 107 | 108 |
| 108 namespace cricket { | 109 namespace cricket { |
| 109 class WebRtcVideoEngine2Test : public ::testing::Test { | 110 class WebRtcVideoEngine2Test : public ::testing::Test { |
| 110 public: | 111 public: |
| 111 WebRtcVideoEngine2Test() : WebRtcVideoEngine2Test(nullptr) {} | 112 WebRtcVideoEngine2Test() : WebRtcVideoEngine2Test("") {} |
| 112 WebRtcVideoEngine2Test(WebRtcVoiceEngine* voice_engine) | 113 explicit WebRtcVideoEngine2Test(const char* field_trials) |
| 113 : call_(webrtc::Call::Create(webrtc::Call::Config())), | 114 : WebRtcVideoEngine2Test(nullptr, field_trials) {} |
| 115 WebRtcVideoEngine2Test(WebRtcVoiceEngine* voice_engine, |
| 116 const char* field_trials) |
| 117 : override_field_trials_(field_trials), |
| 118 call_(webrtc::Call::Create(webrtc::Call::Config())), |
| 114 engine_() { | 119 engine_() { |
| 115 std::vector<VideoCodec> engine_codecs = engine_.codecs(); | 120 std::vector<VideoCodec> engine_codecs = engine_.codecs(); |
| 116 RTC_DCHECK(!engine_codecs.empty()); | 121 RTC_DCHECK(!engine_codecs.empty()); |
| 117 bool codec_set = false; | 122 bool codec_set = false; |
| 118 for (size_t i = 0; i < engine_codecs.size(); ++i) { | 123 for (size_t i = 0; i < engine_codecs.size(); ++i) { |
| 119 if (engine_codecs[i].name == "red") { | 124 if (engine_codecs[i].name == "red") { |
| 120 default_red_codec_ = engine_codecs[i]; | 125 default_red_codec_ = engine_codecs[i]; |
| 121 } else if (engine_codecs[i].name == "ulpfec") { | 126 } else if (engine_codecs[i].name == "ulpfec") { |
| 122 default_ulpfec_codec_ = engine_codecs[i]; | 127 default_ulpfec_codec_ = engine_codecs[i]; |
| 123 } else if (engine_codecs[i].name == "rtx") { | 128 } else if (engine_codecs[i].name == "rtx") { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 137 | 142 |
| 138 protected: | 143 protected: |
| 139 VideoMediaChannel* SetUpForExternalEncoderFactory( | 144 VideoMediaChannel* SetUpForExternalEncoderFactory( |
| 140 cricket::WebRtcVideoEncoderFactory* encoder_factory, | 145 cricket::WebRtcVideoEncoderFactory* encoder_factory, |
| 141 const std::vector<VideoCodec>& codecs); | 146 const std::vector<VideoCodec>& codecs); |
| 142 | 147 |
| 143 VideoMediaChannel* SetUpForExternalDecoderFactory( | 148 VideoMediaChannel* SetUpForExternalDecoderFactory( |
| 144 cricket::WebRtcVideoDecoderFactory* decoder_factory, | 149 cricket::WebRtcVideoDecoderFactory* decoder_factory, |
| 145 const std::vector<VideoCodec>& codecs); | 150 const std::vector<VideoCodec>& codecs); |
| 146 | 151 |
| 152 webrtc::test::ScopedFieldTrials override_field_trials_; |
| 147 // Used in WebRtcVideoEngine2VoiceTest, but defined here so it's properly | 153 // Used in WebRtcVideoEngine2VoiceTest, but defined here so it's properly |
| 148 // initialized when the constructor is called. | 154 // initialized when the constructor is called. |
| 149 rtc::scoped_ptr<webrtc::Call> call_; | 155 rtc::scoped_ptr<webrtc::Call> call_; |
| 150 WebRtcVoiceEngine voice_engine_; | 156 WebRtcVoiceEngine voice_engine_; |
| 151 WebRtcVideoEngine2 engine_; | 157 WebRtcVideoEngine2 engine_; |
| 152 VideoCodec default_codec_; | 158 VideoCodec default_codec_; |
| 153 VideoCodec default_red_codec_; | 159 VideoCodec default_red_codec_; |
| 154 VideoCodec default_ulpfec_codec_; | 160 VideoCodec default_ulpfec_codec_; |
| 155 std::map<int, int> default_apt_rtx_types_; | 161 std::map<int, int> default_apt_rtx_types_; |
| 156 }; | 162 }; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 for (size_t i = 0; i < extensions.size(); ++i) { | 257 for (size_t i = 0; i < extensions.size(); ++i) { |
| 252 if (extensions[i].uri == kRtpAbsoluteSenderTimeHeaderExtension) { | 258 if (extensions[i].uri == kRtpAbsoluteSenderTimeHeaderExtension) { |
| 253 EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtensionDefaultId, | 259 EXPECT_EQ(kRtpAbsoluteSenderTimeHeaderExtensionDefaultId, |
| 254 extensions[i].id); | 260 extensions[i].id); |
| 255 return; | 261 return; |
| 256 } | 262 } |
| 257 } | 263 } |
| 258 FAIL() << "Absolute Sender Time extension not in header-extension list."; | 264 FAIL() << "Absolute Sender Time extension not in header-extension list."; |
| 259 } | 265 } |
| 260 | 266 |
| 267 class WebRtcVideoEngine2WithSendSideBweTest : public WebRtcVideoEngine2Test { |
| 268 public: |
| 269 WebRtcVideoEngine2WithSendSideBweTest() |
| 270 : WebRtcVideoEngine2Test("WebRTC-SendSideBwe/Enabled/") {} |
| 271 }; |
| 272 |
| 273 TEST_F(WebRtcVideoEngine2WithSendSideBweTest, |
| 274 SupportsTransportSequenceNumberHeaderExtension) { |
| 275 std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); |
| 276 ASSERT_FALSE(extensions.empty()); |
| 277 for (size_t i = 0; i < extensions.size(); ++i) { |
| 278 if (extensions[i].uri == kRtpTransportSequenceNumberHeaderExtension) { |
| 279 EXPECT_EQ(kRtpTransportSequenceNumberHeaderExtensionDefaultId, |
| 280 extensions[i].id); |
| 281 return; |
| 282 } |
| 283 } |
| 284 FAIL() << "Transport sequence number extension not in header-extension list."; |
| 285 } |
| 286 |
| 261 TEST_F(WebRtcVideoEngine2Test, SupportsVideoRotationHeaderExtension) { | 287 TEST_F(WebRtcVideoEngine2Test, SupportsVideoRotationHeaderExtension) { |
| 262 std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); | 288 std::vector<RtpHeaderExtension> extensions = engine_.rtp_header_extensions(); |
| 263 ASSERT_FALSE(extensions.empty()); | 289 ASSERT_FALSE(extensions.empty()); |
| 264 for (size_t i = 0; i < extensions.size(); ++i) { | 290 for (size_t i = 0; i < extensions.size(); ++i) { |
| 265 if (extensions[i].uri == kRtpVideoRotationHeaderExtension) { | 291 if (extensions[i].uri == kRtpVideoRotationHeaderExtension) { |
| 266 EXPECT_EQ(kRtpVideoRotationHeaderExtensionDefaultId, extensions[i].id); | 292 EXPECT_EQ(kRtpVideoRotationHeaderExtensionDefaultId, extensions[i].id); |
| 267 return; | 293 return; |
| 268 } | 294 } |
| 269 } | 295 } |
| 270 FAIL() << "Video Rotation extension not in header-extension list."; | 296 FAIL() << "Video Rotation extension not in header-extension list."; |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 codec.width /= 2; | 914 codec.width /= 2; |
| 889 codec.height /= 2; | 915 codec.height /= 2; |
| 890 EXPECT_TRUE(SetSend(true)); | 916 EXPECT_TRUE(SetSend(true)); |
| 891 EXPECT_EQ(0, renderer_.num_rendered_frames()); | 917 EXPECT_EQ(0, renderer_.num_rendered_frames()); |
| 892 EXPECT_TRUE(SendFrame()); | 918 EXPECT_TRUE(SendFrame()); |
| 893 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout); | 919 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout); |
| 894 } | 920 } |
| 895 | 921 |
| 896 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test { | 922 class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test { |
| 897 public: | 923 public: |
| 898 WebRtcVideoChannel2Test() : last_ssrc_(0) {} | 924 WebRtcVideoChannel2Test() : WebRtcVideoChannel2Test("") {} |
| 925 explicit WebRtcVideoChannel2Test(const char* field_trials) |
| 926 : WebRtcVideoEngine2Test(field_trials), last_ssrc_(0) {} |
| 899 void SetUp() override { | 927 void SetUp() override { |
| 900 fake_call_.reset(new FakeCall(webrtc::Call::Config())); | 928 fake_call_.reset(new FakeCall(webrtc::Call::Config())); |
| 901 engine_.Init(); | 929 engine_.Init(); |
| 902 channel_.reset( | 930 channel_.reset( |
| 903 engine_.CreateChannel(fake_call_.get(), cricket::VideoOptions())); | 931 engine_.CreateChannel(fake_call_.get(), cricket::VideoOptions())); |
| 904 last_ssrc_ = 123; | 932 last_ssrc_ = 123; |
| 905 send_parameters_.codecs = engine_.codecs(); | 933 send_parameters_.codecs = engine_.codecs(); |
| 906 recv_parameters_.codecs = engine_.codecs(); | 934 recv_parameters_.codecs = engine_.codecs(); |
| 907 ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); | 935 ASSERT_TRUE(channel_->SetSendParameters(send_parameters_)); |
| 908 } | 936 } |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1164 // Test support for absolute send time header extension. | 1192 // Test support for absolute send time header extension. |
| 1165 TEST_F(WebRtcVideoChannel2Test, SendAbsoluteSendTimeHeaderExtensions) { | 1193 TEST_F(WebRtcVideoChannel2Test, SendAbsoluteSendTimeHeaderExtensions) { |
| 1166 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension, | 1194 TestSetSendRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension, |
| 1167 webrtc::RtpExtension::kAbsSendTime); | 1195 webrtc::RtpExtension::kAbsSendTime); |
| 1168 } | 1196 } |
| 1169 TEST_F(WebRtcVideoChannel2Test, RecvAbsoluteSendTimeHeaderExtensions) { | 1197 TEST_F(WebRtcVideoChannel2Test, RecvAbsoluteSendTimeHeaderExtensions) { |
| 1170 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension, | 1198 TestSetRecvRtpHeaderExtensions(kRtpAbsoluteSenderTimeHeaderExtension, |
| 1171 webrtc::RtpExtension::kAbsSendTime); | 1199 webrtc::RtpExtension::kAbsSendTime); |
| 1172 } | 1200 } |
| 1173 | 1201 |
| 1202 class WebRtcVideoChannel2WithSendSideBweTest : public WebRtcVideoChannel2Test { |
| 1203 public: |
| 1204 WebRtcVideoChannel2WithSendSideBweTest() |
| 1205 : WebRtcVideoChannel2Test("WebRTC-SendSideBwe/Enabled/") {} |
| 1206 }; |
| 1207 |
| 1208 // Test support for transport sequence number header extension. |
| 1209 TEST_F(WebRtcVideoChannel2WithSendSideBweTest, |
| 1210 SendTransportSequenceNumberHeaderExtensions) { |
| 1211 TestSetSendRtpHeaderExtensions( |
| 1212 kRtpTransportSequenceNumberHeaderExtension, |
| 1213 webrtc::RtpExtension::kTransportSequenceNumber); |
| 1214 } |
| 1215 TEST_F(WebRtcVideoChannel2WithSendSideBweTest, |
| 1216 RecvTransportSequenceNumberHeaderExtensions) { |
| 1217 TestSetRecvRtpHeaderExtensions( |
| 1218 kRtpTransportSequenceNumberHeaderExtension, |
| 1219 webrtc::RtpExtension::kTransportSequenceNumber); |
| 1220 } |
| 1221 |
| 1174 // Test support for video rotation header extension. | 1222 // Test support for video rotation header extension. |
| 1175 TEST_F(WebRtcVideoChannel2Test, SendVideoRotationHeaderExtensions) { | 1223 TEST_F(WebRtcVideoChannel2Test, SendVideoRotationHeaderExtensions) { |
| 1176 TestSetSendRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, | 1224 TestSetSendRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, |
| 1177 webrtc::RtpExtension::kVideoRotation); | 1225 webrtc::RtpExtension::kVideoRotation); |
| 1178 } | 1226 } |
| 1179 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { | 1227 TEST_F(WebRtcVideoChannel2Test, RecvVideoRotationHeaderExtensions) { |
| 1180 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, | 1228 TestSetRecvRtpHeaderExtensions(kRtpVideoRotationHeaderExtension, |
| 1181 webrtc::RtpExtension::kVideoRotation); | 1229 webrtc::RtpExtension::kVideoRotation); |
| 1182 } | 1230 } |
| 1183 | 1231 |
| (...skipping 2009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3193 // Ensures that the correct settings are applied to the codec when two temporal | 3241 // Ensures that the correct settings are applied to the codec when two temporal |
| 3194 // layer screencasting is enabled, and that the correct simulcast settings are | 3242 // layer screencasting is enabled, and that the correct simulcast settings are |
| 3195 // reapplied when disabling screencasting. | 3243 // reapplied when disabling screencasting. |
| 3196 TEST_F(WebRtcVideoChannel2SimulcastTest, | 3244 TEST_F(WebRtcVideoChannel2SimulcastTest, |
| 3197 DISABLED_TwoTemporalLayerScreencastSettings) { | 3245 DISABLED_TwoTemporalLayerScreencastSettings) { |
| 3198 // TODO(pbos): Implement. | 3246 // TODO(pbos): Implement. |
| 3199 FAIL() << "Not implemented."; | 3247 FAIL() << "Not implemented."; |
| 3200 } | 3248 } |
| 3201 | 3249 |
| 3202 } // namespace cricket | 3250 } // namespace cricket |
| OLD | NEW |