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/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::TaskRunner>& transport_task_runner) {
20 return new CastTransportSenderImpl(clock, config, status_callback,
21 transport_task_runner.get());
24 CastTransportSenderImpl::CastTransportSenderImpl(
25 base::TickClock* clock,
26 const CastTransportConfig& config,
27 const CastTransportStatusCallback& status_callback,
28 const scoped_refptr<base::TaskRunner>& transport_task_runner)
29 : pacer_(clock, &config, NULL, transport_task_runner, status_callback),
30 rtcp_builder_(&pacer_),
31 audio_sender_(config, clock, &pacer_),
32 video_sender_(config, clock, &pacer_) {
33 if (audio_sender_.initialized() && video_sender_.initialized()) {
34 status_callback.Run(TRANSPORT_INITIALIZED);
36 status_callback.Run(TRANSPORT_UNINITIALIZED);
40 CastTransportSenderImpl::~CastTransportSenderImpl() {
43 void CastTransportSenderImpl::SetPacketReceiver(
44 scoped_refptr<PacketReceiver> packet_receiver) {
45 pacer_.SetPacketReceiver(packet_receiver);
48 void CastTransportSenderImpl::InsertCodedAudioFrame(
49 const EncodedAudioFrame* audio_frame,
50 const base::TimeTicks& recorded_time) {
51 audio_sender_.InsertCodedAudioFrame(audio_frame, recorded_time);
54 void CastTransportSenderImpl::InsertCodedVideoFrame(
55 const EncodedVideoFrame* video_frame,
56 const base::TimeTicks& capture_time) {
57 video_sender_.InsertCodedVideoFrame(video_frame, capture_time);
60 void CastTransportSenderImpl::SendRtcpFromRtpSender(
61 uint32 packet_type_flags,
62 const RtcpSenderInfo& sender_info,
63 const RtcpDlrrReportBlock& dlrr,
64 const RtcpSenderLogMessage& sender_log,
66 const std::string& c_name) {
67 rtcp_builder_.SendRtcpFromRtpSender(packet_type_flags,
75 void CastTransportSenderImpl::ResendPackets(
76 bool is_audio, const MissingFramesAndPacketsMap& missing_packets) {
78 audio_sender_.ResendPackets(missing_packets);
80 video_sender_.ResendPackets(missing_packets);
84 void CastTransportSenderImpl::RtpAudioStatistics(
85 const base::TimeTicks& now,
86 RtcpSenderInfo* sender_info) {
87 audio_sender_.GetStatistics(now, sender_info);
90 void CastTransportSenderImpl::RtpVideoStatistics(
91 const base::TimeTicks& now,
92 RtcpSenderInfo* sender_info) {
93 video_sender_.GetStatistics(now, sender_info);
96 void CastTransportSenderImpl::InsertFakeTransportForTesting(
97 PacketSender* fake_transport) {
98 pacer_.InsertFakeTransportForTesting(fake_transport);
101 } // namespace transport