Home | History | Annotate | Download | only in framer
      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