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