Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: chrome/renderer/media/cast_transport_sender_ipc.cc

Issue 138753004: Cast: IPC glue between cast library transport and encoders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more tests Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 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 namespace cast {
8
9 CastIPCDispatcher* CastIPCDispatcher::global_instance_ = NULL;
10
11 CastIPCDispatcher::CastIPCDispatcher(
12 const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
13 : channel_(NULL),
14 io_message_loop_(io_message_loop) {
15 DCHECK(!global_instance_);
16 global_instance_ = this;
17 }
18
19 CastIPCDispatcher::~CastIPCDispatcher() {
20 global_instance_ = NULL;
21 }
22
23 bool CastIPCDispatcher::OnMessageReceived(const IPC::Message& message) {
24 DCHECK(io_message_loop_->BelongsToCurrentThread());
25 bool handled = true;
26 bool msg_is_good = true;
27 IPC_BEGIN_MESSAGE_MAP_EX(CastIPCDispatcher, message, msg_is_good)
28 IPC_MESSAGE_HANDLER(CastMsg_ReceivedPacket, OnReceivedPacket)
29 IPC_MESSAGE_HANDLER(CastMsg_NotifyStatusChange, OnNotifyStatusChange)
30 IPC_MESSAGE_UNHANDLED(handled = false);
31 IPC_END_MESSAGE_MAP_EX();
32 if (!msg_is_good) {
33 LOG(ERROR) << "Failed to parse incoming message.";
34 }
35 return handled;
36 }
37
38 void CastIPCDispatcher::OnFilterAdded(IPC::Channel* channel) {
39 DCHECK(io_message_loop_->BelongsToCurrentThread());
40 channel_ = channel;
41 }
42
43 void CastIPCDispatcher::OnFilterRemoved() {
44 DCHECK(io_message_loop_->BelongsToCurrentThread());
45 channel_ = NULL;
46 }
47
48 void CastIPCDispatcher::OnChannelClosing() {
49 DCHECK(io_message_loop_->BelongsToCurrentThread());
50 channel_ = NULL;
51 }
52
53
54 void CastIPCDispatcher::OnReceivedPacket(
55 int32 channel_id,
56 const media::cast::transport::Packet& packet) {
57 CastTransportSenderIPC* ptr = id_map_.Lookup(channel_id);
58 if (ptr) {
59 if (!ptr->packet_callback_.is_null()) {
60 // TODO(hubbe): Perhaps an non-ownership-transferring cb would be better?
61 scoped_ptr<media::cast::transport::Packet> packet_copy(
62 new media::cast::transport::Packet(packet));
63 ptr->packet_callback_.Run(packet_copy.Pass());
64 } else {
65 LOG(ERROR) << "CastIPCDispatcher::OnReceivedPacket "
66 << "no packet callback yet.";
67 }
68 } else {
69 LOG(ERROR) << "CastIPCDispatcher::OnReceivedPacket "
70 << "on non-existing channel.";
71 }
72 }
73
74 void CastIPCDispatcher::OnNotifyStatusChange(
75 int32 channel_id,
76 media::cast::transport::CastTransportStatus status) {
77 CastTransportSenderIPC* ptr = id_map_.Lookup(channel_id);
78 if (ptr) {
79 ptr->status_callback_.Run(status);
80 } else {
81 LOG(ERROR)
82 << "CastIPCDispatcher::OnNotifystatusChange on non-existing channel.";
83 }
84 }
85
86 CastTransportSenderIPC::CastTransportSenderIPC(
87 const media::cast::transport::CastTransportConfig& config,
88 const media::cast::transport::CastTransportStatusCallback& status_cb)
89 : status_callback_(status_cb) {
90 channel_id_ = CastIPCDispatcher::global_instance_->id_map_.Add(this);
91 Send(new CastHostMsg_New(channel_id_, config));
92 }
93
94 CastTransportSenderIPC::~CastTransportSenderIPC() {
95 Send(new CastHostMsg_Delete(channel_id_));
96 if (CastIPCDispatcher::global_instance_) {
97 CastIPCDispatcher::global_instance_->id_map_.Remove(channel_id_);
98 }
99 }
100
101 bool CastTransportSenderIPC::Send(IPC::Message *message) {
102 if (CastIPCDispatcher::global_instance_ &&
103 CastIPCDispatcher::global_instance_->channel_) {
104 DCHECK(CastIPCDispatcher::global_instance_->io_message_loop_->
105 BelongsToCurrentThread());
106 return CastIPCDispatcher::global_instance_->channel_->Send(message);
107 } else {
108 // TODO(Hubbe): Notify caller that send failed and close channel.
109 delete message;
110 return false;
111 }
112 }
113
114 void CastTransportSenderIPC::SetPacketReceiver(
115 const media::cast::transport::PacketReceiverCallback& packet_callback) {
116 packet_callback_ = packet_callback;
117 }
118
119 void CastTransportSenderIPC::InsertCodedAudioFrame(
120 const media::cast::transport::EncodedAudioFrame* audio_frame,
121 const base::TimeTicks& recorded_time) {
122 Send(new CastHostMsg_InsertCodedAudioFrame(channel_id_,
123 *audio_frame,
124 recorded_time));
125 }
126
127 void CastTransportSenderIPC::InsertCodedVideoFrame(
128 const media::cast::transport::EncodedVideoFrame* video_frame,
129 const base::TimeTicks& capture_time) {
130 Send(new CastHostMsg_InsertCodedVideoFrame(channel_id_,
131 *video_frame,
132 capture_time));
133 }
134
135 void CastTransportSenderIPC::SendRtcpFromRtpSender(
136 uint32 packet_type_flags,
137 const media::cast::transport::RtcpSenderInfo& sender_info,
138 const media::cast::transport::RtcpDlrrReportBlock& dlrr,
139 const media::cast::transport::RtcpSenderLogMessage& sender_log,
140 uint32 sending_ssrc,
141 const std::string& c_name) {
142 struct media::cast::transport::SendRtcpFromRtpSenderData data;
143 data.packet_type_flags = packet_type_flags;
144 data.sending_ssrc = sending_ssrc;
145 data.c_name = data.c_name;
146 Send(new CastHostMsg_SendRtcpFromRtpSender(
147 channel_id_,
148 data,
149 sender_info,
150 dlrr,
151 sender_log));
152 }
153
154 void CastTransportSenderIPC::ResendPackets(
155 bool is_audio,
156 const media::cast::MissingFramesAndPacketsMap& missing_packets) {
157 Send(new CastHostMsg_ResendPackets(channel_id_,
158 is_audio,
159 missing_packets));
160 }
161
162 void CastTransportSenderIPC::RtpAudioStatistics(
163 const base::TimeTicks& now,
164 media::cast::transport::RtcpSenderInfo* sender_info) {
165 // TODO(hubbe): Not yet implemented
166 }
167
168 // Retrieves video RTP statistics.
169 void CastTransportSenderIPC::RtpVideoStatistics(
170 const base::TimeTicks& now,
171 media::cast::transport::RtcpSenderInfo* sender_info) {
172 // TODO(hubbe): Not yet implemented
173 }
174
175
176
177
178 } // namespace cast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698