Index: media/cast/net/rtp/rtp_sender.cc |
diff --git a/media/cast/net/rtp/rtp_sender.cc b/media/cast/net/rtp/rtp_sender.cc |
index bf1200fd3305391025973bbf9da08de52dc3344d..c0a757571161f1884a26e775dba1ed4af79932d5 100644 |
--- a/media/cast/net/rtp/rtp_sender.cc |
+++ b/media/cast/net/rtp/rtp_sender.cc |
@@ -41,25 +41,22 @@ RtpSender::RtpSender( |
RtpSender::~RtpSender() {} |
bool RtpSender::Initialize(const CastTransportRtpConfig& config) { |
- storage_.reset(new PacketStorage(config.stored_frames)); |
- if (!storage_->IsValid()) { |
- return false; |
- } |
config_.ssrc = config.ssrc; |
config_.payload_type = config.rtp_payload_type; |
- packetizer_.reset(new RtpPacketizer(transport_, storage_.get(), config_)); |
+ packetizer_.reset(new RtpPacketizer(transport_, &storage_, config_)); |
return true; |
} |
void RtpSender::SendFrame(const EncodedFrame& frame) { |
DCHECK(packetizer_); |
packetizer_->SendFrameAsPackets(frame); |
+ LOG_IF(DFATAL, storage_.GetNumberOfStoredFrames() > kMaxUnackedFrames) |
+ << "Possible bug: Frames are not being actively released from storage."; |
} |
void RtpSender::ResendPackets( |
const MissingFramesAndPacketsMap& missing_frames_and_packets, |
bool cancel_rtx_if_not_in_list, const DedupInfo& dedup_info) { |
- DCHECK(storage_); |
// Iterate over all frames in the list. |
for (MissingFramesAndPacketsMap::const_iterator it = |
missing_frames_and_packets.begin(); |
@@ -76,7 +73,7 @@ void RtpSender::ResendPackets( |
bool resend_last = missing_packet_set.find(kRtcpCastLastPacket) != |
missing_packet_set.end(); |
- const SendPacketVector* stored_packets = storage_->GetFrame8(frame_id); |
+ const SendPacketVector* stored_packets = storage_.GetFrame8(frame_id); |
if (!stored_packets) |
continue; |
@@ -119,13 +116,14 @@ void RtpSender::ResendPackets( |
void RtpSender::CancelSendingFrames(const std::vector<uint32>& frame_ids) { |
for (std::vector<uint32>::const_iterator i = frame_ids.begin(); |
i != frame_ids.end(); ++i) { |
- const SendPacketVector* stored_packets = storage_->GetFrame8(*i & 0xFF); |
+ const SendPacketVector* stored_packets = storage_.GetFrame8(*i & 0xFF); |
if (!stored_packets) |
continue; |
for (SendPacketVector::const_iterator j = stored_packets->begin(); |
j != stored_packets->end(); ++j) { |
transport_->CancelSendingPacket(j->first); |
} |
+ storage_.ReleaseFrame(*i); |
} |
} |
@@ -157,7 +155,7 @@ void RtpSender::UpdateSequenceNumber(Packet* packet) { |
} |
int64 RtpSender::GetLastByteSentForFrame(uint32 frame_id) { |
- const SendPacketVector* stored_packets = storage_->GetFrame8(frame_id & 0xFF); |
+ const SendPacketVector* stored_packets = storage_.GetFrame8(frame_id & 0xFF); |
if (!stored_packets) |
return 0; |
PacketKey last_packet_key = stored_packets->rbegin()->first; |