| 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 |