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

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

Issue 2260803002: Generalize FEC header formatting. (pt. 4) (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Lint fix. 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_receiver_impl.h" 11 #include "webrtc/modules/rtp_rtcp/source/fec_receiver_impl.h"
12 12
13 #include <memory> 13 #include <memory>
14 #include <utility> 14 #include <utility>
15 15
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/base/logging.h" 17 #include "webrtc/base/logging.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/rtp_receiver_video.h" 19 #include "webrtc/modules/rtp_rtcp/source/rtp_receiver_video.h"
20 20
21 namespace webrtc { 21 namespace webrtc {
22 22
23 FecReceiver* FecReceiver::Create(RtpData* callback) { 23 FecReceiver* FecReceiver::Create(RtpData* callback) {
24 return new FecReceiverImpl(callback); 24 return new FecReceiverImpl(callback);
25 } 25 }
26 26
27 FecReceiverImpl::FecReceiverImpl(RtpData* callback) 27 FecReceiverImpl::FecReceiverImpl(RtpData* callback)
28 : recovered_packet_callback_(callback) {} 28 : recovered_packet_callback_(callback),
29 fec_(ForwardErrorCorrection::CreateUlpfec()) {}
29 30
30 FecReceiverImpl::~FecReceiverImpl() { 31 FecReceiverImpl::~FecReceiverImpl() {
31 received_packets_.clear(); 32 received_packets_.clear();
32 fec_.ResetState(&recovered_packets_); 33 fec_->ResetState(&recovered_packets_);
33 } 34 }
34 35
35 FecPacketCounter FecReceiverImpl::GetPacketCounter() const { 36 FecPacketCounter FecReceiverImpl::GetPacketCounter() const {
36 rtc::CritScope cs(&crit_sect_); 37 rtc::CritScope cs(&crit_sect_);
37 return packet_counter_; 38 return packet_counter_;
38 } 39 }
39 40
40 // 0 1 2 3 41 // 0 1 2 3
41 // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 42 // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
42 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 43 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 // Send received media packet to VCM. 205 // Send received media packet to VCM.
205 if (!received_packets_.front()->is_fec) { 206 if (!received_packets_.front()->is_fec) {
206 ForwardErrorCorrection::Packet* packet = received_packets_.front()->pkt; 207 ForwardErrorCorrection::Packet* packet = received_packets_.front()->pkt;
207 crit_sect_.Leave(); 208 crit_sect_.Leave();
208 if (!recovered_packet_callback_->OnRecoveredPacket(packet->data, 209 if (!recovered_packet_callback_->OnRecoveredPacket(packet->data,
209 packet->length)) { 210 packet->length)) {
210 return -1; 211 return -1;
211 } 212 }
212 crit_sect_.Enter(); 213 crit_sect_.Enter();
213 } 214 }
214 if (fec_.DecodeFec(&received_packets_, &recovered_packets_) != 0) { 215 if (fec_->DecodeFec(&received_packets_, &recovered_packets_) != 0) {
215 crit_sect_.Leave(); 216 crit_sect_.Leave();
216 return -1; 217 return -1;
217 } 218 }
218 RTC_DCHECK(received_packets_.empty()); 219 RTC_DCHECK(received_packets_.empty());
219 } 220 }
220 // Send any recovered media packets to VCM. 221 // Send any recovered media packets to VCM.
221 for (const auto& recovered_packet : recovered_packets_) { 222 for (const auto& recovered_packet : recovered_packets_) {
222 if (recovered_packet->returned) { 223 if (recovered_packet->returned) {
223 // Already sent to the VCM and the jitter buffer. 224 // Already sent to the VCM and the jitter buffer.
224 continue; 225 continue;
225 } 226 }
226 ForwardErrorCorrection::Packet* packet = recovered_packet->pkt; 227 ForwardErrorCorrection::Packet* packet = recovered_packet->pkt;
227 ++packet_counter_.num_recovered_packets; 228 ++packet_counter_.num_recovered_packets;
228 crit_sect_.Leave(); 229 crit_sect_.Leave();
229 if (!recovered_packet_callback_->OnRecoveredPacket(packet->data, 230 if (!recovered_packet_callback_->OnRecoveredPacket(packet->data,
230 packet->length)) { 231 packet->length)) {
231 return -1; 232 return -1;
232 } 233 }
233 crit_sect_.Enter(); 234 crit_sect_.Enter();
234 recovered_packet->returned = true; 235 recovered_packet->returned = true;
235 } 236 }
236 crit_sect_.Leave(); 237 crit_sect_.Leave();
237 return 0; 238 return 0;
238 } 239 }
239 240
240 } // namespace webrtc 241 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/fec_receiver_impl.h ('k') | webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698