1 /*
2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3  *
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
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_IMPL_H_
12 #define WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_IMPL_H_
13 
14 #include <memory>
15 
16 #include "webrtc/base/criticalsection.h"
17 #include "webrtc/call/flexfec_receive_stream.h"
18 
19 namespace webrtc {
20 
21 class FlexfecReceiver;
22 class ProcessThread;
23 class ReceiveStatistics;
24 class RecoveredPacketReceiver;
25 class RtcpRttStats;
26 class RtpPacketReceived;
27 class RtpRtcp;
28 
29 class FlexfecReceiveStreamImpl : public FlexfecReceiveStream {
30  public:
31   FlexfecReceiveStreamImpl(const Config& config,
32                            RecoveredPacketReceiver* recovered_packet_receiver,
33                            RtcpRttStats* rtt_stats,
34                            ProcessThread* process_thread);
35   ~FlexfecReceiveStreamImpl() override;
36 
GetConfig()37   const Config& GetConfig() const { return config_; }
38 
39   bool AddAndProcessReceivedPacket(const RtpPacketReceived& packet);
40 
41   // Implements FlexfecReceiveStream.
42   void Start() override;
43   void Stop() override;
44   Stats GetStats() const override;
45 
46  private:
47   // Config.
48   const Config config_;
49   bool started_ GUARDED_BY(crit_);
50   rtc::CriticalSection crit_;
51 
52   // Erasure code interfacing.
53   const std::unique_ptr<FlexfecReceiver> receiver_;
54 
55   // RTCP reporting.
56   const std::unique_ptr<ReceiveStatistics> rtp_receive_statistics_;
57   const std::unique_ptr<RtpRtcp> rtp_rtcp_;
58   ProcessThread* process_thread_;
59 };
60 
61 }  // namespace webrtc
62 
63 #endif  // WEBRTC_CALL_FLEXFEC_RECEIVE_STREAM_IMPL_H_
64