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

Unified Diff: media/cast/net/cast_transport_sender_impl.cc

Issue 1515023002: Simplify interface for media/cast: CastTransportSenderImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cast/net/cast_transport_sender_impl.h ('k') | media/cast/net/cast_transport_sender_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/net/cast_transport_sender_impl.cc
diff --git a/media/cast/net/cast_transport_sender_impl.cc b/media/cast/net/cast_transport_sender_impl.cc
index c1b700df929ff29a3e9b18a4d9bc53c6c3198cdb..29629679f08b99c31c579c368f1f5ee2dbe8d8a6 100644
--- a/media/cast/net/cast_transport_sender_impl.cc
+++ b/media/cast/net/cast_transport_sender_impl.cc
@@ -10,28 +10,22 @@
#include <utility>
#include "base/single_thread_task_runner.h"
-#include "base/values.h"
#include "build/build_config.h"
#include "media/cast/net/cast_transport_defines.h"
#include "media/cast/net/rtcp/receiver_rtcp_session.h"
#include "media/cast/net/rtcp/sender_rtcp_session.h"
-#include "media/cast/net/udp_transport.h"
#include "net/base/net_errors.h"
-#include "net/base/network_interfaces.h"
namespace media {
namespace cast {
namespace {
-// See header file for what these mean.
-const char kOptionDscp[] = "DSCP";
-#if defined(OS_WIN)
-const char kOptionDisableNonBlockingIO[] = "disable_non_blocking_io";
-#endif
-const char kOptionPacerTargetBurstSize[] = "pacer_target_burst_size";
+// Options for PaceSender.
const char kOptionPacerMaxBurstSize[] = "pacer_max_burst_size";
-const char kOptionSendBufferMinSize[] = "send_buffer_min_size";
+const char kOptionPacerTargetBurstSize[] = "pacer_target_burst_size";
+
+// Wifi options.
const char kOptionWifiDisableScan[] = "disable_wifi_scan";
const char kOptionWifiMediaStreamingMode[] = "media_streaming_mode";
@@ -46,35 +40,17 @@ int LookupOptionWithDefault(const base::DictionaryValue& options,
}
}
-int32_t GetTransportSendBufferSize(const base::DictionaryValue& options) {
- // Socket send buffer size needs to be at least greater than one burst
- // size.
- int32_t max_burst_size =
- LookupOptionWithDefault(options, kOptionPacerMaxBurstSize,
- kMaxBurstSize) *
- kMaxIpPacketSize;
- int32_t min_send_buffer_size =
- LookupOptionWithDefault(options, kOptionSendBufferMinSize, 0);
- return std::max(max_burst_size, min_send_buffer_size);
-}
-
} // namespace
scoped_ptr<CastTransportSender> CastTransportSender::Create(
- net::NetLog* net_log,
- base::TickClock* clock,
- const net::IPEndPoint& local_end_point,
- const net::IPEndPoint& remote_end_point,
- scoped_ptr<base::DictionaryValue> options,
- const CastTransportStatusCallback& status_callback,
- const BulkRawEventsCallback& raw_events_callback,
- base::TimeDelta raw_events_callback_interval,
- const PacketReceiverCallback& packet_callback,
+ base::TickClock* clock, // Owned by the caller.
+ base::TimeDelta logging_flush_interval,
+ scoped_ptr<Client> client,
+ scoped_ptr<PacketSender> transport,
const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) {
return scoped_ptr<CastTransportSender>(new CastTransportSenderImpl(
- net_log, clock, local_end_point, remote_end_point, std::move(options),
- status_callback, raw_events_callback, raw_events_callback_interval,
- transport_task_runner.get(), packet_callback, NULL));
+ clock, logging_flush_interval, std::move(client), std::move(transport),
+ transport_task_runner.get()));
}
PacketReceiverCallback CastTransportSender::PacketReceiverForTesting() {
@@ -82,83 +58,41 @@ PacketReceiverCallback CastTransportSender::PacketReceiverForTesting() {
}
CastTransportSenderImpl::CastTransportSenderImpl(
- net::NetLog* net_log,
base::TickClock* clock,
- const net::IPEndPoint& local_end_point,
- const net::IPEndPoint& remote_end_point,
- scoped_ptr<base::DictionaryValue> options,
- const CastTransportStatusCallback& status_callback,
- const BulkRawEventsCallback& raw_events_callback,
- base::TimeDelta raw_events_callback_interval,
- const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
- const PacketReceiverCallback& packet_callback,
- PacketSender* external_transport)
+ base::TimeDelta logging_flush_interval,
+ scoped_ptr<Client> client,
+ scoped_ptr<PacketSender> transport,
+ const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner)
: clock_(clock),
- status_callback_(status_callback),
+ logging_flush_interval_(logging_flush_interval),
+ transport_client_(std::move(client)),
+ transport_(std::move(transport)),
transport_task_runner_(transport_task_runner),
- transport_(external_transport
- ? nullptr
- : new UdpTransport(net_log,
- transport_task_runner,
- local_end_point,
- remote_end_point,
- GetTransportSendBufferSize(*options),
- status_callback)),
- pacer_(LookupOptionWithDefault(*options,
- kOptionPacerTargetBurstSize,
- kTargetBurstSize),
- LookupOptionWithDefault(*options,
- kOptionPacerMaxBurstSize,
- kMaxBurstSize),
+ pacer_(kTargetBurstSize,
+ kMaxBurstSize,
clock,
- raw_events_callback.is_null() ? nullptr : &recent_packet_events_,
- external_transport ? external_transport : transport_.get(),
+ logging_flush_interval > base::TimeDelta() ? &recent_packet_events_
+ : nullptr,
+ transport_.get(),
transport_task_runner),
- raw_events_callback_(raw_events_callback),
- raw_events_callback_interval_(raw_events_callback_interval),
last_byte_acked_for_audio_(0),
- packet_callback_(packet_callback),
weak_factory_(this) {
- DCHECK(clock_);
- if (!raw_events_callback_.is_null()) {
- DCHECK(raw_events_callback_interval > base::TimeDelta());
- transport_task_runner->PostDelayedTask(
- FROM_HERE,
- base::Bind(&CastTransportSenderImpl::SendRawEvents,
- weak_factory_.GetWeakPtr()),
- raw_events_callback_interval);
- }
- if (transport_) {
- if (options->HasKey(kOptionDscp)) {
- // The default DSCP value for cast is AF41. Which gives it a higher
- // priority over other traffic.
- transport_->SetDscp(net::DSCP_AF41);
- }
-#if defined(OS_WIN)
- if (!options->HasKey(kOptionDisableNonBlockingIO)) {
- transport_->UseNonBlockingIO();
- }
-#endif
- transport_->StartReceiving(
- base::Bind(&CastTransportSenderImpl::OnReceivedPacket,
- base::Unretained(this)));
- int wifi_options = 0;
- if (options->HasKey(kOptionWifiDisableScan)) {
- wifi_options |= net::WIFI_OPTIONS_DISABLE_SCAN;
- }
- if (options->HasKey(kOptionWifiMediaStreamingMode)) {
- wifi_options |= net::WIFI_OPTIONS_MEDIA_STREAMING_MODE;
- }
- if (wifi_options) {
- wifi_options_autoreset_ = net::SetWifiOptions(wifi_options);
- }
+ DCHECK(clock);
+ DCHECK(transport_client_);
+ DCHECK(transport_);
+ DCHECK(transport_task_runner_);
+ if (logging_flush_interval_ > base::TimeDelta()) {
+ transport_task_runner_->PostDelayedTask(
+ FROM_HERE, base::Bind(&CastTransportSenderImpl::SendRawEvents,
+ weak_factory_.GetWeakPtr()),
+ logging_flush_interval_);
}
+ transport_->StartReceiving(base::Bind(
+ &CastTransportSenderImpl::OnReceivedPacket, base::Unretained(this)));
}
CastTransportSenderImpl::~CastTransportSenderImpl() {
- if (transport_) {
- transport_->StopReceiving();
- }
+ transport_->StopReceiving();
}
void CastTransportSenderImpl::InitializeAudio(
@@ -168,7 +102,7 @@ void CastTransportSenderImpl::InitializeAudio(
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);
+ transport_client_->OnStatusChanged(TRANSPORT_AUDIO_UNINITIALIZED);
return;
}
@@ -177,10 +111,10 @@ void CastTransportSenderImpl::InitializeAudio(
// Audio packets have a higher priority.
pacer_.RegisterAudioSsrc(config.ssrc);
pacer_.RegisterPrioritySsrc(config.ssrc);
- status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED);
+ transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED);
} else {
audio_sender_.reset();
- status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED);
+ transport_client_->OnStatusChanged(TRANSPORT_AUDIO_UNINITIALIZED);
return;
}
@@ -192,7 +126,7 @@ void CastTransportSenderImpl::InitializeAudio(
clock_, &pacer_, config.ssrc, config.feedback_ssrc));
pacer_.RegisterAudioSsrc(config.ssrc);
AddValidSsrc(config.feedback_ssrc);
- status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED);
+ transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED);
}
void CastTransportSenderImpl::InitializeVideo(
@@ -202,14 +136,14 @@ void CastTransportSenderImpl::InitializeVideo(
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);
+ transport_client_->OnStatusChanged(TRANSPORT_VIDEO_UNINITIALIZED);
return;
}
video_sender_.reset(new RtpSender(transport_task_runner_, &pacer_));
if (!video_sender_->Initialize(config)) {
video_sender_.reset();
- status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED);
+ transport_client_->OnStatusChanged(TRANSPORT_VIDEO_UNINITIALIZED);
return;
}
@@ -221,7 +155,7 @@ void CastTransportSenderImpl::InitializeVideo(
clock_, &pacer_, config.ssrc, config.feedback_ssrc));
pacer_.RegisterVideoSsrc(config.ssrc);
AddValidSsrc(config.feedback_ssrc);
- status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED);
+ transport_client_->OnStatusChanged(TRANSPORT_VIDEO_INITIALIZED);
}
namespace {
@@ -327,7 +261,7 @@ PacketReceiverCallback CastTransportSenderImpl::PacketReceiverForTesting() {
}
void CastTransportSenderImpl::SendRawEvents() {
- DCHECK(!raw_events_callback_.is_null());
+ DCHECK(logging_flush_interval_ > base::TimeDelta());
if (!recent_frame_events_.empty() || !recent_packet_events_.empty()) {
scoped_ptr<std::vector<FrameEvent>> frame_events(
@@ -336,14 +270,14 @@ void CastTransportSenderImpl::SendRawEvents() {
scoped_ptr<std::vector<PacketEvent>> packet_events(
new std::vector<PacketEvent>());
packet_events->swap(recent_packet_events_);
- raw_events_callback_.Run(std::move(frame_events), std::move(packet_events));
+ transport_client_->OnLoggingEventsReceived(std::move(frame_events),
+ std::move(packet_events));
}
transport_task_runner_->PostDelayedTask(
- FROM_HERE,
- base::Bind(&CastTransportSenderImpl::SendRawEvents,
- weak_factory_.GetWeakPtr()),
- raw_events_callback_interval_);
+ FROM_HERE, base::Bind(&CastTransportSenderImpl::SendRawEvents,
+ weak_factory_.GetWeakPtr()),
+ logging_flush_interval_);
}
bool CastTransportSenderImpl::OnReceivedPacket(scoped_ptr<Packet> packet) {
@@ -369,18 +303,14 @@ bool CastTransportSenderImpl::OnReceivedPacket(scoped_ptr<Packet> packet) {
video_rtcp_session_->IncomingRtcpPacket(data, length)) {
return true;
}
- if (packet_callback_.is_null()) {
- VLOG(1) << "Stale packet received.";
- return false;
- }
- packet_callback_.Run(std::move(packet));
+ transport_client_->ProcessRtpPacket(std::move(packet));
return true;
}
void CastTransportSenderImpl::OnReceivedLogMessage(
EventMediaType media_type,
const RtcpReceiverLogMessage& log) {
- if (raw_events_callback_.is_null())
+ if (logging_flush_interval_ <= base::TimeDelta())
return;
// Add received log messages into our log system.
@@ -460,6 +390,29 @@ void CastTransportSenderImpl::AddValidSsrc(uint32_t ssrc) {
valid_ssrcs_.insert(ssrc);
}
+void CastTransportSenderImpl::SetOptions(const base::DictionaryValue& options) {
+ // Set PacedSender options.
+ int burst_size = LookupOptionWithDefault(options, kOptionPacerTargetBurstSize,
+ media::cast::kTargetBurstSize);
+ if (burst_size != media::cast::kTargetBurstSize)
+ pacer_.SetTargetBurstSize(burst_size);
+ burst_size = LookupOptionWithDefault(options, kOptionPacerMaxBurstSize,
+ media::cast::kMaxBurstSize);
+ if (burst_size != media::cast::kMaxBurstSize)
+ pacer_.SetMaxBurstSize(burst_size);
+
+ // Set Wifi options.
+ int wifi_options = 0;
+ if (options.HasKey(kOptionWifiDisableScan)) {
+ wifi_options |= net::WIFI_OPTIONS_DISABLE_SCAN;
+ }
+ if (options.HasKey(kOptionWifiMediaStreamingMode)) {
+ wifi_options |= net::WIFI_OPTIONS_MEDIA_STREAMING_MODE;
+ }
+ if (wifi_options)
+ wifi_options_autoreset_ = net::SetWifiOptions(wifi_options);
+}
+
// TODO(isheriff): This interface needs clean up.
// https://crbug.com/569259
void CastTransportSenderImpl::SendRtcpFromRtpReceiver(
« no previous file with comments | « media/cast/net/cast_transport_sender_impl.h ('k') | media/cast/net/cast_transport_sender_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698