#include "media/cast/transport/cast_transport_sender_impl.h"
-#include "base/task_runner.h"
+#include "base/single_thread_task_runner.h"
#include "media/cast/transport/cast_transport_config.h"
#include "media/cast/transport/cast_transport_defines.h"
base::TickClock* clock,
const CastTransportConfig& config,
const CastTransportStatusCallback& status_callback,
- const scoped_refptr<base::TaskRunner>& transport_task_runner) {
- return new CastTransportSenderImpl(clock, config, status_callback,
- transport_task_runner.get());
+ const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) {
+ return new CastTransportSenderImpl(
+ clock, config, status_callback, transport_task_runner.get(), NULL);
}
CastTransportSenderImpl::CastTransportSenderImpl(
base::TickClock* clock,
const CastTransportConfig& config,
const CastTransportStatusCallback& status_callback,
- const scoped_refptr<base::TaskRunner>& transport_task_runner)
- : pacer_(clock, &config, NULL, transport_task_runner, status_callback),
+ const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
+ PacketSender* external_transport)
+ : transport_(external_transport ? NULL
+ : new UdpTransport(transport_task_runner,
+ config.local_endpoint,
+ config.receiver_endpoint,
+ status_callback)),
+ pacer_(clock,
+ external_transport ? external_transport : transport_.get(),
+ transport_task_runner),
rtcp_builder_(&pacer_),
- audio_sender_(config, clock, &pacer_),
- video_sender_(config, clock, &pacer_) {
+ audio_sender_(config, clock, transport_task_runner, &pacer_),
+ video_sender_(config, clock, transport_task_runner, &pacer_) {
if (audio_sender_.initialized() && video_sender_.initialized()) {
status_callback.Run(TRANSPORT_INITIALIZED);
} else {
}
}
-CastTransportSenderImpl::~CastTransportSenderImpl() {
-}
+CastTransportSenderImpl::~CastTransportSenderImpl() {}
void CastTransportSenderImpl::SetPacketReceiver(
- scoped_refptr<PacketReceiver> packet_receiver) {
- pacer_.SetPacketReceiver(packet_receiver);
+ const PacketReceiverCallback& packet_receiver) {
+ transport_->StartReceiving(packet_receiver);
}
void CastTransportSenderImpl::InsertCodedAudioFrame(
const RtcpSenderLogMessage& sender_log,
uint32 sending_ssrc,
const std::string& c_name) {
- rtcp_builder_.SendRtcpFromRtpSender(packet_type_flags,
- sender_info,
- dlrr,
- sender_log,
- sending_ssrc,
- c_name);
+ rtcp_builder_.SendRtcpFromRtpSender(
+ packet_type_flags, sender_info, dlrr, sender_log, sending_ssrc, c_name);
}
void CastTransportSenderImpl::ResendPackets(
- bool is_audio, const MissingFramesAndPacketsMap& missing_packets) {
+ bool is_audio,
+ const MissingFramesAndPacketsMap& missing_packets) {
if (is_audio) {
audio_sender_.ResendPackets(missing_packets);
} else {
}
}
-void CastTransportSenderImpl::RtpAudioStatistics(
- const base::TimeTicks& now,
- RtcpSenderInfo* sender_info) {
- audio_sender_.GetStatistics(now, sender_info);
-}
-
-void CastTransportSenderImpl::RtpVideoStatistics(
- const base::TimeTicks& now,
- RtcpSenderInfo* sender_info) {
- video_sender_.GetStatistics(now, sender_info);
+void CastTransportSenderImpl::SubscribeAudioRtpStatsCallback(
+ const CastTransportRtpStatistics& callback) {
+ audio_sender_.SubscribeAudioRtpStatsCallback(callback);
}
-void CastTransportSenderImpl::InsertFakeTransportForTesting(
- PacketSender* fake_transport) {
- pacer_.InsertFakeTransportForTesting(fake_transport);
+void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback(
+ const CastTransportRtpStatistics& callback) {
+ video_sender_.SubscribeVideoRtpStatsCallback(callback);
}
} // namespace transport