Change RtcpPacket::PacketReadyCallback to rtc::FunctionView

from interface


Bug: webrtc:5565
Change-Id: I2df5d7a0554b938888581f1c73dbdb8b85c387cc
Reviewed-on: https://webrtc-review.googlesource.com/8680
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21136}
This commit is contained in:
Danil Chapovalov
2017-12-07 10:15:53 +01:00
committed by Commit Bot
parent f1061c2d90
commit 5c3cc41cef
39 changed files with 158 additions and 209 deletions

View File

@ -87,37 +87,31 @@ RTCPSender::FeedbackState::FeedbackState()
has_last_xr_rr(false),
module(nullptr) {}
class PacketContainer : public rtcp::CompoundPacket,
public rtcp::RtcpPacket::PacketReadyCallback {
class PacketContainer : public rtcp::CompoundPacket {
public:
PacketContainer(Transport* transport, RtcEventLog* event_log)
: transport_(transport), event_log_(event_log), bytes_sent_(0) {}
: transport_(transport), event_log_(event_log) {}
virtual ~PacketContainer() {
for (RtcpPacket* packet : appended_packets_)
delete packet;
}
void OnPacketReady(uint8_t* data, size_t length) override {
if (transport_->SendRtcp(data, length)) {
bytes_sent_ += length;
if (event_log_) {
event_log_->Log(rtc::MakeUnique<RtcEventRtcpPacketOutgoing>(
rtc::ArrayView<const uint8_t>(data, length)));
}
}
}
size_t SendPackets(size_t max_payload_length) {
RTC_DCHECK_LE(max_payload_length, IP_PACKET_SIZE);
uint8_t buffer[IP_PACKET_SIZE];
BuildExternalBuffer(buffer, max_payload_length, this);
return bytes_sent_;
size_t bytes_sent = 0;
Build(max_payload_length, [&](rtc::ArrayView<const uint8_t> packet) {
if (transport_->SendRtcp(packet.data(), packet.size())) {
bytes_sent += packet.size();
if (event_log_) {
event_log_->Log(rtc::MakeUnique<RtcEventRtcpPacketOutgoing>(packet));
}
}
});
return bytes_sent;
}
private:
Transport* transport_;
RtcEventLog* const event_log_;
size_t bytes_sent_;
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(PacketContainer);
};
@ -946,30 +940,6 @@ void RTCPSender::SetVideoBitrateAllocation(const BitrateAllocation& bitrate) {
}
bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) {
class Sender : public rtcp::RtcpPacket::PacketReadyCallback {
public:
Sender(Transport* transport, RtcEventLog* event_log)
: transport_(transport), event_log_(event_log), send_failure_(false) {}
void OnPacketReady(uint8_t* data, size_t length) override {
if (transport_->SendRtcp(data, length)) {
if (event_log_) {
event_log_->Log(rtc::MakeUnique<RtcEventRtcpPacketOutgoing>(
rtc::ArrayView<const uint8_t>(data, length)));
}
} else {
send_failure_ = true;
}
}
Transport* const transport_;
RtcEventLog* const event_log_;
bool send_failure_;
// TODO(terelius): We would like to
// RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Sender);
// but we can't because of an incorrect warning (C4822) in MVS 2013.
} sender(transport_, event_log_);
size_t max_packet_size;
{
rtc::CritScope lock(&critical_section_rtcp_sender_);
@ -979,9 +949,16 @@ bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) {
}
RTC_DCHECK_LE(max_packet_size, IP_PACKET_SIZE);
uint8_t buffer[IP_PACKET_SIZE];
return packet.BuildExternalBuffer(buffer, max_packet_size, &sender) &&
!sender.send_failure_;
bool send_failure = false;
auto callback = [&](rtc::ArrayView<const uint8_t> packet) {
if (transport_->SendRtcp(packet.data(), packet.size())) {
if (event_log_)
event_log_->Log(rtc::MakeUnique<RtcEventRtcpPacketOutgoing>(packet));
} else {
send_failure = true;
}
};
return packet.Build(max_packet_size, callback) && !send_failure;
}
} // namespace webrtc