// AUTOGENERATED COPYRIGHT HEADER START
// Copyright (C) 2020-2023 Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
// AUTOGENERATED COPYRIGHT HEADER END

#pragma once
#include "nvidia/cv/nvidia-cv.hpp"

#include "warning-disable.hpp"
#include <cinttypes>
#include "warning-enable.hpp"

namespace streamfx::nvidia::cv {
	using ::streamfx::nvidia::cv::component_layout;
	using ::streamfx::nvidia::cv::component_type;
	using ::streamfx::nvidia::cv::memory_location;
	using ::streamfx::nvidia::cv::pixel_format;

	class image {
		protected:
		std::shared_ptr<::streamfx::nvidia::cv::cv> _cv;
		image_t                                     _image;
		uint32_t                                    _alignment;

		public:
		virtual ~image();

		protected:
		image();

		public:
		image(uint32_t width, uint32_t height, pixel_format pix_fmt, component_type cmp_type, component_layout cmp_layout, memory_location location, uint32_t alignment);

		virtual void reallocate(uint32_t width, uint32_t height, pixel_format pix_fmt, component_type cmp_type, component_layout cmp_layout, memory_location location, uint32_t alignment);

		virtual void resize(uint32_t width, uint32_t height);

		virtual ::streamfx::nvidia::cv::image_t* get_image();
	};

} // namespace streamfx::nvidia::cv
