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

Side by Side Diff: media/cast/transport/cast_transport_sender_impl.cc

Issue 174183003: Cast:Transport: Dividing A/V Initialization pipeline (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing errors and yet another rebase 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "media/cast/transport/cast_transport_sender_impl.h" 5 #include "media/cast/transport/cast_transport_sender_impl.h"
6 6
7 #include "base/single_thread_task_runner.h" 7 #include "base/single_thread_task_runner.h"
8 #include "media/cast/transport/cast_transport_config.h" 8 #include "media/cast/transport/cast_transport_config.h"
9 #include "media/cast/transport/cast_transport_defines.h" 9 #include "media/cast/transport/cast_transport_defines.h"
10 10
11 namespace media { 11 namespace media {
12 namespace cast { 12 namespace cast {
13 namespace transport { 13 namespace transport {
14 14
15 CastTransportSender* CastTransportSender::CreateCastTransportSender( 15 scoped_ptr<CastTransportSender> CastTransportSender::Create(
16 net::NetLog* net_log, 16 net::NetLog* net_log,
17 base::TickClock* clock, 17 base::TickClock* clock,
18 const CastTransportConfig& config, 18 const net::IPEndPoint& local_end_point,
19 const net::IPEndPoint& remote_end_point,
19 const CastTransportStatusCallback& status_callback, 20 const CastTransportStatusCallback& status_callback,
20 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) { 21 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) {
21 return new CastTransportSenderImpl(net_log, 22 return scoped_ptr<CastTransportSender>(
22 clock, 23 new CastTransportSenderImpl(net_log,
23 config, 24 clock,
24 status_callback, 25 local_end_point,
25 transport_task_runner.get(), 26 remote_end_point,
26 NULL); 27 status_callback,
28 transport_task_runner.get(),
29 NULL));
27 } 30 }
28 31
29 CastTransportSenderImpl::CastTransportSenderImpl( 32 CastTransportSenderImpl::CastTransportSenderImpl(
30 net::NetLog* net_log, 33 net::NetLog* net_log,
31 base::TickClock* clock, 34 base::TickClock* clock,
32 const CastTransportConfig& config, 35 const net::IPEndPoint& local_end_point,
36 const net::IPEndPoint& remote_end_point,
33 const CastTransportStatusCallback& status_callback, 37 const CastTransportStatusCallback& status_callback,
34 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, 38 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
35 PacketSender* external_transport) 39 PacketSender* external_transport)
36 : transport_(external_transport ? NULL 40 : clock_(clock),
41 status_callback_(status_callback),
42 transport_task_runner_(transport_task_runner),
43 transport_(external_transport ? NULL
37 : new UdpTransport(net_log, 44 : new UdpTransport(net_log,
38 transport_task_runner, 45 transport_task_runner,
39 config.local_endpoint, 46 local_end_point,
40 config.receiver_endpoint, 47 remote_end_point,
41 status_callback)), 48 status_callback)),
42 pacer_(clock, 49 pacer_(clock,
43 external_transport ? external_transport : transport_.get(), 50 external_transport ? external_transport : transport_.get(),
44 transport_task_runner), 51 transport_task_runner),
45 rtcp_builder_(&pacer_), 52 rtcp_builder_(&pacer_) {}
46 audio_sender_(config, clock, transport_task_runner, &pacer_), 53
47 video_sender_(config, clock, transport_task_runner, &pacer_) { 54 CastTransportSenderImpl::~CastTransportSenderImpl() {}
48 if (audio_sender_.initialized() && video_sender_.initialized()) { 55
49 status_callback.Run(TRANSPORT_INITIALIZED); 56 void CastTransportSenderImpl::InitializeAudio(
50 } else { 57 const CastTransportAudioConfig& config) {
51 status_callback.Run(TRANSPORT_UNINITIALIZED); 58 audio_sender_.reset(new TransportAudioSender(
52 } 59 config, clock_, transport_task_runner_, &pacer_));
60 if (audio_sender_->initialized())
61 status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED);
62 else
63 status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED);
53 } 64 }
54 65
55 CastTransportSenderImpl::~CastTransportSenderImpl() {} 66 void CastTransportSenderImpl::InitializeVideo(
67 const CastTransportVideoConfig& config) {
68 video_sender_.reset(new TransportVideoSender(
69 config, clock_, transport_task_runner_, &pacer_));
70 if (video_sender_->initialized())
71 status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED);
72 else
73 status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED);
74 }
56 75
57 void CastTransportSenderImpl::SetPacketReceiver( 76 void CastTransportSenderImpl::SetPacketReceiver(
58 const PacketReceiverCallback& packet_receiver) { 77 const PacketReceiverCallback& packet_receiver) {
59 transport_->StartReceiving(packet_receiver); 78 transport_->StartReceiving(packet_receiver);
60 } 79 }
61 80
62 void CastTransportSenderImpl::InsertCodedAudioFrame( 81 void CastTransportSenderImpl::InsertCodedAudioFrame(
63 const EncodedAudioFrame* audio_frame, 82 const EncodedAudioFrame* audio_frame,
64 const base::TimeTicks& recorded_time) { 83 const base::TimeTicks& recorded_time) {
65 audio_sender_.InsertCodedAudioFrame(audio_frame, recorded_time); 84 DCHECK(audio_sender_) << "Audio sender uninitialized";
85 audio_sender_->InsertCodedAudioFrame(audio_frame, recorded_time);
66 } 86 }
67 87
68 void CastTransportSenderImpl::InsertCodedVideoFrame( 88 void CastTransportSenderImpl::InsertCodedVideoFrame(
69 const EncodedVideoFrame* video_frame, 89 const EncodedVideoFrame* video_frame,
70 const base::TimeTicks& capture_time) { 90 const base::TimeTicks& capture_time) {
71 video_sender_.InsertCodedVideoFrame(video_frame, capture_time); 91 DCHECK(video_sender_) << "Video sender uninitialized";
92 video_sender_->InsertCodedVideoFrame(video_frame, capture_time);
72 } 93 }
73 94
74 void CastTransportSenderImpl::SendRtcpFromRtpSender( 95 void CastTransportSenderImpl::SendRtcpFromRtpSender(
75 uint32 packet_type_flags, 96 uint32 packet_type_flags,
76 const RtcpSenderInfo& sender_info, 97 const RtcpSenderInfo& sender_info,
77 const RtcpDlrrReportBlock& dlrr, 98 const RtcpDlrrReportBlock& dlrr,
78 const RtcpSenderLogMessage& sender_log, 99 const RtcpSenderLogMessage& sender_log,
79 uint32 sending_ssrc, 100 uint32 sending_ssrc,
80 const std::string& c_name) { 101 const std::string& c_name) {
81 rtcp_builder_.SendRtcpFromRtpSender( 102 rtcp_builder_.SendRtcpFromRtpSender(
82 packet_type_flags, sender_info, dlrr, sender_log, sending_ssrc, c_name); 103 packet_type_flags, sender_info, dlrr, sender_log, sending_ssrc, c_name);
83 } 104 }
84 105
85 void CastTransportSenderImpl::ResendPackets( 106 void CastTransportSenderImpl::ResendPackets(
86 bool is_audio, 107 bool is_audio,
87 const MissingFramesAndPacketsMap& missing_packets) { 108 const MissingFramesAndPacketsMap& missing_packets) {
88 if (is_audio) { 109 if (is_audio) {
89 audio_sender_.ResendPackets(missing_packets); 110 DCHECK(audio_sender_) << "Audio sender uninitialized";
111 audio_sender_->ResendPackets(missing_packets);
90 } else { 112 } else {
91 video_sender_.ResendPackets(missing_packets); 113 DCHECK(video_sender_) << "Video sender uninitialized";
114 video_sender_->ResendPackets(missing_packets);
92 } 115 }
93 } 116 }
94 117
95 void CastTransportSenderImpl::SubscribeAudioRtpStatsCallback( 118 void CastTransportSenderImpl::SubscribeAudioRtpStatsCallback(
96 const CastTransportRtpStatistics& callback) { 119 const CastTransportRtpStatistics& callback) {
97 audio_sender_.SubscribeAudioRtpStatsCallback(callback); 120 DCHECK(audio_sender_) << "Audio sender uninitialized";
121 audio_sender_->SubscribeAudioRtpStatsCallback(callback);
98 } 122 }
99 123
100 void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback( 124 void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback(
101 const CastTransportRtpStatistics& callback) { 125 const CastTransportRtpStatistics& callback) {
102 video_sender_.SubscribeVideoRtpStatsCallback(callback); 126 DCHECK(video_sender_) << "Audio sender uninitialized";
127 video_sender_->SubscribeVideoRtpStatsCallback(callback);
103 } 128 }
104 129
105 } // namespace transport 130 } // namespace transport
106 } // namespace cast 131 } // namespace cast
107 } // namespace media 132 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/transport/cast_transport_sender_impl.h ('k') | media/cast/transport/pacing/paced_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698