Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1100)

Unified Diff: media/cast/net/rtp/packet_storage.cc

Issue 560223002: [Cast] Limit frames in flight by duration, and not by number of frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Account for faster input than configured max FPS. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/cast/net/rtp/packet_storage.cc
diff --git a/media/cast/net/rtp/packet_storage.cc b/media/cast/net/rtp/packet_storage.cc
index 59ac9ce44eef87cf768a1b807584631647c0e0ef..190e7a3f3a0e24fc7c97ef86a91cfd62f1767565 100644
--- a/media/cast/net/rtp/packet_storage.cc
+++ b/media/cast/net/rtp/packet_storage.cc
@@ -4,47 +4,60 @@
#include "media/cast/net/rtp/packet_storage.h"
-#include <string>
-
#include "base/logging.h"
#include "media/cast/cast_defines.h"
namespace media {
namespace cast {
-PacketStorage::PacketStorage(size_t stored_frames)
- : max_stored_frames_(stored_frames),
- first_frame_id_in_list_(0),
- last_frame_id_in_list_(0) {
+PacketStorage::PacketStorage()
+ : first_frame_id_in_list_(0),
+ zombie_count_(0) {
}
PacketStorage::~PacketStorage() {
}
-bool PacketStorage::IsValid() const {
- return max_stored_frames_ > 0 &&
- static_cast<int>(max_stored_frames_) <= kMaxUnackedFrames;
-}
-
size_t PacketStorage::GetNumberOfStoredFrames() const {
- return frames_.size();
+ return frames_.size() - zombie_count_;
}
void PacketStorage::StoreFrame(uint32 frame_id,
const SendPacketVector& packets) {
+ if (packets.empty()) {
+ NOTREACHED();
+ return;
+ }
+
if (frames_.empty()) {
first_frame_id_in_list_ = frame_id;
} else {
// Make sure frame IDs are consecutive.
- DCHECK_EQ(last_frame_id_in_list_ + 1, frame_id);
+ DCHECK_EQ(first_frame_id_in_list_ + static_cast<uint32>(frames_.size()),
+ frame_id);
+
+ // Evict the oldest frame if the list will become too long.
+ if (frames_.size() == kMaxUnackedFrames)
hubbe 2014/09/11 23:05:05 This really should never happen, right? LOG(WARNIN
miu 2014/09/18 01:10:52 Done. Made it a DCHECK. Also, got rid of the uni
+ ReleaseFrame(first_frame_id_in_list_);
}
// Save new frame to the end of the list.
- last_frame_id_in_list_ = frame_id;
frames_.push_back(packets);
+}
+
+void PacketStorage::ReleaseFrame(uint32 frame_id) {
+ const uint32 offset = frame_id - first_frame_id_in_list_;
+ if (static_cast<int32>(offset) < 0 || offset >= frames_.size() ||
+ frames_[offset].empty()) {
+ return;
+ }
+
+ frames_[offset].clear();
+ ++zombie_count_;
- // Evict the oldest frame if the list is too long.
- if (frames_.size() > max_stored_frames_) {
+ while (!frames_.empty() && frames_.front().empty()) {
+ DCHECK_GT(zombie_count_, 0u);
+ --zombie_count_;
frames_.pop_front();
++first_frame_id_in_list_;
}
@@ -57,7 +70,8 @@ const SendPacketVector* PacketStorage::GetFrame8(uint8 frame_id_8bits) const {
index_8bits = frame_id_8bits - index_8bits;
if (index_8bits >= frames_.size())
return NULL;
- return &(frames_[index_8bits]);
+ const SendPacketVector& packets = frames_[index_8bits];
+ return packets.empty() ? NULL : &packets;
}
} // namespace cast

Powered by Google App Engine
This is Rietveld 408576698