static parsePPS_(data) {
    const gb = new shaka.util.ExpGolomb(data, /* convertEbsp2rbsp= */ true);

    // remove NALu Header
    gb.readUnsignedByte();
    gb.readUnsignedByte();

    // PPS
    gb.readUnsignedExpGolomb(); // pic_parameter_set_id
    gb.readUnsignedExpGolomb(); // seq_parameter_set_id
    gb.readBoolean(); // dependent_slice_segments_enabled_flag
    gb.readBoolean(); // output_flag_present_flag
    gb.readBits(3); // num_extra_slice_header_bits
    gb.readBoolean(); // sign_data_hiding_enabled_flag
    gb.readBoolean(); // cabac_init_present_flag
    gb.readUnsignedExpGolomb(); // num_ref_idx_l0_default_active_minus1
    gb.readUnsignedExpGolomb(); // num_ref_idx_l1_default_active_minus1
    gb.readExpGolomb(); // init_qp_minus26
    gb.readBoolean(); // constrained_intra_pred_flag
    gb.readBoolean(); // transform_skip_enabled_flag
    const cuQpDeltaEnabledFlag = gb.readBoolean();
    if (cuQpDeltaEnabledFlag) {
      gb.readUnsignedExpGolomb(); // diff_cu_qp_delta_depth
    }
    gb.readExpGolomb(); // cb_qp_offset
    gb.readExpGolomb(); // cr_qp_offset
    gb.readBoolean(); // pps_slice_chroma_qp_offsets_present_flag
    gb.readBoolean(); // weighted_pred_flag
    gb.readBoolean(); // weighted_bipred_flag
    gb.readBoolean(); // transquant_bypass_enabled_flag
    const tilesEnabledFlag = gb.readBoolean();
    const entropyCodingSyncEnabledFlag = gb.readBoolean();

    // needs hvcC
    let parallelismType = 1; // slice-based parallel decoding
    if (entropyCodingSyncEnabledFlag && tilesEnabledFlag) {
      parallelismType = 0; // mixed-type parallel decoding
    } else if (entropyCodingSyncEnabledFlag) {
      parallelismType = 3; // wavefront-based parallel decoding
    } else if (tilesEnabledFlag) {
      parallelismType = 2; // tile-based parallel decoding
    }

    return {
      parallelismType,
    };
  }
@param {!Uint8Array} data
@return {shaka.transmuxer.H265.PPSConfiguration}
@private