Index: webrtc/video/video_quality_test.cc |
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc |
index 5f71717a29fc94f15e44ca6338bc9e9fbf27a2ad..ce40c5fbb32dbca7d330a6d2b034decb265aa3e0 100644 |
--- a/webrtc/video/video_quality_test.cc |
+++ b/webrtc/video/video_quality_test.cc |
@@ -371,7 +371,6 @@ |
struct FrameComparison { |
FrameComparison() |
: dropped(false), |
- input_time_ms(0), |
send_time_ms(0), |
recv_time_ms(0), |
render_time_ms(0), |
@@ -380,7 +379,6 @@ |
FrameComparison(const VideoFrame& reference, |
const VideoFrame& render, |
bool dropped, |
- int64_t input_time_ms, |
int64_t send_time_ms, |
int64_t recv_time_ms, |
int64_t render_time_ms, |
@@ -388,29 +386,14 @@ |
: reference(reference), |
render(render), |
dropped(dropped), |
- input_time_ms(input_time_ms), |
send_time_ms(send_time_ms), |
recv_time_ms(recv_time_ms), |
render_time_ms(render_time_ms), |
encoded_frame_size(encoded_frame_size) {} |
- FrameComparison(bool dropped, |
- int64_t input_time_ms, |
- int64_t send_time_ms, |
- int64_t recv_time_ms, |
- int64_t render_time_ms, |
- size_t encoded_frame_size) |
- : dropped(dropped), |
- input_time_ms(input_time_ms), |
- send_time_ms(send_time_ms), |
- recv_time_ms(recv_time_ms), |
- render_time_ms(render_time_ms), |
- encoded_frame_size(encoded_frame_size) {} |
- |
- rtc::Optional<VideoFrame> reference; |
- rtc::Optional<VideoFrame> render; |
+ VideoFrame reference; |
+ VideoFrame render; |
bool dropped; |
- int64_t input_time_ms; |
int64_t send_time_ms; |
int64_t recv_time_ms; |
int64_t render_time_ms; |
@@ -493,18 +476,21 @@ |
if (it != encoded_frame_sizes_.end()) |
encoded_frame_sizes_.erase(it); |
+ VideoFrame reference_copy; |
+ VideoFrame render_copy; |
+ |
rtc::CritScope crit(&comparison_lock_); |
if (comparisons_.size() < kMaxComparisons) { |
- comparisons_.push_back(FrameComparison(reference, render, dropped, |
- reference.ntp_time_ms(), |
- send_time_ms, recv_time_ms, |
- render_time_ms, encoded_size)); |
+ reference_copy = reference; |
+ render_copy = render; |
} else { |
- comparisons_.push_back(FrameComparison(dropped, |
- reference.ntp_time_ms(), |
- send_time_ms, recv_time_ms, |
- render_time_ms, encoded_size)); |
- } |
+ // Copy the time to ensure that delay calculations can still be made. |
+ reference_copy.set_ntp_time_ms(reference.ntp_time_ms()); |
+ render_copy.set_ntp_time_ms(render.ntp_time_ms()); |
+ } |
+ comparisons_.push_back(FrameComparison(reference_copy, render_copy, dropped, |
+ send_time_ms, recv_time_ms, |
+ render_time_ms, encoded_size)); |
comparison_available_event_.Set(); |
} |
@@ -541,6 +527,8 @@ |
if (AllFramesRecorded()) |
return false; |
+ VideoFrame reference; |
+ VideoFrame render; |
FrameComparison comparison; |
if (!PopComparison(&comparison)) { |
@@ -636,12 +624,12 @@ |
// Perform expensive psnr and ssim calculations while not holding lock. |
double psnr = -1.0; |
double ssim = -1.0; |
- if (comparison.reference) { |
- psnr = I420PSNR(&*comparison.reference, &*comparison.render); |
- ssim = I420SSIM(&*comparison.reference, &*comparison.render); |
- } |
- |
- int64_t input_time_ms = comparison.reference->ntp_time_ms(); |
+ if (!comparison.reference.IsZeroSize()) { |
+ psnr = I420PSNR(&comparison.reference, &comparison.render); |
+ ssim = I420SSIM(&comparison.reference, &comparison.render); |
+ } |
+ |
+ int64_t input_time_ms = comparison.reference.ntp_time_ms(); |
rtc::CritScope crit(&comparison_lock_); |
if (graph_data_output_file_) { |