#ifndef LCAMERA_DEV_PLANAR_YUV_FORMAT_POLICY_H
#define LCAMERA_DEV_PLANAR_YUV_FORMAT_POLICY_H

#include <libcamera/pixel_format.h>
#include <optional>
#include <vector>

namespace lcamera_dev {

bool isFullyPlanarYuv(const libcamera::PixelFormat& pixelFormat);

bool isKnownYuvCaptureFormat(const libcamera::PixelFormat& pixelFormat);

unsigned yuvCapturePlaneCount(const libcamera::PixelFormat& pixelFormat);

std::optional<libcamera::PixelFormat>
selectYuvCaptureFormat(
	const std::vector<libcamera::PixelFormat>& candidates,
	bool fullPlanarIsOptional);

std::string formatCandidateListForDiagnostics(
	const std::vector<libcamera::PixelFormat>& candidates);

} // namespace lcamera_dev

#endif // LCAMERA_DEV_PLANAR_YUV_FORMAT_POLICY_H
