Index: webrtc/video/video_quality_test.cc |
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc |
index 264c7a56bf1678f3a6f0e687ca719e2d0d605aa3..d5466aa45fcc2ef705041dd27cc71573db7204f9 100644 |
--- a/webrtc/video/video_quality_test.cc |
+++ b/webrtc/video/video_quality_test.cc |
@@ -49,6 +49,8 @@ |
#include "webrtc/test/video_renderer.h" |
#include "webrtc/voice_engine/include/voe_base.h" |
+#include "webrtc/test/rtp_file_writer.h" |
+ |
namespace { |
constexpr int kSendStatsPollingIntervalMs = 1000; |
@@ -152,7 +154,8 @@ class VideoAnalyzer : public PacketReceiver, |
int selected_sl, |
int selected_tl, |
bool is_quick_test_enabled, |
- Clock* clock) |
+ Clock* clock, |
+ std::string rtp_dump_name) |
: transport_(transport), |
receiver_(nullptr), |
call_(nullptr), |
@@ -188,7 +191,9 @@ class VideoAnalyzer : public PacketReceiver, |
is_quick_test_enabled_(is_quick_test_enabled), |
stats_polling_thread_(&PollStatsThread, this, "StatsPoller"), |
comparison_available_event_(false, false), |
- done_(true, false) { |
+ done_(true, false), |
+ clock_(clock), |
+ start_ms_(clock->TimeInMilliseconds()) { |
// Create thread pool for CPU-expensive PSNR/SSIM calculations. |
// Try to use about as many threads as cores, but leave kMinCoresLeft alone, |
@@ -214,6 +219,12 @@ class VideoAnalyzer : public PacketReceiver, |
thread->Start(); |
comparison_thread_pool_.push_back(thread); |
} |
+ |
+ if (rtp_dump_name.length() > 0) { |
sprang_webrtc
2017/07/12 13:27:05
nit: if (!rtp_dump_name.empty()) ...
ilnik
2017/07/12 13:58:53
Done.
|
+ fprintf(stdout, "Writing rtp dump to %s\n", rtp_dump_name.c_str()); |
+ rtp_file_writer_.reset(test::RtpFileWriter::Create( |
+ test::RtpFileWriter::kRtpDump, rtp_dump_name)); |
+ } |
} |
~VideoAnalyzer() { |
@@ -266,6 +277,16 @@ class VideoAnalyzer : public PacketReceiver, |
if (RtpHeaderParser::IsRtcp(packet, length)) { |
return receiver_->DeliverPacket(media_type, packet, length, packet_time); |
} |
+ |
+ if (rtp_file_writer_) { |
+ std::unique_ptr<test::RtpPacket> p(new test::RtpPacket()); |
sprang_webrtc
2017/07/12 13:27:05
Just stack allocate it instead.
ilnik
2017/07/12 13:58:52
Done.
|
+ memcpy(p->data, packet, length); |
+ p->length = length; |
+ p->original_length = length; |
+ p->time_ms = clock_->TimeInMilliseconds() - start_ms_; |
+ rtp_file_writer_->WritePacket(p.get()); |
+ } |
+ |
RtpUtility::RtpHeaderParser parser(packet, length); |
RTPHeader header; |
parser.Parse(&header); |
@@ -1059,6 +1080,10 @@ class VideoAnalyzer : public PacketReceiver, |
rtc::Event comparison_available_event_; |
std::deque<FrameComparison> comparisons_ GUARDED_BY(comparison_lock_); |
rtc::Event done_; |
+ |
+ std::unique_ptr<test::RtpFileWriter> rtp_file_writer_; |
+ Clock* clock_; |
sprang_webrtc
2017/07/12 13:27:05
Clock* const clock_;
ilnik
2017/07/12 13:58:52
Done.
|
+ const int64_t start_ms_; |
}; |
class Vp8EncoderFactory : public VideoEncoderFactory { |
@@ -1714,6 +1739,12 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { |
<< "!"; |
} |
+ bool event_log_started = false; |
sprang_webrtc
2017/07/12 13:27:05
nit: git cl format?
ilnik
2017/07/12 13:58:52
Done.
|
+ if (params.rtc_event_log_name.length() > 0) { |
sprang_webrtc
2017/07/12 13:27:05
.empty()
ilnik
2017/07/12 13:58:52
Done.
|
+ event_log_ = RtcEventLog::Create(clock_); |
+ event_log_started = event_log_->StartLogging(params.rtc_event_log_name, -1); |
sprang_webrtc
2017/07/12 13:27:05
Why would StartLogging() fail?
Can you just DCHECK
ilnik
2017/07/12 13:58:52
Done.
|
+ } |
+ |
Call::Config call_config(event_log_.get()); |
call_config.bitrate_config = params.call.call_bitrate_config; |
CreateCalls(call_config, call_config); |
@@ -1740,7 +1771,8 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { |
kVideoSendSsrcs[params_.ss.selected_stream], |
kSendRtxSsrcs[params_.ss.selected_stream], |
static_cast<size_t>(params_.ss.selected_stream), params.ss.selected_sl, |
- params_.video.selected_tl, is_quick_test_enabled, clock_); |
+ params_.video.selected_tl, is_quick_test_enabled, clock_, |
+ params_.rtp_dump_name); |
analyzer.SetCall(sender_call_.get()); |
analyzer.SetReceiver(receiver_call_->Receiver()); |
send_transport.SetReceiver(&analyzer); |
@@ -1775,7 +1807,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { |
analyzer.SetSource(video_capturer_.get(), params_.ss.infer_streams); |
StartEncodedFrameLogs(video_send_stream_); |
- StartEncodedFrameLogs(video_receive_streams_[0]); |
+ StartEncodedFrameLogs(video_receive_streams_[params_.ss.selected_stream]); |
video_send_stream_->Start(); |
for (VideoSendStream* thumbnail_send_stream : thumbnail_send_streams_) |
thumbnail_send_stream->Start(); |
@@ -1818,6 +1850,9 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) { |
DestroyStreams(); |
DestroyThumbnailStreams(); |
+ if (event_log_started) { |
+ event_log_->StopLogging(); |
+ } |
if (graph_data_output_file) |
fclose(graph_data_output_file); |
} |
@@ -2036,7 +2071,7 @@ void VideoQualityTest::StartEncodedFrameLogs(VideoSendStream* stream) { |
{rtc::CreatePlatformFile(prefix + "1.ivf"), |
rtc::CreatePlatformFile(prefix + "2.ivf"), |
rtc::CreatePlatformFile(prefix + "3.ivf")}), |
- 10000000); |
+ 100000000); |
} |
} |
@@ -2047,7 +2082,7 @@ void VideoQualityTest::StartEncodedFrameLogs(VideoReceiveStream* stream) { |
std::string path = |
params_.video.encoded_frame_base_path + "." + str.str() + ".recv.ivf"; |
stream->EnableEncodedFrameRecording(rtc::CreatePlatformFile(path), |
- 10000000); |
+ 100000000); |
} |
} |
} // namespace webrtc |