b27e2e9bdac58dae68a7b583fe56a78648e5cebd
[platform/framework/web/crosswalk.git] / src / media / cast / transport / cast_transport_sender_impl.cc
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.
4
5 #include "media/cast/transport/cast_transport_sender_impl.h"
6
7 #include "base/task_runner.h"
8 #include "media/cast/transport/cast_transport_config.h"
9 #include "media/cast/transport/cast_transport_defines.h"
10
11 namespace media {
12 namespace cast {
13 namespace transport {
14
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());
22 }
23
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);
35   } else {
36     status_callback.Run(TRANSPORT_UNINITIALIZED);
37   }
38 }
39
40 CastTransportSenderImpl::~CastTransportSenderImpl() {
41 }
42
43 void CastTransportSenderImpl::SetPacketReceiver(
44     scoped_refptr<PacketReceiver> packet_receiver) {
45   pacer_.SetPacketReceiver(packet_receiver);
46 }
47
48 void CastTransportSenderImpl::InsertCodedAudioFrame(
49     const EncodedAudioFrame* audio_frame,
50     const base::TimeTicks& recorded_time) {
51   audio_sender_.InsertCodedAudioFrame(audio_frame, recorded_time);
52 }
53
54 void CastTransportSenderImpl::InsertCodedVideoFrame(
55     const EncodedVideoFrame* video_frame,
56     const base::TimeTicks& capture_time) {
57   video_sender_.InsertCodedVideoFrame(video_frame, capture_time);
58 }
59
60 void CastTransportSenderImpl::SendRtcpFromRtpSender(
61     uint32 packet_type_flags,
62     const RtcpSenderInfo& sender_info,
63     const RtcpDlrrReportBlock& dlrr,
64     const RtcpSenderLogMessage& sender_log,
65     uint32 sending_ssrc,
66     const std::string& c_name) {
67   rtcp_builder_.SendRtcpFromRtpSender(packet_type_flags,
68                                       sender_info,
69                                       dlrr,
70                                       sender_log,
71                                       sending_ssrc,
72                                       c_name);
73 }
74
75 void CastTransportSenderImpl::ResendPackets(
76     bool is_audio, const MissingFramesAndPacketsMap& missing_packets) {
77   if (is_audio) {
78     audio_sender_.ResendPackets(missing_packets);
79   } else {
80     video_sender_.ResendPackets(missing_packets);
81   }
82 }
83
84 void CastTransportSenderImpl::RtpAudioStatistics(
85     const base::TimeTicks& now,
86     RtcpSenderInfo* sender_info) {
87   audio_sender_.GetStatistics(now, sender_info);
88 }
89
90 void CastTransportSenderImpl::RtpVideoStatistics(
91     const base::TimeTicks& now,
92     RtcpSenderInfo* sender_info) {
93   video_sender_.GetStatistics(now, sender_info);
94 }
95
96 void CastTransportSenderImpl::InsertFakeTransportForTesting(
97     PacketSender* fake_transport) {
98   pacer_.InsertFakeTransportForTesting(fake_transport);
99 }
100
101 }  // namespace transport
102 }  // namespace cast
103 }  // namespace media