@@ -54,7 +54,8 @@ vps::vps(const uvgvpcc_enc::Parameters& paramUVG, const std::shared_ptr<uvgvpcc_
5454 " Error : unknown ptl_profile_codec_group_idc. This bitstream parameter indicates what codec is used to encode the 2D videos." );
5555 }
5656 size_t vps_length_bits = 0 ;
57- ptl_ = fill_ptl (vps_length_bits); // profile_tier_level
57+ ptl_ = fill_ptl (vps_length_bits); // profile_tier_level
58+ gofId = gofUVG->gofId ; // lf addition for exporting intermediate atlas information
5859 vps_v3c_parameter_set_id_ = gofUVG->gofId % 16 ; // The value of vps_v3c_parameter_set_id shall be in the range of 0 to 15
5960 vps_atlas_count_minus1_ = 0 ; // for atlas count 1
6061 vps_length_bits += 18 ; // fixed fields
@@ -152,85 +153,86 @@ vps::vps(const uvgvpcc_enc::Parameters& paramUVG, const std::shared_ptr<uvgvpcc_
152153}
153154
154155bool vps::write_vps (bitstream_t * stream) {
156+
155157 // profile_tier_level
156- WRITE_U (stream, ptl_.ptl_tier_flag , 1 , " ptl_tier_flag" );
157- WRITE_U (stream, ptl_.ptl_profile_codec_group_idc , 7 , " ptl_profile_codec_group_idc" );
158- WRITE_U (stream, ptl_.ptl_profile_toolset_idc , 8 , " ptl_profile_toolset_idc" );
159- WRITE_U (stream, ptl_.ptl_profile_reconstruction_idc , 8 , " ptl_profile_reconstruction_idc" );
160- WRITE_U (stream, 0 , 16 , " ptl_reserved_zero_16bits" );
161- WRITE_U (stream, ptl_.ptl_max_decodes_idc , 4 , " ptl_max_decodes_idc" );
162- WRITE_U (stream, 0xfff , 12 , " ptl_reserved_0xfff_12bits" );
163- WRITE_U (stream, ptl_.ptl_level_idc , 8 , " ptl_level_idc" );
164- WRITE_U (stream, ptl_.ptl_num_sub_profiles , 6 , " ptl_num_sub_profiles" );
165- WRITE_U (stream, ptl_.ptl_extended_sub_profile_flag , 1 , " ptl_extended_sub_profile_flag" );
166- WRITE_U (stream, ptl_.ptl_toolset_constraints_present_flag , 1 , " ptl_toolset_constraints_present_flag" );
158+ writeU (stream, ptl_.ptl_tier_flag , 1 , " ptl_tier_flag" ,gofId );
159+ writeU (stream, ptl_.ptl_profile_codec_group_idc , 7 , " ptl_profile_codec_group_idc" ,gofId );
160+ writeU (stream, ptl_.ptl_profile_toolset_idc , 8 , " ptl_profile_toolset_idc" ,gofId );
161+ writeU (stream, ptl_.ptl_profile_reconstruction_idc , 8 , " ptl_profile_reconstruction_idc" ,gofId );
162+ writeU (stream, 0 , 16 , " ptl_reserved_zero_16bits" ,gofId );
163+ writeU (stream, ptl_.ptl_max_decodes_idc , 4 , " ptl_max_decodes_idc" ,gofId );
164+ writeU (stream, 0xfff , 12 , " ptl_reserved_0xfff_12bits" ,gofId );
165+ writeU (stream, ptl_.ptl_level_idc , 8 , " ptl_level_idc" ,gofId );
166+ writeU (stream, ptl_.ptl_num_sub_profiles , 6 , " ptl_num_sub_profiles" ,gofId );
167+ writeU (stream, ptl_.ptl_extended_sub_profile_flag , 1 , " ptl_extended_sub_profile_flag" ,gofId );
168+ writeU (stream, ptl_.ptl_toolset_constraints_present_flag , 1 , " ptl_toolset_constraints_present_flag" ,gofId );
167169
168170 // profile_toolset_constraints_information
169171 // TODO(lf): Do we need profile_toolset_constraints_information? Not present from TMC2 interface
170172
171- WRITE_U (stream, vps_v3c_parameter_set_id_, 4 , " vps_v3c_parameter_set_id" );
172- WRITE_U (stream, 0 , 8 , " vps_reserved_zero_8bits" );
173- WRITE_U (stream, vps_atlas_count_minus1_, 6 , " vps_atlas_count_minus1" );
173+ writeU (stream, vps_v3c_parameter_set_id_, 4 , " vps_v3c_parameter_set_id" ,gofId );
174+ writeU (stream, 0 , 8 , " vps_reserved_zero_8bits" ,gofId );
175+ writeU (stream, vps_atlas_count_minus1_, 6 , " vps_atlas_count_minus1" ,gofId );
174176
175177 for (uint8_t j = 0 ; j < (vps_atlas_count_minus1_ + 1 ); j++) {
176- WRITE_U (stream, j, 6 , " vps_atlas_id" );
177- WRITE_UE (stream, int (vps_frame_width_.at (j)), " vps_frame_width" );
178- WRITE_UE (stream, int (vps_frame_height_.at (j)), " vps_frame_height" );
179- WRITE_U (stream, vps_map_count_minus1_.at (j), 4 , " vps_map_count_minus1" );
178+ writeU (stream, j, 6 , " vps_atlas_id" ,gofId );
179+ writeUE (stream, int (vps_frame_width_.at (j)), " vps_frame_width" ,gofId );
180+ writeUE (stream, int (vps_frame_height_.at (j)), " vps_frame_height" ,gofId );
181+ writeU (stream, vps_map_count_minus1_.at (j), 4 , " vps_map_count_minus1" ,gofId );
180182
181183 if (vps_map_count_minus1_.at (j) > 0 ) {
182- WRITE_U (stream, int (vps_multiple_map_streams_present_flag_.at (j)), 1 , " vps_multiple_map_streams_present_flag" );
184+ writeU (stream, int (vps_multiple_map_streams_present_flag_.at (j)), 1 , " vps_multiple_map_streams_present_flag" ,gofId );
183185 }
184- WRITE_U (stream, int (vps_auxiliary_video_present_flag_.at (j)), 1 , " vps_auxiliary_video_present_flag" );
185- WRITE_U (stream, int (vps_occupancy_video_present_flag_.at (j)), 1 , " vps_occupancy_video_present_flag" );
186- WRITE_U (stream, int (vps_geometry_video_present_flag_.at (j)), 1 , " vps_geometry_video_present_flag" );
187- WRITE_U (stream, int (vps_attribute_video_present_flag_.at (j)), 1 , " vps_attribute_video_present_flag" );
186+ writeU (stream, int (vps_auxiliary_video_present_flag_.at (j)), 1 , " vps_auxiliary_video_present_flag" ,gofId );
187+ writeU (stream, int (vps_occupancy_video_present_flag_.at (j)), 1 , " vps_occupancy_video_present_flag" ,gofId );
188+ writeU (stream, int (vps_geometry_video_present_flag_.at (j)), 1 , " vps_geometry_video_present_flag" ,gofId );
189+ writeU (stream, int (vps_attribute_video_present_flag_.at (j)), 1 , " vps_attribute_video_present_flag" ,gofId );
188190
189191 if (vps_occupancy_video_present_flag_.at (j)) {
190- WRITE_U (stream, occupancy_info_.at (j).oi_occupancy_codec_id , 8 , " oi_occupancy_codec_id" );
191- WRITE_U (stream, occupancy_info_.at (j).oi_lossy_occupancy_compression_threshold , 8 , " oi_lossy_occupancy_compression_threshold" );
192- WRITE_U (stream, occupancy_info_.at (j).oi_occupancy_2d_bit_depth_minus1 , 5 , " oi_occupancy_2d_bit_depth_minus1" );
193- WRITE_U (stream, occupancy_info_.at (j).oi_occupancy_MSB_align_flag , 1 , " oi_occupancy_MSB_align_flag" );
192+ writeU (stream, occupancy_info_.at (j).oi_occupancy_codec_id , 8 , " oi_occupancy_codec_id" ,gofId );
193+ writeU (stream, occupancy_info_.at (j).oi_lossy_occupancy_compression_threshold , 8 , " oi_lossy_occupancy_compression_threshold" ,gofId );
194+ writeU (stream, occupancy_info_.at (j).oi_occupancy_2d_bit_depth_minus1 , 5 , " oi_occupancy_2d_bit_depth_minus1" ,gofId );
195+ writeU (stream, occupancy_info_.at (j).oi_occupancy_MSB_align_flag , 1 , " oi_occupancy_MSB_align_flag" ,gofId );
194196 }
195197
196198 if (vps_geometry_video_present_flag_.at (j)) {
197- WRITE_U (stream, geometry_info_.at (j).gi_geometry_codec_id , 8 , " gi_geometry_codec_id" );
198- WRITE_U (stream, geometry_info_.at (j).gi_geometry_2d_bit_depth_minus1 , 5 , " gi_geometry_2d_bit_depth_minus1" );
199- WRITE_U (stream, geometry_info_.at (j).gi_geometry_MSB_align_flag , 1 , " gi_geometry_MSB_align_flag" );
200- WRITE_U (stream, geometry_info_.at (j).gi_geometry_3d_coordinates_bit_depth_minus1 , 5 ,
201- " gi_geometry_3d_coordinates_bit_depth_minus1" );
199+ writeU (stream, geometry_info_.at (j).gi_geometry_codec_id , 8 , " gi_geometry_codec_id" ,gofId );
200+ writeU (stream, geometry_info_.at (j).gi_geometry_2d_bit_depth_minus1 , 5 , " gi_geometry_2d_bit_depth_minus1" ,gofId );
201+ writeU (stream, geometry_info_.at (j).gi_geometry_MSB_align_flag , 1 , " gi_geometry_MSB_align_flag" ,gofId );
202+ writeU (stream, geometry_info_.at (j).gi_geometry_3d_coordinates_bit_depth_minus1 , 5 ,
203+ " gi_geometry_3d_coordinates_bit_depth_minus1" ,gofId );
202204
203205 if (vps_auxiliary_video_present_flag_.at (j)) {
204- WRITE_U (stream, geometry_info_.at (j).gi_auxiliary_geometry_codec_id , 8 , " gi_auxiliary_geometry_codec_id" );
206+ writeU (stream, geometry_info_.at (j).gi_auxiliary_geometry_codec_id , 8 , " gi_auxiliary_geometry_codec_id" ,gofId );
205207 }
206208 }
207209
208210 if (vps_attribute_video_present_flag_.at (j)) {
209- WRITE_U (stream, attribute_info_.at (j).ai_attribute_count , 7 , " ai_attribute_count" );
211+ writeU (stream, attribute_info_.at (j).ai_attribute_count , 7 , " ai_attribute_count" ,gofId );
210212
211213 for (uint8_t i = 0 ; i < attribute_info_.at (j).ai_attribute_count ; ++i) {
212- WRITE_U (stream, attribute_info_.at (j).ai_attribute_type_id .at (i), 4 , " ai_attribute_type_id" );
213- WRITE_U (stream, attribute_info_.at (j).ai_attribute_codec_id .at (i), 8 , " ai_attribute_codec_id" );
214+ writeU (stream, attribute_info_.at (j).ai_attribute_type_id .at (i), 4 , " ai_attribute_type_id" ,gofId );
215+ writeU (stream, attribute_info_.at (j).ai_attribute_codec_id .at (i), 8 , " ai_attribute_codec_id" ,gofId );
214216
215217 if (vps_auxiliary_video_present_flag_.at (j)) {
216- WRITE_U (stream, attribute_info_.at (j).ai_auxiliary_attribute_codec_id .at (i), 8 , " ai_auxiliary_attribute_codec_id" );
218+ writeU (stream, attribute_info_.at (j).ai_auxiliary_attribute_codec_id .at (i), 8 , " ai_auxiliary_attribute_codec_id" ,gofId );
217219 }
218220 if (vps_map_count_minus1_.at (j) > 0 ) {
219- WRITE_U (stream, int (attribute_info_.at (j).ai_attribute_map_absolute_coding_persistence_flag .at (i)), 1 ,
220- " ai_attribute_map_absolute_coding_persistence_flag" );
221+ writeU (stream, int (attribute_info_.at (j).ai_attribute_map_absolute_coding_persistence_flag .at (i)), 1 ,
222+ " ai_attribute_map_absolute_coding_persistence_flag" ,gofId );
221223 }
222224
223225 uint8_t d = attribute_info_.at (j).ai_attribute_dimension_minus1 .at (i);
224- WRITE_U (stream, d, 6 , " ai_attribute_dimension_minus1" );
226+ writeU (stream, d, 6 , " ai_attribute_dimension_minus1" ,gofId );
225227
226228 uint8_t m = 0 ;
227229 if (d == 0 ) { // true
228230 m = 0 ;
229231 attribute_info_.at (j).ai_attribute_dimension_partitions_minus1 .at (i) = 0 ;
230232 } else {
231233 m = attribute_info_.at (j).ai_attribute_dimension_partitions_minus1 .at (i);
232- WRITE_U (stream, attribute_info_.at (j).ai_attribute_dimension_partitions_minus1 .at (i), 6 ,
233- " ai_attribute_dimension_partitions_minus1" );
234+ writeU (stream, attribute_info_.at (j).ai_attribute_dimension_partitions_minus1 .at (i), 6 ,
235+ " ai_attribute_dimension_partitions_minus1" ,gofId );
234236 }
235237
236238 uint16_t n = 0 ;
@@ -240,23 +242,23 @@ bool vps::write_vps(bitstream_t* stream) {
240242 attribute_info_.at (j).ai_attribute_partition_channels_minus1 .at (i).at (k) = 0 ;
241243 } else {
242244 n = attribute_info_.at (j).ai_attribute_partition_channels_minus1 .at (i).at (k);
243- WRITE_UE (stream, attribute_info_.at (j).ai_attribute_partition_channels_minus1 .at (i).at (k),
244- " ai_attribute_partition_channels_minus1" );
245+ writeUE (stream, attribute_info_.at (j).ai_attribute_partition_channels_minus1 .at (i).at (k),
246+ " ai_attribute_partition_channels_minus1" ,gofId );
245247 }
246248 d -= n + 1 ;
247249 }
248250 attribute_info_.at (j).ai_attribute_partition_channels_minus1 .at (i).at (m) = d;
249251
250- WRITE_U (stream, attribute_info_.at (j).ai_attribute_2d_bit_depth_minus1 .at (i), 5 , " ai_attribute_2d_bit_depth_minus1" );
251- WRITE_U (stream, int (attribute_info_.at (j).ai_attribute_MSB_align_flag .at (i)), 1 , " ai_attribute_MSB_align_flag" );
252+ writeU (stream, attribute_info_.at (j).ai_attribute_2d_bit_depth_minus1 .at (i), 5 , " ai_attribute_2d_bit_depth_minus1" ,gofId );
253+ writeU (stream, int (attribute_info_.at (j).ai_attribute_MSB_align_flag .at (i)), 1 , " ai_attribute_MSB_align_flag" ,gofId );
252254 }
253255 }
254- WRITE_U (stream, vps_extension_present_flag_, 1 , " vps_extension_present_flag" );
256+ writeU (stream, vps_extension_present_flag_, 1 , " vps_extension_present_flag" ,gofId );
255257
256258 if (vps_extension_present_flag_) {
257- WRITE_U (stream, vps_packing_information_present_flag_, 1 , " vps_packing_information_present_flag" );
258- WRITE_U (stream, vps_miv_extension_present_flag_, 1 , " vps_miv_extension_present_flag" );
259- WRITE_U (stream, vps_extension_6bits_, 6 , " vps_extension_6bits" );
259+ writeU (stream, vps_packing_information_present_flag_, 1 , " vps_packing_information_present_flag" ,gofId );
260+ writeU (stream, vps_miv_extension_present_flag_, 1 , " vps_miv_extension_present_flag" ,gofId );
261+ writeU (stream, vps_extension_6bits_, 6 , " vps_extension_6bits" ,gofId );
260262 }
261263 // No packing information
262264 // No MIV extension
0 commit comments