|  | /* | 
|  | *  Copyright (c) 2014 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. | 
|  | */ | 
|  | #ifndef WEBRTC_TEST_COMMON_CALL_TEST_H_ | 
|  | #define WEBRTC_TEST_COMMON_CALL_TEST_H_ | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "webrtc/call.h" | 
|  | #include "webrtc/system_wrappers/interface/scoped_vector.h" | 
|  | #include "webrtc/test/fake_decoder.h" | 
|  | #include "webrtc/test/fake_encoder.h" | 
|  | #include "webrtc/test/frame_generator_capturer.h" | 
|  | #include "webrtc/test/rtp_rtcp_observer.h" | 
|  |  | 
|  | namespace webrtc { | 
|  | namespace test { | 
|  |  | 
|  | class BaseTest; | 
|  |  | 
|  | class CallTest : public ::testing::Test { | 
|  | public: | 
|  | CallTest(); | 
|  | ~CallTest(); | 
|  |  | 
|  | static const size_t kNumSsrcs = 3; | 
|  |  | 
|  | static const unsigned int kDefaultTimeoutMs; | 
|  | static const unsigned int kLongTimeoutMs; | 
|  | static const uint8_t kSendPayloadType; | 
|  | static const uint8_t kSendRtxPayloadType; | 
|  | static const uint8_t kFakeSendPayloadType; | 
|  | static const uint8_t kRedPayloadType; | 
|  | static const uint8_t kRtxRedPayloadType; | 
|  | static const uint8_t kUlpfecPayloadType; | 
|  | static const uint32_t kSendRtxSsrcs[kNumSsrcs]; | 
|  | static const uint32_t kSendSsrcs[kNumSsrcs]; | 
|  | static const uint32_t kReceiverLocalSsrc; | 
|  | static const int kNackRtpHistoryMs; | 
|  | static const int kAbsSendTimeExtensionId; | 
|  |  | 
|  | protected: | 
|  | void RunBaseTest(BaseTest* test); | 
|  |  | 
|  | void CreateCalls(const Call::Config& sender_config, | 
|  | const Call::Config& receiver_config); | 
|  | void CreateSenderCall(const Call::Config& config); | 
|  | void CreateReceiverCall(const Call::Config& config); | 
|  |  | 
|  | void CreateSendConfig(size_t num_streams); | 
|  | void CreateMatchingReceiveConfigs(); | 
|  |  | 
|  | void CreateFrameGeneratorCapturer(); | 
|  |  | 
|  | void CreateStreams(); | 
|  | void Start(); | 
|  | void Stop(); | 
|  | void DestroyStreams(); | 
|  |  | 
|  | Clock* const clock_; | 
|  |  | 
|  | rtc::scoped_ptr<Call> sender_call_; | 
|  | VideoSendStream::Config send_config_; | 
|  | VideoEncoderConfig encoder_config_; | 
|  | VideoSendStream* send_stream_; | 
|  |  | 
|  | rtc::scoped_ptr<Call> receiver_call_; | 
|  | std::vector<VideoReceiveStream::Config> receive_configs_; | 
|  | std::vector<VideoReceiveStream*> receive_streams_; | 
|  |  | 
|  | rtc::scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer_; | 
|  | test::FakeEncoder fake_encoder_; | 
|  | ScopedVector<VideoDecoder> allocated_decoders_; | 
|  | }; | 
|  |  | 
|  | class BaseTest : public RtpRtcpObserver { | 
|  | public: | 
|  | explicit BaseTest(unsigned int timeout_ms); | 
|  | BaseTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config); | 
|  | virtual ~BaseTest(); | 
|  |  | 
|  | virtual void PerformTest() = 0; | 
|  | virtual bool ShouldCreateReceivers() const = 0; | 
|  |  | 
|  | virtual size_t GetNumStreams() const; | 
|  |  | 
|  | virtual Call::Config GetSenderCallConfig(); | 
|  | virtual Call::Config GetReceiverCallConfig(); | 
|  | virtual void OnCallsCreated(Call* sender_call, Call* receiver_call); | 
|  |  | 
|  | virtual void ModifyConfigs( | 
|  | VideoSendStream::Config* send_config, | 
|  | std::vector<VideoReceiveStream::Config>* receive_configs, | 
|  | VideoEncoderConfig* encoder_config); | 
|  | virtual void OnStreamsCreated( | 
|  | VideoSendStream* send_stream, | 
|  | const std::vector<VideoReceiveStream*>& receive_streams); | 
|  |  | 
|  | virtual void OnFrameGeneratorCapturerCreated( | 
|  | FrameGeneratorCapturer* frame_generator_capturer); | 
|  | }; | 
|  |  | 
|  | class SendTest : public BaseTest { | 
|  | public: | 
|  | explicit SendTest(unsigned int timeout_ms); | 
|  | SendTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config); | 
|  |  | 
|  | bool ShouldCreateReceivers() const override; | 
|  | }; | 
|  |  | 
|  | class EndToEndTest : public BaseTest { | 
|  | public: | 
|  | explicit EndToEndTest(unsigned int timeout_ms); | 
|  | EndToEndTest(unsigned int timeout_ms, const FakeNetworkPipe::Config& config); | 
|  |  | 
|  | bool ShouldCreateReceivers() const override; | 
|  | }; | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // WEBRTC_TEST_COMMON_CALL_TEST_H_ |