1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_CAST_RTCP_RTCP_SENDER_H_
6 #define MEDIA_CAST_RTCP_RTCP_SENDER_H_
11 #include "media/cast/cast_config.h"
12 #include "media/cast/cast_defines.h"
13 #include "media/cast/rtcp/rtcp.h"
14 #include "media/cast/rtcp/rtcp_defines.h"
15 #include "media/cast/transport/cast_transport_defines.h"
16 #include "media/cast/transport/rtcp/rtcp_builder.h"
21 // TODO(mikhal): Resolve duplication between this and RtcpBuilder.
24 RtcpSender(scoped_refptr<CastEnvironment> cast_environment,
25 transport::PacedPacketSender* outgoing_transport,
27 const std::string& c_name);
29 virtual ~RtcpSender();
31 // Returns true if |event| is an interesting receiver event.
32 // Such an event should be sent via RTCP.
33 static bool IsReceiverEvent(const media::cast::CastLoggingEvent& event);
35 void SendRtcpFromRtpReceiver(uint32 packet_type_flags,
36 const transport::RtcpReportBlock* report_block,
37 const RtcpReceiverReferenceTimeReport* rrtr,
38 const RtcpCastMessage* cast_message,
39 RtcpReceiverLogMessage* receiver_log);
53 kRtcpSenderLog = 0x40000,
54 kRtcpReceiverLog = 0x80000,
57 void BuildRR(const transport::RtcpReportBlock* report_block,
58 Packet* packet) const;
60 void AddReportBlocks(const transport::RtcpReportBlock& report_block,
61 Packet* packet) const;
63 void BuildSdec(Packet* packet) const;
65 void BuildPli(uint32 remote_ssrc,
66 Packet* packet) const;
68 void BuildRemb(const RtcpRembMessage* remb,
69 Packet* packet) const;
71 void BuildRpsi(const RtcpRpsiMessage* rpsi,
72 Packet* packet) const;
74 void BuildNack(const RtcpNackMessage* nack,
75 Packet* packet) const;
77 void BuildBye(Packet* packet) const;
79 void BuildRrtr(const RtcpReceiverReferenceTimeReport* rrtr,
80 Packet* packet) const;
82 void BuildCast(const RtcpCastMessage* cast_message,
83 Packet* packet) const;
85 void BuildReceiverLog(RtcpReceiverLogMessage* receiver_log_message,
86 Packet* packet) const;
88 inline void BitrateToRembExponentBitrate(uint32 bitrate,
90 uint32* mantissa) const {
91 // 6 bit exponent and a 18 bit mantissa.
93 for (int i = 0; i < 64; ++i) {
94 if (bitrate <= (262143u << i)) {
99 *mantissa = (bitrate >> *exponent);
103 const std::string c_name_;
105 // Not owned by this class.
106 transport::PacedPacketSender* const transport_;
107 scoped_refptr<CastEnvironment> cast_environment_;
109 DISALLOW_COPY_AND_ASSIGN(RtcpSender);
114 #endif // MEDIA_CAST_RTCP_RTCP_SENDER_H_