OLD | NEW |
---|---|
(Empty) | |
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 "chrome/renderer/media/cast_transport_sender_ipc.h" | |
6 | |
7 #include "base/callback.h" | |
8 #include "base/id_map.h" | |
9 #include "chrome/common/cast_messages.h" | |
10 #include "chrome/renderer/media/cast_ipc_dispatcher.h" | |
11 #include "ipc/ipc_channel_proxy.h" | |
12 #include "media/cast/cast_sender.h" | |
13 #include "media/cast/transport/cast_transport_sender.h" | |
14 | |
acolwell GONE FROM CHROMIUM
2014/02/13 19:28:58
nit: I believe this should be inside a namespace.
hubbe
2014/02/14 00:03:24
It was, scherkus said not to, see:
https://codere
| |
15 CastTransportSenderIPC::CastTransportSenderIPC( | |
16 const media::cast::transport::CastTransportConfig& config, | |
17 const media::cast::transport::CastTransportStatusCallback& status_cb) | |
acolwell GONE FROM CHROMIUM
2014/02/13 19:28:58
Technically this class doesn't need to know about
hubbe
2014/02/14 00:03:24
I think I'll pass. It doesn't seem to add that muc
| |
18 : status_callback_(status_cb) { | |
19 if (CastIPCDispatcher::Get()) { | |
20 channel_id_ = CastIPCDispatcher::Get()->AddSender(this); | |
21 } | |
22 Send(new CastHostMsg_New(channel_id_, config)); | |
23 } | |
24 | |
25 CastTransportSenderIPC::~CastTransportSenderIPC() { | |
26 Send(new CastHostMsg_Delete(channel_id_)); | |
27 if (CastIPCDispatcher::Get()) { | |
28 CastIPCDispatcher::Get()->RemoveSender(channel_id_); | |
29 } | |
30 } | |
31 | |
32 void CastTransportSenderIPC::SetPacketReceiver( | |
33 const media::cast::transport::PacketReceiverCallback& packet_callback) { | |
34 packet_callback_ = packet_callback; | |
35 } | |
36 | |
37 void CastTransportSenderIPC::InsertCodedAudioFrame( | |
38 const media::cast::transport::EncodedAudioFrame* audio_frame, | |
39 const base::TimeTicks& recorded_time) { | |
40 Send(new CastHostMsg_InsertCodedAudioFrame(channel_id_, | |
41 *audio_frame, | |
42 recorded_time)); | |
43 } | |
44 | |
45 void CastTransportSenderIPC::InsertCodedVideoFrame( | |
46 const media::cast::transport::EncodedVideoFrame* video_frame, | |
47 const base::TimeTicks& capture_time) { | |
48 Send(new CastHostMsg_InsertCodedVideoFrame(channel_id_, | |
49 *video_frame, | |
50 capture_time)); | |
51 } | |
52 | |
53 void CastTransportSenderIPC::SendRtcpFromRtpSender( | |
54 uint32 packet_type_flags, | |
55 const media::cast::transport::RtcpSenderInfo& sender_info, | |
56 const media::cast::transport::RtcpDlrrReportBlock& dlrr, | |
57 const media::cast::transport::RtcpSenderLogMessage& sender_log, | |
58 uint32 sending_ssrc, | |
59 const std::string& c_name) { | |
60 struct media::cast::transport::SendRtcpFromRtpSenderData data; | |
61 data.packet_type_flags = packet_type_flags; | |
62 data.sending_ssrc = sending_ssrc; | |
63 data.c_name = c_name; | |
64 Send(new CastHostMsg_SendRtcpFromRtpSender( | |
65 channel_id_, | |
66 data, | |
67 sender_info, | |
68 dlrr, | |
69 sender_log)); | |
70 } | |
71 | |
72 void CastTransportSenderIPC::ResendPackets( | |
73 bool is_audio, | |
74 const media::cast::MissingFramesAndPacketsMap& missing_packets) { | |
75 Send(new CastHostMsg_ResendPackets(channel_id_, | |
76 is_audio, | |
77 missing_packets)); | |
78 } | |
79 | |
80 void CastTransportSenderIPC::SubscribeAudioRtpStatsCallback( | |
81 const media::cast::transport::CastTransportRtpStatistics& callback) { | |
82 audio_rtp_callback_ = callback; | |
83 } | |
84 | |
85 void CastTransportSenderIPC::SubscribeVideoRtpStatsCallback( | |
86 const media::cast::transport::CastTransportRtpStatistics& callback) { | |
87 video_rtp_callback_ = callback; | |
88 } | |
89 | |
90 | |
91 void CastTransportSenderIPC::OnReceivedPacket( | |
92 const media::cast::Packet& packet) { | |
93 if (!packet_callback_.is_null()) { | |
94 // TODO(hubbe): Perhaps an non-ownership-transferring cb here? | |
95 scoped_ptr<media::cast::transport::Packet> packet_copy( | |
96 new media::cast::transport::Packet(packet)); | |
97 packet_callback_.Run(packet_copy.Pass()); | |
98 } else { | |
99 LOG(ERROR) << "CastIPCDispatcher::OnReceivedPacket " | |
100 << "no packet callback yet."; | |
101 } | |
102 } | |
103 | |
104 void CastTransportSenderIPC::OnNotifyStatusChange( | |
105 media::cast::transport::CastTransportStatus status) { | |
106 status_callback_.Run(status); | |
107 } | |
108 | |
109 void CastTransportSenderIPC::OnRtpStatistics( | |
110 bool audio, | |
111 const media::cast::transport::RtcpSenderInfo& sender_info, | |
112 base::TimeTicks time_sent, | |
113 uint32 rtp_timestamp) { | |
114 const media::cast::transport::CastTransportRtpStatistics& callback = | |
115 audio ? audio_rtp_callback_ : video_rtp_callback_; | |
116 callback.Run(sender_info, time_sent, rtp_timestamp); | |
117 } | |
118 | |
119 void CastTransportSenderIPC::Send(IPC::Message* message) { | |
120 if (CastIPCDispatcher::Get()) { | |
121 CastIPCDispatcher::Get()->Send(message); | |
122 } else { | |
123 delete message; | |
124 } | |
125 } | |
OLD | NEW |