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

Side by Side Diff: webrtc/video/video_quality_test.cc

Issue 2136573002: Adding audio to video_quality_test. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: adding flags. Created 4 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <stdio.h> 10 #include <stdio.h>
(...skipping 16 matching lines...) Expand all
27 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 27 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
28 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 28 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
29 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 29 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
30 #include "webrtc/system_wrappers/include/cpu_info.h" 30 #include "webrtc/system_wrappers/include/cpu_info.h"
31 #include "webrtc/test/layer_filtering_transport.h" 31 #include "webrtc/test/layer_filtering_transport.h"
32 #include "webrtc/test/run_loop.h" 32 #include "webrtc/test/run_loop.h"
33 #include "webrtc/test/statistics.h" 33 #include "webrtc/test/statistics.h"
34 #include "webrtc/test/testsupport/fileutils.h" 34 #include "webrtc/test/testsupport/fileutils.h"
35 #include "webrtc/test/video_renderer.h" 35 #include "webrtc/test/video_renderer.h"
36 #include "webrtc/video/video_quality_test.h" 36 #include "webrtc/video/video_quality_test.h"
37 #include "webrtc/voice_engine/include/voe_base.h"
38 #include "webrtc/voice_engine/include/voe_codec.h"
39
40 namespace {
41
42 constexpr int kSendStatsPollingIntervalMs = 1000;
43 constexpr int kPayloadTypeH264 = 122;
44 constexpr int kPayloadTypeVP8 = 123;
45 constexpr int kPayloadTypeVP9 = 124;
46 constexpr char kSyncGroup[] = "av_sync";
47
48 struct VoiceEngineState {
49 VoiceEngineState()
50 : voice_engine(nullptr),
51 base(nullptr),
52 codec(nullptr),
53 send_channel_id(-1),
54 receive_channel_id(-1) {}
55
56 webrtc::VoiceEngine* voice_engine;
57 webrtc::VoEBase* base;
58 webrtc::VoECodec* codec;
59 int send_channel_id;
60 int receive_channel_id;
61 };
62
63 void CreateVoiceEngine(VoiceEngineState* voe,
64 rtc::scoped_refptr<webrtc::AudioDecoderFactory>
65 decoder_factory) {
66 voe->voice_engine = webrtc::VoiceEngine::Create();
67 voe->base = webrtc::VoEBase::GetInterface(voe->voice_engine);
68 voe->codec = webrtc::VoECodec::GetInterface(voe->voice_engine);
69 EXPECT_EQ(0, voe->base->Init(nullptr, nullptr, decoder_factory));
70 webrtc::Config voe_config;
71 voe_config.Set<webrtc::VoicePacing>(new webrtc::VoicePacing(true));
72 voe->send_channel_id = voe->base->CreateChannel(voe_config);
73 EXPECT_GE(voe->send_channel_id, 0);
74 voe->receive_channel_id = voe->base->CreateChannel();
75 EXPECT_GE(voe->receive_channel_id, 0);
76 }
77
78 void DestroyVoiceEngine(VoiceEngineState* voe) {
79 voe->base->DeleteChannel(voe->send_channel_id);
80 voe->send_channel_id = -1;
81 voe->base->DeleteChannel(voe->receive_channel_id);
82 voe->receive_channel_id = -1;
83 voe->base->Release();
84 voe->base = nullptr;
85 voe->codec->Release();
86 voe->codec = nullptr;
87
88 webrtc::VoiceEngine::Delete(voe->voice_engine);
89 voe->voice_engine = nullptr;
90 }
91
92 } // namespace
37 93
38 namespace webrtc { 94 namespace webrtc {
39 95
40 static const int kSendStatsPollingIntervalMs = 1000;
41 static const int kPayloadTypeH264 = 122;
42 static const int kPayloadTypeVP8 = 123;
43 static const int kPayloadTypeVP9 = 124;
44
45 class VideoAnalyzer : public PacketReceiver, 96 class VideoAnalyzer : public PacketReceiver,
46 public Transport, 97 public Transport,
47 public rtc::VideoSinkInterface<VideoFrame>, 98 public rtc::VideoSinkInterface<VideoFrame>,
48 public VideoCaptureInput, 99 public VideoCaptureInput,
49 public EncodedFrameObserver { 100 public EncodedFrameObserver {
50 public: 101 public:
51 VideoAnalyzer(test::LayerFilteringTransport* transport, 102 VideoAnalyzer(test::LayerFilteringTransport* transport,
52 const std::string& test_label, 103 const std::string& test_label,
53 double avg_psnr_threshold, 104 double avg_psnr_threshold,
54 double avg_ssim_threshold, 105 double avg_ssim_threshold,
(...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 1154
1104 std::unique_ptr<test::VideoRenderer> loopback_video( 1155 std::unique_ptr<test::VideoRenderer> loopback_video(
1105 test::VideoRenderer::Create(title.c_str(), 1156 test::VideoRenderer::Create(title.c_str(),
1106 params_.ss.streams[stream_id].width, 1157 params_.ss.streams[stream_id].width,
1107 params_.ss.streams[stream_id].height)); 1158 params_.ss.streams[stream_id].height));
1108 1159
1109 // TODO(ivica): Remove bitrate_config and use the default Call::Config(), to 1160 // TODO(ivica): Remove bitrate_config and use the default Call::Config(), to
1110 // match the full stack tests. 1161 // match the full stack tests.
1111 Call::Config call_config; 1162 Call::Config call_config;
1112 call_config.bitrate_config = params_.common.call_bitrate_config; 1163 call_config.bitrate_config = params_.common.call_bitrate_config;
1164
1165 ::VoiceEngineState voe;
1166 if (params_.audio) {
1167 CreateVoiceEngine(&voe, decoder_factory_);
1168 AudioState::Config audio_state_config;
1169 audio_state_config.voice_engine = voe.voice_engine;
1170 call_config.audio_state = AudioState::Create(audio_state_config);
1171 }
1172
1113 std::unique_ptr<Call> call(Call::Create(call_config)); 1173 std::unique_ptr<Call> call(Call::Create(call_config));
1114 1174
1115 test::LayerFilteringTransport transport( 1175 test::LayerFilteringTransport transport(
1116 params.pipe, call.get(), kPayloadTypeVP8, kPayloadTypeVP9, 1176 params.pipe, call.get(), kPayloadTypeVP8, kPayloadTypeVP9,
1117 params.common.selected_tl, params_.ss.selected_sl); 1177 params.common.selected_tl, params_.ss.selected_sl);
1118 // TODO(ivica): Use two calls to be able to merge with RunWithAnalyzer or at 1178 // TODO(ivica): Use two calls to be able to merge with RunWithAnalyzer or at
1119 // least share as much code as possible. That way this test would also match 1179 // least share as much code as possible. That way this test would also match
1120 // the full stack tests better. 1180 // the full stack tests better.
1121 transport.SetReceiver(call->Receiver()); 1181 transport.SetReceiver(call->Receiver());
1122 1182
1123 SetupCommon(&transport, &transport); 1183 SetupCommon(&transport, &transport);
1124 1184
1125 video_send_config_.local_renderer = local_preview.get(); 1185 video_send_config_.local_renderer = local_preview.get();
1126 video_receive_configs_[stream_id].renderer = loopback_video.get(); 1186 video_receive_configs_[stream_id].renderer = loopback_video.get();
1187 if (params_.audio && params_.audio_video_sync) {
1188 video_receive_configs_[stream_id].sync_group = kSyncGroup;
1189 }
1127 1190
1128 video_send_config_.suspend_below_min_bitrate = 1191 video_send_config_.suspend_below_min_bitrate =
1129 params_.common.suspend_below_min_bitrate; 1192 params_.common.suspend_below_min_bitrate;
1130 1193
1131 if (params.common.fec) { 1194 if (params.common.fec) {
1132 video_send_config_.rtp.fec.red_payload_type = kRedPayloadType; 1195 video_send_config_.rtp.fec.red_payload_type = kRedPayloadType;
1133 video_send_config_.rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 1196 video_send_config_.rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
1134 video_receive_configs_[stream_id].rtp.fec.red_payload_type = 1197 video_receive_configs_[stream_id].rtp.fec.red_payload_type =
1135 kRedPayloadType; 1198 kRedPayloadType;
1136 video_receive_configs_[stream_id].rtp.fec.ulpfec_payload_type = 1199 video_receive_configs_[stream_id].rtp.fec.ulpfec_payload_type =
1137 kUlpfecPayloadType; 1200 kUlpfecPayloadType;
1138 } 1201 }
1139 1202
1140 if (params_.screenshare.enabled) 1203 if (params_.screenshare.enabled)
1141 SetupScreenshare(); 1204 SetupScreenshare();
1142 1205
1143 video_send_stream_ = 1206 video_send_stream_ =
1144 call->CreateVideoSendStream(video_send_config_, video_encoder_config_); 1207 call->CreateVideoSendStream(video_send_config_, video_encoder_config_);
1145 VideoReceiveStream* receive_stream = 1208 VideoReceiveStream* video_receive_stream =
1146 call->CreateVideoReceiveStream(video_receive_configs_[stream_id].Copy()); 1209 call->CreateVideoReceiveStream(video_receive_configs_[stream_id].Copy());
1147 CreateCapturer(video_send_stream_->Input()); 1210 CreateCapturer(video_send_stream_->Input());
1148 1211
1149 receive_stream->Start(); 1212 AudioReceiveStream* audio_receive_stream = nullptr;
1213 if (params_.audio) {
1214 audio_send_config_ = AudioSendStream::Config(&transport);
1215 audio_send_config_.voe_channel_id = voe.send_channel_id;
1216 audio_send_config_.rtp.ssrc = kAudioSendSsrc;
1217 audio_send_stream_ = call->CreateAudioSendStream(audio_send_config_);
stefan-webrtc 2016/08/08 14:11:18 Is audio configured with BWE?
minyue-webrtc 2016/08/15 15:34:31 The initial CL was made before AudioBWE landed. So
1218
1219 AudioReceiveStream::Config audio_config;
1220 audio_config.rtp.local_ssrc = kReceiverLocalAudioSsrc;
1221 audio_config.rtcp_send_transport = &transport;
1222 audio_config.voe_channel_id = voe.receive_channel_id;
1223 audio_config.rtp.remote_ssrc = audio_send_config_.rtp.ssrc;
1224 audio_config.decoder_factory = decoder_factory_;
1225 if (params_.audio_video_sync)
1226 audio_config.sync_group = kSyncGroup;
1227
1228 audio_receive_stream =call->CreateAudioReceiveStream(audio_config);
1229
1230 const CodecInst kOpusInst = {120, "OPUS", 48000, 960, 2, 64000};
1231 EXPECT_EQ(0, voe.codec->SetSendCodec(voe.send_channel_id, kOpusInst));
1232 }
1233
1234 // Start sending and receiving video.
1235 video_receive_stream->Start();
1150 video_send_stream_->Start(); 1236 video_send_stream_->Start();
1151 capturer_->Start(); 1237 capturer_->Start();
1152 1238
1239 if (params_.audio) {
1240 // Start receiving audio.
1241 audio_receive_stream->Start();
1242 EXPECT_EQ(0, voe.base->StartPlayout(voe.receive_channel_id));
1243 EXPECT_EQ(0, voe.base->StartReceive(voe.receive_channel_id));
1244
1245 // Start sending audio.
1246 audio_send_stream_->Start();
1247 EXPECT_EQ(0, voe.base->StartSend(voe.send_channel_id));
1248 }
1249
1153 test::PressEnterToContinue(); 1250 test::PressEnterToContinue();
1154 1251
1252 if (params_.audio) {
1253 // Stop sending audio.
1254 EXPECT_EQ(0, voe.base->StopSend(voe.send_channel_id));
1255 audio_send_stream_->Stop();
1256
1257 // Stop receiving audio.
1258 EXPECT_EQ(0, voe.base->StopReceive(voe.receive_channel_id));
1259 EXPECT_EQ(0, voe.base->StopPlayout(voe.receive_channel_id));
1260 audio_receive_stream->Stop();
1261 }
1262
1263 // Stop receiving and sending video.
1155 capturer_->Stop(); 1264 capturer_->Stop();
1156 video_send_stream_->Stop(); 1265 video_send_stream_->Stop();
1157 receive_stream->Stop(); 1266 video_receive_stream->Stop();
1158 1267
1159 call->DestroyVideoReceiveStream(receive_stream); 1268 call->DestroyVideoReceiveStream(video_receive_stream);
1160 call->DestroyVideoSendStream(video_send_stream_); 1269 call->DestroyVideoSendStream(video_send_stream_);
1161 1270
1271 if (params_.audio) {
1272 call->DestroyAudioSendStream(audio_send_stream_);
1273 call->DestroyAudioReceiveStream(audio_receive_stream);
1274 }
1275
1162 transport.StopSending(); 1276 transport.StopSending();
1277 if (params_.audio)
1278 DestroyVoiceEngine(&voe);
1163 } 1279 }
1164 1280
1165 } // namespace webrtc 1281 } // namespace webrtc
OLDNEW
« webrtc/video/video_loopback.cc ('K') | « webrtc/video/video_quality_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698