Ignore title parameter for navigator.registerProtocolHandler
[chromium-blink-merge.git] / media / cast / framer / frame_id_map.h
blobf61e251484bb41a1de1bf6af0162425dbca0713d
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_CAST_FRAMER_FRAME_ID_MAP_H_
6 #define MEDIA_CAST_FRAMER_FRAME_ID_MAP_H_
8 #include <map>
9 #include <set>
11 #include "base/memory/linked_ptr.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "media/cast/cast_config.h"
14 #include "media/cast/rtcp/rtcp_defines.h"
15 #include "media/cast/rtp_receiver/rtp_receiver_defines.h"
17 namespace media {
18 namespace cast {
20 class FrameInfo {
21 public:
22 FrameInfo(uint32 frame_id,
23 uint32 referenced_frame_id,
24 uint16 max_packet_id,
25 bool key_frame);
26 ~FrameInfo();
28 PacketType InsertPacket(uint16 packet_id);
29 bool Complete() const;
30 void GetMissingPackets(bool newest_frame, PacketIdSet* missing_packets) const;
32 bool is_key_frame() const { return is_key_frame_; }
33 uint32 frame_id() const { return frame_id_; }
34 uint32 referenced_frame_id() const { return referenced_frame_id_; }
36 private:
37 const bool is_key_frame_;
38 const uint32 frame_id_;
39 const uint32 referenced_frame_id_;
41 uint16 max_received_packet_id_;
42 PacketIdSet missing_packets_;
44 DISALLOW_COPY_AND_ASSIGN(FrameInfo);
47 typedef std::map<uint32, linked_ptr<FrameInfo> > FrameMap;
49 class FrameIdMap {
50 public:
51 FrameIdMap();
52 ~FrameIdMap();
54 PacketType InsertPacket(const RtpCastHeader& rtp_header);
56 bool Empty() const;
57 bool FrameExists(uint32 frame_id) const;
58 uint32 NewestFrameId() const;
60 void RemoveOldFrames(uint32 frame_id);
61 void Clear();
63 // Identifies the next frame to be released (rendered).
64 bool NextContinuousFrame(uint32* frame_id) const;
65 uint32 LastContinuousFrame() const;
67 bool NextAudioFrameAllowingMissingFrames(uint32* frame_id) const;
68 bool NextVideoFrameAllowingSkippingFrames(uint32* frame_id) const;
70 int NumberOfCompleteFrames() const;
71 void GetMissingPackets(uint32 frame_id,
72 bool last_frame,
73 PacketIdSet* missing_packets) const;
75 private:
76 bool ContinuousFrame(FrameInfo* frame) const;
77 bool DecodableVideoFrame(FrameInfo* frame) const;
79 FrameMap frame_map_;
80 bool waiting_for_key_;
81 uint32 last_released_frame_;
82 uint32 newest_frame_id_;
84 DISALLOW_COPY_AND_ASSIGN(FrameIdMap);
87 } // namespace cast
88 } // namespace media
90 #endif // MEDIA_CAST_FRAMER_FRAME_ID_MAP_H_