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_