blob: c6f7e0110449cc6cce3aeed84a595e88e744179c [file] [log] [blame]
// 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_GRAPH_UTILS_H_
#define SRC_CAMERA_DRIVERS_CONTROLLER_GRAPH_UTILS_H_
#include <vector>
#include "src/camera/drivers/controller/configs/internal_config.h"
#include "src/camera/drivers/controller/memory_allocation.h"
#include "src/camera/drivers/controller/stream_pipeline_info.h"
namespace camera {
// Gets the next node for the requested stream path
const InternalConfigNode* GetNextNodeInPipeline(const fuchsia::camera2::CameraStreamType& stream,
const InternalConfigNode& node);
// NOTE: This API currently supports only single consumer node use cases.
// Gets the right buffercollection for the producer-consumer combination.
// |memory_allocator| - Memory allocator to allocate memory using sysmem.
// |producer| - Internal node for the producer.
// |info| - Info about the stream to be created & the client buffer collection.
// |buffer_tag| - Name for the VMOs.
fit::result<fuchsia::sysmem::BufferCollectionInfo_2, zx_status_t> GetBuffers(
const ControllerMemoryAllocator& memory_allocator, const InternalConfigNode& producer,
StreamCreationData* info, const std::string& buffer_tag);
// Returns |true| if CameraStreamType |type| is present in the
// vector |streams|.
inline bool HasStreamType(const std::vector<fuchsia::camera2::CameraStreamType>& streams,
fuchsia::camera2::CameraStreamType type) {
return std::find(streams.begin(), streams.end(), type) != streams.end();
}
} // namespace camera
#endif // SRC_CAMERA_DRIVERS_CONTROLLER_GRAPH_UTILS_H_