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

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: Misc (WebRtcVideoChannel2::...::ConfigureVideoEncoderSettings care about H264 case) Created 5 years, 3 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/scoped_ptr.h" 18 #include "webrtc/base/scoped_ptr.h"
19 #include "webrtc/call.h" 19 #include "webrtc/call.h"
20 #include "webrtc/frame_callback.h" 20 #include "webrtc/frame_callback.h"
21 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" 21 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
22 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
22 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" 23 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
23 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 24 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
24 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 25 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
25 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 26 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
26 #include "webrtc/system_wrappers/interface/event_wrapper.h" 27 #include "webrtc/system_wrappers/interface/event_wrapper.h"
27 #include "webrtc/system_wrappers/interface/metrics.h" 28 #include "webrtc/system_wrappers/interface/metrics.h"
28 #include "webrtc/system_wrappers/interface/sleep.h" 29 #include "webrtc/system_wrappers/interface/sleep.h"
29 #include "webrtc/test/call_test.h" 30 #include "webrtc/test/call_test.h"
30 #include "webrtc/test/direct_transport.h" 31 #include "webrtc/test/direct_transport.h"
31 #include "webrtc/test/encoder_settings.h" 32 #include "webrtc/test/encoder_settings.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 274
274 private: 275 private:
275 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; 276 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
276 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; 277 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
277 int frame_counter_; 278 int frame_counter_;
278 } test; 279 } test;
279 280
280 RunBaseTest(&test); 281 RunBaseTest(&test);
281 } 282 }
282 283
284 #if defined(WEBRTC_OPENH264)
285
283 TEST_F(EndToEndTest, SendsAndReceivesH264) { 286 TEST_F(EndToEndTest, SendsAndReceivesH264) {
284 class H264Observer : public test::EndToEndTest, public VideoRenderer { 287 class H264Observer : public test::EndToEndTest, public VideoRenderer {
285 public: 288 public:
286 H264Observer() 289 H264Observer()
287 : EndToEndTest(2 * kDefaultTimeoutMs), 290 : EndToEndTest(2 * kDefaultTimeoutMs),
288 fake_encoder_(Clock::GetRealTimeClock()), 291 encoder_(VideoEncoder::Create(VideoEncoder::kH264)),
292 decoder_(H264Decoder::Create()),
289 frame_counter_(0) {} 293 frame_counter_(0) {}
290 294
291 void PerformTest() override { 295 void PerformTest() override {
292 EXPECT_EQ(kEventSignaled, Wait()) 296 EXPECT_EQ(kEventSignaled, Wait())
293 << "Timed out while waiting for enough frames to be decoded."; 297 << "Timed out while waiting for enough frames to be decoded.";
294 } 298 }
295 299
296 void ModifyConfigs(VideoSendStream::Config* send_config, 300 void ModifyConfigs(VideoSendStream::Config* send_config,
297 std::vector<VideoReceiveStream::Config>* receive_configs, 301 std::vector<VideoReceiveStream::Config>* receive_configs,
298 VideoEncoderConfig* encoder_config) override { 302 VideoEncoderConfig* encoder_config) override {
299 send_config->rtp.nack.rtp_history_ms = 303 send_config->encoder_settings.encoder = encoder_.get();
300 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
stefan-webrtc 2015/09/28 11:19:02 I think you still want NACK to be enabled.
hbos 2015/09/30 15:35:19 Done.
301 send_config->encoder_settings.encoder = &fake_encoder_;
302 send_config->encoder_settings.payload_name = "H264"; 304 send_config->encoder_settings.payload_name = "H264";
303 send_config->encoder_settings.payload_type = kFakeSendPayloadType; 305 send_config->encoder_settings.payload_type = 120;
304 encoder_config->streams[0].min_bitrate_bps = 50000; 306 encoder_config->streams[0].min_bitrate_bps = 50000;
305 encoder_config->streams[0].target_bitrate_bps = 307 encoder_config->streams[0].target_bitrate_bps =
306 encoder_config->streams[0].max_bitrate_bps = 2000000; 308 encoder_config->streams[0].max_bitrate_bps = 2000000;
307 309
308 (*receive_configs)[0].renderer = this; 310 (*receive_configs)[0].renderer = this;
309 (*receive_configs)[0].decoders.resize(1); 311 (*receive_configs)[0].decoders.resize(1);
310 (*receive_configs)[0].decoders[0].payload_type = 312 (*receive_configs)[0].decoders[0].payload_type =
311 send_config->encoder_settings.payload_type; 313 send_config->encoder_settings.payload_type;
312 (*receive_configs)[0].decoders[0].payload_name = 314 (*receive_configs)[0].decoders[0].payload_name =
313 send_config->encoder_settings.payload_name; 315 send_config->encoder_settings.payload_name;
314 (*receive_configs)[0].decoders[0].decoder = &fake_decoder_; 316 (*receive_configs)[0].decoders[0].decoder = decoder_.get();
315 } 317 }
316 318
317 void RenderFrame(const VideoFrame& video_frame, 319 void RenderFrame(const VideoFrame& video_frame,
318 int time_to_render_ms) override { 320 int time_to_render_ms) override {
319 const int kRequiredFrames = 500; 321 const int kRequiredFrames = 500;
320 if (++frame_counter_ == kRequiredFrames) 322 if (++frame_counter_ == kRequiredFrames)
321 observation_complete_->Set(); 323 observation_complete_->Set();
322 } 324 }
323 325
324 bool IsTextureSupported() const override { return false; } 326 bool IsTextureSupported() const override { return false; }
325 327
326 private: 328 private:
327 test::FakeH264Decoder fake_decoder_; 329 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
328 test::FakeH264Encoder fake_encoder_; 330 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
329 int frame_counter_; 331 int frame_counter_;
330 } test; 332 } test;
331 333
332 RunBaseTest(&test); 334 RunBaseTest(&test);
333 } 335 }
334 336
337 #endif // defined(WEBRTC_OPENH264)
338
335 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 339 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
336 class SyncRtcpObserver : public test::EndToEndTest { 340 class SyncRtcpObserver : public test::EndToEndTest {
337 public: 341 public:
338 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 342 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
339 343
340 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 344 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
341 RTCPUtility::RTCPParserV2 parser(packet, length, true); 345 RTCPUtility::RTCPParserV2 parser(packet, length, true);
342 EXPECT_TRUE(parser.IsValid()); 346 EXPECT_TRUE(parser.IsValid());
343 uint32_t ssrc = 0; 347 uint32_t ssrc = 0;
344 ssrc |= static_cast<uint32_t>(packet[4]) << 24; 348 ssrc |= static_cast<uint32_t>(packet[4]) << 24;
(...skipping 2702 matching lines...) Expand 10 before | Expand all | Expand 10 after
3047 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3051 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3048 << "Enabling RTX requires rtpmap: rtx negotiation."; 3052 << "Enabling RTX requires rtpmap: rtx negotiation.";
3049 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3053 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3050 << "Enabling RTP extensions require negotiation."; 3054 << "Enabling RTP extensions require negotiation.";
3051 3055
3052 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3056 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3053 VerifyEmptyFecConfig(default_receive_config.rtp.fec); 3057 VerifyEmptyFecConfig(default_receive_config.rtp.fec);
3054 } 3058 }
3055 3059
3056 } // namespace webrtc 3060 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698