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

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

Issue 1306813009: H.264 video codec support using OpenH264/FFmpeg (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: (Alphabetical sorting in common_video.gyp deps) Created 4 years, 10 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
« no previous file with comments | « webrtc/test/encoder_settings.cc ('k') | webrtc/video/video_quality_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
11 #include <map> 11 #include <map>
12 #include <sstream> 12 #include <sstream>
13 #include <string> 13 #include <string>
14 14
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 #include "webrtc/base/checks.h" 17 #include "webrtc/base/checks.h"
18 #include "webrtc/base/event.h" 18 #include "webrtc/base/event.h"
19 #include "webrtc/base/scoped_ptr.h" 19 #include "webrtc/base/scoped_ptr.h"
20 #include "webrtc/call.h" 20 #include "webrtc/call.h"
21 #include "webrtc/call/transport_adapter.h" 21 #include "webrtc/call/transport_adapter.h"
22 #include "webrtc/frame_callback.h" 22 #include "webrtc/frame_callback.h"
23 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" 23 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
24 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 24 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" 25 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
26 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
26 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" 27 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
27 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 28 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
28 #include "webrtc/modules/video_coding/include/video_coding_defines.h" 29 #include "webrtc/modules/video_coding/include/video_coding_defines.h"
29 #include "webrtc/system_wrappers/include/metrics.h" 30 #include "webrtc/system_wrappers/include/metrics.h"
30 #include "webrtc/system_wrappers/include/sleep.h" 31 #include "webrtc/system_wrappers/include/sleep.h"
31 #include "webrtc/test/call_test.h" 32 #include "webrtc/test/call_test.h"
32 #include "webrtc/test/direct_transport.h" 33 #include "webrtc/test/direct_transport.h"
33 #include "webrtc/test/encoder_settings.h" 34 #include "webrtc/test/encoder_settings.h"
34 #include "webrtc/test/fake_decoder.h" 35 #include "webrtc/test/fake_decoder.h"
35 #include "webrtc/test/fake_encoder.h" 36 #include "webrtc/test/fake_encoder.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 280
280 private: 281 private:
281 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; 282 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
282 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; 283 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
283 int frame_counter_; 284 int frame_counter_;
284 } test; 285 } test;
285 286
286 RunBaseTest(&test); 287 RunBaseTest(&test);
287 } 288 }
288 289
290 #if defined(WEBRTC_END_TO_END_H264_TESTS)
291
289 TEST_F(EndToEndTest, SendsAndReceivesH264) { 292 TEST_F(EndToEndTest, SendsAndReceivesH264) {
290 class H264Observer : public test::EndToEndTest, public VideoRenderer { 293 class H264Observer : public test::EndToEndTest, public VideoRenderer {
291 public: 294 public:
292 H264Observer() 295 H264Observer()
293 : EndToEndTest(2 * kDefaultTimeoutMs), 296 : EndToEndTest(2 * kDefaultTimeoutMs),
294 fake_encoder_(Clock::GetRealTimeClock()), 297 encoder_(VideoEncoder::Create(VideoEncoder::kH264)),
298 decoder_(H264Decoder::Create()),
295 frame_counter_(0) {} 299 frame_counter_(0) {}
296 300
297 void PerformTest() override { 301 void PerformTest() override {
298 EXPECT_TRUE(Wait()) 302 EXPECT_TRUE(Wait())
299 << "Timed out while waiting for enough frames to be decoded."; 303 << "Timed out while waiting for enough frames to be decoded.";
300 } 304 }
301 305
302 void ModifyVideoConfigs( 306 void ModifyVideoConfigs(
303 VideoSendStream::Config* send_config, 307 VideoSendStream::Config* send_config,
304 std::vector<VideoReceiveStream::Config>* receive_configs, 308 std::vector<VideoReceiveStream::Config>* receive_configs,
305 VideoEncoderConfig* encoder_config) override { 309 VideoEncoderConfig* encoder_config) override {
306 send_config->rtp.nack.rtp_history_ms = 310 send_config->rtp.nack.rtp_history_ms =
307 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 311 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
308 send_config->encoder_settings.encoder = &fake_encoder_; 312 send_config->encoder_settings.encoder = encoder_.get();
309 send_config->encoder_settings.payload_name = "H264"; 313 send_config->encoder_settings.payload_name = "H264";
310 send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType; 314 send_config->encoder_settings.payload_type = 126;
311 encoder_config->streams[0].min_bitrate_bps = 50000; 315 encoder_config->streams[0].min_bitrate_bps = 50000;
312 encoder_config->streams[0].target_bitrate_bps = 316 encoder_config->streams[0].target_bitrate_bps =
313 encoder_config->streams[0].max_bitrate_bps = 2000000; 317 encoder_config->streams[0].max_bitrate_bps = 2000000;
314 318
315 (*receive_configs)[0].renderer = this; 319 (*receive_configs)[0].renderer = this;
316 (*receive_configs)[0].decoders.resize(1); 320 (*receive_configs)[0].decoders.resize(1);
317 (*receive_configs)[0].decoders[0].payload_type = 321 (*receive_configs)[0].decoders[0].payload_type =
318 send_config->encoder_settings.payload_type; 322 send_config->encoder_settings.payload_type;
319 (*receive_configs)[0].decoders[0].payload_name = 323 (*receive_configs)[0].decoders[0].payload_name =
320 send_config->encoder_settings.payload_name; 324 send_config->encoder_settings.payload_name;
321 (*receive_configs)[0].decoders[0].decoder = &fake_decoder_; 325 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
322 } 326 }
323 327
324 void RenderFrame(const VideoFrame& video_frame, 328 void RenderFrame(const VideoFrame& video_frame,
325 int time_to_render_ms) override { 329 int time_to_render_ms) override {
326 const int kRequiredFrames = 500; 330 const int kRequiredFrames = 500;
327 if (++frame_counter_ == kRequiredFrames) 331 if (++frame_counter_ == kRequiredFrames)
328 observation_complete_.Set(); 332 observation_complete_.Set();
329 } 333 }
330 334
331 bool IsTextureSupported() const override { return false; } 335 bool IsTextureSupported() const override { return false; }
332 336
333 private: 337 private:
334 test::FakeH264Decoder fake_decoder_; 338 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
335 test::FakeH264Encoder fake_encoder_; 339 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
336 int frame_counter_; 340 int frame_counter_;
337 } test; 341 } test;
338 342
339 RunBaseTest(&test); 343 RunBaseTest(&test);
340 } 344 }
341 345
346 #endif // defined(WEBRTC_END_TO_END_H264_TESTS)
347
342 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 348 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
343 class SyncRtcpObserver : public test::EndToEndTest { 349 class SyncRtcpObserver : public test::EndToEndTest {
344 public: 350 public:
345 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 351 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
346 352
347 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 353 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
348 RTCPUtility::RTCPParserV2 parser(packet, length, true); 354 RTCPUtility::RTCPParserV2 parser(packet, length, true);
349 EXPECT_TRUE(parser.IsValid()); 355 EXPECT_TRUE(parser.IsValid());
350 uint32_t ssrc = 0; 356 uint32_t ssrc = 0;
351 ssrc |= static_cast<uint32_t>(packet[4]) << 24; 357 ssrc |= static_cast<uint32_t>(packet[4]) << 24;
(...skipping 3141 matching lines...) Expand 10 before | Expand all | Expand 10 after
3493 private: 3499 private:
3494 bool video_observed_; 3500 bool video_observed_;
3495 bool audio_observed_; 3501 bool audio_observed_;
3496 SequenceNumberUnwrapper unwrapper_; 3502 SequenceNumberUnwrapper unwrapper_;
3497 std::set<int64_t> received_packet_ids_; 3503 std::set<int64_t> received_packet_ids_;
3498 } test; 3504 } test;
3499 3505
3500 RunBaseTest(&test); 3506 RunBaseTest(&test);
3501 } 3507 }
3502 } // namespace webrtc 3508 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/test/encoder_settings.cc ('k') | webrtc/video/video_quality_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698