/* * libjingle * Copyright 2014 Google Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef TALK_MEDIA_WEBRTC_WEBRTCVIDEOENGINE2_UNITTEST_H_ #define TALK_MEDIA_WEBRTC_WEBRTCVIDEOENGINE2_UNITTEST_H_ #include #include #include "webrtc/call.h" #include "webrtc/video_receive_stream.h" #include "webrtc/video_send_stream.h" namespace cricket { class FakeVideoSendStream : public webrtc::VideoSendStream { public: FakeVideoSendStream(const webrtc::VideoSendStream::Config& config, const std::vector& video_streams, const void* encoder_settings); webrtc::VideoSendStream::Config GetConfig(); std::vector GetVideoStreams(); bool IsSending() const; bool GetVp8Settings(webrtc::VideoCodecVP8* settings) const; private: virtual webrtc::VideoSendStream::Stats GetStats() const OVERRIDE; virtual bool ReconfigureVideoEncoder( const std::vector& streams, const void* encoder_specific); virtual webrtc::VideoSendStreamInput* Input() OVERRIDE; virtual void Start() OVERRIDE; virtual void Stop() OVERRIDE; bool sending_; webrtc::VideoSendStream::Config config_; std::vector video_streams_; bool codec_settings_set_; webrtc::VideoCodecVP8 vp8_settings_; }; class FakeVideoReceiveStream : public webrtc::VideoReceiveStream { public: explicit FakeVideoReceiveStream( const webrtc::VideoReceiveStream::Config& config); webrtc::VideoReceiveStream::Config GetConfig(); bool IsReceiving() const; private: virtual webrtc::VideoReceiveStream::Stats GetStats() const OVERRIDE; virtual void Start() OVERRIDE; virtual void Stop() OVERRIDE; virtual void GetCurrentReceiveCodec(webrtc::VideoCodec* codec); webrtc::VideoReceiveStream::Config config_; bool receiving_; }; class FakeCall : public webrtc::Call { public: FakeCall(); ~FakeCall(); void SetVideoCodecs(const std::vector codecs); std::vector GetVideoSendStreams(); std::vector GetVideoReceiveStreams(); webrtc::VideoCodec GetEmptyVideoCodec(); webrtc::VideoCodec GetVideoCodecVp8(); webrtc::VideoCodec GetVideoCodecVp9(); std::vector GetDefaultVideoCodecs(); private: virtual webrtc::VideoSendStream* CreateVideoSendStream( const webrtc::VideoSendStream::Config& config, const std::vector& video_streams, const void* encoder_settings) OVERRIDE; virtual void DestroyVideoSendStream( webrtc::VideoSendStream* send_stream) OVERRIDE; virtual webrtc::VideoReceiveStream* CreateVideoReceiveStream( const webrtc::VideoReceiveStream::Config& config) OVERRIDE; virtual void DestroyVideoReceiveStream( webrtc::VideoReceiveStream* receive_stream) OVERRIDE; virtual webrtc::PacketReceiver* Receiver() OVERRIDE; virtual uint32_t SendBitrateEstimate() OVERRIDE; virtual uint32_t ReceiveBitrateEstimate() OVERRIDE; std::vector codecs_; std::vector video_send_streams_; std::vector video_receive_streams_; }; class FakeWebRtcVideoChannel2 : public WebRtcVideoChannel2 { public: FakeWebRtcVideoChannel2(FakeCall* call, WebRtcVideoEngine2* engine, VoiceMediaChannel* voice_channel); virtual ~FakeWebRtcVideoChannel2(); VoiceMediaChannel* GetVoiceChannel(); FakeCall* GetFakeCall(); private: FakeCall* fake_call_; VoiceMediaChannel* voice_channel_; }; class FakeWebRtcVideoMediaChannelFactory : public WebRtcVideoChannelFactory { public: FakeWebRtcVideoChannel2* GetFakeChannel(VideoMediaChannel* channel); private: virtual WebRtcVideoChannel2* Create( WebRtcVideoEngine2* engine, VoiceMediaChannel* voice_channel) OVERRIDE; std::map channel_map_; }; } // namespace cricket #endif // TALK_MEDIA_WEBRTC_WEBRTCVIDEOENGINE2_UNITTEST_H_