Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / media / cast / framer / cast_message_builder.h
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_