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
3 // found in the LICENSE file.
5 #include "media/cast/transport/cast_transport_sender_impl.h"
7 #include "base/single_thread_task_runner.h"
8 #include "media/cast/transport/cast_transport_config.h"
9 #include "media/cast/transport/cast_transport_defines.h"
15 CastTransportSender* CastTransportSender::CreateCastTransportSender(
16 base::TickClock* clock,
17 const CastTransportConfig& config,
18 const CastTransportStatusCallback& status_callback,
19 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner) {
20 return new CastTransportSenderImpl(
21 clock, config, status_callback, transport_task_runner.get(), NULL);
24 CastTransportSenderImpl::CastTransportSenderImpl(
25 base::TickClock* clock,
26 const CastTransportConfig& config,
27 const CastTransportStatusCallback& status_callback,
28 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
29 PacketSender* external_transport)
30 : transport_(external_transport ? NULL
31 : new UdpTransport(transport_task_runner,
32 config.local_endpoint,
33 config.receiver_endpoint,
36 external_transport ? external_transport : transport_.get(),
37 transport_task_runner),
38 rtcp_builder_(&pacer_),
39 audio_sender_(config, clock, transport_task_runner, &pacer_),
40 video_sender_(config, clock, transport_task_runner, &pacer_) {
41 if (audio_sender_.initialized() && video_sender_.initialized()) {
42 status_callback.Run(TRANSPORT_INITIALIZED);
44 status_callback.Run(TRANSPORT_UNINITIALIZED);
48 CastTransportSenderImpl::~CastTransportSenderImpl() {}
50 void CastTransportSenderImpl::SetPacketReceiver(
51 const PacketReceiverCallback& packet_receiver) {
52 transport_->StartReceiving(packet_receiver);
55 void CastTransportSenderImpl::InsertCodedAudioFrame(
56 const EncodedAudioFrame* audio_frame,
57 const base::TimeTicks& recorded_time) {
58 audio_sender_.InsertCodedAudioFrame(audio_frame, recorded_time);
61 void CastTransportSenderImpl::InsertCodedVideoFrame(
62 const EncodedVideoFrame* video_frame,
63 const base::TimeTicks& capture_time) {
64 video_sender_.InsertCodedVideoFrame(video_frame, capture_time);
67 void CastTransportSenderImpl::SendRtcpFromRtpSender(
68 uint32 packet_type_flags,
69 const RtcpSenderInfo& sender_info,
70 const RtcpDlrrReportBlock& dlrr,
71 const RtcpSenderLogMessage& sender_log,
73 const std::string& c_name) {
74 rtcp_builder_.SendRtcpFromRtpSender(
75 packet_type_flags, sender_info, dlrr, sender_log, sending_ssrc, c_name);
78 void CastTransportSenderImpl::ResendPackets(
80 const MissingFramesAndPacketsMap& missing_packets) {
82 audio_sender_.ResendPackets(missing_packets);
84 video_sender_.ResendPackets(missing_packets);
88 void CastTransportSenderImpl::SubscribeAudioRtpStatsCallback(
89 const CastTransportRtpStatistics& callback) {
90 audio_sender_.SubscribeAudioRtpStatsCallback(callback);
93 void CastTransportSenderImpl::SubscribeVideoRtpStatsCallback(
94 const CastTransportRtpStatistics& callback) {
95 video_sender_.SubscribeVideoRtpStatsCallback(callback);
98 } // namespace transport