/* * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include #include #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/call.h" #include "webrtc/system_wrappers/interface/clock.h" #include "webrtc/system_wrappers/interface/scoped_ptr.h" #include "webrtc/test/direct_transport.h" #include "webrtc/test/flags.h" #include "webrtc/test/generate_ssrcs.h" #include "webrtc/test/run_loop.h" #include "webrtc/test/run_tests.h" #include "webrtc/test/video_capturer.h" #include "webrtc/test/video_renderer.h" #include "webrtc/typedefs.h" namespace webrtc { class LoopbackTest : public ::testing::Test { protected: std::map reserved_ssrcs_; }; TEST_F(LoopbackTest, Test) { scoped_ptr local_preview(test::VideoRenderer::Create( "Local Preview", test::flags::Width(), test::flags::Height())); scoped_ptr loopback_video(test::VideoRenderer::Create( "Loopback Video", test::flags::Width(), test::flags::Height())); test::DirectTransport transport; Call::Config call_config(&transport); call_config.overuse_detection = true; scoped_ptr call(Call::Create(call_config)); // Loopback, call sends to itself. transport.SetReceiver(call->Receiver()); VideoSendStream::Config send_config = call->GetDefaultSendConfig(); test::GenerateRandomSsrcs(&send_config, &reserved_ssrcs_); send_config.local_renderer = local_preview.get(); // TODO(pbos): static_cast shouldn't be required after mflodman refactors the // VideoCodec struct. send_config.codec.width = static_cast(test::flags::Width()); send_config.codec.height = static_cast(test::flags::Height()); send_config.codec.minBitrate = static_cast(test::flags::MinBitrate()); send_config.codec.startBitrate = static_cast(test::flags::StartBitrate()); send_config.codec.maxBitrate = static_cast(test::flags::MaxBitrate()); VideoSendStream* send_stream = call->CreateVideoSendStream(send_config); Clock* test_clock = Clock::GetRealTimeClock(); scoped_ptr camera( test::VideoCapturer::Create(send_stream->Input(), test::flags::Width(), test::flags::Height(), test::flags::Fps(), test_clock)); VideoReceiveStream::Config receive_config = call->GetDefaultReceiveConfig(); receive_config.rtp.ssrc = send_config.rtp.ssrcs[0]; receive_config.renderer = loopback_video.get(); VideoReceiveStream* receive_stream = call->CreateVideoReceiveStream(receive_config); receive_stream->StartReceiving(); send_stream->StartSending(); camera->Start(); test::PressEnterToContinue(); camera->Stop(); send_stream->StopSending(); receive_stream->StopReceiving(); call->DestroyVideoReceiveStream(receive_stream); call->DestroyVideoSendStream(send_stream); transport.StopSending(); } } // webrtc