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

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: 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
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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 packet_->data.resize(kMaxIpPacketSize - writer_.remaining()); 157 packet_->data.resize(kMaxIpPacketSize - writer_.remaining());
158 writer_ = base::BigEndianWriter(NULL, 0); 158 writer_ = base::BigEndianWriter(NULL, 0);
159 PacketRef ret = packet_; 159 PacketRef ret = packet_;
160 packet_ = NULL; 160 packet_ = NULL;
161 return ret; 161 return ret;
162 } 162 }
163 163
164 PacketRef RtcpBuilder::BuildRtcpFromReceiver( 164 PacketRef RtcpBuilder::BuildRtcpFromReceiver(
165 const RtcpReportBlock* report_block, 165 const RtcpReportBlock* report_block,
166 const RtcpReceiverReferenceTimeReport* rrtr, 166 const RtcpReceiverReferenceTimeReport* rrtr,
167 const RtcpCastMessage* cast_message, 167 const RtcpCastMessage* cast_message,
miu 2016/02/26 23:36:06 Add PLI argument here.
xjz 2016/02/27 05:53:32 Done.
168 const ReceiverRtcpEventSubscriber::RtcpEvents* rtcp_events, 168 const ReceiverRtcpEventSubscriber::RtcpEvents* rtcp_events,
169 base::TimeDelta target_delay) { 169 base::TimeDelta target_delay) {
170 Start(); 170 Start();
171 171
172 if (report_block) 172 if (report_block)
173 AddRR(report_block); 173 AddRR(report_block);
174 if (rrtr) 174 if (rrtr)
175 AddRrtr(rrtr); 175 AddRrtr(rrtr);
176 if (cast_message) 176 if (cast_message)
177 AddCast(cast_message, target_delay); 177 AddCast(cast_message, target_delay);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 writer_.WriteU32(ssrc_); // Add our own SSRC. 220 writer_.WriteU32(ssrc_); // Add our own SSRC.
221 writer_.WriteU8(4); // Add block type. 221 writer_.WriteU8(4); // Add block type.
222 writer_.WriteU8(0); // Add reserved. 222 writer_.WriteU8(0); // Add reserved.
223 writer_.WriteU16(2); // Block length. 223 writer_.WriteU16(2); // Block length.
224 224
225 // Add the media (received RTP) SSRC. 225 // Add the media (received RTP) SSRC.
226 writer_.WriteU32(rrtr->ntp_seconds); 226 writer_.WriteU32(rrtr->ntp_seconds);
227 writer_.WriteU32(rrtr->ntp_fraction); 227 writer_.WriteU32(rrtr->ntp_fraction);
228 } 228 }
229 229
230 void RtcpBuilder::AddPli(const RtcpCastMessage* cast_message) {
231 AddRtcpHeader(kPacketTypePayloadSpecific, 1);
232 writer_.WriteU32(ssrc_);
233 writer_.WriteU32(cast_message->media_ssrc);
234 }
235
230 void RtcpBuilder::AddCast(const RtcpCastMessage* cast, 236 void RtcpBuilder::AddCast(const RtcpCastMessage* cast,
231 base::TimeDelta target_delay) { 237 base::TimeDelta target_delay) {
232 // See RTC 4585 Section 6.4 for application specific feedback messages. 238 // See RTC 4585 Section 6.4 for application specific feedback messages.
239 if (cast->picture_loss_indicator) {
240 AddPli(cast);
241 return;
miu 2016/02/26 23:36:06 Remove this, since you'll want to call AddPli() fr
xjz 2016/02/27 05:53:32 Done.
242 }
233 AddRtcpHeader(kPacketTypePayloadSpecific, 15); 243 AddRtcpHeader(kPacketTypePayloadSpecific, 15);
234 writer_.WriteU32(ssrc_); // Add our own SSRC. 244 writer_.WriteU32(ssrc_); // Add our own SSRC.
235 writer_.WriteU32(cast->media_ssrc); // Remote SSRC. 245 writer_.WriteU32(cast->media_ssrc); // Remote SSRC.
236 writer_.WriteU32(kCast); 246 writer_.WriteU32(kCast);
237 writer_.WriteU8(static_cast<uint8_t>(cast->ack_frame_id)); 247 writer_.WriteU8(static_cast<uint8_t>(cast->ack_frame_id));
238 uint8_t* cast_loss_field_pos = reinterpret_cast<uint8_t*>(writer_.ptr()); 248 uint8_t* cast_loss_field_pos = reinterpret_cast<uint8_t*>(writer_.ptr());
239 writer_.WriteU8(0); // Overwritten with number_of_loss_fields. 249 writer_.WriteU8(0); // Overwritten with number_of_loss_fields.
240 DCHECK_LE(target_delay.InMilliseconds(), 250 DCHECK_LE(target_delay.InMilliseconds(),
241 std::numeric_limits<uint16_t>::max()); 251 std::numeric_limits<uint16_t>::max());
242 writer_.WriteU16(target_delay.InMilliseconds()); 252 writer_.WriteU16(target_delay.InMilliseconds());
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 receiver_log_message->push_front(frame_log); 487 receiver_log_message->push_front(frame_log);
478 } 488 }
479 489
480 VLOG(3) << "number of frames: " << number_of_frames; 490 VLOG(3) << "number of frames: " << number_of_frames;
481 VLOG(3) << "total messages to send: " << *total_number_of_messages_to_send; 491 VLOG(3) << "total messages to send: " << *total_number_of_messages_to_send;
482 return number_of_frames > 0; 492 return number_of_frames > 0;
483 } 493 }
484 494
485 } // namespace cast 495 } // namespace cast
486 } // namespace media 496 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698