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

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: Created 6 years, 10 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 base::TickClock* clock, 16 base::TickClock* clock,
17 const CastTransportConfig& config, 17 const net::IPEndPoint& local_end_point,
18 const net::IPEndPoint& remote_end_point,
18 const CastTransportStatusCallback& status_callback, 19 const CastTransportStatusCallback& status_callback,
19 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) { 20 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) {
20 return new CastTransportSenderImpl( 21 return scoped_ptr<CastTransportSender>(
21 clock, config, status_callback, transport_task_runner.get(), NULL); 22 new CastTransportSenderImpl(clock,
23 local_end_point,
24 remote_end_point,
25 status_callback,
26 transport_task_runner.get(),
27 NULL));
22 } 28 }
23 29
24 CastTransportSenderImpl::CastTransportSenderImpl( 30 CastTransportSenderImpl::CastTransportSenderImpl(
25 base::TickClock* clock, 31 base::TickClock* clock,
26 const CastTransportConfig& config, 32 const net::IPEndPoint& local_end_point,
33 const net::IPEndPoint& remote_end_point,
27 const CastTransportStatusCallback& status_callback, 34 const CastTransportStatusCallback& status_callback,
28 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, 35 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
29 PacketSender* external_transport) 36 PacketSender* external_transport)
30 : transport_(external_transport ? NULL 37 : clock_(clock),
38 status_callback_(status_callback),
39 transport_task_runner_(transport_task_runner),
40 transport_(external_transport ? NULL
31 : new UdpTransport(transport_task_runner, 41 : new UdpTransport(transport_task_runner,
32 config.local_endpoint, 42 local_end_point,
33 config.receiver_endpoint, 43 remote_end_point,
34 status_callback)), 44 status_callback)),
35 pacer_(clock, 45 pacer_(clock,
36 external_transport ? external_transport : transport_.get(), 46 external_transport ? external_transport : transport_.get(),
37 transport_task_runner), 47 transport_task_runner),
38 rtcp_builder_(&pacer_), 48 rtcp_builder_(&pacer_) {}
39 audio_sender_(config, clock, transport_task_runner, &pacer_), 49
40 video_sender_(config, clock, transport_task_runner, &pacer_) { 50 CastTransportSenderImpl::~CastTransportSenderImpl() {}
41 if (audio_sender_.initialized() && video_sender_.initialized()) { 51
42 status_callback.Run(TRANSPORT_INITIALIZED); 52 void CastTransportSenderImpl::InitializeAudio(
43 } else { 53 const CastTransportAudioConfig& config) {
44 status_callback.Run(TRANSPORT_UNINITIALIZED); 54 audio_sender_.reset(new TransportAudioSender(
45 } 55 config, clock_, transport_task_runner_, &pacer_));
56 if (audio_sender_->initialized())
57 status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED);
58 else
59 status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED);
46 } 60 }
47 61
48 CastTransportSenderImpl::~CastTransportSenderImpl() {} 62 void CastTransportSenderImpl::InitializeVideo(
63 const CastTransportVideoConfig& config) {
64 video_sender_.reset(new TransportVideoSender(
65 config, clock_, transport_task_runner_, &pacer_));
66 if (video_sender_->initialized())
67 status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED);
68 else
69 status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED);
70 }
49 71
50 void CastTransportSenderImpl::SetPacketReceiver( 72 void CastTransportSenderImpl::SetPacketReceiver(
51 const PacketReceiverCallback& packet_receiver) { 73 const PacketReceiverCallback& packet_receiver) {
52 transport_->StartReceiving(packet_receiver); 74 transport_->StartReceiving(packet_receiver);
53 } 75 }
54 76
55 void CastTransportSenderImpl::InsertCodedAudioFrame( 77 void CastTransportSenderImpl::InsertCodedAudioFrame(
56 const EncodedAudioFrame* audio_frame, 78 const EncodedAudioFrame* audio_frame,
57 const base::TimeTicks& recorded_time) { 79 const base::TimeTicks& recorded_time) {
58 audio_sender_.InsertCodedAudioFrame(audio_frame, recorded_time); 80 DCHECK(audio_sender_) << "Audio sender uninitialized";
81 audio_sender_->InsertCodedAudioFrame(audio_frame, recorded_time);
59 } 82 }
60 83
61 void CastTransportSenderImpl::InsertCodedVideoFrame( 84 void CastTransportSenderImpl::InsertCodedVideoFrame(
62 const EncodedVideoFrame* video_frame, 85 const EncodedVideoFrame* video_frame,
63 const base::TimeTicks& capture_time) { 86 const base::TimeTicks& capture_time) {
64 video_sender_.InsertCodedVideoFrame(video_frame, capture_time); 87 DCHECK(video_sender_) << "Video sender uninitialized";
88 video_sender_->InsertCodedVideoFrame(video_frame, capture_time);
65 } 89 }
66 90
67 void CastTransportSenderImpl::SendRtcpFromRtpSender( 91 void CastTransportSenderImpl::SendRtcpFromRtpSender(
68 uint32 packet_type_flags, 92 uint32 packet_type_flags,
69 const RtcpSenderInfo& sender_info, 93 const RtcpSenderInfo& sender_info,
70 const RtcpDlrrReportBlock& dlrr, 94 const RtcpDlrrReportBlock& dlrr,
71 const RtcpSenderLogMessage& sender_log, 95 const RtcpSenderLogMessage& sender_log,
72 uint32 sending_ssrc, 96 uint32 sending_ssrc,
73 const std::string& c_name) { 97 const std::string& c_name) {
74 rtcp_builder_.SendRtcpFromRtpSender( 98 rtcp_builder_.SendRtcpFromRtpSender(
75 packet_type_flags, sender_info, dlrr, sender_log, sending_ssrc, c_name); 99 packet_type_flags, sender_info, dlrr, sender_log, sending_ssrc, c_name);
76 } 100 }
77 101
78 void CastTransportSenderImpl::ResendPackets( 102 void CastTransportSenderImpl::ResendPackets(
79 bool is_audio, 103 bool is_audio,
80 const MissingFramesAndPacketsMap& missing_packets) { 104 const MissingFramesAndPacketsMap& missing_packets) {
81 if (is_audio) { 105 if (is_audio) {
82 audio_sender_.ResendPackets(missing_packets); 106 DCHECK(audio_sender_) << "Audio sender uninitialized";
107 audio_sender_->ResendPackets(missing_packets);
83 } else { 108 } else {
84 video_sender_.ResendPackets(missing_packets); 109 DCHECK(video_sender_) << "Video sender uninitialized";
110 video_sender_->ResendPackets(missing_packets);
85 } 111 }
86 } 112 }
87 113
88 void CastTransportSenderImpl::SubscribeAudioRtpStatsCallback( 114 void CastTransportSenderImpl::SubscribeAudioRtpStatsCallback(
89 const CastTransportRtpStatistics& callback) { 115 const CastTransportRtpStatistics& callback) {
90 audio_sender_.SubscribeAudioRtpStatsCallback(callback); 116 DCHECK(audio_sender_) << "Audio sender uninitialized";
117 audio_sender_->SubscribeAudioRtpStatsCallback(callback);
91 } 118 }
92 119
93 void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback( 120 void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback(
94 const CastTransportRtpStatistics& callback) { 121 const CastTransportRtpStatistics& callback) {
95 video_sender_.SubscribeVideoRtpStatsCallback(callback); 122 DCHECK(video_sender_) << "Audio sender uninitialized";
123 video_sender_->SubscribeVideoRtpStatsCallback(callback);
96 } 124 }
97 125
98 } // namespace transport 126 } // namespace transport
99 } // namespace cast 127 } // namespace cast
100 } // namespace media 128 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698