blob: a7d58754d7effa038c63b75a6ef048aa5d989c14 [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/usb/camera_hal_device_ops.h"
#include "cros-camera/common.h"
#include "hal/usb/camera_client.h"
namespace cros {
// Get handle to camera from device priv data
static CameraClient* camdev_to_camera(const camera3_device_t* dev) {
return reinterpret_cast<CameraClient*>(dev->priv);
}
static int initialize(const camera3_device_t* dev,
const camera3_callback_ops_t* callback_ops) {
CameraClient* client = camdev_to_camera(dev);
if (!client) {
LOGF(ERROR) << "Camera device is NULL";
return -ENODEV;
}
return client->Initialize(callback_ops);
}
static int configure_streams(const camera3_device_t* dev,
camera3_stream_configuration_t* stream_list) {
CameraClient* client = camdev_to_camera(dev);
if (!client) {
LOGF(ERROR) << "Camera device is NULL";
return -ENODEV;
}
return client->ConfigureStreams(stream_list);
}
static const camera_metadata_t* construct_default_request_settings(
const camera3_device_t* dev,
int type) {
CameraClient* client = camdev_to_camera(dev);
if (!client) {
LOGF(ERROR) << "Camera device is NULL";
return NULL;
}
return client->ConstructDefaultRequestSettings(type);
}
static int process_capture_request(const camera3_device_t* dev,
camera3_capture_request_t* request) {
CameraClient* client = camdev_to_camera(dev);
if (!client) {
LOGF(ERROR) << "Camera device is NULL";
return -ENODEV;
}
return client->ProcessCaptureRequest(request);
}
static void dump(const camera3_device_t* dev, int fd) {
CameraClient* client = camdev_to_camera(dev);
if (!client) {
LOGF(ERROR) << "Camera device is NULL";
return;
}
client->Dump(fd);
}
static int flush(const camera3_device_t* dev) {
CameraClient* client = camdev_to_camera(dev);
if (!client) {
LOGF(ERROR) << "Camera device is NULL";
return -ENODEV;
}
return client->Flush(dev);
}
camera3_device_ops_t g_camera_device_ops = {
.initialize = cros::initialize,
.configure_streams = cros::configure_streams,
.register_stream_buffers = NULL,
.construct_default_request_settings =
cros::construct_default_request_settings,
.process_capture_request = cros::process_capture_request,
.get_metadata_vendor_tag_ops = NULL,
.dump = cros::dump,
.flush = cros::flush,
.reserved = {0},
};
} // namespace cros