| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_CAST_NET_RTCP_RTCP_BUILDER_H_ |
| #define MEDIA_CAST_NET_RTCP_RTCP_BUILDER_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include "base/big_endian.h" |
| #include "base/macros.h" |
| #include "media/cast/net/cast_transport_config.h" |
| #include "media/cast/net/cast_transport_defines.h" |
| #include "media/cast/net/rtcp/receiver_rtcp_event_subscriber.h" |
| #include "media/cast/net/rtcp/rtcp_defines.h" |
| |
| namespace media { |
| namespace cast { |
| |
| class RtcpBuilder { |
| public: |
| explicit RtcpBuilder(uint32_t sending_ssrc); |
| |
| RtcpBuilder(const RtcpBuilder&) = delete; |
| RtcpBuilder& operator=(const RtcpBuilder&) = delete; |
| |
| ~RtcpBuilder(); |
| |
| PacketRef BuildRtcpFromSender(const RtcpSenderInfo& sender_info); |
| |
| uint32_t local_ssrc() const { return local_ssrc_; } |
| void AddRR(const RtcpReportBlock* report_block); |
| void AddRrtr(const RtcpReceiverReferenceTimeReport& rrtr); |
| void AddCast(const RtcpCastMessage& cast_message, |
| base::TimeDelta target_delay); |
| void AddPli(const RtcpPliMessage& pli_message); |
| void AddReceiverLog( |
| const ReceiverRtcpEventSubscriber::RtcpEvents& rtcp_events); |
| void Start(); |
| PacketRef Finish(); |
| |
| private: |
| void AddRtcpHeader(RtcpPacketFields payload, int format_or_count); |
| void PatchLengthField(); |
| void AddSR(const RtcpSenderInfo& sender_info); |
| void AddDlrrRb(const RtcpDlrrReportBlock& dlrr); |
| void AddReportBlocks(const RtcpReportBlock& report_block); |
| |
| bool GetRtcpReceiverLogMessage( |
| const ReceiverRtcpEventSubscriber::RtcpEvents& rtcp_events, |
| RtcpReceiverLogMessage* receiver_log_message, |
| size_t* total_number_of_messages_to_send); |
| |
| base::BigEndianWriter writer_; |
| const uint32_t local_ssrc_; |
| char* ptr_of_length_; |
| PacketRef packet_; |
| }; |
| |
| } // namespace cast |
| } // namespace media |
| |
| #endif // MEDIA_CAST_NET_RTCP_RTCP_BUILDER_H_ |