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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |