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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc

Issue 2007743003: Add sender controlled playout delay limits (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@cleanup_rtp_hdr_extensions
Patch Set: Addressed comments Created 4 years, 7 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 /* 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 fec_enabled = fec_enabled_; 241 fec_enabled = fec_enabled_;
242 } 242 }
243 243
244 // Register CVO rtp header extension at the first time when we receive a frame 244 // Register CVO rtp header extension at the first time when we receive a frame
245 // with pending rotation. 245 // with pending rotation.
246 RTPSenderInterface::CVOMode cvo_mode = RTPSenderInterface::kCVONone; 246 RTPSenderInterface::CVOMode cvo_mode = RTPSenderInterface::kCVONone;
247 if (video_header && video_header->rotation != kVideoRotation_0) { 247 if (video_header && video_header->rotation != kVideoRotation_0) {
248 cvo_mode = _rtpSender.ActivateCVORtpHeaderExtension(); 248 cvo_mode = _rtpSender.ActivateCVORtpHeaderExtension();
249 } 249 }
250 250
251 uint16_t rtp_header_length = _rtpSender.RTPHeaderLength();
252 size_t payload_bytes_to_send = payloadSize; 251 size_t payload_bytes_to_send = payloadSize;
253 const uint8_t* data = payloadData; 252 const uint8_t* data = payloadData;
254 253
255 // TODO(changbin): we currently don't support to configure the codec to 254 // TODO(changbin): we currently don't support to configure the codec to
256 // output multiple partitions for VP8. Should remove below check after the 255 // output multiple partitions for VP8. Should remove below check after the
257 // issue is fixed. 256 // issue is fixed.
258 const RTPFragmentationHeader* frag = 257 const RTPFragmentationHeader* frag =
259 (videoType == kRtpVideoVp8) ? NULL : fragmentation; 258 (videoType == kRtpVideoVp8) ? NULL : fragmentation;
260 259
261 packetizer->SetPayloadData(data, payload_bytes_to_send, frag); 260 packetizer->SetPayloadData(data, payload_bytes_to_send, frag);
262 261
263 bool first = true; 262 bool first = true;
264 bool last = false; 263 bool last = false;
265 while (!last) { 264 while (!last) {
266 uint8_t dataBuffer[IP_PACKET_SIZE] = {0}; 265 uint8_t dataBuffer[IP_PACKET_SIZE] = {0};
267 size_t payload_bytes_in_packet = 0; 266 size_t payload_bytes_in_packet = 0;
267
268 // Write RTP header.
269 // Note that RTP header size is dynamically computed since there may be
270 // an optional RTP header extension.
271 uint16_t rtp_header_length = _rtpSender.BuildRTPheader(
272 dataBuffer, payloadType, false, captureTimeStamp, capture_time_ms);
273
268 if (!packetizer->NextPacket(&dataBuffer[rtp_header_length], 274 if (!packetizer->NextPacket(&dataBuffer[rtp_header_length],
269 &payload_bytes_in_packet, &last)) { 275 &payload_bytes_in_packet, &last)) {
270 return -1; 276 return -1;
271 } 277 }
272 278
273 // Write RTP header.
274 // Set marker bit true if this is the last packet in frame. 279 // Set marker bit true if this is the last packet in frame.
275 _rtpSender.BuildRTPheader( 280 if (last)
276 dataBuffer, payloadType, last, captureTimeStamp, capture_time_ms); 281 dataBuffer[1] |= kRtpMarkerBitMask;
282
277 // According to 283 // According to
278 // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ 284 // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/
279 // ts_126114v120700p.pdf Section 7.4.5: 285 // ts_126114v120700p.pdf Section 7.4.5:
280 // The MTSI client shall add the payload bytes as defined in this clause 286 // The MTSI client shall add the payload bytes as defined in this clause
281 // onto the last RTP packet in each group of packets which make up a key 287 // onto the last RTP packet in each group of packets which make up a key
282 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265 288 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265
283 // (HEVC)). The MTSI client may also add the payload bytes onto the last RTP 289 // (HEVC)). The MTSI client may also add the payload bytes onto the last RTP
284 // packet in each group of packets which make up another type of frame 290 // packet in each group of packets which make up another type of frame
285 // (e.g. a P-Frame) only if the current value is different from the previous 291 // (e.g. a P-Frame) only if the current value is different from the previous
286 // value sent. 292 // value sent.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 rtc::CritScope cs(&crit_); 353 rtc::CritScope cs(&crit_);
348 return _retransmissionSettings; 354 return _retransmissionSettings;
349 } 355 }
350 356
351 void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) { 357 void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) {
352 rtc::CritScope cs(&crit_); 358 rtc::CritScope cs(&crit_);
353 _retransmissionSettings = settings; 359 _retransmissionSettings = settings;
354 } 360 }
355 361
356 } // namespace webrtc 362 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698