OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "extensions/renderer/api/display_source/wifi_display/wifi_display_media
_manager.h" | 5 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_media
_manager.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
9 #include "base/task_runner_util.h" | 9 #include "base/task_runner_util.h" |
| 10 #include "content/public/common/service_registry.h" |
10 #include "content/public/renderer/media_stream_utils.h" | 11 #include "content/public/renderer/media_stream_utils.h" |
11 #include "content/public/renderer/media_stream_video_sink.h" | 12 #include "content/public/renderer/media_stream_video_sink.h" |
12 #include "content/public/renderer/render_thread.h" | 13 #include "content/public/renderer/render_thread.h" |
13 #include "content/public/renderer/video_encode_accelerator.h" | 14 #include "content/public/renderer/video_encode_accelerator.h" |
14 #include "extensions/common/mojo/wifi_display_session_service.mojom.h" | 15 #include "extensions/common/mojo/wifi_display_session_service.mojom.h" |
15 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_eleme
ntary_stream_info.h" | 16 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_eleme
ntary_stream_info.h" |
16 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_media
_pipeline.h" | 17 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_media
_pipeline.h" |
17 #include "media/base/bind_to_current_loop.h" | 18 #include "media/base/bind_to_current_loop.h" |
18 | 19 |
19 namespace extensions { | 20 namespace extensions { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 private: | 60 private: |
60 blink::WebMediaStreamTrack track_; | 61 blink::WebMediaStreamTrack track_; |
61 bool sink_added_; | 62 bool sink_added_; |
62 content::VideoCaptureDeliverFrameCB callback_; | 63 content::VideoCaptureDeliverFrameCB callback_; |
63 DISALLOW_COPY_AND_ASSIGN(WiFiDisplayVideoSink); | 64 DISALLOW_COPY_AND_ASSIGN(WiFiDisplayVideoSink); |
64 }; | 65 }; |
65 | 66 |
66 WiFiDisplayMediaManager::WiFiDisplayMediaManager( | 67 WiFiDisplayMediaManager::WiFiDisplayMediaManager( |
67 const blink::WebMediaStreamTrack& video_track, | 68 const blink::WebMediaStreamTrack& video_track, |
68 const blink::WebMediaStreamTrack& audio_track, | 69 const blink::WebMediaStreamTrack& audio_track, |
| 70 const std::string& sink_ip_address, |
| 71 content::ServiceRegistry* service_registry, |
69 const ErrorCallback& error_callback) | 72 const ErrorCallback& error_callback) |
70 : video_track_(video_track), | 73 : video_track_(video_track), |
71 audio_track_(audio_track), | 74 audio_track_(audio_track), |
| 75 service_registry_(service_registry), |
| 76 sink_ip_address_(sink_ip_address), |
72 player_(nullptr), | 77 player_(nullptr), |
73 io_task_runner_(content::RenderThread::Get()->GetIOMessageLoopProxy()), | 78 io_task_runner_(content::RenderThread::Get()->GetIOMessageLoopProxy()), |
74 error_callback_(error_callback), | 79 error_callback_(error_callback), |
75 is_playing_(false), | 80 is_playing_(false), |
76 is_initialized_(false), | 81 is_initialized_(false), |
77 weak_factory_(this) { | 82 weak_factory_(this) { |
78 DCHECK(!video_track.isNull() || !audio_track.isNull()); | 83 DCHECK(!video_track.isNull() || !audio_track.isNull()); |
| 84 DCHECK(service_registry_); |
79 DCHECK(!error_callback_.is_null()); | 85 DCHECK(!error_callback_.is_null()); |
80 } | 86 } |
81 | 87 |
82 WiFiDisplayMediaManager::~WiFiDisplayMediaManager() { | 88 WiFiDisplayMediaManager::~WiFiDisplayMediaManager() { |
83 Teardown(); | 89 Teardown(); |
84 } | 90 } |
85 | 91 |
86 void WiFiDisplayMediaManager::Play() { | 92 void WiFiDisplayMediaManager::Play() { |
87 is_playing_ = true; | 93 is_playing_ = true; |
88 if (!player_) { | 94 if (!player_) { |
| 95 auto service_callback = base::Bind( |
| 96 &WiFiDisplayMediaManager::RegisterMediaService, |
| 97 base::Unretained(this), |
| 98 base::ThreadTaskRunnerHandle::Get()); |
89 base::PostTaskAndReplyWithResult(io_task_runner_.get(), FROM_HERE, | 99 base::PostTaskAndReplyWithResult(io_task_runner_.get(), FROM_HERE, |
90 base::Bind( | 100 base::Bind( |
91 &WiFiDisplayMediaPipeline::Create, | 101 &WiFiDisplayMediaPipeline::Create, |
92 GetSessionType(), | 102 GetSessionType(), |
93 video_encoder_parameters_, | 103 video_encoder_parameters_, |
94 optimal_audio_codec_, | 104 optimal_audio_codec_, |
| 105 sink_ip_address_, |
| 106 sink_rtp_ports_, |
| 107 service_callback, // To be invoked on IO thread. |
95 media::BindToCurrentLoop(error_callback_)), | 108 media::BindToCurrentLoop(error_callback_)), |
96 base::Bind(&WiFiDisplayMediaManager::OnPlayerCreated, | 109 base::Bind(&WiFiDisplayMediaManager::OnPlayerCreated, |
97 weak_factory_.GetWeakPtr())); | 110 weak_factory_.GetWeakPtr())); |
98 return; | 111 return; |
99 } | 112 } |
100 | 113 |
101 if (!is_initialized_) { | 114 if (!is_initialized_) { |
102 return; // Waiting for initialization being completed. | 115 return; // Waiting for initialization being completed. |
103 } | 116 } |
104 | 117 |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 | 402 |
390 if (!is_initialized_) { | 403 if (!is_initialized_) { |
391 error_callback_.Run(kErrorMediaPipelineFailure); | 404 error_callback_.Run(kErrorMediaPipelineFailure); |
392 return; | 405 return; |
393 } | 406 } |
394 | 407 |
395 if (is_playing_) | 408 if (is_playing_) |
396 Play(); | 409 Play(); |
397 } | 410 } |
398 | 411 |
| 412 // Note: invoked on IO thread |
| 413 void WiFiDisplayMediaManager::RegisterMediaService( |
| 414 const scoped_refptr<base::SingleThreadTaskRunner>& main_runner, |
| 415 WiFiDisplayMediaServiceRequest request, |
| 416 const base::Closure& on_completed) { |
| 417 auto connect_service_callback = |
| 418 base::Bind(&WiFiDisplayMediaManager::ConnectToRemoteService, |
| 419 base::Unretained(this), |
| 420 base::Passed(&request)); |
| 421 main_runner->PostTaskAndReply(FROM_HERE, |
| 422 connect_service_callback, |
| 423 media::BindToCurrentLoop(on_completed)); |
| 424 } |
| 425 |
| 426 void WiFiDisplayMediaManager::ConnectToRemoteService( |
| 427 WiFiDisplayMediaServiceRequest request) { |
| 428 DCHECK(content::RenderThread::Get()); |
| 429 service_registry_->ConnectToRemoteService(std::move(request)); |
| 430 } |
399 | 431 |
400 } // namespace extensions | 432 } // namespace extensions |
OLD | NEW |