rtp_receiver_impl.h revision 48df38114d9502f4b4ad700c011190c608a702d5
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 14822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_receiver.h" 15822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 16822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtp_receiver_strategy.h" 17822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 18822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.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. 28822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpReceiverImpl(int32_t id, 29822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org Clock* clock, 30822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpAudioFeedback* incoming_audio_messages_callback, 31822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpFeedback* incoming_messages_callback, 32822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPPayloadRegistry* rtp_payload_registry, 33822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPReceiverStrategy* rtp_media_receiver); 34822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 35822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org virtual ~RtpReceiverImpl(); 36822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 37822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPReceiverStrategy* GetMediaReceiver() const; 38822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 39822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int32_t RegisterReceivePayload( 40822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const char payload_name[RTP_PAYLOAD_NAME_SIZE], 41822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const int8_t payload_type, 42822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const uint32_t frequency, 43822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const uint8_t channels, 44822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const uint32_t rate); 45822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 46822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int32_t DeRegisterReceivePayload(const int8_t payload_type); 47822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 48822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org bool IncomingRtpPacket( 497bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org const RTPHeader& rtp_header, 507bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org const uint8_t* payload, 517bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org int payload_length, 52822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org PayloadUnion payload_specific, 53822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org bool in_order); 54822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 55822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org NACKMethod NACK() const; 56822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 57822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // Turn negative acknowledgement requests on/off. 587bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org void SetNACKStatus(const NACKMethod method); 59822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 60822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // Returns the last received timestamp. 6148df38114d9502f4b4ad700c011190c608a702d5stefan@webrtc.org bool Timestamp(uint32_t* timestamp) const; 6248df38114d9502f4b4ad700c011190c608a702d5stefan@webrtc.org bool LastReceivedTimeMs(int64_t* receive_time_ms) const; 63822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 64822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t SSRC() const; 65822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 66822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int32_t CSRCs(uint32_t array_of_csrc[kRtpCsrcSize]) const; 67822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 68822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int32_t Energy(uint8_t array_of_energy[kRtpCsrcSize]) const; 69822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 70822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // RTX. 71822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org void SetRTXStatus(bool enable, uint32_t ssrc); 72822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 73822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org void RTXStatus(bool* enable, uint32_t* ssrc, int* payload_type) const; 74822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 75822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org void SetRtxPayloadType(int payload_type); 76822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 77822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org TelephoneEventHandler* GetTelephoneEventHandler(); 78822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 79822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org private: 8048df38114d9502f4b4ad700c011190c608a702d5stefan@webrtc.org bool HaveReceivedFrame() const; 8148df38114d9502f4b4ad700c011190c608a702d5stefan@webrtc.org 82822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpVideoCodecTypes VideoCodecType() const; 83822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 847bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org void CheckSSRCChanged(const RTPHeader& rtp_header); 857bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org void CheckCSRC(const WebRtcRTPHeader& rtp_header); 867bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org int32_t CheckPayloadChanged(const RTPHeader& rtp_header, 87822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org const int8_t first_payload_byte, 887bb8f02274ecbfa1f7ef134d708369a369a78c83stefan@webrtc.org bool& is_red, 89822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org PayloadUnion* payload, 90822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org bool* should_reset_statistics); 91822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 92822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org Clock* clock_; 93822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RTPPayloadRegistry* rtp_payload_registry_; 94822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org scoped_ptr<RTPReceiverStrategy> rtp_media_receiver_; 95822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 96822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int32_t id_; 97822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 98822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org RtpFeedback* cb_rtp_feedback_; 99822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 100822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org scoped_ptr<CriticalSectionWrapper> critical_section_rtp_receiver_; 101822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int64_t last_receive_time_; 102822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint16_t last_received_payload_length_; 103822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 104822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org // SSRCs. 105822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t ssrc_; 106822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint8_t num_csrcs_; 107822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t current_remote_csrc_[kRtpCsrcSize]; 108822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 109822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint32_t last_received_timestamp_; 110822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org int64_t last_received_frame_time_ms_; 111822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org uint16_t last_received_sequence_number_; 112822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org 113822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org NACKMethod nack_method_; 114822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org}; 115822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org} // namespace webrtc 116822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RECEIVER_IMPL_H_ 117