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

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2_unittest.cc

Issue 1711763003: New flag is_screencast in VideoOptions. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix use-after-free of FakeVideoSendStream. 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 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 10
(...skipping 1447 matching lines...) Expand 10 before | Expand all | Expand 10 after
1458 cricket::VideoCodec codec = kVp8Codec360p; 1458 cricket::VideoCodec codec = kVp8Codec360p;
1459 cricket::VideoSendParameters parameters; 1459 cricket::VideoSendParameters parameters;
1460 parameters.codecs.push_back(codec); 1460 parameters.codecs.push_back(codec);
1461 parameters.options.screencast_min_bitrate_kbps = 1461 parameters.options.screencast_min_bitrate_kbps =
1462 rtc::Optional<int>(kScreenshareMinBitrateKbps); 1462 rtc::Optional<int>(kScreenshareMinBitrateKbps);
1463 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1463 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1464 1464
1465 AddSendStream(); 1465 AddSendStream();
1466 1466
1467 cricket::FakeVideoCapturer capturer; 1467 cricket::FakeVideoCapturer capturer;
1468 capturer.SetScreencast(false);
1469 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1468 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1470 cricket::VideoFormat capture_format_hd = 1469 cricket::VideoFormat capture_format_hd =
1471 capturer.GetSupportedFormats()->front(); 1470 capturer.GetSupportedFormats()->front();
1472 EXPECT_EQ(1280, capture_format_hd.width); 1471 EXPECT_EQ(1280, capture_format_hd.width);
1473 EXPECT_EQ(720, capture_format_hd.height); 1472 EXPECT_EQ(720, capture_format_hd.height);
1474 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1473 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1475 1474
1476 EXPECT_TRUE(channel_->SetSend(true)); 1475 EXPECT_TRUE(channel_->SetSend(true));
1477 1476
1478 EXPECT_TRUE(capturer.CaptureFrame()); 1477 EXPECT_TRUE(capturer.CaptureFrame());
1479 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1478 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1480 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1479 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1481 1480
1482 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 1481 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1483 1482
1484 // Verify non-screencast settings. 1483 // Verify non-screencast settings.
1485 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig(); 1484 webrtc::VideoEncoderConfig encoder_config = send_stream->GetEncoderConfig();
1486 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo, 1485 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kRealtimeVideo,
1487 encoder_config.content_type); 1486 encoder_config.content_type);
1488 EXPECT_EQ(codec.width, encoder_config.streams.front().width); 1487 EXPECT_EQ(codec.width, encoder_config.streams.front().width);
1489 EXPECT_EQ(codec.height, encoder_config.streams.front().height); 1488 EXPECT_EQ(codec.height, encoder_config.streams.front().height);
1490 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps) 1489 EXPECT_EQ(0, encoder_config.min_transmit_bitrate_bps)
1491 << "Non-screenshare shouldn't use min-transmit bitrate."; 1490 << "Non-screenshare shouldn't use min-transmit bitrate.";
1492 1491
1493 capturer.SetScreencast(true); 1492 FakeVideoCapturer screencast_capturer(true);
1494 EXPECT_TRUE(capturer.CaptureFrame()); 1493 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &screencast_capturer));
1494 EXPECT_EQ(cricket::CS_RUNNING, screencast_capturer.Start(capture_format_hd));
1495 parameters.options.is_screencast = rtc::Optional<bool>(true);
1496 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1495 1497
1496 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 1498 // Send stream recreated after parameter change.
1499 send_stream = fake_call_->GetVideoSendStreams().front();
1500 EXPECT_EQ(0, send_stream->GetNumberOfSwappedFrames());
1501
1502 EXPECT_TRUE(screencast_capturer.CaptureFrame());
1503
1504 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1497 1505
1498 // Verify screencast settings. 1506 // Verify screencast settings.
1499 encoder_config = send_stream->GetEncoderConfig(); 1507 encoder_config = send_stream->GetEncoderConfig();
1500 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen, 1508 EXPECT_EQ(webrtc::VideoEncoderConfig::ContentType::kScreen,
1501 encoder_config.content_type); 1509 encoder_config.content_type);
1502 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000, 1510 EXPECT_EQ(kScreenshareMinBitrateKbps * 1000,
1503 encoder_config.min_transmit_bitrate_bps); 1511 encoder_config.min_transmit_bitrate_bps);
1504 1512
1505 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width); 1513 EXPECT_EQ(capture_format_hd.width, encoder_config.streams.front().width);
1506 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height); 1514 EXPECT_EQ(capture_format_hd.height, encoder_config.streams.front().height);
1507 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty()); 1515 EXPECT_TRUE(encoder_config.streams[0].temporal_layer_thresholds_bps.empty());
1508 1516
1509 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL)); 1517 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
1510 } 1518 }
1511 1519
1512 TEST_F(WebRtcVideoChannel2Test, 1520 TEST_F(WebRtcVideoChannel2Test,
1513 ConferenceModeScreencastConfiguresTemporalLayer) { 1521 ConferenceModeScreencastConfiguresTemporalLayer) {
1514 static const int kConferenceScreencastTemporalBitrateBps = 1522 static const int kConferenceScreencastTemporalBitrateBps =
1515 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000; 1523 ScreenshareLayerConfig::GetDefault().tl0_bitrate_kbps * 1000;
1516 send_parameters_.conference_mode = true; 1524 send_parameters_.conference_mode = true;
1525 send_parameters_.options.is_screencast = rtc::Optional<bool>(true);
1517 channel_->SetSendParameters(send_parameters_); 1526 channel_->SetSendParameters(send_parameters_);
1518 1527
1519 AddSendStream(); 1528 AddSendStream();
1520 1529
1521 cricket::FakeVideoCapturer capturer; 1530 cricket::FakeVideoCapturer capturer(true);
1522 capturer.SetScreencast(true);
1523 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1531 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1524 cricket::VideoFormat capture_format_hd = 1532 cricket::VideoFormat capture_format_hd =
1525 capturer.GetSupportedFormats()->front(); 1533 capturer.GetSupportedFormats()->front();
1526 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd)); 1534 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format_hd));
1527 1535
1528 EXPECT_TRUE(channel_->SetSend(true)); 1536 EXPECT_TRUE(channel_->SetSend(true));
1529 1537
1530 EXPECT_TRUE(capturer.CaptureFrame()); 1538 EXPECT_TRUE(capturer.CaptureFrame());
1531 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1539 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1532 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1540 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1576 TEST_F(WebRtcVideoChannel2Test, VerifyVp8SpecificSettings) { 1584 TEST_F(WebRtcVideoChannel2Test, VerifyVp8SpecificSettings) {
1577 cricket::VideoSendParameters parameters; 1585 cricket::VideoSendParameters parameters;
1578 parameters.codecs.push_back(kVp8Codec720p); 1586 parameters.codecs.push_back(kVp8Codec720p);
1579 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1587 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1580 1588
1581 // Single-stream settings should apply with RTX as well (verifies that we 1589 // Single-stream settings should apply with RTX as well (verifies that we
1582 // check number of regular SSRCs and not StreamParams::ssrcs which contains 1590 // check number of regular SSRCs and not StreamParams::ssrcs which contains
1583 // both RTX and regular SSRCs). 1591 // both RTX and regular SSRCs).
1584 FakeVideoSendStream* stream = SetUpSimulcast(false, true); 1592 FakeVideoSendStream* stream = SetUpSimulcast(false, true);
1585 1593
1586 cricket::FakeVideoCapturer capturer; 1594 cricket::FakeVideoCapturer capturer(false);
1587 capturer.SetScreencast(false);
1588 EXPECT_EQ(cricket::CS_RUNNING, 1595 EXPECT_EQ(cricket::CS_RUNNING,
1589 capturer.Start(capturer.GetSupportedFormats()->front())); 1596 capturer.Start(capturer.GetSupportedFormats()->front()));
1590 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1597 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1591 channel_->SetSend(true); 1598 channel_->SetSend(true);
1592 1599
1593 EXPECT_TRUE(capturer.CaptureFrame()); 1600 EXPECT_TRUE(capturer.CaptureFrame());
1594 1601
1595 webrtc::VideoCodecVP8 vp8_settings; 1602 webrtc::VideoCodecVP8 vp8_settings;
1596 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1603 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1597 EXPECT_TRUE(vp8_settings.denoisingOn) 1604 EXPECT_TRUE(vp8_settings.denoisingOn)
(...skipping 19 matching lines...) Expand all
1617 channel_->SetSend(true); 1624 channel_->SetSend(true);
1618 EXPECT_TRUE(capturer.CaptureFrame()); 1625 EXPECT_TRUE(capturer.CaptureFrame());
1619 1626
1620 EXPECT_EQ(3, stream->GetVideoStreams().size()); 1627 EXPECT_EQ(3, stream->GetVideoStreams().size());
1621 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1628 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1622 // Autmatic resize off when using simulcast. 1629 // Autmatic resize off when using simulcast.
1623 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1630 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1624 EXPECT_TRUE(vp8_settings.frameDroppingOn); 1631 EXPECT_TRUE(vp8_settings.frameDroppingOn);
1625 1632
1626 // In screen-share mode, denoising is forced off and simulcast disabled. 1633 // In screen-share mode, denoising is forced off and simulcast disabled.
1627 capturer.SetScreencast(true); 1634 FakeVideoCapturer screencast_capturer(true);
1628 EXPECT_TRUE(capturer.CaptureFrame()); 1635 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &screencast_capturer));
1636 EXPECT_EQ(cricket::CS_RUNNING, screencast_capturer.Start(
1637 screencast_capturer.GetSupportedFormats()->front()));
1638 parameters.options.is_screencast = rtc::Optional<bool>(true);
1639 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1640
1641 EXPECT_TRUE(screencast_capturer.CaptureFrame());
1629 stream = SetDenoisingOption(parameters, false); 1642 stream = SetDenoisingOption(parameters, false);
1630 1643
1631 EXPECT_EQ(1, stream->GetVideoStreams().size()); 1644 EXPECT_EQ(1, stream->GetVideoStreams().size());
1632 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set."; 1645 ASSERT_TRUE(stream->GetVp8Settings(&vp8_settings)) << "No VP8 config set.";
1633 EXPECT_FALSE(vp8_settings.denoisingOn); 1646 EXPECT_FALSE(vp8_settings.denoisingOn);
1634 // Resizing and frame dropping always off for screen sharing. 1647 // Resizing and frame dropping always off for screen sharing.
1635 EXPECT_FALSE(vp8_settings.automaticResizeOn); 1648 EXPECT_FALSE(vp8_settings.automaticResizeOn);
1636 EXPECT_FALSE(vp8_settings.frameDroppingOn); 1649 EXPECT_FALSE(vp8_settings.frameDroppingOn);
1637 1650
1638 stream = SetDenoisingOption(parameters, true); 1651 stream = SetDenoisingOption(parameters, true);
(...skipping 29 matching lines...) Expand all
1668 cricket::FakeWebRtcVideoEncoderFactory encoder_factory_; 1681 cricket::FakeWebRtcVideoEncoderFactory encoder_factory_;
1669 }; 1682 };
1670 1683
1671 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) { 1684 TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) {
1672 cricket::VideoSendParameters parameters; 1685 cricket::VideoSendParameters parameters;
1673 parameters.codecs.push_back(kVp9Codec); 1686 parameters.codecs.push_back(kVp9Codec);
1674 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 1687 ASSERT_TRUE(channel_->SetSendParameters(parameters));
1675 1688
1676 FakeVideoSendStream* stream = SetUpSimulcast(false, false); 1689 FakeVideoSendStream* stream = SetUpSimulcast(false, false);
1677 1690
1678 cricket::FakeVideoCapturer capturer; 1691 cricket::FakeVideoCapturer capturer(false);
1679 capturer.SetScreencast(false);
1680 EXPECT_EQ(cricket::CS_RUNNING, 1692 EXPECT_EQ(cricket::CS_RUNNING,
1681 capturer.Start(capturer.GetSupportedFormats()->front())); 1693 capturer.Start(capturer.GetSupportedFormats()->front()));
1682 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1694 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1683 channel_->SetSend(true); 1695 channel_->SetSend(true);
1684 1696
1685 EXPECT_TRUE(capturer.CaptureFrame()); 1697 EXPECT_TRUE(capturer.CaptureFrame());
1686 1698
1687 webrtc::VideoCodecVP9 vp9_settings; 1699 webrtc::VideoCodecVP9 vp9_settings;
1688 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1700 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1689 EXPECT_FALSE(vp9_settings.denoisingOn) 1701 EXPECT_FALSE(vp9_settings.denoisingOn)
1690 << "VP9 denoising should be off by default."; 1702 << "VP9 denoising should be off by default.";
1691 1703
1692 stream = SetDenoisingOption(parameters, false); 1704 stream = SetDenoisingOption(parameters, false);
1693 1705
1694 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1706 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1695 EXPECT_FALSE(vp9_settings.denoisingOn); 1707 EXPECT_FALSE(vp9_settings.denoisingOn);
1696 // Frame dropping always on for real time video. 1708 // Frame dropping always on for real time video.
1697 EXPECT_TRUE(vp9_settings.frameDroppingOn); 1709 EXPECT_TRUE(vp9_settings.frameDroppingOn);
1698 1710
1699 stream = SetDenoisingOption(parameters, true); 1711 stream = SetDenoisingOption(parameters, true);
1700 1712
1701 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1713 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1702 EXPECT_TRUE(vp9_settings.denoisingOn); 1714 EXPECT_TRUE(vp9_settings.denoisingOn);
1703 EXPECT_TRUE(vp9_settings.frameDroppingOn); 1715 EXPECT_TRUE(vp9_settings.frameDroppingOn);
1704 1716
1705 // In screen-share mode, denoising is forced off. 1717 // In screen-share mode, denoising is forced off.
1706 capturer.SetScreencast(true); 1718 FakeVideoCapturer screencast_capturer(true);
1707 EXPECT_TRUE(capturer.CaptureFrame()); 1719 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &screencast_capturer));
1720 EXPECT_EQ(cricket::CS_RUNNING, screencast_capturer.Start(
1721 screencast_capturer.GetSupportedFormats()->front()));
1722 parameters.options.is_screencast = rtc::Optional<bool>(true);
1723 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1724
1725 EXPECT_TRUE(screencast_capturer.CaptureFrame());
1708 stream = SetDenoisingOption(parameters, false); 1726 stream = SetDenoisingOption(parameters, false);
1709 1727
1710 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1728 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
1711 EXPECT_FALSE(vp9_settings.denoisingOn); 1729 EXPECT_FALSE(vp9_settings.denoisingOn);
1712 // Frame dropping always off for screen sharing. 1730 // Frame dropping always off for screen sharing.
1713 EXPECT_FALSE(vp9_settings.frameDroppingOn); 1731 EXPECT_FALSE(vp9_settings.frameDroppingOn);
1714 1732
1715 stream = SetDenoisingOption(parameters, false); 1733 stream = SetDenoisingOption(parameters, false);
1716 1734
1717 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set."; 1735 ASSERT_TRUE(stream->GetVp9Settings(&vp9_settings)) << "No VP9 config set.";
(...skipping 25 matching lines...) Expand all
1743 if (!enable_overuse) { 1761 if (!enable_overuse) {
1744 media_config.enable_cpu_overuse_detection = false; 1762 media_config.enable_cpu_overuse_detection = false;
1745 } 1763 }
1746 channel_.reset( 1764 channel_.reset(
1747 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 1765 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
1748 1766
1749 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 1767 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1750 1768
1751 AddSendStream(); 1769 AddSendStream();
1752 1770
1753 cricket::FakeVideoCapturer capturer; 1771 cricket::FakeVideoCapturer capturer(is_screenshare);
1754 capturer.SetScreencast(is_screenshare);
1755 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer)); 1772 EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, &capturer));
1756 EXPECT_EQ(cricket::CS_RUNNING, 1773 EXPECT_EQ(cricket::CS_RUNNING,
1757 capturer.Start(capturer.GetSupportedFormats()->front())); 1774 capturer.Start(capturer.GetSupportedFormats()->front()));
1758 1775
1759 EXPECT_TRUE(channel_->SetSend(true)); 1776 EXPECT_TRUE(channel_->SetSend(true));
1760 1777
1761 // Trigger overuse. 1778 // Trigger overuse.
1762 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1779 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1763 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1780 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1764 webrtc::LoadObserver* overuse_callback = 1781 webrtc::LoadObserver* overuse_callback =
(...skipping 1313 matching lines...) Expand 10 before | Expand all | Expand 10 after
3078 // Test that we normalize send codec format size in simulcast. 3095 // Test that we normalize send codec format size in simulcast.
3079 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3096 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3080 cricket::VideoCodec codec(kVp8Codec270p); 3097 cricket::VideoCodec codec(kVp8Codec270p);
3081 codec.width += 1; 3098 codec.width += 1;
3082 codec.height += 1; 3099 codec.height += 1;
3083 VerifySimulcastSettings(codec, 2, 2); 3100 VerifySimulcastSettings(codec, 2, 2);
3084 } 3101 }
3085 } // namespace cricket 3102 } // namespace cricket
3086 3103
3087 #endif // HAVE_WEBRTC_VIDEO 3104 #endif // HAVE_WEBRTC_VIDEO
OLDNEW
« webrtc/media/engine/webrtcvideoengine2.cc ('K') | « webrtc/media/engine/webrtcvideoengine2.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698