1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file. 4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MEDIA_CAST_NET_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MEDIA_CAST_NET_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_ 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <deque> 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/basictypes.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "media/cast/net/pacing/paced_sender.h" 12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace media { 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace cast { 15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class PacketStorage { 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PacketStorage(); 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~PacketStorage(); 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Store all of the packets for a frame. 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void StoreFrame(uint32 frame_id, const SendPacketVector& packets); 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Release all of the packets for a frame. 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ReleaseFrame(uint32 frame_id); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Returns a list of packets for a frame indexed by a 8-bits ID. 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // It is the lowest 8 bits of a frame ID. 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Returns NULL if the frame cannot be found. 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const SendPacketVector* GetFrame8(uint8 frame_id_8bits) const; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Get the number of stored frames. 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) size_t GetNumberOfStoredFrames() const; 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::deque<SendPacketVector> frames_; 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 first_frame_id_in_list_; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The number of frames whose packets have been released, but the entry in the 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |frames_| queue has not yet been popped. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t zombie_count_; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PacketStorage); 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace cast 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace media 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // MEDIA_CAST_NET_RTP_SENDER_PACKET_STORAGE_PACKET_STORAGE_H_ 50