OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 producer_fec_.AddRtpPacketAndGenerateFec(data_buffer, payload_length, | 135 producer_fec_.AddRtpPacketAndGenerateFec(data_buffer, payload_length, |
136 rtp_header_length); | 136 rtp_header_length); |
137 } | 137 } |
138 uint16_t num_fec_packets = producer_fec_.NumAvailableFecPackets(); | 138 uint16_t num_fec_packets = producer_fec_.NumAvailableFecPackets(); |
139 if (num_fec_packets > 0) { | 139 if (num_fec_packets > 0) { |
140 next_fec_sequence_number = | 140 next_fec_sequence_number = |
141 _rtpSender.AllocateSequenceNumber(num_fec_packets); | 141 _rtpSender.AllocateSequenceNumber(num_fec_packets); |
142 fec_packets = producer_fec_.GetFecPackets( | 142 fec_packets = producer_fec_.GetFecPackets( |
143 _payloadTypeRED, _payloadTypeFEC, next_fec_sequence_number, | 143 _payloadTypeRED, _payloadTypeFEC, next_fec_sequence_number, |
144 rtp_header_length); | 144 rtp_header_length); |
145 DCHECK_EQ(num_fec_packets, fec_packets.size()); | 145 RTC_DCHECK_EQ(num_fec_packets, fec_packets.size()); |
146 if (_retransmissionSettings & kRetransmitFECPackets) | 146 if (_retransmissionSettings & kRetransmitFECPackets) |
147 fec_storage = kAllowRetransmission; | 147 fec_storage = kAllowRetransmission; |
148 } | 148 } |
149 } | 149 } |
150 if (_rtpSender.SendToNetwork( | 150 if (_rtpSender.SendToNetwork( |
151 red_packet->data(), red_packet->length() - rtp_header_length, | 151 red_packet->data(), red_packet->length() - rtp_header_length, |
152 rtp_header_length, capture_time_ms, media_packet_storage, | 152 rtp_header_length, capture_time_ms, media_packet_storage, |
153 PacedSender::kNormalPriority) == 0) { | 153 PacedSender::kNormalPriority) == 0) { |
154 _videoBitrate.Update(red_packet->length()); | 154 _videoBitrate.Update(red_packet->length()); |
155 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), | 155 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 // (The base RTP header is already protected by the FEC header.) | 229 // (The base RTP header is already protected by the FEC header.) |
230 return ForwardErrorCorrection::PacketOverhead() + REDForFECHeaderLength + | 230 return ForwardErrorCorrection::PacketOverhead() + REDForFECHeaderLength + |
231 (_rtpSender.RTPHeaderLength() - kRtpHeaderSize); | 231 (_rtpSender.RTPHeaderLength() - kRtpHeaderSize); |
232 } | 232 } |
233 return 0; | 233 return 0; |
234 } | 234 } |
235 | 235 |
236 void RTPSenderVideo::SetFecParameters(const FecProtectionParams* delta_params, | 236 void RTPSenderVideo::SetFecParameters(const FecProtectionParams* delta_params, |
237 const FecProtectionParams* key_params) { | 237 const FecProtectionParams* key_params) { |
238 CriticalSectionScoped cs(crit_.get()); | 238 CriticalSectionScoped cs(crit_.get()); |
239 DCHECK(delta_params); | 239 RTC_DCHECK(delta_params); |
240 DCHECK(key_params); | 240 RTC_DCHECK(key_params); |
241 delta_fec_params_ = *delta_params; | 241 delta_fec_params_ = *delta_params; |
242 key_fec_params_ = *key_params; | 242 key_fec_params_ = *key_params; |
243 } | 243 } |
244 | 244 |
245 int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType, | 245 int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType, |
246 const FrameType frameType, | 246 const FrameType frameType, |
247 const int8_t payloadType, | 247 const int8_t payloadType, |
248 const uint32_t captureTimeStamp, | 248 const uint32_t captureTimeStamp, |
249 int64_t capture_time_ms, | 249 int64_t capture_time_ms, |
250 const uint8_t* payloadData, | 250 const uint8_t* payloadData, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 // ts_126114v120700p.pdf Section 7.4.5: | 306 // ts_126114v120700p.pdf Section 7.4.5: |
307 // The MTSI client shall add the payload bytes as defined in this clause | 307 // The MTSI client shall add the payload bytes as defined in this clause |
308 // onto the last RTP packet in each group of packets which make up a key | 308 // onto the last RTP packet in each group of packets which make up a key |
309 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265 | 309 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265 |
310 // (HEVC)). The MTSI client may also add the payload bytes onto the last RTP | 310 // (HEVC)). The MTSI client may also add the payload bytes onto the last RTP |
311 // packet in each group of packets which make up another type of frame | 311 // packet in each group of packets which make up another type of frame |
312 // (e.g. a P-Frame) only if the current value is different from the previous | 312 // (e.g. a P-Frame) only if the current value is different from the previous |
313 // value sent. | 313 // value sent. |
314 // Here we are adding it to every packet of every frame at this point. | 314 // Here we are adding it to every packet of every frame at this point. |
315 if (!rtpHdr) { | 315 if (!rtpHdr) { |
316 DCHECK(!_rtpSender.IsRtpHeaderExtensionRegistered( | 316 RTC_DCHECK(!_rtpSender.IsRtpHeaderExtensionRegistered( |
317 kRtpExtensionVideoRotation)); | 317 kRtpExtensionVideoRotation)); |
318 } else if (cvo_mode == RTPSenderInterface::kCVOActivated) { | 318 } else if (cvo_mode == RTPSenderInterface::kCVOActivated) { |
319 // Checking whether CVO header extension is registered will require taking | 319 // Checking whether CVO header extension is registered will require taking |
320 // a lock. It'll be a no-op if it's not registered. | 320 // a lock. It'll be a no-op if it's not registered. |
321 // TODO(guoweis): For now, all packets sent will carry the CVO such that | 321 // TODO(guoweis): For now, all packets sent will carry the CVO such that |
322 // the RTP header length is consistent, although the receiver side will | 322 // the RTP header length is consistent, although the receiver side will |
323 // only exam the packets with market bit set. | 323 // only exam the packets with market bit set. |
324 size_t packetSize = payloadSize + rtp_header_length; | 324 size_t packetSize = payloadSize + rtp_header_length; |
325 RtpUtility::RtpHeaderParser rtp_parser(dataBuffer, packetSize); | 325 RtpUtility::RtpHeaderParser rtp_parser(dataBuffer, packetSize); |
326 RTPHeader rtp_header; | 326 RTPHeader rtp_header; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 CriticalSectionScoped cs(crit_.get()); | 370 CriticalSectionScoped cs(crit_.get()); |
371 return _retransmissionSettings; | 371 return _retransmissionSettings; |
372 } | 372 } |
373 | 373 |
374 void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) { | 374 void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) { |
375 CriticalSectionScoped cs(crit_.get()); | 375 CriticalSectionScoped cs(crit_.get()); |
376 _retransmissionSettings = settings; | 376 _retransmissionSettings = settings; |
377 } | 377 } |
378 | 378 |
379 } // namespace webrtc | 379 } // namespace webrtc |
OLD | NEW |