1822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org/* 2822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * 4822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * Use of this source code is governed by a BSD-style license 5822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * that can be found in the LICENSE file in the root of the source 6822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * tree. An additional intellectual property rights grant can be found 7822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * in the file PATENTS. All contributing project authors may 8822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org */ 10822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 11822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RECEIVER_IMPL_H_ 12822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RECEIVER_IMPL_H_ 13822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 1400b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org#include "webrtc/base/scoped_ptr.h" 15ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h" 16ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 17822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtp_receiver_strategy.h" 1898f53510b222f71fdd8b799b2f33737ceeb28c61Henrik Kjellander#include "webrtc/system_wrappers/include/critical_section_wrapper.h" 19822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/typedefs.h" 20822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 21822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.orgnamespace webrtc { 22822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 23822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.orgclass RtpReceiverImpl : public RtpReceiver { 24822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org public: 25822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // Callbacks passed in here may not be NULL (use Null Object callbacks if you 26822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // want callbacks to do nothing). This class takes ownership of the media 27822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // receiver but nothing else. 28ac547a653862744d0aae560713f8418ad2852085Peter Boström RtpReceiverImpl(Clock* clock, 29822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpAudioFeedback* incoming_audio_messages_callback, 30822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpFeedback* incoming_messages_callback, 31822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPPayloadRegistry* rtp_payload_registry, 32822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPReceiverStrategy* rtp_media_receiver); 33822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 34822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org virtual ~RtpReceiverImpl(); 35822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 3614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RegisterReceivePayload(const char payload_name[RTP_PAYLOAD_NAME_SIZE], 3714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const int8_t payload_type, 3814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint32_t frequency, 396955870806624479723addfae6dcf5d13968796cPeter Kasting const size_t channels, 4014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint32_t rate) override; 41822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 4214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t DeRegisterReceivePayload(const int8_t payload_type) override; 43822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 4414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool IncomingRtpPacket(const RTPHeader& rtp_header, 4514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint8_t* payload, 4614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t payload_length, 4714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org PayloadUnion payload_specific, 4814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool in_order) override; 49822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 5014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org NACKMethod NACK() const override; 51822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 52822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // Turn negative acknowledgement requests on/off. 5314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void SetNACKStatus(const NACKMethod method) override; 54822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 55822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // Returns the last received timestamp. 5614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool Timestamp(uint32_t* timestamp) const override; 5714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool LastReceivedTimeMs(int64_t* receive_time_ms) const override; 58822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 5914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32_t SSRC() const override; 60822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 6114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t CSRCs(uint32_t array_of_csrc[kRtpCsrcSize]) const override; 62822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 6314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t Energy(uint8_t array_of_energy[kRtpCsrcSize]) const override; 64822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 6514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org TelephoneEventHandler* GetTelephoneEventHandler() override; 66822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 67822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org private: 6848df38114d9502f4b4ad700c011190c608a702d5stefan@webrtc.org bool HaveReceivedFrame() const; 6948df38114d9502f4b4ad700c011190c608a702d5stefan@webrtc.org 707bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org void CheckSSRCChanged(const RTPHeader& rtp_header); 717bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org void CheckCSRC(const WebRtcRTPHeader& rtp_header); 727bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org int32_t CheckPayloadChanged(const RTPHeader& rtp_header, 73822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const int8_t first_payload_byte, 746db6cdc604f9a866991ecf8454eb7f7aa69918eadanilchap bool* is_red, 75d436298332c7a7ecb51241f3a66588539c2ece83pbos PayloadUnion* payload); 76822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 77822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org Clock* clock_; 78822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPPayloadRegistry* rtp_payload_registry_; 7900b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<RTPReceiverStrategy> rtp_media_receiver_; 80822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 81822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpFeedback* cb_rtp_feedback_; 82822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 8300b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<CriticalSectionWrapper> critical_section_rtp_receiver_; 84822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int64_t last_receive_time_; 854591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t last_received_payload_length_; 86822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 87822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // SSRCs. 88822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t ssrc_; 89822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint8_t num_csrcs_; 90822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t current_remote_csrc_[kRtpCsrcSize]; 91822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 92822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t last_received_timestamp_; 93822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int64_t last_received_frame_time_ms_; 94822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint16_t last_received_sequence_number_; 95822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 96822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org NACKMethod nack_method_; 97822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org}; 98822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org} // namespace webrtc 99822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RECEIVER_IMPL_H_ 100