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 |
deleted file mode 100644 |
index 1bf11bae25c9b6f38bcedaef862eec6c6b052b1e..0000000000000000000000000000000000000000 |
--- a/media/cast/transport/cast_transport_sender_impl.cc |
+++ /dev/null |
@@ -1,208 +0,0 @@ |
-// Copyright 2014 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. |
- |
-#include "media/cast/transport/cast_transport_sender_impl.h" |
- |
-#include "base/single_thread_task_runner.h" |
-#include "media/cast/transport/cast_transport_config.h" |
-#include "media/cast/transport/cast_transport_defines.h" |
-#include "net/base/net_util.h" |
- |
-namespace media { |
-namespace cast { |
-namespace transport { |
- |
-scoped_ptr<CastTransportSender> CastTransportSender::Create( |
- net::NetLog* net_log, |
- base::TickClock* clock, |
- const net::IPEndPoint& remote_end_point, |
- 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, |
- remote_end_point, |
- status_callback, |
- raw_events_callback, |
- raw_events_callback_interval, |
- transport_task_runner.get(), |
- NULL)); |
-} |
- |
-CastTransportSenderImpl::CastTransportSenderImpl( |
- net::NetLog* net_log, |
- base::TickClock* clock, |
- const net::IPEndPoint& remote_end_point, |
- 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), |
- status_callback_(status_callback), |
- transport_task_runner_(transport_task_runner), |
- transport_(external_transport ? NULL |
- : new UdpTransport(net_log, |
- transport_task_runner, |
- net::IPEndPoint(), |
- remote_end_point, |
- status_callback)), |
- logging_(), |
- pacer_(clock, |
- &logging_, |
- external_transport ? external_transport : transport_.get(), |
- transport_task_runner), |
- rtcp_builder_(&pacer_), |
- raw_events_callback_(raw_events_callback) { |
- DCHECK(clock_); |
- if (!raw_events_callback_.is_null()) { |
- 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); |
- } |
- if (transport_) { |
- // The default DSCP value for cast is AF41. Which gives it a higher |
- // priority over other traffic. |
- transport_->SetDscp(net::DSCP_AF41); |
- } |
-} |
- |
-CastTransportSenderImpl::~CastTransportSenderImpl() { |
- if (event_subscriber_.get()) |
- logging_.RemoveRawEventSubscriber(event_subscriber_.get()); |
-} |
- |
-void CastTransportSenderImpl::InitializeAudio( |
- const CastTransportRtpConfig& config) { |
- LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) |
- << "Unsafe to send audio with encryption DISABLED."; |
- if (!audio_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { |
- status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED); |
- return; |
- } |
- audio_sender_.reset(new RtpSender(clock_, transport_task_runner_, &pacer_)); |
- if (audio_sender_->Initialize(config)) { |
- pacer_.RegisterAudioSsrc(config.ssrc); |
- status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED); |
- } else { |
- audio_sender_.reset(); |
- status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED); |
- } |
-} |
- |
-void CastTransportSenderImpl::InitializeVideo( |
- const CastTransportRtpConfig& config) { |
- LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) |
- << "Unsafe to send video with encryption DISABLED."; |
- if (!video_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { |
- status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED); |
- return; |
- } |
- video_sender_.reset(new RtpSender(clock_, transport_task_runner_, &pacer_)); |
- if (video_sender_->Initialize(config)) { |
- pacer_.RegisterVideoSsrc(config.ssrc); |
- status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED); |
- } else { |
- video_sender_.reset(); |
- status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED); |
- } |
-} |
- |
-void CastTransportSenderImpl::SetPacketReceiver( |
- const PacketReceiverCallback& packet_receiver) { |
- transport_->StartReceiving(packet_receiver); |
-} |
- |
-namespace { |
-void EncryptAndSendFrame(const EncodedFrame& frame, |
- TransportEncryptionHandler* encryptor, |
- RtpSender* sender) { |
- if (encryptor->is_activated()) { |
- EncodedFrame encrypted_frame; |
- frame.CopyMetadataTo(&encrypted_frame); |
- if (encryptor->Encrypt(frame.frame_id, frame.data, &encrypted_frame.data)) { |
- sender->SendFrame(encrypted_frame); |
- } else { |
- LOG(ERROR) << "Encryption failed. Not sending frame with ID " |
- << frame.frame_id; |
- } |
- } else { |
- sender->SendFrame(frame); |
- } |
-} |
-} // namespace |
- |
-void CastTransportSenderImpl::InsertCodedAudioFrame( |
- const EncodedFrame& audio_frame) { |
- DCHECK(audio_sender_) << "Audio sender uninitialized"; |
- EncryptAndSendFrame(audio_frame, &audio_encryptor_, audio_sender_.get()); |
-} |
- |
-void CastTransportSenderImpl::InsertCodedVideoFrame( |
- const EncodedFrame& video_frame) { |
- DCHECK(video_sender_) << "Video sender uninitialized"; |
- EncryptAndSendFrame(video_frame, &video_encryptor_, video_sender_.get()); |
-} |
- |
-void CastTransportSenderImpl::SendRtcpFromRtpSender( |
- uint32 packet_type_flags, |
- uint32 ntp_seconds, |
- uint32 ntp_fraction, |
- uint32 rtp_timestamp, |
- const RtcpDlrrReportBlock& dlrr, |
- uint32 sending_ssrc, |
- const std::string& c_name) { |
- RtcpSenderInfo sender_info; |
- sender_info.ntp_seconds = ntp_seconds; |
- sender_info.ntp_fraction = ntp_fraction; |
- sender_info.rtp_timestamp = rtp_timestamp; |
- if (audio_sender_ && audio_sender_->ssrc() == sending_ssrc) { |
- sender_info.send_packet_count = audio_sender_->send_packet_count(); |
- sender_info.send_octet_count = audio_sender_->send_octet_count(); |
- } else if (video_sender_ && video_sender_->ssrc() == sending_ssrc) { |
- sender_info.send_packet_count = video_sender_->send_packet_count(); |
- sender_info.send_octet_count = video_sender_->send_octet_count(); |
- } else { |
- LOG(ERROR) << "Sending RTCP with an invalid SSRC."; |
- return; |
- } |
- rtcp_builder_.SendRtcpFromRtpSender( |
- packet_type_flags, sender_info, dlrr, sending_ssrc, c_name); |
-} |
- |
-void CastTransportSenderImpl::ResendPackets( |
- bool is_audio, |
- const MissingFramesAndPacketsMap& missing_packets, |
- bool cancel_rtx_if_not_in_list, |
- base::TimeDelta dedupe_window) { |
- if (is_audio) { |
- DCHECK(audio_sender_) << "Audio sender uninitialized"; |
- audio_sender_->ResendPackets(missing_packets, |
- cancel_rtx_if_not_in_list, |
- dedupe_window); |
- } else { |
- DCHECK(video_sender_) << "Video sender uninitialized"; |
- video_sender_->ResendPackets(missing_packets, |
- cancel_rtx_if_not_in_list, |
- dedupe_window); |
- } |
-} |
- |
-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 |