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

Unified Diff: webrtc/video/video_quality_test.cc

Issue 2974903002: Add rtpdump and rtc log functionality to screenshare_loopback and video_loopback (Closed)
Patch Set: rebase Created 3 years, 5 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
« no previous file with comments | « webrtc/video/video_quality_test.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/video_quality_test.cc
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index 49a758956bdfb76b0a82085092ca0075a11b7c0c..1719595d3a7e2fa3094ffae43918d8b7306a92ed 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;
@@ -149,7 +151,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),
@@ -185,7 +188,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,
@@ -211,6 +216,12 @@ class VideoAnalyzer : public PacketReceiver,
thread->Start();
comparison_thread_pool_.push_back(thread);
}
+
+ if (!rtp_dump_name.empty()) {
+ 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() {
@@ -263,6 +274,16 @@ class VideoAnalyzer : public PacketReceiver,
if (RtpHeaderParser::IsRtcp(packet, length)) {
return receiver_->DeliverPacket(media_type, packet, length, packet_time);
}
+
+ if (rtp_file_writer_) {
+ test::RtpPacket p;
+ memcpy(p.data, packet, length);
+ p.length = length;
+ p.original_length = length;
+ p.time_ms = clock_->TimeInMilliseconds() - start_ms_;
+ rtp_file_writer_->WritePacket(&p);
+ }
+
RtpUtility::RtpHeaderParser parser(packet, length);
RTPHeader header;
parser.Parse(&header);
@@ -1056,6 +1077,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* const clock_;
+ const int64_t start_ms_;
};
class Vp8EncoderFactory : public cricket::WebRtcVideoEncoderFactory {
@@ -1102,16 +1127,15 @@ VideoQualityTest::VideoQualityTest()
}
VideoQualityTest::Params::Params()
- : call({false, Call::Config::BitrateConfig()}),
+ : call({false, Call::Config::BitrateConfig(), 0}),
video({false, 640, 480, 30, 50, 800, 800, false, "VP8", 1, -1, 0, false,
- false, "", ""}),
+ false, ""}),
audio({false, false, false}),
screenshare({false, 10, 0}),
analyzer({"", 0.0, 0.0, 0, "", ""}),
pipe(),
- logs(false),
ss({std::vector<VideoStream>(), 0, 0, -1, std::vector<SpatialLayer>()}),
- num_thumbnails(0) {}
+ logging({false, "", "", ""}) {}
VideoQualityTest::Params::~Params() = default;
@@ -1177,8 +1201,8 @@ void VideoQualityTest::CheckParams() {
} else if (params_.video.codec == "VP9") {
RTC_CHECK_EQ(params_.ss.streams.size(), 1);
}
- RTC_CHECK_GE(params_.num_thumbnails, 0);
- if (params_.num_thumbnails > 0) {
+ RTC_CHECK_GE(params_.call.num_thumbnails, 0);
+ if (params_.call.num_thumbnails > 0) {
RTC_CHECK_EQ(params_.ss.num_spatial_layers, 1);
RTC_CHECK_EQ(params_.ss.streams.size(), 3);
RTC_CHECK_EQ(params_.video.num_temporal_layers, 3);
@@ -1331,7 +1355,7 @@ void VideoQualityTest::FillScalabilitySettings(
void VideoQualityTest::SetupVideo(Transport* send_transport,
Transport* recv_transport) {
- if (params_.logs)
+ if (params_.logging.logs)
trace_to_stderr_.reset(new test::TraceToStderr);
size_t num_video_streams = params_.ss.streams.size();
@@ -1497,7 +1521,7 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
void VideoQualityTest::SetupThumbnails(Transport* send_transport,
Transport* recv_transport) {
- for (int i = 0; i < params_.num_thumbnails; ++i) {
+ for (int i = 0; i < params_.call.num_thumbnails; ++i) {
thumbnail_encoders_.emplace_back(VP8Encoder::Create());
// Thumbnails will be send in the other way: from receiver_call to
@@ -1567,7 +1591,7 @@ void VideoQualityTest::SetupThumbnails(Transport* send_transport,
thumbnail_receive_configs_.push_back(thumbnail_receive_config.Copy());
}
- for (int i = 0; i < params_.num_thumbnails; ++i) {
+ for (int i = 0; i < params_.call.num_thumbnails; ++i) {
thumbnail_send_streams_.push_back(receiver_call_->CreateVideoSendStream(
thumbnail_send_configs_[i].Copy(),
thumbnail_encoder_configs_[i].Copy()));
@@ -1719,6 +1743,13 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
<< "!";
}
+ if (!params.logging.rtc_event_log_name.empty()) {
+ event_log_ = RtcEventLog::Create(clock_);
+ bool event_log_started =
+ event_log_->StartLogging(params.logging.rtc_event_log_name, -1);
+ RTC_DCHECK(event_log_started);
+ }
+
Call::Config call_config(event_log_.get());
call_config.bitrate_config = params.call.call_bitrate_config;
CreateCalls(call_config, call_config);
@@ -1745,7 +1776,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_.logging.rtp_dump_name);
analyzer.SetCall(sender_call_.get());
analyzer.SetReceiver(receiver_call_->Receiver());
send_transport.SetReceiver(&analyzer);
@@ -1769,7 +1801,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
video_send_stream_->SetSource(analyzer.OutputInterface(),
degradation_preference_);
- SetupThumbnailCapturers(params_.num_thumbnails);
+ SetupThumbnailCapturers(params_.call.num_thumbnails);
for (size_t i = 0; i < thumbnail_send_streams_.size(); ++i) {
thumbnail_send_streams_[i]->SetSource(thumbnail_capturers_[i].get(),
degradation_preference_);
@@ -1780,7 +1812,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();
@@ -1823,6 +1855,7 @@ void VideoQualityTest::RunWithAnalyzer(const Params& params) {
DestroyStreams();
DestroyThumbnailStreams();
+ event_log_->StopLogging();
if (graph_data_output_file)
fclose(graph_data_output_file);
}
@@ -2031,28 +2064,28 @@ void VideoQualityTest::RunWithRenderers(const Params& params) {
}
void VideoQualityTest::StartEncodedFrameLogs(VideoSendStream* stream) {
- if (!params_.video.encoded_frame_base_path.empty()) {
+ if (!params_.logging.encoded_frame_base_path.empty()) {
std::ostringstream str;
str << send_logs_++;
std::string prefix =
- params_.video.encoded_frame_base_path + "." + str.str() + ".send.";
+ params_.logging.encoded_frame_base_path + "." + str.str() + ".send.";
stream->EnableEncodedFrameRecording(
std::vector<rtc::PlatformFile>(
{rtc::CreatePlatformFile(prefix + "1.ivf"),
rtc::CreatePlatformFile(prefix + "2.ivf"),
rtc::CreatePlatformFile(prefix + "3.ivf")}),
- 10000000);
+ 100000000);
}
}
void VideoQualityTest::StartEncodedFrameLogs(VideoReceiveStream* stream) {
- if (!params_.video.encoded_frame_base_path.empty()) {
+ if (!params_.logging.encoded_frame_base_path.empty()) {
std::ostringstream str;
str << receive_logs_++;
std::string path =
- params_.video.encoded_frame_base_path + "." + str.str() + ".recv.ivf";
+ params_.logging.encoded_frame_base_path + "." + str.str() + ".recv.ivf";
stream->EnableEncodedFrameRecording(rtc::CreatePlatformFile(path),
- 10000000);
+ 100000000);
}
}
} // namespace webrtc
« no previous file with comments | « webrtc/video/video_quality_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698