// 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 "fbl/macros.h"
#include "processing_node.h"
#include "src/camera/drivers/controller/configs/sherlock/internal_config.h"
#include "src/camera/lib/format_conversion/buffer_collection_helper.h"
#include "src/camera/lib/format_conversion/format_conversion.h"
#include "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_
