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 <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