| 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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 writer_.WriteU32(local_ssrc_); // Add our own SSRC. | 200 writer_.WriteU32(local_ssrc_); // Add our own SSRC. |
| 201 writer_.WriteU8(4); // Add block type. | 201 writer_.WriteU8(4); // Add block type. |
| 202 writer_.WriteU8(0); // Add reserved. | 202 writer_.WriteU8(0); // Add reserved. |
| 203 writer_.WriteU16(2); // Block length. | 203 writer_.WriteU16(2); // Block length. |
| 204 | 204 |
| 205 // Add the media (received RTP) SSRC. | 205 // Add the media (received RTP) SSRC. |
| 206 writer_.WriteU32(rrtr.ntp_seconds); | 206 writer_.WriteU32(rrtr.ntp_seconds); |
| 207 writer_.WriteU32(rrtr.ntp_fraction); | 207 writer_.WriteU32(rrtr.ntp_fraction); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void RtcpBuilder::AddPli(const RtcpPliMessage& pli_message) { |
| 211 AddRtcpHeader(kPacketTypePayloadSpecific, 1); |
| 212 writer_.WriteU32(local_ssrc_); |
| 213 writer_.WriteU32(pli_message.remote_ssrc); |
| 214 } |
| 215 |
| 210 void RtcpBuilder::AddCast(const RtcpCastMessage& cast, | 216 void RtcpBuilder::AddCast(const RtcpCastMessage& cast, |
| 211 base::TimeDelta target_delay) { | 217 base::TimeDelta target_delay) { |
| 212 // See RTC 4585 Section 6.4 for application specific feedback messages. | 218 // See RTC 4585 Section 6.4 for application specific feedback messages. |
| 213 AddRtcpHeader(kPacketTypePayloadSpecific, 15); | 219 AddRtcpHeader(kPacketTypePayloadSpecific, 15); |
| 214 writer_.WriteU32(local_ssrc_); // Add our own SSRC. | 220 writer_.WriteU32(local_ssrc_); // Add our own SSRC. |
| 215 writer_.WriteU32(cast.media_ssrc); // Remote SSRC. | 221 writer_.WriteU32(cast.remote_ssrc); // Remote SSRC. |
| 216 writer_.WriteU32(kCast); | 222 writer_.WriteU32(kCast); |
| 217 writer_.WriteU8(static_cast<uint8_t>(cast.ack_frame_id)); | 223 writer_.WriteU8(static_cast<uint8_t>(cast.ack_frame_id)); |
| 218 uint8_t* cast_loss_field_pos = reinterpret_cast<uint8_t*>(writer_.ptr()); | 224 uint8_t* cast_loss_field_pos = reinterpret_cast<uint8_t*>(writer_.ptr()); |
| 219 writer_.WriteU8(0); // Overwritten with number_of_loss_fields. | 225 writer_.WriteU8(0); // Overwritten with number_of_loss_fields. |
| 220 DCHECK_LE(target_delay.InMilliseconds(), | 226 DCHECK_LE(target_delay.InMilliseconds(), |
| 221 std::numeric_limits<uint16_t>::max()); | 227 std::numeric_limits<uint16_t>::max()); |
| 222 writer_.WriteU16(target_delay.InMilliseconds()); | 228 writer_.WriteU16(target_delay.InMilliseconds()); |
| 223 | 229 |
| 224 size_t number_of_loss_fields = 0; | 230 size_t number_of_loss_fields = 0; |
| 225 size_t max_number_of_loss_fields = std::min<size_t>( | 231 size_t max_number_of_loss_fields = std::min<size_t>( |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 } else { | 267 } else { |
| 262 break; | 268 break; |
| 263 } | 269 } |
| 264 } | 270 } |
| 265 writer_.WriteU8(bitmask); | 271 writer_.WriteU8(bitmask); |
| 266 ++number_of_loss_fields; | 272 ++number_of_loss_fields; |
| 267 } | 273 } |
| 268 } | 274 } |
| 269 } | 275 } |
| 270 VLOG_IF(1, !nack_string_builder.Empty()) | 276 VLOG_IF(1, !nack_string_builder.Empty()) |
| 271 << "SSRC: " << cast.media_ssrc << ", ACK: " << cast.ack_frame_id | 277 << "SSRC: " << cast.remote_ssrc << ", ACK: " << cast.ack_frame_id |
| 272 << ", NACK: " << nack_string_builder.GetString(); | 278 << ", NACK: " << nack_string_builder.GetString(); |
| 273 DCHECK_LE(number_of_loss_fields, kRtcpMaxCastLossFields); | 279 DCHECK_LE(number_of_loss_fields, kRtcpMaxCastLossFields); |
| 274 *cast_loss_field_pos = static_cast<uint8_t>(number_of_loss_fields); | 280 *cast_loss_field_pos = static_cast<uint8_t>(number_of_loss_fields); |
| 275 } | 281 } |
| 276 | 282 |
| 277 void RtcpBuilder::AddSR(const RtcpSenderInfo& sender_info) { | 283 void RtcpBuilder::AddSR(const RtcpSenderInfo& sender_info) { |
| 278 AddRtcpHeader(kPacketTypeSenderReport, 0); | 284 AddRtcpHeader(kPacketTypeSenderReport, 0); |
| 279 writer_.WriteU32(local_ssrc_); | 285 writer_.WriteU32(local_ssrc_); |
| 280 writer_.WriteU32(sender_info.ntp_seconds); | 286 writer_.WriteU32(sender_info.ntp_seconds); |
| 281 writer_.WriteU32(sender_info.ntp_fraction); | 287 writer_.WriteU32(sender_info.ntp_fraction); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 receiver_log_message->push_front(frame_log); | 462 receiver_log_message->push_front(frame_log); |
| 457 } | 463 } |
| 458 | 464 |
| 459 VLOG(3) << "number of frames: " << number_of_frames; | 465 VLOG(3) << "number of frames: " << number_of_frames; |
| 460 VLOG(3) << "total messages to send: " << *total_number_of_messages_to_send; | 466 VLOG(3) << "total messages to send: " << *total_number_of_messages_to_send; |
| 461 return number_of_frames > 0; | 467 return number_of_frames > 0; |
| 462 } | 468 } |
| 463 | 469 |
| 464 } // namespace cast | 470 } // namespace cast |
| 465 } // namespace media | 471 } // namespace media |
| OLD | NEW |