| // 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_controller_impl.h" |
| |
| #include <base/bind.h> |
| #include <memory> |
| #include <utility> |
| |
| #include "base/logging.h" |
| #include "media_perception/media_perception_impl.h" |
| |
| namespace mri { |
| |
| namespace { |
| |
| // To avoid passing a lambda as a base::Closure. |
| void OnConnectionClosedOrError( |
| const MediaPerceptionImpl* const media_perception_impl) { |
| DLOG(INFO) << "Got closed connection."; |
| delete media_perception_impl; |
| } |
| |
| } // namespace |
| |
| MediaPerceptionControllerImpl::MediaPerceptionControllerImpl( |
| chromeos::media_perception::mojom::MediaPerceptionControllerRequest request, |
| std::shared_ptr<VideoCaptureServiceClient> video_capture_service_client, |
| std::shared_ptr<ChromeAudioServiceClient> chrome_audio_service_client, |
| std::shared_ptr<Rtanalytics> rtanalytics) |
| : binding_(this, std::move(request)), |
| video_capture_service_client_(video_capture_service_client), |
| chrome_audio_service_client_(chrome_audio_service_client), |
| rtanalytics_(rtanalytics) {} |
| |
| void MediaPerceptionControllerImpl::set_connection_error_handler( |
| base::Closure connection_error_handler) { |
| binding_.set_connection_error_handler(std::move(connection_error_handler)); |
| } |
| |
| void MediaPerceptionControllerImpl::ActivateMediaPerception( |
| chromeos::media_perception::mojom::MediaPerceptionRequest request) { |
| DLOG(INFO) << "Got request to activate media perception."; |
| |
| // Use a connection error handler to strongly bind |media_perception_impl| |
| // to |request|. |
| MediaPerceptionImpl* const media_perception_impl = |
| new MediaPerceptionImpl(std::move(request), video_capture_service_client_, |
| chrome_audio_service_client_, rtanalytics_); |
| media_perception_impl->set_connection_error_handler(base::Bind( |
| &OnConnectionClosedOrError, base::Unretained(media_perception_impl))); |
| } |
| |
| } // namespace mri |