Index: extensions/renderer/api/display_source/wifi_display/wifi_display_media_manager.cc |
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_media_manager.cc b/extensions/renderer/api/display_source/wifi_display/wifi_display_media_manager.cc |
index f06558f287bf3a6d5b25169d24239833ccb945e9..48e90da49337a31ae5adde8d04c6441f12684c28 100644 |
--- a/extensions/renderer/api/display_source/wifi_display/wifi_display_media_manager.cc |
+++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_media_manager.cc |
@@ -7,6 +7,7 @@ |
#include "base/logging.h" |
#include "base/rand_util.h" |
#include "base/task_runner_util.h" |
+#include "content/public/common/service_registry.h" |
#include "content/public/renderer/media_stream_utils.h" |
#include "content/public/renderer/media_stream_video_sink.h" |
#include "content/public/renderer/render_thread.h" |
@@ -66,9 +67,13 @@ class WiFiDisplayVideoSink : public content::MediaStreamVideoSink { |
WiFiDisplayMediaManager::WiFiDisplayMediaManager( |
const blink::WebMediaStreamTrack& video_track, |
const blink::WebMediaStreamTrack& audio_track, |
+ const std::string& sink_ip_address, |
+ content::ServiceRegistry* service_registry, |
const ErrorCallback& error_callback) |
: video_track_(video_track), |
audio_track_(audio_track), |
+ service_registry_(service_registry), |
+ sink_ip_address_(sink_ip_address), |
player_(nullptr), |
io_task_runner_(content::RenderThread::Get()->GetIOMessageLoopProxy()), |
error_callback_(error_callback), |
@@ -76,6 +81,7 @@ WiFiDisplayMediaManager::WiFiDisplayMediaManager( |
is_initialized_(false), |
weak_factory_(this) { |
DCHECK(!video_track.isNull() || !audio_track.isNull()); |
+ DCHECK(service_registry_); |
DCHECK(!error_callback_.is_null()); |
} |
@@ -86,12 +92,19 @@ WiFiDisplayMediaManager::~WiFiDisplayMediaManager() { |
void WiFiDisplayMediaManager::Play() { |
is_playing_ = true; |
if (!player_) { |
+ auto service_callback = base::Bind( |
+ &WiFiDisplayMediaManager::RegisterMediaService, |
+ base::Unretained(this), |
+ base::ThreadTaskRunnerHandle::Get()); |
base::PostTaskAndReplyWithResult(io_task_runner_.get(), FROM_HERE, |
base::Bind( |
&WiFiDisplayMediaPipeline::Create, |
GetSessionType(), |
video_encoder_parameters_, |
optimal_audio_codec_, |
+ sink_ip_address_, |
+ sink_rtp_ports_, |
+ service_callback, // To be invoked on IO thread. |
media::BindToCurrentLoop(error_callback_)), |
base::Bind(&WiFiDisplayMediaManager::OnPlayerCreated, |
weak_factory_.GetWeakPtr())); |
@@ -396,5 +409,24 @@ void WiFiDisplayMediaManager::OnMediaPipelineInitialized(bool success) { |
Play(); |
} |
+// Note: invoked on IO thread |
+void WiFiDisplayMediaManager::RegisterMediaService( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& main_runner, |
+ WiFiDisplayMediaServiceRequest request, |
+ const base::Closure& on_completed) { |
+ auto connect_service_callback = |
+ base::Bind(&WiFiDisplayMediaManager::ConnectToRemoteService, |
+ base::Unretained(this), |
+ base::Passed(&request)); |
+ main_runner->PostTaskAndReply(FROM_HERE, |
+ connect_service_callback, |
+ media::BindToCurrentLoop(on_completed)); |
+} |
+ |
+void WiFiDisplayMediaManager::ConnectToRemoteService( |
+ WiFiDisplayMediaServiceRequest request) { |
+ DCHECK(content::RenderThread::Get()); |
+ service_registry_->ConnectToRemoteService(std::move(request)); |
+} |
} // namespace extensions |