void x264_pps_write( bs_t *s, x264_pps_t *pps ) { bs_realign( s ); bs_write_ue( s, pps->i_id ); bs_write_ue( s, pps->i_sps_id ); bs_write1( s, pps->b_cabac ); bs_write1( s, pps->b_pic_order ); bs_write_ue( s, pps->i_num_slice_groups - 1 ); bs_write_ue( s, pps->i_num_ref_idx_l0_default_active - 1 ); bs_write_ue( s, pps->i_num_ref_idx_l1_default_active - 1 ); bs_write1( s, pps->b_weighted_pred ); bs_write( s, 2, pps->b_weighted_bipred ); bs_write_se( s, pps->i_pic_init_qp - 26 - QP_BD_OFFSET ); bs_write_se( s, pps->i_pic_init_qs - 26 - QP_BD_OFFSET ); bs_write_se( s, pps->i_chroma_qp_index_offset ); bs_write1( s, pps->b_deblocking_filter_control ); bs_write1( s, pps->b_constrained_intra_pred ); bs_write1( s, pps->b_redundant_pic_cnt ); if( pps->b_transform_8x8_mode || pps->i_cqm_preset != X264_CQM_FLAT ) { bs_write1( s, pps->b_transform_8x8_mode ); bs_write1( s, (pps->i_cqm_preset != X264_CQM_FLAT) ); if( pps->i_cqm_preset != X264_CQM_FLAT ) { scaling_list_write( s, pps, CQM_4IY ); scaling_list_write( s, pps, CQM_4IC ); bs_write1( s, 0 ); // Cr = Cb scaling_list_write( s, pps, CQM_4PY ); scaling_list_write( s, pps, CQM_4PC ); bs_write1( s, 0 ); // Cr = Cb if( pps->b_transform_8x8_mode ) { scaling_list_write( s, pps, CQM_8IY+4 ); scaling_list_write( s, pps, CQM_8PY+4 ); } } bs_write_se( s, pps->i_chroma_qp_index_offset ); } bs_rbsp_trailing( s ); bs_flush( s ); }
void x264_pps_write( bs_t *s, x264_pps_t *pps ) { bs_write_ue( s, pps->i_id ); bs_write_ue( s, pps->i_sps_id ); bs_write( s, 1, pps->b_cabac ); bs_write( s, 1, pps->b_pic_order ); bs_write_ue( s, pps->i_num_slice_groups - 1 ); #if 0 if( pps->i_num_slice_groups > 1 ) { int i; bs_write_ue( s, pps->i_slice_group_map_type ); if( pps->i_slice_group_map_type == 0 ) { for( i = 0; i < pps->i_num_slice_groups; i++ ) { bs_write_ue( s, pps->i_run_length[i] - 1 ); } } else if( pps->i_slice_group_map_type == 2 ) { for( i = 0; i < pps->i_num_slice_groups; i++ ) { bs_write_ue( s, pps->i_top_left[i] ); bs_write_ue( s, pps->i_bottom_right[i] ); } } else if( pps->i_slice_group_map_type >= 3 && pps->i_slice_group_map_type <= 5 ) { bs_write( s, 1, pps->b_slice_group_change_direction ); bs_write_ue( s, pps->b_slice_group_change_direction - 1 ); } else if( pps->i_slice_group_map_type == 6 ) { bs_write_ue( s, pps->i_pic_size_in_map_units - 1 ); for( i = 0; i < pps->i_pic_size_in_map_units; i++ ) { /* FIXME */ /* bs_write( s, ceil( log2( pps->i_pic_size_in_map_units +1 ) ), * pps->i_slice_group_id[i] ); */ } } } #endif bs_write_ue( s, pps->i_num_ref_idx_l0_active - 1 ); bs_write_ue( s, pps->i_num_ref_idx_l1_active - 1 ); bs_write( s, 1, pps->b_weighted_pred ); bs_write( s, 2, pps->b_weighted_bipred ); bs_write_se( s, pps->i_pic_init_qp - 26 ); bs_write_se( s, pps->i_pic_init_qs - 26 ); bs_write_se( s, pps->i_chroma_qp_index_offset ); bs_write( s, 1, pps->b_deblocking_filter_control ); bs_write( s, 1, pps->b_constrained_intra_pred ); bs_write( s, 1, pps->b_redundant_pic_cnt ); if( pps->b_transform_8x8_mode || pps->i_cqm_preset != X264_CQM_FLAT ) { bs_write( s, 1, pps->b_transform_8x8_mode ); bs_write( s, 1, (pps->i_cqm_preset != X264_CQM_FLAT) ); if( pps->i_cqm_preset != X264_CQM_FLAT ) { scaling_list_write( s, pps, CQM_4IY ); scaling_list_write( s, pps, CQM_4IC ); bs_write( s, 1, 0 ); // Cr = Cb scaling_list_write( s, pps, CQM_4PY ); scaling_list_write( s, pps, CQM_4PC ); bs_write( s, 1, 0 ); // Cr = Cb if( pps->b_transform_8x8_mode ) { scaling_list_write( s, pps, CQM_8IY+4 ); scaling_list_write( s, pps, CQM_8PY+4 ); } } bs_write_se( s, pps->i_chroma_qp_index_offset ); } bs_rbsp_trailing( s ); }