blob: 1872eaca0dbf977987c17556a3be6d36ec7a064c [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.
*/
#ifndef HAL_ADAPTER_CAMERA_DEVICE_ADAPTER_H_
#define HAL_ADAPTER_CAMERA_DEVICE_ADAPTER_H_
#include <map>
#include <memory>
#include <base/threading/thread.h>
#include <mojo/public/cpp/bindings/binding.h>
#include "hal_adapter/arc_camera3.mojom.h"
#include "hal_adapter/arc_camera3_mojo_utils.h"
#include "hardware/camera3.h"
namespace arc {
class Camera3DeviceOpsDelegate;
class Camera3CallbackOpsDelegate;
class CameraDeviceAdapter {
public:
explicit CameraDeviceAdapter(camera3_device_t* camera_device);
~CameraDeviceAdapter();
mojom::Camera3DeviceOpsPtr GetDeviceOpsPtr();
int Close();
// Callback interface for Camera3DeviceOpsDelegate.
int32_t Initialize(mojom::Camera3CallbackOpsPtr callback_ops);
mojom::Camera3StreamConfigurationPtr ConfigureStreams(
mojom::Camera3StreamConfigurationPtr config);
mojom::CameraMetadataPtr ConstructDefaultRequestSettings(int32_t type);
int32_t ProcessCaptureRequest(mojom::Camera3CaptureRequestPtr request);
void Dump(mojo::ScopedHandle fd);
int32_t Flush();
// Callback interface for Camera3CallbackOpsDelegate.
mojom::Camera3CaptureResultPtr ProcessCaptureResult(
const camera3_capture_result_t* result);
mojom::Camera3NotifyMsgPtr Notify(const camera3_notify_msg_t* msg);
private:
std::unique_ptr<Camera3DeviceOpsDelegate> device_ops_delegate_;
std::unique_ptr<Camera3CallbackOpsDelegate> callback_ops_delegate_;
// The real camera device.
camera3_device_t* camera_device_;
base::Lock streams_lock_;
// A mapping from Andoird HAL for all the configured streams.
internal::UniqueStreams streams_;
DISALLOW_COPY_AND_ASSIGN(CameraDeviceAdapter);
};
} // namespace arc
#endif // HAL_ADAPTER_CAMERA_DEVICE_ADAPTER_H_