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

Side by Side Diff: media/cast/transport/pacing/paced_sender.h

Issue 178073004: Cast: IPC from browser to renderer to send packet events from transport to cast library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_ 5 #ifndef MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
6 #define MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_ 6 #define MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
7 7
8 #include <list> 8 #include <list>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/threading/non_thread_safe.h" 15 #include "base/threading/non_thread_safe.h"
16 #include "base/time/default_tick_clock.h" 16 #include "base/time/default_tick_clock.h"
17 #include "base/time/tick_clock.h" 17 #include "base/time/tick_clock.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "media/cast/transport/cast_transport_config.h" 19 #include "media/cast/transport/cast_transport_config.h"
20 #include "media/cast/transport/transport/udp_transport.h" 20 #include "media/cast/transport/transport/udp_transport.h"
21 21
22 namespace media { 22 namespace media {
23 namespace cast { 23 namespace cast {
24
25 class LoggingImpl;
26
24 namespace transport { 27 namespace transport {
25 28
26 // We have this pure virtual class to enable mocking. 29 // We have this pure virtual class to enable mocking.
27 class PacedPacketSender { 30 class PacedPacketSender {
28 public: 31 public:
29 // Inform the pacer / sender of the total number of packets. 32 // Inform the pacer / sender of the total number of packets.
30 virtual bool SendPackets(const PacketList& packets) = 0; 33 virtual bool SendPackets(const PacketList& packets) = 0;
31 34
32 virtual bool ResendPackets(const PacketList& packets) = 0; 35 virtual bool ResendPackets(const PacketList& packets) = 0;
33 36
34 virtual bool SendRtcpPacket(const Packet& packet) = 0; 37 virtual bool SendRtcpPacket(const Packet& packet) = 0;
35 38
36 virtual ~PacedPacketSender() {} 39 virtual ~PacedPacketSender() {}
37 }; 40 };
38 41
39 class PacedSender : public PacedPacketSender, 42 class PacedSender : public PacedPacketSender,
40 public base::NonThreadSafe, 43 public base::NonThreadSafe,
41 public base::SupportsWeakPtr<PacedSender> { 44 public base::SupportsWeakPtr<PacedSender> {
42 public: 45 public:
43 // The |external_transport| should only be used by the Cast receiver and for 46 // The |external_transport| should only be used by the Cast receiver and for
44 // testing. 47 // testing.
45 PacedSender( 48 PacedSender(
46 base::TickClock* clock, 49 base::TickClock* clock,
50 LoggingImpl* logging,
47 PacketSender* external_transport, 51 PacketSender* external_transport,
48 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner); 52 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner);
49 53
50 virtual ~PacedSender(); 54 virtual ~PacedSender();
51 55
56 // These must be called before non-RTCP packets are sent.
57 void InitializeAudio(const CastTransportAudioConfig& config);
58 void InitializeVideo(const CastTransportVideoConfig& config);
59
52 // PacedPacketSender implementation. 60 // PacedPacketSender implementation.
53 virtual bool SendPackets(const PacketList& packets) OVERRIDE; 61 virtual bool SendPackets(const PacketList& packets) OVERRIDE;
54 62
55 virtual bool ResendPackets(const PacketList& packets) OVERRIDE; 63 virtual bool ResendPackets(const PacketList& packets) OVERRIDE;
56 64
57 virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE; 65 virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE;
58 66
59 protected: 67 protected:
60 // Schedule a delayed task on the main cast thread when it's time to send the 68 // Schedule a delayed task on the main cast thread when it's time to send the
61 // next packet burst. 69 // next packet burst.
62 void ScheduleNextSend(); 70 void ScheduleNextSend();
63 71
64 // Process any pending packets in the queue(s). 72 // Process any pending packets in the queue(s).
65 void SendNextPacketBurst(); 73 void SendNextPacketBurst();
66 74
67 private: 75 private:
68 bool SendPacketsToTransport(const PacketList& packets, 76 bool SendPacketsToTransport(const PacketList& packets,
69 PacketList* packets_not_sent); 77 PacketList* packets_not_sent,
78 bool retransmit);
70 79
71 // Actually sends the packets to the transport. 80 // Actually sends the packets to the transport.
72 bool TransmitPackets(const PacketList& packets); 81 bool TransmitPackets(const PacketList& packets);
73 void SendStoredPackets(); 82 void SendStoredPackets();
74 void UpdateBurstSize(size_t num_of_packets); 83 void UpdateBurstSize(size_t num_of_packets);
75 84
76 // Not owned by this class. 85 void LogPacketEvents(const PacketList& packet_list, CastLoggingEvent event);
77 base::TickClock* const clock_; 86 void LogPacketEvent(const Packet& packet, bool retransmit);
78 PacketSender* transport_; // Not owned by this class. 87 bool IsAudioPacket(const Packet& packet);
88
89 base::TickClock* const clock_; // Not owned by this class.
90 LoggingImpl* const logging_; // Not owned by this class.
91 PacketSender* transport_; // Not owned by this class.
79 scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_; 92 scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_;
93 uint32 audio_ssrc_;
94 uint32 video_ssrc_;
80 size_t burst_size_; 95 size_t burst_size_;
81 size_t packets_sent_in_burst_; 96 size_t packets_sent_in_burst_;
82 base::TimeTicks time_last_process_; 97 base::TimeTicks time_last_process_;
83 // Note: We can't combine the |packet_list_| and the |resend_packet_list_| 98 // Note: We can't combine the |packet_list_| and the |resend_packet_list_|
84 // since then we might get reordering of the retransmitted packets. 99 // since then we might get reordering of the retransmitted packets.
85 PacketList packet_list_; 100 PacketList packet_list_;
86 PacketList resend_packet_list_; 101 PacketList resend_packet_list_;
87 102
88 base::WeakPtrFactory<PacedSender> weak_factory_; 103 base::WeakPtrFactory<PacedSender> weak_factory_;
89 104
90 DISALLOW_COPY_AND_ASSIGN(PacedSender); 105 DISALLOW_COPY_AND_ASSIGN(PacedSender);
91 }; 106 };
92 107
93 } // namespace transport 108 } // namespace transport
94 } // namespace cast 109 } // namespace cast
95 } // namespace media 110 } // namespace media
96 111
97 #endif // MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_ 112 #endif // MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_
OLDNEW
« no previous file with comments | « media/cast/transport/cast_transport_sender_impl_unittest.cc ('k') | media/cast/transport/pacing/paced_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698