| // Copyright 2019 The Fuchsia 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 SRC_CAMERA_DRIVERS_CONTROLLER_CONTROLLER_PROTOCOL_H_ |
| #define SRC_CAMERA_DRIVERS_CONTROLLER_CONTROLLER_PROTOCOL_H_ |
| |
| #include <fidl/fuchsia.hardware.sysmem/cpp/wire.h> |
| #include <fuchsia/camera2/cpp/fidl.h> |
| #include <fuchsia/camera2/hal/cpp/fidl.h> |
| #include <fuchsia/hardware/gdc/cpp/banjo.h> |
| #include <fuchsia/hardware/ge2d/cpp/banjo.h> |
| #include <fuchsia/hardware/isp/cpp/banjo.h> |
| #include <lib/fidl/cpp/binding.h> |
| |
| #include "src/camera/drivers/controller/configs/internal_config.h" |
| #include "src/camera/drivers/controller/configs/product_config.h" |
| #include "src/camera/drivers/controller/pipeline_manager.h" |
| #include "src/camera/drivers/controller/processing_node.h" |
| #include "src/camera/drivers/controller/stream_pipeline_info.h" |
| |
| namespace camera { |
| |
| class ControllerImpl : public fuchsia::camera2::hal::Controller { |
| public: |
| ControllerImpl(async_dispatcher_t* dispatcher, |
| fuchsia::sysmem2::AllocatorSyncPtr sysmem_allocator, |
| const ddk::IspProtocolClient& isp, const ddk::GdcProtocolClient& gdc, |
| const ddk::Ge2dProtocolClient& ge2d, LoadFirmwareCallback load_firmware); |
| void Connect(fidl::InterfaceRequest<fuchsia::camera2::hal::Controller> request); |
| |
| private: |
| // fuchsia.camera2.hal.Controller implementation |
| void EnableStreaming() override; |
| void DisableStreaming() override; |
| void GetNextConfig(GetNextConfigCallback callback) override; |
| void CreateStream(uint32_t config_index, uint32_t stream_index, uint32_t image_format_index, |
| fidl::InterfaceRequest<fuchsia::camera2::Stream> stream) override; |
| void GetDeviceInfo(GetDeviceInfoCallback callback) override; |
| |
| async_dispatcher_t* dispatcher_; |
| fidl::Binding<fuchsia::camera2::hal::Controller> binding_; |
| std::vector<fuchsia::camera2::hal::Config> configs_; |
| InternalConfigs internal_configs_; |
| PipelineManager pipeline_manager_; |
| uint32_t pipeline_config_index_ = -1; |
| using RequestQueue = |
| std::queue<std::tuple<uint32_t, uint32_t, fidl::InterfaceRequest<fuchsia::camera2::Stream>>>; |
| std::optional<RequestQueue> requests_; |
| uint32_t config_count_ = 0; |
| std::unique_ptr<ProductConfig> product_config_; |
| }; |
| |
| } // namespace camera |
| |
| #endif // SRC_CAMERA_DRIVERS_CONTROLLER_CONTROLLER_PROTOCOL_H_ |