@@ -76,7 +76,16 @@ static void encoder_state_write_bitstream_PTL(bitstream_t *stream,
7676 WRITE_U (stream , 0 , 2 , "general_profile_space" );
7777 WRITE_U (stream , state -> encoder_control -> cfg .high_tier , 1 , "general_tier_flag" );
7878 // Main Profile == 1, Main 10 profile == 2
79- WRITE_U (stream , (state -> encoder_control -> bitdepth == 8 ) ? 1 : 2 , 5 , "general_profile_idc" );
79+ int8_t profile = 1 ;
80+ if (state -> encoder_control -> cfg .chroma_format == KVZ_CSP_444 || state -> encoder_control -> cfg .chroma_format == KVZ_CSP_422 ||
81+ state -> encoder_control -> bitdepth > 10 ) {
82+ profile = 4 ; // 4:2:2 and 4:4:4 range extension profiles
83+ } else if (state -> encoder_control -> bitdepth == 10 ) {
84+ profile = 2 ; // Main 10 profile
85+ } else {
86+ profile = 1 ; // Main profile
87+ }
88+ WRITE_U (stream , profile , 5 , "general_profile_idc" );
8089 /* Compatibility flags should be set at general_profile_idc
8190 * (so with general_profile_idc = 1, compatibility_flag[1] should be 1)
8291 * According to specification, when compatibility_flag[1] is set,
@@ -358,6 +367,36 @@ static void encoder_state_write_bitstream_SPS_extension(bitstream_t *stream,
358367 }
359368}
360369
370+ static void encoder_state_write_bitstream_PPS_extension (bitstream_t * stream ,
371+ encoder_state_t * const state )
372+ {
373+ const kvz_config * cfg = & state -> encoder_control -> cfg ;
374+ bool need_pps_extension = cfg -> enable_cross_component_prediction ;
375+ WRITE_U (stream , need_pps_extension , 1 , "pps_extension_present_flag" );
376+ if (need_pps_extension ) {
377+ WRITE_U (stream , 1 , 1 , "pps_range_extension_flag" );
378+ WRITE_U (stream , 0 , 1 , "pps_multilayer_extension_flag" );
379+ WRITE_U (stream , 0 , 1 , "pps_3d_extension_flag" );
380+ WRITE_U (stream , 0 , 1 , "pps_scc_extension_flag" );
381+ WRITE_U (stream , 0 , 4 , "pps_extension_4bits" );
382+
383+ // pps_range_extension_flag
384+ if (cfg -> trskip_enable ) WRITE_UE (stream , 0 , "log2_max_transform_skip_block_size_minus2" );
385+ WRITE_U (stream , cfg -> enable_cross_component_prediction , 1 , "cross_component_prediction_enabled_flag" );
386+ WRITE_U (stream , 0 , 1 , "chroma_qp_offset_list_enabled_flag" );
387+ //IF chroma_qp_offset_list_enabled_flag
388+ //WRITE_UE(stream, 0, "diff_cu_chroma_qp_offset_depth");
389+ //WRITE_UE(stream, 0, "chroma_qp_offset_list_len_minus1");
390+ //for (i = 0; i <= chroma_qp_offset_list_len_minus1; i++)
391+ //WRITE_SE(stream, 0, "cb_qp_offset_list[i]");
392+ //WRITE_SE(stream, 0, "cr_qp_offset_list[i]");
393+ //end for
394+ //ENDIF
395+ WRITE_UE (stream , 0 , "log2_sao_offset_scale_luma" );
396+ WRITE_UE (stream , 0 , "log2_sao_offset_scale_chroma" );
397+ }
398+ }
399+
361400static void encoder_state_write_bitstream_seq_parameter_set (bitstream_t * stream ,
362401 encoder_state_t * const state )
363402{
@@ -569,7 +608,8 @@ static void encoder_state_write_bitstream_pic_parameter_set(bitstream_t* stream,
569608 WRITE_U (stream , 0 , 1 , "lists_modification_present_flag" );
570609 WRITE_UE (stream , 0 , "log2_parallel_merge_level_minus2" );
571610 WRITE_U (stream , 0 , 1 , "slice_segment_header_extension_present_flag" );
572- WRITE_U (stream , 0 , 1 , "pps_extension_flag" );
611+
612+ encoder_state_write_bitstream_PPS_extension (stream , state );
573613
574614 kvz_bitstream_add_rbsp_trailing_bits (stream );
575615}
0 commit comments