blob: f0a665f0a157044d7e565e4384ac675fc879cfde [file] [log] [blame]
// 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(
mojo::PendingReceiver<
chromeos::media_perception::mojom::MediaPerceptionController> receiver,
std::shared_ptr<VideoCaptureServiceClient> video_capture_service_client,
std::shared_ptr<ChromeAudioServiceClient> chrome_audio_service_client,
std::shared_ptr<Rtanalytics> rtanalytics)
: receiver_(this, std::move(receiver)),
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) {
receiver_.set_disconnect_handler(std::move(connection_error_handler));
}
void MediaPerceptionControllerImpl::ActivateMediaPerception(
mojo::PendingReceiver<chromeos::media_perception::mojom::MediaPerception>
receiver) {
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(receiver), 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