blob: 13b61fde7ac9c24ae8e36ac6bcd5530a7819fee1 [file] [log] [blame]
// Copyright 2021 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_BIN_VIRTUAL_CAMERA_VIRTUAL_CAMERA_AGENT_H_
#define SRC_CAMERA_BIN_VIRTUAL_CAMERA_VIRTUAL_CAMERA_AGENT_H_
#include <fuchsia/camera/test/cpp/fidl.h>
#include <fuchsia/camera/test/virtualcamera/cpp/fidl.h>
#include <fuchsia/camera2/hal/cpp/fidl.h>
#include <fuchsia/hardware/camera/cpp/fidl.h>
#include <lib/sys/cpp/component_context.h>
#include <set>
#include "src/camera/bin/virtual_camera/stream_storage.h"
#include "src/camera/bin/virtual_camera/virtual_camera_hal_controller.h"
namespace camera {
class VirtualCameraAgent : public fuchsia::hardware::camera::Device,
public fuchsia::camera::test::virtualcamera::VirtualCameraDevice {
public:
VirtualCameraAgent(sys::ComponentContext* component_context, StreamStorage& stream_storage);
// fuchsia::hardware::camera::Device impl.
void GetChannel(zx::channel channel) override;
void GetChannel2(fidl::InterfaceRequest<fuchsia::camera2::hal::Controller> server_end) override;
void GetDebugChannel(fidl::InterfaceRequest<fuchsia::camera2::debug::Debug> server_end) override;
// fuchsia::camera::virtualcamera::VirtualCameraDevice impl.
void AddToDeviceWatcher(AddToDeviceWatcherCallback callback) override;
void AddStreamConfig(uint64_t index,
fuchsia::camera::test::virtualcamera::StreamConfig config) override;
private:
sys::ComponentContext* component_context_;
StreamStorage& stream_storage_;
fidl::Binding<fuchsia::hardware::camera::Device> hardware_device_binding_;
fidl::InterfacePtr<fuchsia::camera::test::DeviceWatcherTester> device_watcher_tester_;
std::set<std::unique_ptr<VirtualCameraHalController>> hal_controllers_;
};
} // namespace camera
#endif // SRC_CAMERA_BIN_VIRTUAL_CAMERA_VIRTUAL_CAMERA_AGENT_H_