| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "media_perception/media_perception_service_impl.h" |
| |
| #include <base/bind.h> |
| #include <utility> |
| |
| #include "media_perception/media_perception_controller_impl.h" |
| |
| namespace mri { |
| |
| namespace { |
| |
| void OnConnectionClosedOrError( |
| const MediaPerceptionControllerImpl* const controller) { |
| LOG(WARNING) << "Got closed connection."; |
| delete controller; |
| } |
| |
| } // namespace |
| |
| MediaPerceptionServiceImpl::MediaPerceptionServiceImpl( |
| mojo::ScopedMessagePipeHandle pipe, |
| base::Closure connection_error_handler, |
| std::shared_ptr<VideoCaptureServiceClient> video_capture_service_client, |
| std::shared_ptr<ChromeAudioServiceClient> chrome_audio_service_client, |
| std::shared_ptr<Rtanalytics> rtanalytics) |
| : binding_(this, |
| mojo::InterfaceRequest< |
| chromeos::media_perception::mojom::MediaPerceptionService>( |
| std::move(pipe))), |
| video_capture_service_client_(video_capture_service_client), |
| chrome_audio_service_client_(chrome_audio_service_client), |
| rtanalytics_(rtanalytics) { |
| binding_.set_connection_error_handler(std::move(connection_error_handler)); |
| } |
| |
| void MediaPerceptionServiceImpl::GetController( |
| chromeos::media_perception::mojom::MediaPerceptionControllerRequest request, |
| chromeos::media_perception::mojom::MediaPerceptionControllerClientPtr |
| client) { |
| client_ = std::move(client); |
| |
| // Use a connection error handler to strongly bind |controller| to |request|. |
| MediaPerceptionControllerImpl* const controller = |
| new MediaPerceptionControllerImpl( |
| std::move(request), video_capture_service_client_, |
| chrome_audio_service_client_, rtanalytics_); |
| controller->set_connection_error_handler( |
| base::Bind(&OnConnectionClosedOrError, base::Unretained(controller))); |
| } |
| |
| void MediaPerceptionServiceImpl::ConnectToVideoCaptureService( |
| video_capture::mojom::VideoSourceProviderRequest request) { |
| if (client_) |
| client_->ConnectToVideoCaptureService(std::move(request)); |
| } |
| |
| } // namespace mri |