• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 // Handles NACK list and manages ACK.
6 
7 #ifndef MEDIA_CAST_FRAMER_CAST_MESSAGE_BUILDER_H_
8 #define MEDIA_CAST_FRAMER_CAST_MESSAGE_BUILDER_H_
9 
10 #include <map>
11 
12 #include "media/cast/framer/frame_id_map.h"
13 #include "media/cast/rtcp/rtcp.h"
14 #include "media/cast/rtp_receiver/rtp_receiver_defines.h"
15 
16 namespace media {
17 namespace cast {
18 
19 class RtpPayloadFeedback;
20 
21 typedef std::map<uint32, base::TimeTicks> TimeLastNackMap;
22 
23 class CastMessageBuilder {
24  public:
25   CastMessageBuilder(base::TickClock* clock,
26                      RtpPayloadFeedback* incoming_payload_feedback,
27                      FrameIdMap* frame_id_map,
28                      uint32 media_ssrc,
29                      bool decoder_faster_than_max_frame_rate,
30                      int max_unacked_frames);
31   ~CastMessageBuilder();
32 
33   void CompleteFrameReceived(uint32 frame_id, bool is_key_frame);
34   bool TimeToSendNextCastMessage(base::TimeTicks* time_to_send);
35   void UpdateCastMessage();
36   void Reset();
37 
38  private:
39   bool UpdateAckMessage();
40   void BuildPacketList();
41   bool UpdateCastMessageInternal(RtcpCastMessage* message);
42 
43   base::TickClock* const clock_;  // Not owned by this class.
44   RtpPayloadFeedback* const cast_feedback_;
45 
46   // CastMessageBuilder has only const access to the frame id mapper.
47   const FrameIdMap* const frame_id_map_;
48   const uint32 media_ssrc_;
49   const bool decoder_faster_than_max_frame_rate_;
50   const int max_unacked_frames_;
51 
52   RtcpCastMessage cast_msg_;
53   base::TimeTicks last_update_time_;
54   bool waiting_for_key_frame_;
55 
56   TimeLastNackMap time_last_nacked_map_;
57 
58   bool slowing_down_ack_;
59   bool acked_last_frame_;
60   uint32 last_acked_frame_id_;
61 
62   DISALLOW_COPY_AND_ASSIGN(CastMessageBuilder);
63 };
64 
65 }  // namespace cast
66 }  // namespace media
67 
68 #endif  //  MEDIA_CAST_FRAMER_CAST_MESSAGE_BUILDER_H_
69