uvgVPCCenc 1.0.0
uvgVPCCenc is an open-source real-time V-PCC encoder library written in C++ from scratch.
Loading...
Searching...
No Matches
vps.hpp
Go to the documentation of this file.
1/*****************************************************************************
2 * This file is part of uvgVPCCenc V-PCC encoder.
3 *
4 * Copyright (c) 2024, Tampere University, ITU/ISO/IEC, project contributors
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without modification,
8 * are permitted provided that the following conditions are met:
9 *
10 * * Redistributions of source code must retain the above copyright notice, this
11 * list of conditions and the following disclaimer.
12 *
13 * * Redistributions in binary form must reproduce the above copyright notice, this
14 * list of conditions and the following disclaimer in the documentation and/or
15 * other materials provided with the distribution.
16 *
17 * * Neither the name of the Tampere University or ITU/ISO/IEC nor the names of its
18 * contributors may be used to endorse or promote products derived from
19 * this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON
28 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 * INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS
31 ****************************************************************************/
32
33#pragma once
34
35#include <cmath>
36
37#include "bitstream_util.hpp"
38#include "uvgvpcc/uvgvpcc.hpp"
39
55
57 bool ptl_tier_flag = false;
62 uint8_t ptl_level_idc = 0;
64 bool ptl_extended_sub_profile_flag = false; // 0: use ptl_sub_profile_idc_32, 1: use ptl_sub_profile_idc_64
65 std::vector<uint32_t> ptl_sub_profile_idc_32 = {};
66 std::vector<uint64_t> ptl_sub_profile_idc_64 = {};
69};
70
77
85
87 uint8_t ai_attribute_count = 0;
88 std::vector<uint8_t> ai_attribute_type_id = {};
89 std::vector<uint8_t> ai_attribute_codec_id = {};
90 std::vector<uint8_t> ai_auxiliary_attribute_codec_id = {};
92 std::vector<uint8_t> ai_attribute_dimension_minus1 = {};
94 std::vector<std::vector<uint16_t>> ai_attribute_partition_channels_minus1{};
95 std::vector<uint8_t> ai_attribute_2d_bit_depth_minus1 = {};
96 std::vector<bool> ai_attribute_MSB_align_flag = {};
97};
98
99class vps {
100 public:
101 /* Constructor generates VPS values from paramUVG and gofUVG */
102 vps(const uvgvpcc_enc::Parameters& paramUVG, const std::shared_ptr<uvgvpcc_enc::GOF>& gofUVG);
103
104 /* Write the VPS into a bitstream form */
105 bool write_vps(bitstream_t* stream);
106
107 size_t get_vps_byte_len() { return vps_length_bytes_; };
108
109 private:
110 /* Fill the PTL values in VPS */
111 profile_tier_level fill_ptl(size_t& len) const;
112
113 // helper variables
114 size_t vps_length_bytes_;
115 uint8_t codec_group_; // AVD, VVC, HEVC, or other
116
118 uint8_t vps_v3c_parameter_set_id_;
119 uint8_t vps_atlas_count_minus1_;
120
121 std::vector<uint8_t> vps_atlas_id_;
122 std::vector<size_t> vps_frame_width_;
123 std::vector<size_t> vps_frame_height_;
124 std::vector<uint8_t> vps_map_count_minus1_;
125 std::vector<bool> vps_multiple_map_streams_present_flag_;
126 std::vector<std::vector<bool>> vps_map_absolute_coding_enabled_flag_;
127 std::vector<std::vector<uint16_t>> vps_map_predictor_index_diff_;
128 std::vector<bool> vps_auxiliary_video_present_flag_;
129 std::vector<bool> vps_occupancy_video_present_flag_;
130 std::vector<bool> vps_geometry_video_present_flag_;
131 std::vector<bool> vps_attribute_video_present_flag_;
132 std::vector<occupancy_information> occupancy_info_;
133 std::vector<geometry_information> geometry_info_;
134 std::vector<attribute_information> attribute_info_;
135
136 bool vps_extension_present_flag_;
137 bool vps_packing_information_present_flag_;
138 bool vps_miv_extension_present_flag_;
139 uint8_t vps_extension_6bits_;
140 size_t vps_extension_length_minus1_;
141 uint8_t vps_extension_data_byte_;
142};
Definition vps.hpp:99
bool write_vps(bitstream_t *stream)
Definition vps.cpp:154
size_t get_vps_byte_len()
Definition vps.hpp:107
Definition vps.hpp:86
std::vector< bool > ai_attribute_MSB_align_flag
Definition vps.hpp:96
std::vector< uint8_t > ai_attribute_2d_bit_depth_minus1
Definition vps.hpp:95
std::vector< uint8_t > ai_attribute_codec_id
Definition vps.hpp:89
uint8_t ai_attribute_count
Definition vps.hpp:87
std::vector< bool > ai_attribute_map_absolute_coding_persistence_flag
Definition vps.hpp:91
std::vector< std::vector< uint16_t > > ai_attribute_partition_channels_minus1
Definition vps.hpp:94
std::vector< uint8_t > ai_auxiliary_attribute_codec_id
Definition vps.hpp:90
std::vector< uint8_t > ai_attribute_type_id
Definition vps.hpp:88
std::vector< uint8_t > ai_attribute_dimension_partitions_minus1
Definition vps.hpp:93
std::vector< uint8_t > ai_attribute_dimension_minus1
Definition vps.hpp:92
Definition bitstream_util.hpp:57
Definition vps.hpp:78
uint8_t gi_geometry_codec_id
Definition vps.hpp:79
bool gi_geometry_MSB_align_flag
Definition vps.hpp:81
uint8_t gi_auxiliary_geometry_codec_id
Definition vps.hpp:83
uint8_t gi_geometry_2d_bit_depth_minus1
Definition vps.hpp:80
uint8_t gi_geometry_3d_coordinates_bit_depth_minus1
Definition vps.hpp:82
Definition vps.hpp:71
uint8_t oi_occupancy_codec_id
Definition vps.hpp:75
uint8_t oi_lossy_occupancy_compression_threshold
Definition vps.hpp:72
bool oi_occupancy_MSB_align_flag
Definition vps.hpp:74
uint8_t oi_occupancy_2d_bit_depth_minus1
Definition vps.hpp:73
Definition vps.hpp:56
std::vector< uint64_t > ptl_sub_profile_idc_64
Definition vps.hpp:66
uint8_t ptl_level_idc
Definition vps.hpp:62
uint8_t ptl_max_decodes_idc
Definition vps.hpp:61
uint8_t ptl_num_sub_profiles
Definition vps.hpp:63
uint8_t ptl_profile_codec_group_idc
Definition vps.hpp:58
profile_toolset_constraints_information ptc
Definition vps.hpp:68
bool ptl_extended_sub_profile_flag
Definition vps.hpp:64
bool ptl_tier_flag
Definition vps.hpp:57
bool ptl_toolset_constraints_present_flag
Definition vps.hpp:67
uint8_t ptl_profile_toolset_idc
Definition vps.hpp:59
uint8_t ptl_profile_reconstruction_idc
Definition vps.hpp:60
std::vector< uint32_t > ptl_sub_profile_idc_32
Definition vps.hpp:65
bool ptc_no_eight_orientations_constraint_flag
Definition vps.hpp:49
uint8_t ptc_attribute_max_dimension_partitions_minus1
Definition vps.hpp:48
bool ptc_one_v3c_frame_only_flag
Definition vps.hpp:41
bool ptc_eom_constraint_flag
Definition vps.hpp:42
std::vector< uint8_t > ptc_reserved_constraint_byte
Definition vps.hpp:53
bool ptc_restricted_geometry_flag
Definition vps.hpp:51
bool ptc_no_45degree_projection_patch_constraint_flag
Definition vps.hpp:50
uint8_t ptc_num_reserved_constraint_bytes
Definition vps.hpp:52
bool ptc_plr_constraint_flag
Definition vps.hpp:46
uint8_t ptc_max_atlas_count_minus1
Definition vps.hpp:44
bool ptc_multiple_map_streams_constraint_flag
Definition vps.hpp:45
uint8_t ptc_attribute_max_dimension_minus1
Definition vps.hpp:47
uint8_t ptc_max_map_count_minus1
Definition vps.hpp:43
Definition parameters.hpp:48