Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(385)

Unified Diff: media/cast/transport/pacing/paced_sender.h

Issue 388663003: Cast: Reshuffle files under media/cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: missing includes Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/cast/transport/pacing/paced_sender.h
diff --git a/media/cast/transport/pacing/paced_sender.h b/media/cast/transport/pacing/paced_sender.h
deleted file mode 100644
index 9fc0c8b8b8582dcef7e239a213cd84879882c5fc..0000000000000000000000000000000000000000
--- a/media/cast/transport/pacing/paced_sender.h
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
-#define MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
-
-#include <list>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/non_thread_safe.h"
-#include "base/time/default_tick_clock.h"
-#include "base/time/tick_clock.h"
-#include "base/time/time.h"
-#include "media/cast/transport/cast_transport_config.h"
-#include "media/cast/transport/transport/udp_transport.h"
-
-namespace media {
-namespace cast {
-
-class LoggingImpl;
-
-namespace transport {
-
-// Use std::pair for free comparison operators.
-// { capture_time, ssrc, packet_id }
-// The PacketKey is designed to meet two criteria:
-// 1. When we re-send the same packet again, we can use the packet key
-// to identify it so that we can de-duplicate packets in the queue.
-// 2. The sort order of the PacketKey determines the order that packets
-// are sent out. Using the capture_time as the first member basically
-// means that older packets are sent first.
-typedef std::pair<base::TimeTicks, std::pair<uint32, uint16> > PacketKey;
-typedef std::vector<std::pair<PacketKey, PacketRef> > SendPacketVector;
-
-// We have this pure virtual class to enable mocking.
-class PacedPacketSender {
- public:
- virtual bool SendPackets(const SendPacketVector& packets) = 0;
- virtual bool ResendPackets(const SendPacketVector& packets,
- base::TimeDelta dedupe_window) = 0;
- virtual bool SendRtcpPacket(uint32 ssrc, PacketRef packet) = 0;
- virtual void CancelSendingPacket(const PacketKey& packet_key) = 0;
-
- virtual ~PacedPacketSender() {}
-
- static PacketKey MakePacketKey(const base::TimeTicks& ticks,
- uint32 ssrc,
- uint16 packet_id);
-};
-
-class PacedSender : public PacedPacketSender,
- public base::NonThreadSafe,
- public base::SupportsWeakPtr<PacedSender> {
- public:
- // The |external_transport| should only be used by the Cast receiver and for
- // testing.
- PacedSender(
- base::TickClock* clock,
- LoggingImpl* logging,
- PacketSender* external_transport,
- const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner);
-
- virtual ~PacedSender();
-
- // These must be called before non-RTCP packets are sent.
- void RegisterAudioSsrc(uint32 audio_ssrc);
- void RegisterVideoSsrc(uint32 video_ssrc);
-
- // PacedPacketSender implementation.
- virtual bool SendPackets(const SendPacketVector& packets) OVERRIDE;
- virtual bool ResendPackets(const SendPacketVector& packets,
- base::TimeDelta dedupe_window) OVERRIDE;
- virtual bool SendRtcpPacket(uint32 ssrc, PacketRef packet) OVERRIDE;
- virtual void CancelSendingPacket(const PacketKey& packet_key) OVERRIDE;
-
- private:
- // Actually sends the packets to the transport.
- void SendStoredPackets();
- void LogPacketEvent(const Packet& packet, CastLoggingEvent event);
-
- enum PacketType {
- PacketType_RTCP,
- PacketType_Resend,
- PacketType_Normal
- };
- enum State {
- // In an unblocked state, we can send more packets.
- // We have to check the current time against |burst_end_| to see if we are
- // appending to the current burst or if we can start a new one.
- State_Unblocked,
- // In this state, we are waiting for a callback from the udp transport.
- // This happens when the OS-level buffer is full. Once we receive the
- // callback, we go to State_Unblocked and see if we can write more packets
- // to the current burst. (Or the next burst if enough time has passed.)
- State_TransportBlocked,
- // Once we've written enough packets for a time slice, we go into this
- // state and PostDelayTask a call to ourselves to wake up when we can
- // send more data.
- State_BurstFull
- };
-
- bool empty() const;
- size_t size() const;
-
- // Returns the next packet to send. RTCP packets have highest priority,
- // resend packets have second highest priority and then comes everything
- // else.
- PacketRef GetNextPacket(PacketType* packet_type,
- PacketKey* packet_key);
-
- base::TickClock* const clock_; // Not owned by this class.
- LoggingImpl* const logging_; // Not owned by this class.
- PacketSender* transport_; // Not owned by this class.
- scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_;
- uint32 audio_ssrc_;
- uint32 video_ssrc_;
- std::map<PacketKey, std::pair<PacketType, PacketRef> > packet_list_;
- std::map<PacketKey, base::TimeTicks> sent_time_;
- std::map<PacketKey, base::TimeTicks> sent_time_buffer_;
-
- // Maximum burst size for the next three bursts.
- size_t max_burst_size_;
- size_t next_max_burst_size_;
- size_t next_next_max_burst_size_;
- // Number of packets already sent in the current burst.
- size_t current_burst_size_;
- // This is when the current burst ends.
- base::TimeTicks burst_end_;
-
- State state_;
-
- // NOTE: Weak pointers must be invalidated before all other member variables.
- base::WeakPtrFactory<PacedSender> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(PacedSender);
-};
-
-} // namespace transport
-} // namespace cast
-} // namespace media
-
-#endif // MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
« no previous file with comments | « media/cast/transport/pacing/mock_paced_packet_sender.cc ('k') | media/cast/transport/pacing/paced_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698