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

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

Issue 938903003: Cast: Javascript bindings for cast receiver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cast_receiver_session
Patch Set: comments addressed Created 5 years, 9 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/media/cast_session_delegate.h" 5 #include "chrome/renderer/media/cast_session_delegate.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
(...skipping 27 matching lines...) Expand all
38 DCHECK(io_message_loop_proxy_.get()); 38 DCHECK(io_message_loop_proxy_.get());
39 } 39 }
40 40
41 CastSessionDelegateBase::~CastSessionDelegateBase() { 41 CastSessionDelegateBase::~CastSessionDelegateBase() {
42 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 42 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
43 } 43 }
44 44
45 void CastSessionDelegateBase::StartUDP( 45 void CastSessionDelegateBase::StartUDP(
46 const net::IPEndPoint& local_endpoint, 46 const net::IPEndPoint& local_endpoint,
47 const net::IPEndPoint& remote_endpoint, 47 const net::IPEndPoint& remote_endpoint,
48 scoped_ptr<base::DictionaryValue> options) { 48 scoped_ptr<base::DictionaryValue> options,
49 const ErrorCallback& error_callback) {
49 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 50 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
50 51
51 // CastSender uses the renderer's IO thread as the main thread. This reduces 52 // CastSender uses the renderer's IO thread as the main thread. This reduces
52 // thread hopping for incoming video frames and outgoing network packets. 53 // thread hopping for incoming video frames and outgoing network packets.
53 // TODO(hubbe): Create cast environment in ctor instead. 54 // TODO(hubbe): Create cast environment in ctor instead.
54 cast_environment_ = new CastEnvironment( 55 cast_environment_ = new CastEnvironment(
55 scoped_ptr<base::TickClock>(new base::DefaultTickClock()).Pass(), 56 scoped_ptr<base::TickClock>(new base::DefaultTickClock()).Pass(),
56 base::MessageLoopProxy::current(), 57 base::MessageLoopProxy::current(),
57 g_cast_threads.Get().GetAudioEncodeMessageLoopProxy(), 58 g_cast_threads.Get().GetAudioEncodeMessageLoopProxy(),
58 g_cast_threads.Get().GetVideoEncodeMessageLoopProxy()); 59 g_cast_threads.Get().GetVideoEncodeMessageLoopProxy());
59 60
60 // Rationale for using unretained: The callback cannot be called after the 61 // Rationale for using unretained: The callback cannot be called after the
61 // destruction of CastTransportSenderIPC, and they both share the same thread. 62 // destruction of CastTransportSenderIPC, and they both share the same thread.
62 cast_transport_.reset(new CastTransportSenderIPC( 63 cast_transport_.reset(new CastTransportSenderIPC(
63 local_endpoint, 64 local_endpoint,
64 remote_endpoint, 65 remote_endpoint,
65 options.Pass(), 66 options.Pass(),
66 base::Bind(&CastSessionDelegateBase::ReceivePacket, 67 base::Bind(&CastSessionDelegateBase::ReceivePacket,
67 base::Unretained(this)), 68 base::Unretained(this)),
68 base::Bind(&CastSessionDelegateBase::StatusNotificationCB, 69 base::Bind(&CastSessionDelegateBase::StatusNotificationCB,
69 base::Unretained(this)), 70 base::Unretained(this), error_callback),
70 base::Bind(&CastSessionDelegateBase::LogRawEvents, 71 base::Bind(&CastSessionDelegateBase::LogRawEvents,
71 base::Unretained(this)))); 72 base::Unretained(this))));
72 } 73 }
73 74
74 void CastSessionDelegateBase::StatusNotificationCB( 75 void CastSessionDelegateBase::StatusNotificationCB(
75 media::cast::CastTransportStatus unused_status) { 76 const ErrorCallback& error_callback,
77 media::cast::CastTransportStatus status) {
76 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 78 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
77 // TODO(hubbe): Call javascript UDPTransport error function. 79 std::string error_message;
80
81 switch (status) {
82 case media::cast::TRANSPORT_AUDIO_UNINITIALIZED:
83 case media::cast::TRANSPORT_VIDEO_UNINITIALIZED:
84 case media::cast::TRANSPORT_AUDIO_INITIALIZED:
85 case media::cast::TRANSPORT_VIDEO_INITIALIZED:
86 return; // Not errors, do nothing.
87 case media::cast::TRANSPORT_INVALID_CRYPTO_CONFIG:
88 error_callback.Run("Invalid encrypt/decrypt configuration.");
89 break;
90 case media::cast::TRANSPORT_SOCKET_ERROR:
91 error_callback.Run("Socket error.");
92 break;
93 }
78 } 94 }
79 95
80 CastSessionDelegate::CastSessionDelegate() 96 CastSessionDelegate::CastSessionDelegate()
81 : weak_factory_(this) { 97 : weak_factory_(this) {
82 DCHECK(io_message_loop_proxy_.get()); 98 DCHECK(io_message_loop_proxy_.get());
83 } 99 }
84 100
85 CastSessionDelegate::~CastSessionDelegate() { 101 CastSessionDelegate::~CastSessionDelegate() {
86 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 102 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
87 } 103 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 base::Bind(&CastSessionDelegate::OnOperationalStatusChange, 141 base::Bind(&CastSessionDelegate::OnOperationalStatusChange,
126 weak_factory_.GetWeakPtr(), false, error_callback), 142 weak_factory_.GetWeakPtr(), false, error_callback),
127 create_vea_cb, 143 create_vea_cb,
128 create_video_encode_mem_cb); 144 create_video_encode_mem_cb);
129 } 145 }
130 146
131 147
132 void CastSessionDelegate::StartUDP( 148 void CastSessionDelegate::StartUDP(
133 const net::IPEndPoint& local_endpoint, 149 const net::IPEndPoint& local_endpoint,
134 const net::IPEndPoint& remote_endpoint, 150 const net::IPEndPoint& remote_endpoint,
135 scoped_ptr<base::DictionaryValue> options) { 151 scoped_ptr<base::DictionaryValue> options,
152 const ErrorCallback& error_callback) {
136 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 153 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
137 CastSessionDelegateBase::StartUDP(local_endpoint, 154 CastSessionDelegateBase::StartUDP(local_endpoint,
138 remote_endpoint, 155 remote_endpoint,
139 options.Pass()); 156 options.Pass(),
157 error_callback);
140 event_subscribers_.reset( 158 event_subscribers_.reset(
141 new media::cast::RawEventSubscriberBundle(cast_environment_)); 159 new media::cast::RawEventSubscriberBundle(cast_environment_));
142 160
143 cast_sender_ = CastSender::Create(cast_environment_, cast_transport_.get()); 161 cast_sender_ = CastSender::Create(cast_environment_, cast_transport_.get());
144 } 162 }
145 163
146 void CastSessionDelegate::ToggleLogging(bool is_audio, bool enable) { 164 void CastSessionDelegate::ToggleLogging(bool is_audio, bool enable) {
147 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 165 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
148 if (!event_subscribers_.get()) 166 if (!event_subscribers_.get())
149 return; 167 return;
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 } else { 337 } else {
320 cast_environment_->Logging()->InsertFrameEvent( 338 cast_environment_->Logging()->InsertFrameEvent(
321 it->timestamp, 339 it->timestamp,
322 it->type, 340 it->type,
323 it->media_type, 341 it->media_type,
324 it->rtp_timestamp, 342 it->rtp_timestamp,
325 it->frame_id); 343 it->frame_id);
326 } 344 }
327 } 345 }
328 } 346 }
OLDNEW
« no previous file with comments | « chrome/renderer/media/cast_session_delegate.h ('k') | chrome/renderer/media/cast_udp_transport.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698