Index: media/cast/transport/cast_transport_sender_impl.cc |
diff --git a/media/cast/transport/cast_transport_sender_impl.cc b/media/cast/transport/cast_transport_sender_impl.cc |
index 9975e3a1665eda1be4aa339abdc22c12023b2319..18d6d1c799226a5988f1b4d0e91f11ca8be9bc25 100644 |
--- a/media/cast/transport/cast_transport_sender_impl.cc |
+++ b/media/cast/transport/cast_transport_sender_impl.cc |
@@ -17,14 +17,20 @@ scoped_ptr<CastTransportSender> CastTransportSender::Create( |
base::TickClock* clock, |
const net::IPEndPoint& local_end_point, |
const net::IPEndPoint& remote_end_point, |
+ const CastLoggingConfig& logging_config, |
const CastTransportStatusCallback& status_callback, |
+ const BulkRawEventsCallback& raw_events_callback, |
+ base::TimeDelta raw_events_callback_interval, |
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) { |
return scoped_ptr<CastTransportSender>( |
new CastTransportSenderImpl(net_log, |
clock, |
local_end_point, |
remote_end_point, |
+ logging_config, |
status_callback, |
+ raw_events_callback, |
+ raw_events_callback_interval, |
transport_task_runner.get(), |
NULL)); |
} |
@@ -34,7 +40,10 @@ CastTransportSenderImpl::CastTransportSenderImpl( |
base::TickClock* clock, |
const net::IPEndPoint& local_end_point, |
const net::IPEndPoint& remote_end_point, |
+ const CastLoggingConfig& logging_config, |
const CastTransportStatusCallback& status_callback, |
+ const BulkRawEventsCallback& raw_events_callback, |
+ base::TimeDelta raw_events_callback_interval, |
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, |
PacketSender* external_transport) |
: clock_(clock), |
@@ -46,17 +55,35 @@ CastTransportSenderImpl::CastTransportSenderImpl( |
local_end_point, |
remote_end_point, |
status_callback)), |
+ logging_(transport_task_runner, logging_config), |
pacer_(clock, |
+ &logging_, |
external_transport ? external_transport : transport_.get(), |
transport_task_runner), |
- rtcp_builder_(&pacer_) {} |
+ rtcp_builder_(&pacer_), |
+ raw_events_callback_(raw_events_callback) { |
+ if (!raw_events_callback_.is_null()) { |
+ DCHECK(logging_config.enable_raw_data_collection); |
+ DCHECK(raw_events_callback_interval > base::TimeDelta()); |
+ event_subscriber_.reset(new SimpleEventSubscriber); |
+ logging_.AddRawEventSubscriber(event_subscriber_.get()); |
+ raw_events_timer_.Start(FROM_HERE, |
+ raw_events_callback_interval, |
+ this, |
+ &CastTransportSenderImpl::SendRawEvents); |
+ } |
+} |
-CastTransportSenderImpl::~CastTransportSenderImpl() {} |
+CastTransportSenderImpl::~CastTransportSenderImpl() { |
+ if (event_subscriber_.get()) |
+ logging_.RemoveRawEventSubscriber(event_subscriber_.get()); |
+} |
void CastTransportSenderImpl::InitializeAudio( |
const CastTransportAudioConfig& config) { |
+ pacer_.InitializeAudio(config); |
audio_sender_.reset(new TransportAudioSender( |
- config, clock_, transport_task_runner_, &pacer_)); |
+ config, clock_, &logging_, transport_task_runner_, &pacer_)); |
if (audio_sender_->initialized()) |
status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED); |
else |
@@ -65,8 +92,9 @@ void CastTransportSenderImpl::InitializeAudio( |
void CastTransportSenderImpl::InitializeVideo( |
const CastTransportVideoConfig& config) { |
+ pacer_.InitializeVideo(config); |
video_sender_.reset(new TransportVideoSender( |
- config, clock_, transport_task_runner_, &pacer_)); |
+ config, clock_, &logging_, transport_task_runner_, &pacer_)); |
if (video_sender_->initialized()) |
status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED); |
else |
@@ -127,6 +155,14 @@ void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback( |
video_sender_->SubscribeVideoRtpStatsCallback(callback); |
} |
+void CastTransportSenderImpl::SendRawEvents() { |
+ DCHECK(event_subscriber_.get()); |
+ DCHECK(!raw_events_callback_.is_null()); |
+ std::vector<PacketEvent> packet_events; |
+ event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ raw_events_callback_.Run(packet_events); |
+} |
+ |
} // namespace transport |
} // namespace cast |
} // namespace media |