#ifndef LCAMERA_DEV_CAMERA_MODE_REQUEST_H
#define LCAMERA_DEV_CAMERA_MODE_REQUEST_H

#include <string>

namespace lcamera_dev {

enum class LcameraDevColourSpace
{
	Yuv,
};

struct LcameraDevCameraModeRequest
{
	unsigned width = 0;
	unsigned height = 0;
	LcameraDevColourSpace colourSpace = LcameraDevColourSpace::Yuv;
	/**	EXPLANATION:
	 * When false, configure must select a fully planar YUV pixel format.
	 * When true, configure may accept semi-planar or packed YUV; lcameraBuff
	 * deinterleaves components in later capture stages.
	 */
	bool fullPlanarIsOptional = false;
};

struct LcameraDevConfiguredCameraMode
{
	unsigned width = 0, height = 0;
	LcameraDevColourSpace colourSpace = LcameraDevColourSpace::Yuv;
	std::string pixelFormatName;
	bool isFullyPlanar = false;
	unsigned planeCount = 0;
};

void validateCameraModeRequest(const LcameraDevCameraModeRequest& request);

bool cameraModeRequestsEqual(
	const LcameraDevCameraModeRequest& left,
	const LcameraDevCameraModeRequest& right);

} // namespace lcamera_dev

#endif // LCAMERA_DEV_CAMERA_MODE_REQUEST_H
