OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 | 10 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 } | 97 } |
98 RTC_DCHECK(0 <= byte && byte <= 255); | 98 RTC_DCHECK(0 <= byte && byte <= 255); |
99 varint |= static_cast<uint64_t>(byte & 0x7F) << (7 * bytes_read); | 99 varint |= static_cast<uint64_t>(byte & 0x7F) << (7 * bytes_read); |
100 if ((byte & 0x80) == 0) { | 100 if ((byte & 0x80) == 0) { |
101 return std::make_pair(varint, true); | 101 return std::make_pair(varint, true); |
102 } | 102 } |
103 } | 103 } |
104 return std::make_pair(varint, false); | 104 return std::make_pair(varint, false); |
105 } | 105 } |
106 | 106 |
| 107 void GetHeaderExtensions( |
| 108 std::vector<RtpExtension>* header_extensions, |
| 109 const google::protobuf::RepeatedPtrField<rtclog::RtpHeaderExtension>& |
| 110 proto_header_extensions) { |
| 111 header_extensions->clear(); |
| 112 for (auto& p : proto_header_extensions) { |
| 113 RTC_CHECK(p.has_name()); |
| 114 RTC_CHECK(p.has_id()); |
| 115 const std::string& name = p.name(); |
| 116 int id = p.id(); |
| 117 header_extensions->push_back(RtpExtension(name, id)); |
| 118 } |
| 119 } |
| 120 |
107 } // namespace | 121 } // namespace |
108 | 122 |
109 bool ParsedRtcEventLog::ParseFile(const std::string& filename) { | 123 bool ParsedRtcEventLog::ParseFile(const std::string& filename) { |
110 std::ifstream file(filename, std::ios_base::in | std::ios_base::binary); | 124 std::ifstream file(filename, std::ios_base::in | std::ios_base::binary); |
111 if (!file.good() || !file.is_open()) { | 125 if (!file.good() || !file.is_open()) { |
112 LOG(LS_WARNING) << "Could not open file for reading."; | 126 LOG(LS_WARNING) << "Could not open file for reading."; |
113 return false; | 127 return false; |
114 } | 128 } |
115 | 129 |
116 return ParseStream(file); | 130 return ParseStream(file); |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 RTC_CHECK(map.has_payload_type()); | 318 RTC_CHECK(map.has_payload_type()); |
305 RTC_CHECK(map.has_config()); | 319 RTC_CHECK(map.has_config()); |
306 RTC_CHECK(map.config().has_rtx_ssrc()); | 320 RTC_CHECK(map.config().has_rtx_ssrc()); |
307 RTC_CHECK(map.config().has_rtx_payload_type()); | 321 RTC_CHECK(map.config().has_rtx_payload_type()); |
308 webrtc::VideoReceiveStream::Config::Rtp::Rtx rtx_pair; | 322 webrtc::VideoReceiveStream::Config::Rtp::Rtx rtx_pair; |
309 rtx_pair.ssrc = map.config().rtx_ssrc(); | 323 rtx_pair.ssrc = map.config().rtx_ssrc(); |
310 rtx_pair.payload_type = map.config().rtx_payload_type(); | 324 rtx_pair.payload_type = map.config().rtx_payload_type(); |
311 config->rtp.rtx.insert(std::make_pair(map.payload_type(), rtx_pair)); | 325 config->rtp.rtx.insert(std::make_pair(map.payload_type(), rtx_pair)); |
312 } | 326 } |
313 // Get header extensions. | 327 // Get header extensions. |
314 config->rtp.extensions.clear(); | 328 GetHeaderExtensions(&config->rtp.extensions, |
315 for (int i = 0; i < receiver_config.header_extensions_size(); i++) { | 329 receiver_config.header_extensions()); |
316 RTC_CHECK(receiver_config.header_extensions(i).has_name()); | |
317 RTC_CHECK(receiver_config.header_extensions(i).has_id()); | |
318 const std::string& name = receiver_config.header_extensions(i).name(); | |
319 int id = receiver_config.header_extensions(i).id(); | |
320 config->rtp.extensions.push_back(RtpExtension(name, id)); | |
321 } | |
322 // Get decoders. | 330 // Get decoders. |
323 config->decoders.clear(); | 331 config->decoders.clear(); |
324 for (int i = 0; i < receiver_config.decoders_size(); i++) { | 332 for (int i = 0; i < receiver_config.decoders_size(); i++) { |
325 RTC_CHECK(receiver_config.decoders(i).has_name()); | 333 RTC_CHECK(receiver_config.decoders(i).has_name()); |
326 RTC_CHECK(receiver_config.decoders(i).has_payload_type()); | 334 RTC_CHECK(receiver_config.decoders(i).has_payload_type()); |
327 VideoReceiveStream::Decoder decoder; | 335 VideoReceiveStream::Decoder decoder; |
328 decoder.payload_name = receiver_config.decoders(i).name(); | 336 decoder.payload_name = receiver_config.decoders(i).name(); |
329 decoder.payload_type = receiver_config.decoders(i).payload_type(); | 337 decoder.payload_type = receiver_config.decoders(i).payload_type(); |
330 config->decoders.push_back(decoder); | 338 config->decoders.push_back(decoder); |
331 } | 339 } |
332 } | 340 } |
333 | 341 |
334 void ParsedRtcEventLog::GetVideoSendConfig( | 342 void ParsedRtcEventLog::GetVideoSendConfig( |
335 size_t index, | 343 size_t index, |
336 VideoSendStream::Config* config) const { | 344 VideoSendStream::Config* config) const { |
337 RTC_CHECK_LT(index, GetNumberOfEvents()); | 345 RTC_CHECK_LT(index, GetNumberOfEvents()); |
338 const rtclog::Event& event = events_[index]; | 346 const rtclog::Event& event = events_[index]; |
339 RTC_CHECK(config != nullptr); | 347 RTC_CHECK(config != nullptr); |
340 RTC_CHECK(event.has_type()); | 348 RTC_CHECK(event.has_type()); |
341 RTC_CHECK_EQ(event.type(), rtclog::Event::VIDEO_SENDER_CONFIG_EVENT); | 349 RTC_CHECK_EQ(event.type(), rtclog::Event::VIDEO_SENDER_CONFIG_EVENT); |
342 RTC_CHECK(event.has_video_sender_config()); | 350 RTC_CHECK(event.has_video_sender_config()); |
343 const rtclog::VideoSendConfig& sender_config = event.video_sender_config(); | 351 const rtclog::VideoSendConfig& sender_config = event.video_sender_config(); |
344 // Get SSRCs. | 352 // Get SSRCs. |
345 config->rtp.ssrcs.clear(); | 353 config->rtp.ssrcs.clear(); |
346 for (int i = 0; i < sender_config.ssrcs_size(); i++) { | 354 for (int i = 0; i < sender_config.ssrcs_size(); i++) { |
347 config->rtp.ssrcs.push_back(sender_config.ssrcs(i)); | 355 config->rtp.ssrcs.push_back(sender_config.ssrcs(i)); |
348 } | 356 } |
349 // Get header extensions. | 357 // Get header extensions. |
350 config->rtp.extensions.clear(); | 358 GetHeaderExtensions(&config->rtp.extensions, |
351 for (int i = 0; i < sender_config.header_extensions_size(); i++) { | 359 sender_config.header_extensions()); |
352 RTC_CHECK(sender_config.header_extensions(i).has_name()); | |
353 RTC_CHECK(sender_config.header_extensions(i).has_id()); | |
354 const std::string& name = sender_config.header_extensions(i).name(); | |
355 int id = sender_config.header_extensions(i).id(); | |
356 config->rtp.extensions.push_back(RtpExtension(name, id)); | |
357 } | |
358 // Get RTX settings. | 360 // Get RTX settings. |
359 config->rtp.rtx.ssrcs.clear(); | 361 config->rtp.rtx.ssrcs.clear(); |
360 for (int i = 0; i < sender_config.rtx_ssrcs_size(); i++) { | 362 for (int i = 0; i < sender_config.rtx_ssrcs_size(); i++) { |
361 config->rtp.rtx.ssrcs.push_back(sender_config.rtx_ssrcs(i)); | 363 config->rtp.rtx.ssrcs.push_back(sender_config.rtx_ssrcs(i)); |
362 } | 364 } |
363 if (sender_config.rtx_ssrcs_size() > 0) { | 365 if (sender_config.rtx_ssrcs_size() > 0) { |
364 RTC_CHECK(sender_config.has_rtx_payload_type()); | 366 RTC_CHECK(sender_config.has_rtx_payload_type()); |
365 config->rtp.rtx.payload_type = sender_config.rtx_payload_type(); | 367 config->rtp.rtx.payload_type = sender_config.rtx_payload_type(); |
366 } else { | 368 } else { |
367 // Reset RTX payload type default value if no RTX SSRCs are used. | 369 // Reset RTX payload type default value if no RTX SSRCs are used. |
368 config->rtp.rtx.payload_type = -1; | 370 config->rtp.rtx.payload_type = -1; |
369 } | 371 } |
370 // Get encoder. | 372 // Get encoder. |
371 RTC_CHECK(sender_config.has_encoder()); | 373 RTC_CHECK(sender_config.has_encoder()); |
372 RTC_CHECK(sender_config.encoder().has_name()); | 374 RTC_CHECK(sender_config.encoder().has_name()); |
373 RTC_CHECK(sender_config.encoder().has_payload_type()); | 375 RTC_CHECK(sender_config.encoder().has_payload_type()); |
374 config->encoder_settings.payload_name = sender_config.encoder().name(); | 376 config->encoder_settings.payload_name = sender_config.encoder().name(); |
375 config->encoder_settings.payload_type = | 377 config->encoder_settings.payload_type = |
376 sender_config.encoder().payload_type(); | 378 sender_config.encoder().payload_type(); |
377 } | 379 } |
378 | 380 |
| 381 void ParsedRtcEventLog::GetAudioReceiveConfig( |
| 382 size_t index, |
| 383 AudioReceiveStream::Config* config) const { |
| 384 RTC_CHECK_LT(index, GetNumberOfEvents()); |
| 385 const rtclog::Event& event = events_[index]; |
| 386 RTC_CHECK(config != nullptr); |
| 387 RTC_CHECK(event.has_type()); |
| 388 RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_RECEIVER_CONFIG_EVENT); |
| 389 RTC_CHECK(event.has_audio_receiver_config()); |
| 390 const rtclog::AudioReceiveConfig& receiver_config = |
| 391 event.audio_receiver_config(); |
| 392 // Get SSRCs. |
| 393 RTC_CHECK(receiver_config.has_remote_ssrc()); |
| 394 config->rtp.remote_ssrc = receiver_config.remote_ssrc(); |
| 395 RTC_CHECK(receiver_config.has_local_ssrc()); |
| 396 config->rtp.local_ssrc = receiver_config.local_ssrc(); |
| 397 // Get header extensions. |
| 398 GetHeaderExtensions(&config->rtp.extensions, |
| 399 receiver_config.header_extensions()); |
| 400 } |
| 401 |
| 402 void ParsedRtcEventLog::GetAudioSendConfig( |
| 403 size_t index, |
| 404 AudioSendStream::Config* config) const { |
| 405 RTC_CHECK_LT(index, GetNumberOfEvents()); |
| 406 const rtclog::Event& event = events_[index]; |
| 407 RTC_CHECK(config != nullptr); |
| 408 RTC_CHECK(event.has_type()); |
| 409 RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_SENDER_CONFIG_EVENT); |
| 410 RTC_CHECK(event.has_audio_sender_config()); |
| 411 const rtclog::AudioSendConfig& sender_config = event.audio_sender_config(); |
| 412 // Get SSRCs. |
| 413 RTC_CHECK(sender_config.has_ssrc()); |
| 414 config->rtp.ssrc = sender_config.ssrc(); |
| 415 // Get header extensions. |
| 416 GetHeaderExtensions(&config->rtp.extensions, |
| 417 sender_config.header_extensions()); |
| 418 } |
| 419 |
379 void ParsedRtcEventLog::GetAudioPlayout(size_t index, uint32_t* ssrc) const { | 420 void ParsedRtcEventLog::GetAudioPlayout(size_t index, uint32_t* ssrc) const { |
380 RTC_CHECK_LT(index, GetNumberOfEvents()); | 421 RTC_CHECK_LT(index, GetNumberOfEvents()); |
381 const rtclog::Event& event = events_[index]; | 422 const rtclog::Event& event = events_[index]; |
382 RTC_CHECK(event.has_type()); | 423 RTC_CHECK(event.has_type()); |
383 RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_PLAYOUT_EVENT); | 424 RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_PLAYOUT_EVENT); |
384 RTC_CHECK(event.has_audio_playout_event()); | 425 RTC_CHECK(event.has_audio_playout_event()); |
385 const rtclog::AudioPlayoutEvent& loss_event = event.audio_playout_event(); | 426 const rtclog::AudioPlayoutEvent& loss_event = event.audio_playout_event(); |
386 RTC_CHECK(loss_event.has_local_ssrc()); | 427 RTC_CHECK(loss_event.has_local_ssrc()); |
387 if (ssrc != nullptr) { | 428 if (ssrc != nullptr) { |
388 *ssrc = loss_event.local_ssrc(); | 429 *ssrc = loss_event.local_ssrc(); |
(...skipping 18 matching lines...) Expand all Loading... |
407 if (fraction_loss != nullptr) { | 448 if (fraction_loss != nullptr) { |
408 *fraction_loss = loss_event.fraction_loss(); | 449 *fraction_loss = loss_event.fraction_loss(); |
409 } | 450 } |
410 RTC_CHECK(loss_event.has_total_packets()); | 451 RTC_CHECK(loss_event.has_total_packets()); |
411 if (total_packets != nullptr) { | 452 if (total_packets != nullptr) { |
412 *total_packets = loss_event.total_packets(); | 453 *total_packets = loss_event.total_packets(); |
413 } | 454 } |
414 } | 455 } |
415 | 456 |
416 } // namespace webrtc | 457 } // namespace webrtc |
OLD | NEW |