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

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

Issue 2217383002: Use RtpPacketToSend in RtpSenderVideo (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Ported PlayoutDelay extension support. Created 4 years, 3 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
11 #include "webrtc/modules/rtp_rtcp/source/producer_fec.h" 11 #include "webrtc/modules/rtp_rtcp/source/producer_fec.h"
12 12
13 #include <memory> 13 #include <memory>
14 #include <utility> 14 #include <utility>
15 15
16 #include "webrtc/base/basictypes.h" 16 #include "webrtc/base/basictypes.h"
17 #include "webrtc/base/checks.h" 17 #include "webrtc/base/checks.h"
18 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 18 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
19 #include "webrtc/modules/rtp_rtcp/source/forward_error_correction.h" 19 #include "webrtc/modules/rtp_rtcp/source/forward_error_correction.h"
20 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.h"
20 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 21 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
21 22
22 namespace webrtc { 23 namespace webrtc {
23 24
24 constexpr size_t kRedForFecHeaderLength = 1; 25 constexpr size_t kRedForFecHeaderLength = 1;
25 26
26 // This controls the maximum amount of excess overhead (actual - target) 27 // This controls the maximum amount of excess overhead (actual - target)
27 // allowed in order to trigger GenerateFec(), before |params_.max_fec_frames| 28 // allowed in order to trigger GenerateFec(), before |params_.max_fec_frames|
28 // is reached. Overhead here is defined as relative to number of media packets. 29 // is reached. Overhead here is defined as relative to number of media packets.
29 constexpr int kMaxExcessOverhead = 50; // Q8. 30 constexpr int kMaxExcessOverhead = 50; // Q8.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 params_(), 103 params_(),
103 new_params_() { 104 new_params_() {
104 memset(&params_, 0, sizeof(params_)); 105 memset(&params_, 0, sizeof(params_));
105 memset(&new_params_, 0, sizeof(new_params_)); 106 memset(&new_params_, 0, sizeof(new_params_));
106 } 107 }
107 108
108 ProducerFec::~ProducerFec() { 109 ProducerFec::~ProducerFec() {
109 DeleteMediaPackets(); 110 DeleteMediaPackets();
110 } 111 }
111 112
113 void ProducerFec::BuildRedPacket(int red_payload_type,
114 const RtpPacketToSend& media_packet,
115 RtpPacketToSend* red_packet) {
116 RTC_DCHECK_GE(red_packet->capacity(),
117 media_packet.size() + kRedForFecHeaderLength);
118 red_packet->CopyHeaderFrom(media_packet);
119 red_packet->SetPayloadType(red_payload_type);
120 uint8_t* red_payload = red_packet->AllocatePayload(
121 kRedForFecHeaderLength + media_packet.payload_size());
122 red_payload[0] = media_packet.PayloadType();
123 memcpy(&red_payload[kRedForFecHeaderLength], media_packet.payload(),
124 media_packet.payload_size());
125 red_packet->set_capture_time_ms(media_packet.capture_time_ms());
126 }
127
112 std::unique_ptr<RedPacket> ProducerFec::BuildRedPacket( 128 std::unique_ptr<RedPacket> ProducerFec::BuildRedPacket(
113 const uint8_t* data_buffer, 129 const uint8_t* data_buffer,
114 size_t payload_length, 130 size_t payload_length,
115 size_t rtp_header_length, 131 size_t rtp_header_length,
116 int red_payload_type) { 132 int red_payload_type) {
117 std::unique_ptr<RedPacket> red_packet(new RedPacket( 133 std::unique_ptr<RedPacket> red_packet(new RedPacket(
118 payload_length + kRedForFecHeaderLength + rtp_header_length)); 134 payload_length + kRedForFecHeaderLength + rtp_header_length));
119 int payload_type = data_buffer[1] & 0x7f; 135 int payload_type = data_buffer[1] & 0x7f;
120 red_packet->CreateHeader(data_buffer, rtp_header_length, red_payload_type, 136 red_packet->CreateHeader(data_buffer, rtp_header_length, red_payload_type,
121 payload_type); 137 payload_type);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 fec_->GetNumberOfFecPackets(media_packets_.size(), params_.fec_rate); 277 fec_->GetNumberOfFecPackets(media_packets_.size(), params_.fec_rate);
262 // Return the overhead in Q8. 278 // Return the overhead in Q8.
263 return (num_fec_packets << 8) / media_packets_.size(); 279 return (num_fec_packets << 8) / media_packets_.size();
264 } 280 }
265 281
266 void ProducerFec::DeleteMediaPackets() { 282 void ProducerFec::DeleteMediaPackets() {
267 media_packets_.clear(); 283 media_packets_.clear();
268 } 284 }
269 285
270 } // namespace webrtc 286 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/producer_fec.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698