Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
| 10 #include "chrome/common/chrome_version_info.h" | 10 #include "chrome/common/chrome_version_info.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 | 48 |
| 49 if (!cast_transport_ || !cast_sender_) { | 49 if (!cast_transport_ || !cast_sender_) { |
| 50 error_callback.Run("Destination not set."); | 50 error_callback.Run("Destination not set."); |
| 51 return; | 51 return; |
| 52 } | 52 } |
| 53 | 53 |
| 54 audio_frame_input_available_callback_ = callback; | 54 audio_frame_input_available_callback_ = callback; |
| 55 cast_sender_->InitializeAudio( | 55 cast_sender_->InitializeAudio( |
| 56 config, | 56 config, |
| 57 base::Bind(&CastSessionDelegate::InitializationResultCB, | 57 base::Bind(&CastSessionDelegate::InitializationResultCB, |
| 58 weak_factory_.GetWeakPtr())); | 58 weak_factory_.GetWeakPtr(), error_callback)); |
| 59 } | 59 } |
| 60 | 60 |
| 61 void CastSessionDelegate::StartVideo( | 61 void CastSessionDelegate::StartVideo( |
| 62 const VideoSenderConfig& config, | 62 const VideoSenderConfig& config, |
| 63 const VideoFrameInputAvailableCallback& callback, | 63 const VideoFrameInputAvailableCallback& callback, |
| 64 const ErrorCallback& error_callback, | 64 const ErrorCallback& error_callback, |
| 65 const media::cast::CreateVideoEncodeAcceleratorCallback& create_vea_cb, | 65 const media::cast::CreateVideoEncodeAcceleratorCallback& create_vea_cb, |
| 66 const media::cast::CreateVideoEncodeMemoryCallback& | 66 const media::cast::CreateVideoEncodeMemoryCallback& |
| 67 create_video_encode_mem_cb) { | 67 create_video_encode_mem_cb) { |
| 68 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); | 68 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
| 69 | 69 |
| 70 if (!cast_transport_ || !cast_sender_) { | 70 if (!cast_transport_ || !cast_sender_) { |
| 71 error_callback.Run("Destination not set."); | 71 error_callback.Run("Destination not set."); |
| 72 return; | 72 return; |
| 73 } | 73 } |
| 74 | 74 |
| 75 video_frame_input_available_callback_ = callback; | 75 video_frame_input_available_callback_ = callback; |
| 76 | 76 |
| 77 cast_sender_->InitializeVideo( | 77 cast_sender_->InitializeVideo( |
| 78 config, | 78 config, |
| 79 base::Bind(&CastSessionDelegate::InitializationResultCB, | 79 base::Bind(&CastSessionDelegate::InitializationResultCB, |
| 80 weak_factory_.GetWeakPtr()), | 80 weak_factory_.GetWeakPtr(), error_callback), |
| 81 create_vea_cb, | 81 create_vea_cb, |
| 82 create_video_encode_mem_cb); | 82 create_video_encode_mem_cb); |
| 83 } | 83 } |
| 84 | 84 |
| 85 void CastSessionDelegate::StartUDP(const net::IPEndPoint& remote_endpoint) { | 85 void CastSessionDelegate::StartUDP(const net::IPEndPoint& remote_endpoint) { |
| 86 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); | 86 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
| 87 | 87 |
| 88 // CastSender uses the renderer's IO thread as the main thread. This reduces | 88 // CastSender uses the renderer's IO thread as the main thread. This reduces |
| 89 // thread hopping for incoming video frames and outgoing network packets. | 89 // thread hopping for incoming video frames and outgoing network packets. |
| 90 cast_environment_ = new CastEnvironment( | 90 cast_environment_ = new CastEnvironment( |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 callback.Run(stats.Pass()); | 196 callback.Run(stats.Pass()); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void CastSessionDelegate::StatusNotificationCB( | 199 void CastSessionDelegate::StatusNotificationCB( |
| 200 media::cast::CastTransportStatus unused_status) { | 200 media::cast::CastTransportStatus unused_status) { |
| 201 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); | 201 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
| 202 // TODO(hubbe): Call javascript UDPTransport error function. | 202 // TODO(hubbe): Call javascript UDPTransport error function. |
| 203 } | 203 } |
| 204 | 204 |
| 205 void CastSessionDelegate::InitializationResultCB( | 205 void CastSessionDelegate::InitializationResultCB( |
| 206 const ErrorCallback& error_callback, | |
| 206 media::cast::CastInitializationStatus result) const { | 207 media::cast::CastInitializationStatus result) const { |
| 207 DCHECK(cast_sender_); | 208 DCHECK(cast_sender_); |
| 208 | 209 |
| 209 // TODO(pwestin): handle the error codes. | |
| 210 if (result == media::cast::STATUS_AUDIO_INITIALIZED) { | 210 if (result == media::cast::STATUS_AUDIO_INITIALIZED) { |
|
hubbe
2014/09/09 19:11:03
Make this part of the switch() ?
Alpha Left Google
2014/09/09 19:41:18
Done.
| |
| 211 audio_frame_input_available_callback_.Run( | 211 audio_frame_input_available_callback_.Run( |
| 212 cast_sender_->audio_frame_input()); | 212 cast_sender_->audio_frame_input()); |
| 213 } else if (result == media::cast::STATUS_VIDEO_INITIALIZED) { | 213 } else if (result == media::cast::STATUS_VIDEO_INITIALIZED) { |
| 214 video_frame_input_available_callback_.Run( | 214 video_frame_input_available_callback_.Run( |
| 215 cast_sender_->video_frame_input()); | 215 cast_sender_->video_frame_input()); |
| 216 } else if (result > media::cast::STATUS_VIDEO_INITIALIZED) { | |
| 217 switch (status) { | |
| 218 case media::cast::STATUS_INVALID_CAST_ENVIRONMENT: | |
| 219 error_callback.Run("Invalid cast environment."); | |
|
hubbe
2014/09/09 19:11:03
break?
Alpha Left Google
2014/09/09 19:41:17
Whooooops. Done.
| |
| 220 case media::cast::STATUS_INVALID_CRYPTO_CONFIGURATION: | |
| 221 error_callback.Run("Invalid encryption keys."); | |
|
hubbe
2014/09/09 19:11:03
break?
| |
| 222 case media::cast::STATUS_UNSUPPORTED_AUDIO_CODEC: | |
| 223 error_callback.Run("Audio codec not supported."); | |
|
hubbe
2014/09/09 19:11:03
break?
| |
| 224 case media::cast::STATUS_UNSUPPORTED_VIDEO_CODEC: | |
| 225 error_callback.Run("Video codec not supported."); | |
|
hubbe
2014/09/09 19:11:03
break?
| |
| 226 case media::cast::STATUS_INVALID_AUDIO_CONFIGURATION: | |
| 227 error_callback.Run("Invalid audio configuration."); | |
|
hubbe
2014/09/09 19:11:03
break?
| |
| 228 case media::cast::STATUS_INVALID_VIDEO_CONFIGURATION: | |
| 229 error_callback.Run("Invalid video configuration."); | |
|
hubbe
2014/09/09 19:11:03
break?
| |
| 230 case media::cast::STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED: | |
| 231 error_callback.Run("Hardware video encoder not supported."); | |
|
hubbe
2014/09/09 19:11:03
break?
| |
| 232 case media::cast::STATUS_AUDIO_UNINITIALIZED: | |
| 233 case media::cast::STATUS_VIDEO_UNINITIALIZED: | |
| 234 case media::cast::STATUS_AUDIO_INITIALIZED: | |
| 235 case media::cast::STATUS_VIDEO_INITIALIZED: | |
| 236 NOTREACHED() << "Not an error."; | |
| 237 } | |
| 216 } | 238 } |
| 217 } | 239 } |
| 218 | 240 |
| 219 void CastSessionDelegate::LogRawEvents( | 241 void CastSessionDelegate::LogRawEvents( |
| 220 const std::vector<media::cast::PacketEvent>& packet_events, | 242 const std::vector<media::cast::PacketEvent>& packet_events, |
| 221 const std::vector<media::cast::FrameEvent>& frame_events) { | 243 const std::vector<media::cast::FrameEvent>& frame_events) { |
| 222 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); | 244 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
| 223 | 245 |
| 224 for (std::vector<media::cast::PacketEvent>::const_iterator it = | 246 for (std::vector<media::cast::PacketEvent>::const_iterator it = |
| 225 packet_events.begin(); | 247 packet_events.begin(); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 249 } else { | 271 } else { |
| 250 cast_environment_->Logging()->InsertFrameEvent( | 272 cast_environment_->Logging()->InsertFrameEvent( |
| 251 it->timestamp, | 273 it->timestamp, |
| 252 it->type, | 274 it->type, |
| 253 it->media_type, | 275 it->media_type, |
| 254 it->rtp_timestamp, | 276 it->rtp_timestamp, |
| 255 it->frame_id); | 277 it->frame_id); |
| 256 } | 278 } |
| 257 } | 279 } |
| 258 } | 280 } |
| OLD | NEW |