blob: 11df43d93ebe68fe1cbb994d659e2f6985f251a3 [file] [log] [blame]
/*
* Copyright 2016 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_delegate.h"
#include <utility>
#include <base/bind.h>
#include <base/bind_helpers.h>
#include "arc/common.h"
namespace arc {
CameraModuleCallbacksDelegate::CameraModuleCallbacksDelegate(
mojo::InterfacePtrInfo<mojom::CameraModuleCallbacks> callbacks_ptr_info,
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
: internal::MojoChannel<mojom::CameraModuleCallbacks>(
std::move(callbacks_ptr_info),
task_runner) {
camera_module_callbacks_t::camera_device_status_change =
CameraDeviceStatusChange;
}
void CameraModuleCallbacksDelegate::CameraDeviceStatusChange(
const camera_module_callbacks_t* callbacks,
int camera_id,
int new_status) {
VLOGF_ENTER();
CameraModuleCallbacksDelegate* delegate =
const_cast<CameraModuleCallbacksDelegate*>(
static_cast<const CameraModuleCallbacksDelegate*>(callbacks));
auto future = internal::Future<void>::Create(&delegate->relay_);
delegate->task_runner_->PostTask(
FROM_HERE,
base::Bind(
&CameraModuleCallbacksDelegate::CameraDeviceStatusChangeOnThread,
base::AsWeakPtr(delegate), camera_id, new_status,
internal::GetFutureCallback(future)));
future->Wait();
}
void CameraModuleCallbacksDelegate::CameraDeviceStatusChangeOnThread(
int camera_id,
int new_status,
const base::Callback<void()>& cb) {
VLOGF_ENTER();
DCHECK(task_runner_->BelongsToCurrentThread());
interface_ptr_->CameraDeviceStatusChange(
camera_id, static_cast<mojom::CameraDeviceStatus>(new_status), cb);
}
} // namespace arc