Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: webrtc/video/end_to_end_tests.cc

Issue 1886113003: Add rotation to EncodedImage and make sure it is passed through encoders. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: IOS Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 << "Timed out while waiting for the frame to render."; 259 << "Timed out while waiting for the frame to render.";
260 260
261 Stop(); 261 Stop();
262 262
263 sender_transport.StopSending(); 263 sender_transport.StopSending();
264 receiver_transport.StopSending(); 264 receiver_transport.StopSending();
265 265
266 DestroyStreams(); 266 DestroyStreams();
267 } 267 }
268 268
269 class CodecObserver : public test::EndToEndTest,
270 public rtc::VideoSinkInterface<VideoFrame> {
271 public:
272 CodecObserver(int no_frames_to_wait_for,
273 VideoRotation rotation_to_test,
274 const std::string& payload_name,
275 webrtc::VideoEncoder* encoder,
276 webrtc::VideoDecoder* decoder)
277 : EndToEndTest(2 * webrtc::EndToEndTest::kDefaultTimeoutMs),
278 no_frames_to_wait_for_(no_frames_to_wait_for),
279 expected_rotation_(rotation_to_test),
280 payload_name_(payload_name),
281 encoder_(encoder),
282 decoder_(decoder),
283 frame_counter_(0) {}
284
285 void PerformTest() override {
286 EXPECT_TRUE(Wait())
287 << "Timed out while waiting for enough frames to be decoded.";
288 }
289
290 void ModifyVideoConfigs(
291 VideoSendStream::Config* send_config,
292 std::vector<VideoReceiveStream::Config>* receive_configs,
293 VideoEncoderConfig* encoder_config) override {
294 send_config->encoder_settings.encoder = encoder_.get();
295 send_config->encoder_settings.payload_name = payload_name_;
296 send_config->encoder_settings.payload_type = 126;
297 encoder_config->streams[0].min_bitrate_bps = 50000;
298 encoder_config->streams[0].target_bitrate_bps =
299 encoder_config->streams[0].max_bitrate_bps = 2000000;
300
301 (*receive_configs)[0].renderer = this;
302 (*receive_configs)[0].decoders.resize(1);
303 (*receive_configs)[0].decoders[0].payload_type =
304 send_config->encoder_settings.payload_type;
305 (*receive_configs)[0].decoders[0].payload_name =
306 send_config->encoder_settings.payload_name;
307 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
308 }
309
310 void OnFrame(const VideoFrame& video_frame) override {
311 EXPECT_EQ(expected_rotation_, video_frame.rotation());
312 if (++frame_counter_ == no_frames_to_wait_for_)
313 observation_complete_.Set();
314 }
315
316 void OnFrameGeneratorCapturerCreated(
317 test::FrameGeneratorCapturer* frame_generator_capturer) override {
318 frame_generator_capturer->SetFakeRotation(expected_rotation_);
319 }
320
321 private:
322 int no_frames_to_wait_for_;
323 VideoRotation expected_rotation_;
324 std::string payload_name_;
325 std::unique_ptr<webrtc::VideoEncoder> encoder_;
326 std::unique_ptr<webrtc::VideoDecoder> decoder_;
327 int frame_counter_;
328 };
329
330 TEST_F(EndToEndTest, SendsAndReceivesVP8Rotation90) {
331 CodecObserver test(5, kVideoRotation_90, "VP8",
332 VideoEncoder::Create(VideoEncoder::kVp8),
333 VP8Decoder::Create());
334 RunBaseTest(&test);
335 }
336
269 TEST_F(EndToEndTest, SendsAndReceivesVP9) { 337 TEST_F(EndToEndTest, SendsAndReceivesVP9) {
270 class VP9Observer : public test::EndToEndTest, 338 CodecObserver test(500, kVideoRotation_0, "VP9",
271 public rtc::VideoSinkInterface<VideoFrame> { 339 VideoEncoder::Create(VideoEncoder::kVp9),
272 public: 340 VP9Decoder::Create());
273 VP9Observer() 341 RunBaseTest(&test);
274 : EndToEndTest(2 * kDefaultTimeoutMs), 342 }
275 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)),
276 decoder_(VP9Decoder::Create()),
277 frame_counter_(0) {}
278 343
279 void PerformTest() override { 344 TEST_F(EndToEndTest, SendsAndReceivesVP9VideoRotation90) {
280 EXPECT_TRUE(Wait()) 345 CodecObserver test(5, kVideoRotation_90, "VP9",
281 << "Timed out while waiting for enough frames to be decoded."; 346 VideoEncoder::Create(VideoEncoder::kVp9),
282 } 347 VP9Decoder::Create());
283
284 void ModifyVideoConfigs(
285 VideoSendStream::Config* send_config,
286 std::vector<VideoReceiveStream::Config>* receive_configs,
287 VideoEncoderConfig* encoder_config) override {
288 send_config->encoder_settings.encoder = encoder_.get();
289 send_config->encoder_settings.payload_name = "VP9";
290 send_config->encoder_settings.payload_type = 124;
291 encoder_config->streams[0].min_bitrate_bps = 50000;
292 encoder_config->streams[0].target_bitrate_bps =
293 encoder_config->streams[0].max_bitrate_bps = 2000000;
294
295 (*receive_configs)[0].renderer = this;
296 (*receive_configs)[0].decoders.resize(1);
297 (*receive_configs)[0].decoders[0].payload_type =
298 send_config->encoder_settings.payload_type;
299 (*receive_configs)[0].decoders[0].payload_name =
300 send_config->encoder_settings.payload_name;
301 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
302 }
303
304 void OnFrame(const VideoFrame& video_frame) override {
305 const int kRequiredFrames = 500;
306 if (++frame_counter_ == kRequiredFrames)
307 observation_complete_.Set();
308 }
309
310 private:
311 std::unique_ptr<webrtc::VideoEncoder> encoder_;
312 std::unique_ptr<webrtc::VideoDecoder> decoder_;
313 int frame_counter_;
314 } test;
315
316 RunBaseTest(&test); 348 RunBaseTest(&test);
317 } 349 }
318 350
319 #if defined(WEBRTC_END_TO_END_H264_TESTS) 351 #if defined(WEBRTC_END_TO_END_H264_TESTS)
320 352
321 TEST_F(EndToEndTest, SendsAndReceivesH264) { 353 TEST_F(EndToEndTest, SendsAndReceivesH264) {
322 class H264Observer : public test::EndToEndTest, 354 CodecObserver test(500, kVideoRotation_0, "H264",
323 public rtc::VideoSinkInterface<VideoFrame> { 355 VideoEncoder::Create(VideoEncoder::kH264),
324 public: 356 H264Decoder::Create());
325 H264Observer()
326 : EndToEndTest(2 * kDefaultTimeoutMs),
327 encoder_(VideoEncoder::Create(VideoEncoder::kH264)),
328 decoder_(H264Decoder::Create()),
329 frame_counter_(0) {}
330
331 void PerformTest() override {
332 EXPECT_TRUE(Wait())
333 << "Timed out while waiting for enough frames to be decoded.";
334 }
335
336 void ModifyVideoConfigs(
337 VideoSendStream::Config* send_config,
338 std::vector<VideoReceiveStream::Config>* receive_configs,
339 VideoEncoderConfig* encoder_config) override {
340 send_config->rtp.nack.rtp_history_ms =
341 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
342 send_config->encoder_settings.encoder = encoder_.get();
343 send_config->encoder_settings.payload_name = "H264";
344 send_config->encoder_settings.payload_type = 126;
345 encoder_config->streams[0].min_bitrate_bps = 50000;
346 encoder_config->streams[0].target_bitrate_bps =
347 encoder_config->streams[0].max_bitrate_bps = 2000000;
348
349 (*receive_configs)[0].renderer = this;
350 (*receive_configs)[0].decoders.resize(1);
351 (*receive_configs)[0].decoders[0].payload_type =
352 send_config->encoder_settings.payload_type;
353 (*receive_configs)[0].decoders[0].payload_name =
354 send_config->encoder_settings.payload_name;
355 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
356 }
357
358 void OnFrame(const VideoFrame& video_frame) override {
359 const int kRequiredFrames = 500;
360 if (++frame_counter_ == kRequiredFrames)
361 observation_complete_.Set();
362 }
363
364 private:
365 std::unique_ptr<webrtc::VideoEncoder> encoder_;
366 std::unique_ptr<webrtc::VideoDecoder> decoder_;
367 int frame_counter_;
368 } test;
369
370 RunBaseTest(&test); 357 RunBaseTest(&test);
371 } 358 }
372 359
360 TEST_F(EndToEndTest, SendsAndReceivesH264VideoRotation90) {
361 CodecObserver test(5, kVideoRotation_90, "H264",
362 VideoEncoder::Create(VideoEncoder::kH264),
363 H264Decoder::Create());
364 RunBaseTest(&test);
365 }
366
373 #endif // defined(WEBRTC_END_TO_END_H264_TESTS) 367 #endif // defined(WEBRTC_END_TO_END_H264_TESTS)
374 368
375 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 369 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
376 class SyncRtcpObserver : public test::EndToEndTest { 370 class SyncRtcpObserver : public test::EndToEndTest {
377 public: 371 public:
378 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 372 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
379 373
380 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 374 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
381 RTCPUtility::RTCPParserV2 parser(packet, length, true); 375 RTCPUtility::RTCPParserV2 parser(packet, length, true);
382 EXPECT_TRUE(parser.IsValid()); 376 EXPECT_TRUE(parser.IsValid());
(...skipping 3225 matching lines...) Expand 10 before | Expand all | Expand 10 after
3608 private: 3602 private:
3609 bool video_observed_; 3603 bool video_observed_;
3610 bool audio_observed_; 3604 bool audio_observed_;
3611 SequenceNumberUnwrapper unwrapper_; 3605 SequenceNumberUnwrapper unwrapper_;
3612 std::set<int64_t> received_packet_ids_; 3606 std::set<int64_t> received_packet_ids_;
3613 } test; 3607 } test;
3614 3608
3615 RunBaseTest(&test); 3609 RunBaseTest(&test);
3616 } 3610 }
3617 } // namespace webrtc 3611 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698