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

Unified Diff: webrtc/video/video_quality_test.cc

Issue 2936393002: Add cropping to VIEEncoder to match simulcast streams resolution (Closed)
Patch Set: Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/video/video_quality_test.cc
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index 76c743c8063bbc253141a17c9ec3ad4b2caa9c06..6430b3e634e5b9932ddd624a726ecc878fd7a9d7 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -29,6 +29,7 @@
#include "webrtc/call/call.h"
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
+#include "webrtc/media/engine/webrtcvideoengine.h"
#include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_format.h"
@@ -218,6 +219,13 @@ class VideoAnalyzer : public PacketReceiver,
virtual void SetReceiver(PacketReceiver* receiver) { receiver_ = receiver; }
+ void SetSource(test::VideoCapturer* video_capturer, bool respectSinkWants) {
sprang_webrtc 2017/06/16 08:57:23 nit: no camelcase
ilnik 2017/06/16 11:22:48 Done.
+ if (respectSinkWants)
+ captured_frame_forwarder_.SetSource(video_capturer);
+ rtc::VideoSinkWants wants;
+ video_capturer->AddOrUpdateSink(InputInterface(), wants);
+ }
+
void SetSendStream(VideoSendStream* stream) {
rtc::CritScope lock(&crit_);
RTC_DCHECK(!send_stream_);
@@ -781,7 +789,7 @@ class VideoAnalyzer : public PacketReceiver,
// Perform expensive psnr and ssim calculations while not holding lock.
double psnr = -1.0;
double ssim = -1.0;
- if (comparison.reference) {
+ if (comparison.reference && !comparison.dropped) {
psnr = I420PSNR(&*comparison.reference, &*comparison.render);
ssim = I420SSIM(&*comparison.reference, &*comparison.render);
}
@@ -901,7 +909,13 @@ class VideoAnalyzer : public PacketReceiver,
public rtc::VideoSourceInterface<VideoFrame> {
public:
explicit CapturedFrameForwarder(VideoAnalyzer* analyzer)
- : analyzer_(analyzer), send_stream_input_(nullptr) {}
+ : analyzer_(analyzer),
+ send_stream_input_(nullptr),
+ video_capturer_(nullptr) {}
+
+ void SetSource(test::VideoCapturer* video_capturer) {
+ video_capturer_ = video_capturer;
+ }
private:
void OnFrame(const VideoFrame& video_frame) override {
@@ -909,8 +923,9 @@ class VideoAnalyzer : public PacketReceiver,
// Frames from the capturer does not have a rtp timestamp.
// Create one so it can be used for comparison.
RTC_DCHECK_EQ(0, video_frame.timestamp());
- if (copy.ntp_time_ms() == 0)
- copy.set_ntp_time_ms(rtc::TimeMillis());
+ if (video_frame.ntp_time_ms() == 0)
+ copy.set_ntp_time_ms(
+ Clock::GetRealTimeClock()->CurrentNtpInMilliseconds());
sprang_webrtc 2017/06/16 08:57:23 Add a member for the clock instance instead of cal
ilnik 2017/06/16 11:22:48 Done.
copy.set_timestamp(copy.ntp_time_ms() * 90);
analyzer_->AddCapturedFrameForComparison(copy);
rtc::CritScope lock(&crit_);
@@ -924,6 +939,9 @@ class VideoAnalyzer : public PacketReceiver,
rtc::CritScope lock(&crit_);
RTC_DCHECK(!send_stream_input_ || send_stream_input_ == sink);
send_stream_input_ = sink;
+ if (video_capturer_) {
+ video_capturer_->AddOrUpdateSink(this, wants);
+ }
}
// Called by |send_stream_| when |send_stream_.SetSource()| is called.
@@ -936,6 +954,7 @@ class VideoAnalyzer : public PacketReceiver,
VideoAnalyzer* const analyzer_;
rtc::CriticalSection crit_;
rtc::VideoSinkInterface<VideoFrame>* send_stream_input_ GUARDED_BY(crit_);
+ test::VideoCapturer* video_capturer_;
};
void AddCapturedFrameForComparison(const VideoFrame& video_frame) {
@@ -1237,6 +1256,7 @@ void VideoQualityTest::FillScalabilitySettings(
params->ss.streams.push_back(stream);
}
params->ss.selected_stream = selected_stream;
+ params->ss.infer_streams = false;
params->ss.num_spatial_layers = num_spatial_layers ? num_spatial_layers : 1;
params->ss.selected_sl = selected_sl;
@@ -1318,8 +1338,15 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
video_encoder_config_.max_bitrate_bps +=
params_.ss.streams[i].max_bitrate_bps;
}
- video_encoder_config_.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(params_.ss.streams);
+ if (params_.ss.infer_streams) {
+ video_encoder_config_.video_stream_factory =
+ new rtc::RefCountedObject<cricket::EncoderStreamFactory>(
+ params_.video.codec, params_.ss.streams[0].max_qp,
+ params_.video.fps, params_.screenshare.enabled, true);
+ } else {
+ video_encoder_config_.video_stream_factory =
+ new rtc::RefCountedObject<VideoStreamFactory>(params_.ss.streams);
+ }
video_encoder_config_.spatial_layers = params_.ss.spatial_layers;
@@ -1422,9 +1449,15 @@ void VideoQualityTest::SetupThumbnails(Transport* send_transport,
params_.video.suspend_below_min_bitrate;
thumbnail_encoder_config.number_of_streams = 1;
thumbnail_encoder_config.max_bitrate_bps = 50000;
- thumbnail_encoder_config.video_stream_factory =
- new rtc::RefCountedObject<VideoStreamFactory>(
- std::vector<webrtc::VideoStream>{DefaultThumbnailStream()});
+ if (params_.ss.infer_streams) {
+ thumbnail_encoder_config.video_stream_factory =
+ new rtc::RefCountedObject<VideoStreamFactory>(params_.ss.streams);
+ } else {
+ thumbnail_encoder_config.video_stream_factory =
+ new rtc::RefCountedObject<cricket::EncoderStreamFactory>(
+ params_.video.codec, params_.ss.streams[0].max_qp,
+ params_.video.fps, params_.screenshare.enabled, true);
+ }
thumbnail_encoder_config.spatial_layers = params_.ss.spatial_layers;
VideoReceiveStream::Config thumbnail_receive_config(send_transport);
@@ -1564,7 +1597,11 @@ void VideoQualityTest::CreateCapturer() {
EXPECT_TRUE(frame_generator_capturer->Init());
video_capturer_.reset(frame_generator_capturer);
} else {
- if (params_.video.clip_name.empty()) {
+ if (params_.video.clip_name == "Generator") {
+ video_capturer_.reset(test::FrameGeneratorCapturer::Create(
+ static_cast<int>(params_.video.width),
+ static_cast<int>(params_.video.height), params_.video.fps, clock_));
+ } else if (params_.video.clip_name.empty()) {
video_capturer_.reset(test::VcmCapturer::Create(
params_.video.width, params_.video.height, params_.video.fps,
params_.video.capture_device_index));
@@ -1661,8 +1698,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
CreateCapturer();
- rtc::VideoSinkWants wants;
- video_capturer_->AddOrUpdateSink(analyzer.InputInterface(), wants);
+ analyzer.SetSource(video_capturer_.get(), params_.ss.infer_streams);
StartEncodedFrameLogs(video_send_stream_);
StartEncodedFrameLogs(video_receive_streams_[0]);

Powered by Google App Engine
This is Rietveld 408576698