af612d5e07
Original cl description: This removes the none const pointer entry and SwapFrame. Since frames delivered using VideoSendStream no longer use the external capture module, VideoSendStream will not get an incoming framerate callback. VideoSendStream now uses a rtc::RateTracker. Also, the video engine must ensure that time stamps are always increasing. With this, time stamps (ntp, render_time and rtp timestamps ) are checked and set in ViECapturer::OnIncomingCapturedFrame This cl was previously reverted in https://webrtc-codereview.appspot.com/46549004/. Patchset 1 contains the original patch after rebase. Patshet 2 fix webrtc_perf_tests reported in chromium:465306 Note that chromium:465287 is being fixed in https://webrtc-codereview.appspot.com/43829004/ BUG=1128 R=magjed@webrtc.org, mflodman@webrtc.org Review URL: https://webrtc-codereview.appspot.com/47629004 Cr-Commit-Position: refs/heads/master@{#8776} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8776 4adac7df-926f-26a2-2b94-8c16560cd09d
149 lines
5.3 KiB
C++
149 lines
5.3 KiB
C++
/*
|
|
* 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 <map>
|
|
#include <vector>
|
|
|
|
#include "webrtc/call.h"
|
|
#include "webrtc/video_receive_stream.h"
|
|
#include "webrtc/video_send_stream.h"
|
|
|
|
namespace cricket {
|
|
class FakeVideoSendStream : public webrtc::VideoSendStream,
|
|
public webrtc::VideoSendStreamInput {
|
|
public:
|
|
FakeVideoSendStream(const webrtc::VideoSendStream::Config& config,
|
|
const webrtc::VideoEncoderConfig& encoder_config);
|
|
webrtc::VideoSendStream::Config GetConfig() const;
|
|
webrtc::VideoEncoderConfig GetEncoderConfig() const;
|
|
std::vector<webrtc::VideoStream> GetVideoStreams();
|
|
|
|
bool IsSending() const;
|
|
bool GetVp8Settings(webrtc::VideoCodecVP8* settings) const;
|
|
|
|
int GetNumberOfSwappedFrames() const;
|
|
int GetLastWidth() const;
|
|
int GetLastHeight() const;
|
|
void SetStats(const webrtc::VideoSendStream::Stats& stats);
|
|
|
|
private:
|
|
void IncomingCapturedFrame(const webrtc::I420VideoFrame& frame) override;
|
|
webrtc::VideoSendStream::Stats GetStats() override;
|
|
|
|
bool ReconfigureVideoEncoder(
|
|
const webrtc::VideoEncoderConfig& config) override;
|
|
|
|
webrtc::VideoSendStreamInput* Input() override;
|
|
|
|
void Start() override;
|
|
void Stop() override;
|
|
|
|
bool sending_;
|
|
webrtc::VideoSendStream::Config config_;
|
|
webrtc::VideoEncoderConfig encoder_config_;
|
|
bool codec_settings_set_;
|
|
webrtc::VideoCodecVP8 vp8_settings_;
|
|
int num_swapped_frames_;
|
|
webrtc::I420VideoFrame last_frame_;
|
|
webrtc::VideoSendStream::Stats stats_;
|
|
};
|
|
|
|
class FakeVideoReceiveStream : public webrtc::VideoReceiveStream {
|
|
public:
|
|
explicit FakeVideoReceiveStream(
|
|
const webrtc::VideoReceiveStream::Config& config);
|
|
|
|
webrtc::VideoReceiveStream::Config GetConfig();
|
|
|
|
bool IsReceiving() const;
|
|
|
|
void InjectFrame(const webrtc::I420VideoFrame& frame, int time_to_render_ms);
|
|
|
|
void SetStats(const webrtc::VideoReceiveStream::Stats& stats);
|
|
|
|
private:
|
|
webrtc::VideoReceiveStream::Stats GetStats() const override;
|
|
|
|
void Start() override;
|
|
void Stop() override;
|
|
|
|
webrtc::VideoReceiveStream::Config config_;
|
|
bool receiving_;
|
|
webrtc::VideoReceiveStream::Stats stats_;
|
|
};
|
|
|
|
class FakeCall : public webrtc::Call, public webrtc::PacketReceiver {
|
|
public:
|
|
FakeCall(const webrtc::Call::Config& config);
|
|
~FakeCall();
|
|
|
|
webrtc::Call::Config GetConfig() const;
|
|
std::vector<FakeVideoSendStream*> GetVideoSendStreams();
|
|
std::vector<FakeVideoReceiveStream*> GetVideoReceiveStreams();
|
|
|
|
webrtc::Call::NetworkState GetNetworkState() const;
|
|
int GetNumCreatedSendStreams() const;
|
|
int GetNumCreatedReceiveStreams() const;
|
|
void SetStats(const webrtc::Call::Stats& stats);
|
|
|
|
private:
|
|
webrtc::VideoSendStream* CreateVideoSendStream(
|
|
const webrtc::VideoSendStream::Config& config,
|
|
const webrtc::VideoEncoderConfig& encoder_config) override;
|
|
|
|
void DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) override;
|
|
|
|
webrtc::VideoReceiveStream* CreateVideoReceiveStream(
|
|
const webrtc::VideoReceiveStream::Config& config) override;
|
|
|
|
void DestroyVideoReceiveStream(
|
|
webrtc::VideoReceiveStream* receive_stream) override;
|
|
webrtc::PacketReceiver* Receiver() override;
|
|
DeliveryStatus DeliverPacket(const uint8_t* packet, size_t length) override;
|
|
|
|
webrtc::Call::Stats GetStats() const override;
|
|
|
|
void SetBitrateConfig(
|
|
const webrtc::Call::Config::BitrateConfig& bitrate_config) override;
|
|
void SignalNetworkState(webrtc::Call::NetworkState state) override;
|
|
|
|
webrtc::Call::Config config_;
|
|
webrtc::Call::NetworkState network_state_;
|
|
webrtc::Call::Stats stats_;
|
|
std::vector<FakeVideoSendStream*> video_send_streams_;
|
|
std::vector<FakeVideoReceiveStream*> video_receive_streams_;
|
|
|
|
int num_created_send_streams_;
|
|
int num_created_receive_streams_;
|
|
};
|
|
|
|
} // namespace cricket
|
|
#endif // TALK_MEDIA_WEBRTC_WEBRTCVIDEOENGINE2_UNITTEST_H_
|