Use real video duration instead of test duration.

Use real video duration instead of test duration to calculate harmonic
frame rate in DefaultVideoQualityAnalyzer.

Bug: webrtc:11445
Change-Id: Ia5f96b2f87178419ec6ebe2ff5dbcb5a0c03c824
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/171104
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30854}
This commit is contained in:
Artem Titov 2020-03-20 12:58:25 +01:00 committed by Commit Bot
parent c32c5dd61e
commit 4c0921129d

View File

@ -592,20 +592,30 @@ void DefaultVideoQualityAnalyzer::ReportResults(
using ::webrtc::test::ImproveDirection;
double sum_squared_interframe_delays_secs = 0;
for (const double interframe_delay_ms :
stats.time_between_rendered_frames_ms.GetSamples()) {
Timestamp video_start_time = Timestamp::PlusInfinity();
Timestamp video_end_time = Timestamp::MinusInfinity();
for (const SamplesStatsCounter::StatsSample& sample :
stats.time_between_rendered_frames_ms.GetTimedSamples()) {
double interframe_delay_ms = sample.value;
const double interframe_delays_secs = interframe_delay_ms / 1000.0;
// Sum of squared inter frame intervals is used to calculate the harmonic
// frame rate metric. The metric aims to reflect overall experience related
// to smoothness of video playback and includes both freezes and pauses.
sum_squared_interframe_delays_secs +=
interframe_delays_secs * interframe_delays_secs;
if (sample.time < video_start_time) {
video_start_time = sample.time;
}
if (sample.time > video_end_time) {
video_end_time = sample.time;
}
}
double harmonic_framerate_fps = 0;
if (sum_squared_interframe_delays_secs > 0.0) {
TimeDelta video_duration = Now() - start_time_;
harmonic_framerate_fps =
video_duration.seconds() / sum_squared_interframe_delays_secs;
TimeDelta video_duration = video_end_time - video_start_time;
if (sum_squared_interframe_delays_secs > 0.0 && video_duration.IsFinite()) {
harmonic_framerate_fps = static_cast<double>(video_duration.us()) /
static_cast<double>(kMicrosPerSecond) /
sum_squared_interframe_delays_secs;
}
ReportResult("psnr", test_case_name, stats.psnr, "dB",