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_
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"
22 FrameInfo(uint32 frame_id
,
23 uint32 referenced_frame_id
,
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_
; }
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
;
54 PacketType
InsertPacket(const RtpCastHeader
& rtp_header
);
57 bool FrameExists(uint32 frame_id
) const;
58 uint32
NewestFrameId() const;
60 void RemoveOldFrames(uint32 frame_id
);
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
,
73 PacketIdSet
* missing_packets
) const;
76 bool ContinuousFrame(FrameInfo
* frame
) const;
77 bool DecodableVideoFrame(FrameInfo
* frame
) const;
80 bool waiting_for_key_
;
81 uint32 last_released_frame_
;
82 uint32 newest_frame_id_
;
84 DISALLOW_COPY_AND_ASSIGN(FrameIdMap
);
90 #endif // MEDIA_CAST_FRAMER_FRAME_ID_MAP_H_