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 <deque> 11 #include <map> 12 13 #include "media/cast/framer/frame_id_map.h" 14 #include "media/cast/rtcp/rtcp.h" 15 #include "media/cast/rtp_receiver/rtp_receiver_defines.h" 16 17 namespace media { 18 namespace cast { 19 20 class RtpPayloadFeedback; 21 22 typedef std::map<uint32, base::TimeTicks> TimeLastNackMap; 23 24 class CastMessageBuilder { 25 public: 26 CastMessageBuilder(base::TickClock* clock, 27 RtpPayloadFeedback* incoming_payload_feedback, 28 FrameIdMap* frame_id_map, 29 uint32 media_ssrc, 30 bool decoder_faster_than_max_frame_rate, 31 int max_unacked_frames); 32 ~CastMessageBuilder(); 33 34 void CompleteFrameReceived(uint32 frame_id); 35 bool TimeToSendNextCastMessage(base::TimeTicks* time_to_send); 36 void UpdateCastMessage(); 37 void Reset(); 38 39 private: 40 bool UpdateAckMessage(uint32 frame_id); 41 void BuildPacketList(); 42 bool UpdateCastMessageInternal(RtcpCastMessage* message); 43 44 base::TickClock* const clock_; // Not owned by this class. 45 RtpPayloadFeedback* const cast_feedback_; 46 47 // CastMessageBuilder has only const access to the frame id mapper. 48 const FrameIdMap* const frame_id_map_; 49 const uint32 media_ssrc_; 50 const bool decoder_faster_than_max_frame_rate_; 51 const int max_unacked_frames_; 52 53 RtcpCastMessage cast_msg_; 54 base::TimeTicks last_update_time_; 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 std::deque<uint32> ack_queue_; 62 63 DISALLOW_COPY_AND_ASSIGN(CastMessageBuilder); 64 }; 65 66 } // namespace cast 67 } // namespace media 68 69 #endif // MEDIA_CAST_FRAMER_CAST_MESSAGE_BUILDER_H_ 70