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

Side by Side Diff: media/cast/net/rtcp/rtcp_builder.cc

Issue 1709863002: Add Cast PLI support on sender side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address dcheng's comments. Created 4 years, 9 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
« no previous file with comments | « media/cast/net/rtcp/rtcp_builder.h ('k') | media/cast/net/rtcp/rtcp_builder_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « media/cast/net/rtcp/rtcp_builder.h ('k') | media/cast/net/rtcp/rtcp_builder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698