| Index: webrtc/modules/rtp_rtcp/source/rtcp_sender.h
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.h b/webrtc/modules/rtp_rtcp/source/rtcp_sender.h
|
| index afe8e7b982a0561ed3ca69ef495427ffc2fe261f..7bf1ec883cf700bfd2ca9a451215bcd082d0dee5 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.h
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.h
|
| @@ -50,252 +50,253 @@ class NACKStringBuilder {
|
| };
|
|
|
| class RTCPSender {
|
| -public:
|
| - struct FeedbackState {
|
| - FeedbackState();
|
| + public:
|
| + struct FeedbackState {
|
| + FeedbackState();
|
| +
|
| + uint8_t send_payload_type;
|
| + uint32_t frequency_hz;
|
| + uint32_t packets_sent;
|
| + size_t media_bytes_sent;
|
| + uint32_t send_bitrate;
|
| +
|
| + uint32_t last_rr_ntp_secs;
|
| + uint32_t last_rr_ntp_frac;
|
| + uint32_t remote_sr;
|
| +
|
| + bool has_last_xr_rr;
|
| + RtcpReceiveTimeInfo last_xr_rr;
|
| +
|
| + // Used when generating TMMBR.
|
| + ModuleRtpRtcpImpl* module;
|
| + };
|
| +
|
| + RTCPSender(bool audio,
|
| + Clock* clock,
|
| + ReceiveStatistics* receive_statistics,
|
| + RtcpPacketTypeCounterObserver* packet_type_counter_observer,
|
| + Transport* outgoing_transport);
|
| + virtual ~RTCPSender();
|
| +
|
| + RtcpMode Status() const;
|
| + void SetRTCPStatus(RtcpMode method);
|
| +
|
| + bool Sending() const;
|
| + int32_t SetSendingStatus(const FeedbackState& feedback_state,
|
| + bool enabled); // combine the functions
|
|
|
| - uint8_t send_payload_type;
|
| - uint32_t frequency_hz;
|
| - uint32_t packets_sent;
|
| - size_t media_bytes_sent;
|
| - uint32_t send_bitrate;
|
| + int32_t SetNackStatus(bool enable);
|
|
|
| - uint32_t last_rr_ntp_secs;
|
| - uint32_t last_rr_ntp_frac;
|
| - uint32_t remote_sr;
|
| + void SetStartTimestamp(uint32_t start_timestamp);
|
|
|
| - bool has_last_xr_rr;
|
| - RtcpReceiveTimeInfo last_xr_rr;
|
| + void SetLastRtpTime(uint32_t rtp_timestamp, int64_t capture_time_ms);
|
|
|
| - // Used when generating TMMBR.
|
| - ModuleRtpRtcpImpl* module;
|
| - };
|
| + void SetSSRC(uint32_t ssrc);
|
|
|
| - RTCPSender(bool audio,
|
| - Clock* clock,
|
| - ReceiveStatistics* receive_statistics,
|
| - RtcpPacketTypeCounterObserver* packet_type_counter_observer,
|
| - Transport* outgoing_transport);
|
| - virtual ~RTCPSender();
|
| + void SetRemoteSSRC(uint32_t ssrc);
|
|
|
| - RtcpMode Status() const;
|
| - void SetRTCPStatus(RtcpMode method);
|
| + int32_t SetCNAME(const char* cName);
|
|
|
| - bool Sending() const;
|
| - int32_t SetSendingStatus(const FeedbackState& feedback_state,
|
| - bool enabled); // combine the functions
|
| + int32_t AddMixedCNAME(uint32_t SSRC, const char* c_name);
|
|
|
| - int32_t SetNackStatus(bool enable);
|
| + int32_t RemoveMixedCNAME(uint32_t SSRC);
|
|
|
| - void SetStartTimestamp(uint32_t start_timestamp);
|
| + int64_t SendTimeOfSendReport(uint32_t sendReport);
|
|
|
| - void SetLastRtpTime(uint32_t rtp_timestamp, int64_t capture_time_ms);
|
| + bool SendTimeOfXrRrReport(uint32_t mid_ntp, int64_t* time_ms) const;
|
|
|
| - void SetSSRC(uint32_t ssrc);
|
| + bool TimeToSendRTCPReport(bool sendKeyframeBeforeRTP = false) const;
|
|
|
| - void SetRemoteSSRC(uint32_t ssrc);
|
| + int32_t SendRTCP(const FeedbackState& feedback_state,
|
| + RTCPPacketType packetType,
|
| + int32_t nackSize = 0,
|
| + const uint16_t* nackList = 0,
|
| + bool repeat = false,
|
| + uint64_t pictureID = 0);
|
|
|
| - int32_t SetCNAME(const char* cName);
|
| + int32_t SendCompoundRTCP(const FeedbackState& feedback_state,
|
| + const std::set<RTCPPacketType>& packetTypes,
|
| + int32_t nackSize = 0,
|
| + const uint16_t* nackList = 0,
|
| + bool repeat = false,
|
| + uint64_t pictureID = 0);
|
|
|
| - int32_t AddMixedCNAME(uint32_t SSRC, const char* c_name);
|
| + bool REMB() const;
|
|
|
| - int32_t RemoveMixedCNAME(uint32_t SSRC);
|
| + void SetREMBStatus(bool enable);
|
|
|
| - int64_t SendTimeOfSendReport(uint32_t sendReport);
|
| + void SetREMBData(uint32_t bitrate, const std::vector<uint32_t>& ssrcs);
|
|
|
| - bool SendTimeOfXrRrReport(uint32_t mid_ntp, int64_t* time_ms) const;
|
| + bool TMMBR() const;
|
|
|
| - bool TimeToSendRTCPReport(bool sendKeyframeBeforeRTP = false) const;
|
| + void SetTMMBRStatus(bool enable);
|
|
|
| - int32_t SendRTCP(const FeedbackState& feedback_state,
|
| - RTCPPacketType packetType,
|
| - int32_t nackSize = 0,
|
| - const uint16_t* nackList = 0,
|
| - bool repeat = false,
|
| - uint64_t pictureID = 0);
|
| + int32_t SetTMMBN(const TMMBRSet* boundingSet, uint32_t maxBitrateKbit);
|
|
|
| - int32_t SendCompoundRTCP(const FeedbackState& feedback_state,
|
| - const std::set<RTCPPacketType>& packetTypes,
|
| - int32_t nackSize = 0,
|
| - const uint16_t* nackList = 0,
|
| - bool repeat = false,
|
| - uint64_t pictureID = 0);
|
| + int32_t SetApplicationSpecificData(uint8_t subType,
|
| + uint32_t name,
|
| + const uint8_t* data,
|
| + uint16_t length);
|
| + int32_t SetRTCPVoIPMetrics(const RTCPVoIPMetric* VoIPMetric);
|
|
|
| - bool REMB() const;
|
| -
|
| - void SetREMBStatus(bool enable);
|
| -
|
| - void SetREMBData(uint32_t bitrate, const std::vector<uint32_t>& ssrcs);
|
| -
|
| - bool TMMBR() const;
|
| -
|
| - void SetTMMBRStatus(bool enable);
|
| -
|
| - int32_t SetTMMBN(const TMMBRSet* boundingSet, uint32_t maxBitrateKbit);
|
| -
|
| - int32_t SetApplicationSpecificData(uint8_t subType,
|
| - uint32_t name,
|
| - const uint8_t* data,
|
| - uint16_t length);
|
| - int32_t SetRTCPVoIPMetrics(const RTCPVoIPMetric* VoIPMetric);
|
| -
|
| - void SendRtcpXrReceiverReferenceTime(bool enable);
|
| -
|
| - bool RtcpXrReceiverReferenceTime() const;
|
| -
|
| - void SetCsrcs(const std::vector<uint32_t>& csrcs);
|
| -
|
| - void SetTargetBitrate(unsigned int target_bitrate);
|
| - bool SendFeedbackPacket(const rtcp::TransportFeedback& packet);
|
| -
|
| -private:
|
| - class RtcpContext;
|
| -
|
| - // Determine which RTCP messages should be sent and setup flags.
|
| - void PrepareReport(const std::set<RTCPPacketType>& packetTypes,
|
| - const FeedbackState& feedback_state)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| -
|
| - int32_t AddReportBlock(const RTCPReportBlock& report_block)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| -
|
| - bool PrepareReportBlock(const FeedbackState& feedback_state,
|
| - uint32_t ssrc,
|
| - StreamStatistician* statistician,
|
| - RTCPReportBlock* report_block);
|
| -
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildSR(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildRR(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildSDES(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildPLI(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildREMB(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildTMMBR(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildTMMBN(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildAPP(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildVoIPMetric(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildBYE(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildFIR(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildSLI(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildRPSI(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildNACK(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildReceiverReferenceTime(
|
| - const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<rtcp::RtcpPacket> BuildDlrr(const RtcpContext& context)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| -
|
| -private:
|
| - const bool audio_;
|
| - Clock* const clock_;
|
| - RtcpMode method_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - Transport* const transport_;
|
| -
|
| - rtc::scoped_ptr<CriticalSectionWrapper> critical_section_rtcp_sender_;
|
| - bool using_nack_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - bool sending_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - bool remb_enabled_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - int64_t next_time_to_send_rtcp_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - uint32_t start_timestamp_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - uint32_t last_rtp_timestamp_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - int64_t last_frame_capture_time_ms_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - uint32_t ssrc_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - // SSRC that we receive on our RTP channel
|
| - uint32_t remote_ssrc_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - std::string cname_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - ReceiveStatistics* receive_statistics_
|
| - GUARDED_BY(critical_section_rtcp_sender_);
|
| - std::map<uint32_t, rtcp::ReportBlock> report_blocks_
|
| - GUARDED_BY(critical_section_rtcp_sender_);
|
| - std::map<uint32_t, std::string> csrc_cnames_
|
| - GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // Sent
|
| - uint32_t last_send_report_[RTCP_NUMBER_OF_SR] GUARDED_BY(
|
| - critical_section_rtcp_sender_); // allow packet loss and RTT above 1 sec
|
| - int64_t last_rtcp_time_[RTCP_NUMBER_OF_SR] GUARDED_BY(
|
| - critical_section_rtcp_sender_);
|
| -
|
| - // Sent XR receiver reference time report.
|
| - // <mid ntp (mid 32 bits of the 64 bits NTP timestamp), send time in ms>.
|
| - std::map<uint32_t, int64_t> last_xr_rr_
|
| - GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // send CSRCs
|
| - std::vector<uint32_t> csrcs_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // Full intra request
|
| - uint8_t sequence_number_fir_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // REMB
|
| - uint32_t remb_bitrate_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - std::vector<uint32_t> remb_ssrcs_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - TMMBRHelp tmmbr_help_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - uint32_t tmmbr_send_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - uint32_t packet_oh_send_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // APP
|
| - uint8_t app_sub_type_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - uint32_t app_name_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - rtc::scoped_ptr<uint8_t[]> app_data_ GUARDED_BY(critical_section_rtcp_sender_);
|
| - uint16_t app_length_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // True if sending of XR Receiver reference time report is enabled.
|
| - bool xr_send_receiver_reference_time_enabled_
|
| - GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - // XR VoIP metric
|
| - RTCPVoIPMetric xr_voip_metric_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - RtcpPacketTypeCounterObserver* const packet_type_counter_observer_;
|
| - RtcpPacketTypeCounter packet_type_counter_
|
| - GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - RTCPUtility::NackStats nack_stats_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - void SetFlag(RTCPPacketType type, bool is_volatile)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - void SetFlags(const std::set<RTCPPacketType>& types, bool is_volatile)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - bool IsFlagPresent(RTCPPacketType type) const
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - bool ConsumeFlag(RTCPPacketType type, bool forced = false)
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - bool AllVolatileFlagsConsumed() const
|
| - EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| - struct ReportFlag {
|
| - ReportFlag(RTCPPacketType type, bool is_volatile)
|
| - : type(type), is_volatile(is_volatile) {}
|
| - bool operator<(const ReportFlag& flag) const { return type < flag.type; }
|
| - bool operator==(const ReportFlag& flag) const { return type == flag.type; }
|
| - const RTCPPacketType type;
|
| - const bool is_volatile;
|
| - };
|
| -
|
| - std::set<ReportFlag> report_flags_ GUARDED_BY(critical_section_rtcp_sender_);
|
| -
|
| - typedef rtc::scoped_ptr<rtcp::RtcpPacket> (RTCPSender::*BuilderFunc)(
|
| - const RtcpContext&);
|
| - std::map<RTCPPacketType, BuilderFunc> builders_;
|
| + void SendRtcpXrReceiverReferenceTime(bool enable);
|
| +
|
| + bool RtcpXrReceiverReferenceTime() const;
|
| +
|
| + void SetCsrcs(const std::vector<uint32_t>& csrcs);
|
| +
|
| + void SetTargetBitrate(unsigned int target_bitrate);
|
| + bool SendFeedbackPacket(const rtcp::TransportFeedback& packet);
|
| +
|
| + private:
|
| + class RtcpContext;
|
| +
|
| + // Determine which RTCP messages should be sent and setup flags.
|
| + void PrepareReport(const std::set<RTCPPacketType>& packetTypes,
|
| + const FeedbackState& feedback_state)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| +
|
| + int32_t AddReportBlock(const RTCPReportBlock& report_block)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| +
|
| + bool PrepareReportBlock(const FeedbackState& feedback_state,
|
| + uint32_t ssrc,
|
| + StreamStatistician* statistician,
|
| + RTCPReportBlock* report_block);
|
| +
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildSR(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildRR(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildSDES(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildPLI(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildREMB(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildTMMBR(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildTMMBN(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildAPP(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildVoIPMetric(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildBYE(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildFIR(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildSLI(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildRPSI(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildNACK(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildReceiverReferenceTime(
|
| + const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<rtcp::RtcpPacket> BuildDlrr(const RtcpContext& context)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| +
|
| + private:
|
| + const bool audio_;
|
| + Clock* const clock_;
|
| + RtcpMode method_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + Transport* const transport_;
|
| +
|
| + rtc::scoped_ptr<CriticalSectionWrapper> critical_section_rtcp_sender_;
|
| + bool using_nack_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + bool sending_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + bool remb_enabled_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + int64_t next_time_to_send_rtcp_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + uint32_t start_timestamp_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + uint32_t last_rtp_timestamp_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + int64_t last_frame_capture_time_ms_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + uint32_t ssrc_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + // SSRC that we receive on our RTP channel
|
| + uint32_t remote_ssrc_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + std::string cname_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + ReceiveStatistics* receive_statistics_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| + std::map<uint32_t, rtcp::ReportBlock> report_blocks_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| + std::map<uint32_t, std::string> csrc_cnames_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // Sent
|
| + uint32_t last_send_report_[RTCP_NUMBER_OF_SR] GUARDED_BY(
|
| + critical_section_rtcp_sender_); // allow packet loss and RTT above 1 sec
|
| + int64_t last_rtcp_time_[RTCP_NUMBER_OF_SR] GUARDED_BY(
|
| + critical_section_rtcp_sender_);
|
| +
|
| + // Sent XR receiver reference time report.
|
| + // <mid ntp (mid 32 bits of the 64 bits NTP timestamp), send time in ms>.
|
| + std::map<uint32_t, int64_t> last_xr_rr_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // send CSRCs
|
| + std::vector<uint32_t> csrcs_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // Full intra request
|
| + uint8_t sequence_number_fir_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // REMB
|
| + uint32_t remb_bitrate_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + std::vector<uint32_t> remb_ssrcs_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + TMMBRHelp tmmbr_help_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + uint32_t tmmbr_send_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + uint32_t packet_oh_send_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // APP
|
| + uint8_t app_sub_type_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + uint32_t app_name_ GUARDED_BY(critical_section_rtcp_sender_);
|
| + rtc::scoped_ptr<uint8_t[]> app_data_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| + uint16_t app_length_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // True if sending of XR Receiver reference time report is enabled.
|
| + bool xr_send_receiver_reference_time_enabled_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + // XR VoIP metric
|
| + RTCPVoIPMetric xr_voip_metric_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + RtcpPacketTypeCounterObserver* const packet_type_counter_observer_;
|
| + RtcpPacketTypeCounter packet_type_counter_
|
| + GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + RTCPUtility::NackStats nack_stats_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + void SetFlag(RTCPPacketType type, bool is_volatile)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + void SetFlags(const std::set<RTCPPacketType>& types, bool is_volatile)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + bool IsFlagPresent(RTCPPacketType type) const
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + bool ConsumeFlag(RTCPPacketType type, bool forced = false)
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + bool AllVolatileFlagsConsumed() const
|
| + EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
|
| + struct ReportFlag {
|
| + ReportFlag(RTCPPacketType type, bool is_volatile)
|
| + : type(type), is_volatile(is_volatile) {}
|
| + bool operator<(const ReportFlag& flag) const { return type < flag.type; }
|
| + bool operator==(const ReportFlag& flag) const { return type == flag.type; }
|
| + const RTCPPacketType type;
|
| + const bool is_volatile;
|
| + };
|
| +
|
| + std::set<ReportFlag> report_flags_ GUARDED_BY(critical_section_rtcp_sender_);
|
| +
|
| + typedef rtc::scoped_ptr<rtcp::RtcpPacket> (RTCPSender::*BuilderFunc)(
|
| + const RtcpContext&);
|
| + std::map<RTCPPacketType, BuilderFunc> builders_;
|
| };
|
| } // namespace webrtc
|
|
|
| -#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_SENDER_H_
|
| +#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_SENDER_H_
|
|
|