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

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

Issue 2282473002: Add FlexfecPacketGenerator. (pt. 9) (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@generalize_ulpfec_packet_generator_into_augmented_packet_generator
Patch Set: Rebase. 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/fec_test_helper.h" 11 #include "webrtc/modules/rtp_rtcp/source/fec_test_helper.h"
12 12
13 #include <memory> 13 #include <memory>
14 #include <utility> 14 #include <utility>
15 15
16 #include "webrtc/base/checks.h"
17 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
16 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 18 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
17 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 19 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
18 20
19 namespace webrtc { 21 namespace webrtc {
20 namespace test { 22 namespace test {
21 namespace fec { 23 namespace fec {
22 24
23 namespace { 25 namespace {
24 constexpr uint8_t kFecPayloadType = 96; 26 constexpr uint8_t kFecPayloadType = 96;
25 constexpr uint8_t kRedPayloadType = 97; 27 constexpr uint8_t kRedPayloadType = 97;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 void AugmentedPacketGenerator::WriteRtpHeader(const RTPHeader& header, 130 void AugmentedPacketGenerator::WriteRtpHeader(const RTPHeader& header,
129 uint8_t* data) { 131 uint8_t* data) {
130 data[0] = 0x80; // Version 2. 132 data[0] = 0x80; // Version 2.
131 data[1] = header.payloadType; 133 data[1] = header.payloadType;
132 data[1] |= (header.markerBit ? kRtpMarkerBitMask : 0); 134 data[1] |= (header.markerBit ? kRtpMarkerBitMask : 0);
133 ByteWriter<uint16_t>::WriteBigEndian(data + 2, header.sequenceNumber); 135 ByteWriter<uint16_t>::WriteBigEndian(data + 2, header.sequenceNumber);
134 ByteWriter<uint32_t>::WriteBigEndian(data + 4, header.timestamp); 136 ByteWriter<uint32_t>::WriteBigEndian(data + 4, header.timestamp);
135 ByteWriter<uint32_t>::WriteBigEndian(data + 8, header.ssrc); 137 ByteWriter<uint32_t>::WriteBigEndian(data + 8, header.ssrc);
136 } 138 }
137 139
140 FlexfecPacketGenerator::FlexfecPacketGenerator(uint32_t media_ssrc,
141 uint32_t flexfec_ssrc)
142 : AugmentedPacketGenerator(media_ssrc),
143 flexfec_ssrc_(flexfec_ssrc),
144 flexfec_seq_num_(0),
145 flexfec_timestamp_(0) {}
146
147 std::unique_ptr<AugmentedPacket> FlexfecPacketGenerator::BuildFlexfecPacket(
148 const ForwardErrorCorrection::Packet& packet) {
149 RTC_DCHECK_LE(packet.length,
150 static_cast<size_t>(IP_PACKET_SIZE - kRtpHeaderSize));
151
152 RTPHeader header;
153 header.sequenceNumber = flexfec_seq_num_;
154 ++flexfec_seq_num_;
155 header.timestamp = flexfec_timestamp_;
156 flexfec_timestamp_ += 3000;
philipel 2016/09/21 11:15:27 constexpr int kMagicConstantWithSomeDescriptiveNam
brandtr 2016/09/21 11:59:21 Done.
157 header.ssrc = flexfec_ssrc_;
158
159 std::unique_ptr<AugmentedPacket> packet_with_rtp_header(
160 new AugmentedPacket());
161 memset(packet_with_rtp_header->data, 0, IP_PACKET_SIZE);
philipel 2016/09/21 11:15:27 Do you really need to zero this memory?
brandtr 2016/09/21 11:59:21 No, this was overly cautious of me. Parts of the
162 WriteRtpHeader(header, packet_with_rtp_header->data);
163 memcpy(packet_with_rtp_header->data + kRtpHeaderSize, packet.data,
164 packet.length);
165 packet_with_rtp_header->length = kRtpHeaderSize + packet.length;
166
167 return packet_with_rtp_header;
168 }
169
138 UlpfecPacketGenerator::UlpfecPacketGenerator(uint32_t ssrc) 170 UlpfecPacketGenerator::UlpfecPacketGenerator(uint32_t ssrc)
139 : AugmentedPacketGenerator(ssrc) {} 171 : AugmentedPacketGenerator(ssrc) {}
140 172
141 std::unique_ptr<AugmentedPacket> UlpfecPacketGenerator::BuildMediaRedPacket( 173 std::unique_ptr<AugmentedPacket> UlpfecPacketGenerator::BuildMediaRedPacket(
142 const AugmentedPacket& packet) { 174 const AugmentedPacket& packet) {
143 std::unique_ptr<AugmentedPacket> red_packet(new AugmentedPacket()); 175 std::unique_ptr<AugmentedPacket> red_packet(new AugmentedPacket());
144 176
145 const size_t kHeaderLength = packet.header.header.headerLength; 177 const size_t kHeaderLength = packet.header.header.headerLength;
146 red_packet->header = packet.header; 178 red_packet->header = packet.header;
147 red_packet->length = packet.length + 1; // 1 byte RED header. 179 red_packet->length = packet.length + 1; // 1 byte RED header.
148 memset(red_packet->data, 0, red_packet->length); 180 memset(red_packet->data, 0, red_packet->length);
brandtr 2016/09/21 11:59:21 This memset is also unnecessary, since the entire
149 // Copy RTP header. 181 // Copy RTP header.
150 memcpy(red_packet->data, packet.data, kHeaderLength); 182 memcpy(red_packet->data, packet.data, kHeaderLength);
151 SetRedHeader(red_packet->data[1] & 0x7f, kHeaderLength, red_packet.get()); 183 SetRedHeader(red_packet->data[1] & 0x7f, kHeaderLength, red_packet.get());
152 memcpy(red_packet->data + kHeaderLength + 1, packet.data + kHeaderLength, 184 memcpy(red_packet->data + kHeaderLength + 1, packet.data + kHeaderLength,
153 packet.length - kHeaderLength); 185 packet.length - kHeaderLength);
154 186
155 return red_packet; 187 return red_packet;
156 } 188 }
157 189
158 std::unique_ptr<AugmentedPacket> UlpfecPacketGenerator::BuildUlpfecRedPacket( 190 std::unique_ptr<AugmentedPacket> UlpfecPacketGenerator::BuildUlpfecRedPacket(
(...skipping 19 matching lines...) Expand all
178 red_packet->data[1] &= 0x80; // Reset. 210 red_packet->data[1] &= 0x80; // Reset.
179 red_packet->data[1] += kRedPayloadType; // Replace. 211 red_packet->data[1] += kRedPayloadType; // Replace.
180 212
181 // Add RED header, f-bit always 0. 213 // Add RED header, f-bit always 0.
182 red_packet->data[header_length] = payload_type; 214 red_packet->data[header_length] = payload_type;
183 } 215 }
184 216
185 } // namespace fec 217 } // namespace fec
186 } // namespace test 218 } // namespace test
187 } // namespace webrtc 219 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698