1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_FEC_RECEIVER_IMPL_H_ 12db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org#define WEBRTC_MODULES_RTP_RTCP_SOURCE_FEC_RECEIVER_IMPL_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// This header is included to get the nested declaration of Packet structure. 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/fec_receiver.h" 174efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 184efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org#include "webrtc/modules/rtp_rtcp/source/forward_error_correction.h" 197fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 204efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org#include "webrtc/typedefs.h" 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 237fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 247fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgclass CriticalSectionWrapper; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.orgclass FecReceiverImpl : public FecReceiver { 274efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org public: 2899681317b0a9dc29c1682a17908f382eac16bd2aandresp@webrtc.org FecReceiverImpl(RtpData* callback); 29db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org virtual ~FecReceiverImpl(); 304efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org 31db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org virtual int32_t AddReceivedRedPacket(const RTPHeader& rtp_header, 32db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org const uint8_t* incoming_rtp_packet, 33db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org int packet_length, 34db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org uint8_t ulpfec_payload_type) OVERRIDE; 354efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org 36db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org virtual int32_t ProcessReceivedFec() OVERRIDE; 374efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org 384efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org private: 397fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org scoped_ptr<CriticalSectionWrapper> crit_sect_; 407fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org RtpData* recovered_packet_callback_; 414efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org ForwardErrorCorrection* fec_; 424efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org // TODO(holmer): In the current version received_packet_list_ is never more 434efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org // than one packet, since we process FEC every time a new packet 444efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org // arrives. We should remove the list. 454efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org ForwardErrorCorrection::ReceivedPacketList received_packet_list_; 464efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org ForwardErrorCorrection::RecoveredPacketList recovered_packet_list_; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 484efbd60660e657ff449dfa7c16f8d4dee5c6e453phoglund@webrtc.org} // namespace webrtc 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_FEC_RECEIVER_IMPL_H_ 51