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

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: Rebase with master (and remove temporary debug prints) Created 4 years, 11 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>
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/source/byte_io.h" 23 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
25 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
25 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" 26 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
26 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 27 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
27 #include "webrtc/modules/video_coding/include/video_coding_defines.h" 28 #include "webrtc/modules/video_coding/include/video_coding_defines.h"
28 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 29 #include "webrtc/system_wrappers/include/critical_section_wrapper.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_audio_device.h" 35 #include "webrtc/test/fake_audio_device.h"
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 282
282 private: 283 private:
283 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; 284 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
284 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; 285 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
285 int frame_counter_; 286 int frame_counter_;
286 } test; 287 } test;
287 288
288 RunBaseTest(&test, FakeNetworkPipe::Config()); 289 RunBaseTest(&test, FakeNetworkPipe::Config());
289 } 290 }
290 291
292 #if defined(WEBRTC_THIRD_PARTY_H264)
293
291 TEST_F(EndToEndTest, SendsAndReceivesH264) { 294 TEST_F(EndToEndTest, SendsAndReceivesH264) {
292 class H264Observer : public test::EndToEndTest, public VideoRenderer { 295 class H264Observer : public test::EndToEndTest, public VideoRenderer {
293 public: 296 public:
294 H264Observer() 297 H264Observer()
295 : EndToEndTest(2 * kDefaultTimeoutMs), 298 : EndToEndTest(2 * kDefaultTimeoutMs),
296 fake_encoder_(Clock::GetRealTimeClock()), 299 encoder_(VideoEncoder::Create(VideoEncoder::kH264)),
300 decoder_(H264Decoder::Create()),
297 frame_counter_(0) {} 301 frame_counter_(0) {}
298 302
299 void PerformTest() override { 303 void PerformTest() override {
300 EXPECT_TRUE(Wait()) 304 EXPECT_TRUE(Wait())
301 << "Timed out while waiting for enough frames to be decoded."; 305 << "Timed out while waiting for enough frames to be decoded.";
302 } 306 }
303 307
304 void ModifyVideoConfigs( 308 void ModifyVideoConfigs(
305 VideoSendStream::Config* send_config, 309 VideoSendStream::Config* send_config,
306 std::vector<VideoReceiveStream::Config>* receive_configs, 310 std::vector<VideoReceiveStream::Config>* receive_configs,
307 VideoEncoderConfig* encoder_config) override { 311 VideoEncoderConfig* encoder_config) override {
308 send_config->rtp.nack.rtp_history_ms = 312 send_config->rtp.nack.rtp_history_ms =
309 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 313 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
310 send_config->encoder_settings.encoder = &fake_encoder_; 314 send_config->encoder_settings.encoder = encoder_.get();
311 send_config->encoder_settings.payload_name = "H264"; 315 send_config->encoder_settings.payload_name = "H264";
312 send_config->encoder_settings.payload_type = kFakeSendPayloadType; 316 send_config->encoder_settings.payload_type = 126;
313 encoder_config->streams[0].min_bitrate_bps = 50000; 317 encoder_config->streams[0].min_bitrate_bps = 50000;
314 encoder_config->streams[0].target_bitrate_bps = 318 encoder_config->streams[0].target_bitrate_bps =
315 encoder_config->streams[0].max_bitrate_bps = 2000000; 319 encoder_config->streams[0].max_bitrate_bps = 2000000;
316 320
317 (*receive_configs)[0].renderer = this; 321 (*receive_configs)[0].renderer = this;
318 (*receive_configs)[0].decoders.resize(1); 322 (*receive_configs)[0].decoders.resize(1);
319 (*receive_configs)[0].decoders[0].payload_type = 323 (*receive_configs)[0].decoders[0].payload_type =
320 send_config->encoder_settings.payload_type; 324 send_config->encoder_settings.payload_type;
321 (*receive_configs)[0].decoders[0].payload_name = 325 (*receive_configs)[0].decoders[0].payload_name =
322 send_config->encoder_settings.payload_name; 326 send_config->encoder_settings.payload_name;
323 (*receive_configs)[0].decoders[0].decoder = &fake_decoder_; 327 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
324 } 328 }
325 329
326 void RenderFrame(const VideoFrame& video_frame, 330 void RenderFrame(const VideoFrame& video_frame,
327 int time_to_render_ms) override { 331 int time_to_render_ms) override {
328 const int kRequiredFrames = 500; 332 const int kRequiredFrames = 500;
329 if (++frame_counter_ == kRequiredFrames) 333 if (++frame_counter_ == kRequiredFrames)
330 observation_complete_.Set(); 334 observation_complete_.Set();
331 } 335 }
332 336
333 bool IsTextureSupported() const override { return false; } 337 bool IsTextureSupported() const override { return false; }
334 338
335 private: 339 private:
336 test::FakeH264Decoder fake_decoder_; 340 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
337 test::FakeH264Encoder fake_encoder_; 341 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
338 int frame_counter_; 342 int frame_counter_;
339 } test; 343 } test;
340 344
341 RunBaseTest(&test, FakeNetworkPipe::Config()); 345 RunBaseTest(&test, FakeNetworkPipe::Config());
342 } 346 }
343 347
348 #endif // defined(WEBRTC_THIRD_PARTY_H264)
349
344 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 350 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
345 class SyncRtcpObserver : public test::EndToEndTest { 351 class SyncRtcpObserver : public test::EndToEndTest {
346 public: 352 public:
347 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 353 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
348 354
349 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 355 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
350 RTCPUtility::RTCPParserV2 parser(packet, length, true); 356 RTCPUtility::RTCPParserV2 parser(packet, length, true);
351 EXPECT_TRUE(parser.IsValid()); 357 EXPECT_TRUE(parser.IsValid());
352 uint32_t ssrc = 0; 358 uint32_t ssrc = 0;
353 ssrc |= static_cast<uint32_t>(packet[4]) << 24; 359 ssrc |= static_cast<uint32_t>(packet[4]) << 24;
(...skipping 2890 matching lines...) Expand 10 before | Expand all | Expand 10 after
3244 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3250 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3245 << "Enabling RTX requires rtpmap: rtx negotiation."; 3251 << "Enabling RTX requires rtpmap: rtx negotiation.";
3246 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3252 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3247 << "Enabling RTP extensions require negotiation."; 3253 << "Enabling RTP extensions require negotiation.";
3248 3254
3249 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3255 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3250 VerifyEmptyFecConfig(default_receive_config.rtp.fec); 3256 VerifyEmptyFecConfig(default_receive_config.rtp.fec);
3251 } 3257 }
3252 3258
3253 } // namespace webrtc 3259 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698