blob: ba35b469e21c3264b4d7cce52af410ed77981a26 [file] [log] [blame]
/*
* Copyright 2020 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 "hal_adapter/camera_module_callbacks_associated_delegate.h"
#include <utility>
#include <base/bind.h>
#include <base/bind_helpers.h>
#include "cros-camera/common.h"
#include "cros-camera/future.h"
namespace cros {
CameraModuleCallbacksAssociatedDelegate::
CameraModuleCallbacksAssociatedDelegate(
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
: internal::MojoAssociatedChannel<mojom::CameraModuleCallbacks>(
task_runner) {}
void CameraModuleCallbacksAssociatedDelegate::CameraDeviceStatusChange(
int camera_id, int new_status) {
VLOGF_ENTER();
auto future = cros::Future<void>::Create(&relay_);
task_runner_->PostTask(
FROM_HERE, base::Bind(&CameraModuleCallbacksAssociatedDelegate::
CameraDeviceStatusChangeOnThread,
base::AsWeakPtr(this), camera_id, new_status,
cros::GetFutureCallback(future)));
future->Wait();
}
void CameraModuleCallbacksAssociatedDelegate::TorchModeStatusChange(
int camera_id, int new_status) {
VLOGF_ENTER();
auto future = cros::Future<void>::Create(&relay_);
task_runner_->PostTask(
FROM_HERE, base::Bind(&CameraModuleCallbacksAssociatedDelegate::
TorchModeStatusChangeOnThread,
base::AsWeakPtr(this), camera_id, new_status,
cros::GetFutureCallback(future)));
future->Wait();
}
void CameraModuleCallbacksAssociatedDelegate::CameraDeviceStatusChangeOnThread(
int camera_id, int new_status, base::Closure callback) {
VLOGF_ENTER();
DCHECK(task_runner_->BelongsToCurrentThread());
interface_ptr_->CameraDeviceStatusChange(
camera_id, static_cast<mojom::CameraDeviceStatus>(new_status));
callback.Run();
}
void CameraModuleCallbacksAssociatedDelegate::TorchModeStatusChangeOnThread(
int camera_id, int new_status, base::Closure callback) {
VLOGF_ENTER();
DCHECK(task_runner_->BelongsToCurrentThread());
interface_ptr_->TorchModeStatusChange(
camera_id, static_cast<mojom::TorchModeStatus>(new_status));
callback.Run();
}
} // namespace cros