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

#pragma once
#include "common.hpp"

// Codec: HEVC
#define S_CODEC_HEVC "Codec.HEVC"
#define S_CODEC_HEVC_PROFILE "Codec.HEVC.Profile"
#define S_CODEC_HEVC_TIER "Codec.HEVC.Tier"
#define S_CODEC_HEVC_LEVEL "Codec.HEVC.Level"

namespace streamfx::encoder::codec::hevc {
	enum class profile {
		MAIN,
		MAIN10,
		RANGE_EXTENDED,
		UNKNOWN = -1,
	};

	enum class tier {
		MAIN,
		HIGH,
		UNKNOWN = -1,
	};

	enum class level {
		L1_0    = 30,
		L2_0    = 60,
		L2_1    = 63,
		L3_0    = 90,
		L3_1    = 93,
		L4_0    = 120,
		L4_1    = 123,
		L5_0    = 150,
		L5_1    = 153,
		L5_2    = 156,
		L6_0    = 180,
		L6_1    = 183,
		L6_2    = 186,
		UNKNOWN = -1,
	};

	void extract_header_sei(uint8_t* data, std::size_t sz_data, std::vector<uint8_t>& header, std::vector<uint8_t>& sei);
} // namespace streamfx::encoder::codec::hevc
