OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cast/net/rtcp/rtcp_builder.h" | 5 #include "media/cast/net/rtcp/rtcp_builder.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <vector> | 10 #include <vector> |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 << ", NACK: " << nack_string_builder.GetString(); | 293 << ", NACK: " << nack_string_builder.GetString(); |
294 DCHECK_LE(number_of_loss_fields, kRtcpMaxCastLossFields); | 294 DCHECK_LE(number_of_loss_fields, kRtcpMaxCastLossFields); |
295 *cast_loss_field_pos = static_cast<uint8_t>(number_of_loss_fields); | 295 *cast_loss_field_pos = static_cast<uint8_t>(number_of_loss_fields); |
296 } | 296 } |
297 | 297 |
298 void RtcpBuilder::AddSR(const RtcpSenderInfo& sender_info) { | 298 void RtcpBuilder::AddSR(const RtcpSenderInfo& sender_info) { |
299 AddRtcpHeader(kPacketTypeSenderReport, 0); | 299 AddRtcpHeader(kPacketTypeSenderReport, 0); |
300 writer_.WriteU32(ssrc_); | 300 writer_.WriteU32(ssrc_); |
301 writer_.WriteU32(sender_info.ntp_seconds); | 301 writer_.WriteU32(sender_info.ntp_seconds); |
302 writer_.WriteU32(sender_info.ntp_fraction); | 302 writer_.WriteU32(sender_info.ntp_fraction); |
303 writer_.WriteU32(sender_info.rtp_timestamp); | 303 writer_.WriteU32(sender_info.rtp_timestamp.lower_32_bits()); |
304 writer_.WriteU32(sender_info.send_packet_count); | 304 writer_.WriteU32(sender_info.send_packet_count); |
305 writer_.WriteU32(static_cast<uint32_t>(sender_info.send_octet_count)); | 305 writer_.WriteU32(static_cast<uint32_t>(sender_info.send_octet_count)); |
306 } | 306 } |
307 | 307 |
308 /* | 308 /* |
309 0 1 2 3 | 309 0 1 2 3 |
310 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 310 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
311 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 311 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
312 |V=2|P|reserved | PT=XR=207 | length | | 312 |V=2|P|reserved | PT=XR=207 | length | |
313 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 313 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 AddRtcpHeader(kPacketTypeApplicationDefined, kReceiverLogSubtype); | 347 AddRtcpHeader(kPacketTypeApplicationDefined, kReceiverLogSubtype); |
348 writer_.WriteU32(ssrc_); // Add our own SSRC. | 348 writer_.WriteU32(ssrc_); // Add our own SSRC. |
349 writer_.WriteU32(kCast); | 349 writer_.WriteU32(kCast); |
350 | 350 |
351 while (!receiver_log_message.empty() && | 351 while (!receiver_log_message.empty() && |
352 total_number_of_messages_to_send > 0) { | 352 total_number_of_messages_to_send > 0) { |
353 RtcpReceiverFrameLogMessage& frame_log_messages( | 353 RtcpReceiverFrameLogMessage& frame_log_messages( |
354 receiver_log_message.front()); | 354 receiver_log_message.front()); |
355 | 355 |
356 // Add our frame header. | 356 // Add our frame header. |
357 writer_.WriteU32(frame_log_messages.rtp_timestamp_); | 357 writer_.WriteU32(frame_log_messages.rtp_timestamp_.lower_32_bits()); |
358 size_t messages_in_frame = frame_log_messages.event_log_messages_.size(); | 358 size_t messages_in_frame = frame_log_messages.event_log_messages_.size(); |
359 if (messages_in_frame > total_number_of_messages_to_send) { | 359 if (messages_in_frame > total_number_of_messages_to_send) { |
360 // We are running out of space. | 360 // We are running out of space. |
361 messages_in_frame = total_number_of_messages_to_send; | 361 messages_in_frame = total_number_of_messages_to_send; |
362 } | 362 } |
363 // Keep track of how many messages we have left to send. | 363 // Keep track of how many messages we have left to send. |
364 total_number_of_messages_to_send -= messages_in_frame; | 364 total_number_of_messages_to_send -= messages_in_frame; |
365 | 365 |
366 // On the wire format is number of messages - 1. | 366 // On the wire format is number of messages - 1. |
367 writer_.WriteU8(static_cast<uint8_t>(messages_in_frame - 1)); | 367 writer_.WriteU8(static_cast<uint8_t>(messages_in_frame - 1)); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 425 |
426 // Account for the RTCP header for an application-defined packet. | 426 // Account for the RTCP header for an application-defined packet. |
427 remaining_space -= kRtcpCastLogHeaderSize; | 427 remaining_space -= kRtcpCastLogHeaderSize; |
428 | 428 |
429 ReceiverRtcpEventSubscriber::RtcpEvents::const_reverse_iterator rit = | 429 ReceiverRtcpEventSubscriber::RtcpEvents::const_reverse_iterator rit = |
430 rtcp_events.rbegin(); | 430 rtcp_events.rbegin(); |
431 | 431 |
432 while (rit != rtcp_events.rend() && | 432 while (rit != rtcp_events.rend() && |
433 remaining_space >= | 433 remaining_space >= |
434 kRtcpReceiverFrameLogSize + kRtcpReceiverEventLogSize) { | 434 kRtcpReceiverFrameLogSize + kRtcpReceiverEventLogSize) { |
435 const RtpTimestamp rtp_timestamp = rit->first; | 435 const RtpTimeTicks rtp_timestamp = rit->first; |
436 RtcpReceiverFrameLogMessage frame_log(rtp_timestamp); | 436 RtcpReceiverFrameLogMessage frame_log(rtp_timestamp); |
437 remaining_space -= kRtcpReceiverFrameLogSize; | 437 remaining_space -= kRtcpReceiverFrameLogSize; |
438 ++number_of_frames; | 438 ++number_of_frames; |
439 | 439 |
440 // Get all events of a single frame. | 440 // Get all events of a single frame. |
441 sorted_log_messages.clear(); | 441 sorted_log_messages.clear(); |
442 do { | 442 do { |
443 RtcpReceiverEventLogMessage event_log_message; | 443 RtcpReceiverEventLogMessage event_log_message; |
444 event_log_message.type = rit->second.type; | 444 event_log_message.type = rit->second.type; |
445 event_log_message.event_timestamp = rit->second.timestamp; | 445 event_log_message.event_timestamp = rit->second.timestamp; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 receiver_log_message->push_front(frame_log); | 477 receiver_log_message->push_front(frame_log); |
478 } | 478 } |
479 | 479 |
480 VLOG(3) << "number of frames: " << number_of_frames; | 480 VLOG(3) << "number of frames: " << number_of_frames; |
481 VLOG(3) << "total messages to send: " << *total_number_of_messages_to_send; | 481 VLOG(3) << "total messages to send: " << *total_number_of_messages_to_send; |
482 return number_of_frames > 0; | 482 return number_of_frames > 0; |
483 } | 483 } |
484 | 484 |
485 } // namespace cast | 485 } // namespace cast |
486 } // namespace media | 486 } // namespace media |
OLD | NEW |