blob: e677ee5ce821ebb84cc34971504b323a5aa15f2f [file] [log] [blame]
// Copyright 2020 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_LIB_VIRTUAL_CAMERA_VIRTUAL_CAMERA_H_
#define SRC_CAMERA_LIB_VIRTUAL_CAMERA_VIRTUAL_CAMERA_H_
#include <fuchsia/camera3/cpp/fidl.h>
#include <fuchsia/sysmem/cpp/fidl.h>
#include <lib/fit/result.h>
namespace camera {
// This class implements a fully configured software-based camera.
class VirtualCamera {
public:
virtual ~VirtualCamera() = default;
// Create a virtual camera using the provided sysmem allocator service handle.
static fit::result<std::unique_ptr<VirtualCamera>, zx_status_t> Create(
fidl::InterfaceHandle<fuchsia::sysmem::Allocator> allocator);
// Returns a request handler for the Device interface.
virtual fidl::InterfaceRequestHandler<fuchsia::camera3::Device> GetHandler() = 0;
// Checks the provided buffer for consistency with the provided frame info, returning a
// descriptive error string on failure.
virtual fit::result<void, std::string> CheckFrame(const void* data, size_t size,
const fuchsia::camera3::FrameInfo& info) = 0;
};
} // namespace camera
#endif // SRC_CAMERA_LIB_VIRTUAL_CAMERA_VIRTUAL_CAMERA_H_