Index: webrtc/call/call.cc |
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc |
index dd08d770ee850c0ff17d10bd732a97a7cc3a5495..e8a087f1a3b2c44c89a039a97eaee0b15de206d1 100644 |
--- a/webrtc/call/call.cc |
+++ b/webrtc/call/call.cc |
@@ -18,6 +18,7 @@ |
#include "webrtc/audio/audio_send_stream.h" |
#include "webrtc/audio/audio_state.h" |
#include "webrtc/audio/scoped_voe_interface.h" |
+#include "webrtc/base/basictypes.h" |
#include "webrtc/base/checks.h" |
#include "webrtc/base/constructormagic.h" |
#include "webrtc/base/logging.h" |
@@ -32,6 +33,7 @@ |
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
#include "webrtc/modules/congestion_controller/include/congestion_controller.h" |
#include "webrtc/modules/pacing/paced_sender.h" |
+#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
#include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
#include "webrtc/modules/utility/include/process_thread.h" |
@@ -57,6 +59,7 @@ namespace internal { |
class Call : public webrtc::Call, |
public PacketReceiver, |
+ public RecoveredPacketReceiver, |
public CongestionController::Observer, |
public BitrateAllocator::LimitObserver { |
public: |
@@ -91,6 +94,9 @@ class Call : public webrtc::Call, |
size_t length, |
const PacketTime& packet_time) override; |
+ // Implements RecoveredPacketReceiver. |
+ bool OnRecoveredPacket(const uint8_t* packet, size_t length) override; |
+ |
void SetBitrateConfig( |
const webrtc::Call::Config::BitrateConfig& bitrate_config) override; |
@@ -948,5 +954,16 @@ PacketReceiver::DeliveryStatus Call::DeliverPacket( |
return DeliverRtp(media_type, packet, length, packet_time); |
} |
+// TODO(brandtr): Update this member function when we support protecting |
+// audio packets with FlexFEC. |
+bool Call::OnRecoveredPacket(const uint8_t* packet, size_t length) { |
+ uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]); |
+ ReadLockScoped read_lock(*receive_crit_); |
+ auto it = video_receive_ssrcs_.find(ssrc); |
+ if (it == video_receive_ssrcs_.end()) |
+ return false; |
+ return it->second->OnRecoveredPacket(packet, length); |
+} |
+ |
} // namespace internal |
} // namespace webrtc |