1 /*
2  *  Copyright (c) 2013 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_MODULES_RTP_RTCP_INCLUDE_FEC_RECEIVER_H_
12 #define WEBRTC_MODULES_RTP_RTCP_INCLUDE_FEC_RECEIVER_H_
13 
14 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
15 #include "webrtc/typedefs.h"
16 
17 namespace webrtc {
18 
19 struct FecPacketCounter {
FecPacketCounterFecPacketCounter20   FecPacketCounter()
21       : num_packets(0),
22         num_fec_packets(0),
23         num_recovered_packets(0) {}
24 
25   size_t num_packets;            // Number of received packets.
26   size_t num_fec_packets;        // Number of received FEC packets.
27   size_t num_recovered_packets;  // Number of recovered media packets using FEC.
28 };
29 
30 class FecReceiver {
31  public:
32   static FecReceiver* Create(RtpData* callback);
33 
~FecReceiver()34   virtual ~FecReceiver() {}
35 
36   virtual int32_t AddReceivedRedPacket(const RTPHeader& rtp_header,
37                                        const uint8_t* incoming_rtp_packet,
38                                        size_t packet_length,
39                                        uint8_t ulpfec_payload_type) = 0;
40 
41   virtual int32_t ProcessReceivedFec() = 0;
42 
43   virtual FecPacketCounter GetPacketCounter() const = 0;
44 };
45 }  // namespace webrtc
46 #endif  // WEBRTC_MODULES_RTP_RTCP_INCLUDE_FEC_RECEIVER_H_
47