CN102224476B - Multi-process interactive systems and method - Google Patents
Multi-process interactive systems and method Download PDFInfo
- Publication number
- CN102224476B CN102224476B CN200980146827.0A CN200980146827A CN102224476B CN 102224476 B CN102224476 B CN 102224476B CN 200980146827 A CN200980146827 A CN 200980146827A CN 102224476 B CN102224476 B CN 102224476B
- Authority
- CN
- China
- Prior art keywords
- data
- exchange method
- event
- capsule
- process exchange
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/017—Gesture based interaction, e.g. based on a set of recognized hand gestures
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/20—Movements or behaviour, e.g. gesture recognition
- G06V40/28—Recognition of hand or arm movements, e.g. recognition of deaf sign language
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Human Computer Interaction (AREA)
- Health & Medical Sciences (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Health & Medical Sciences (AREA)
- Psychiatry (AREA)
- Social Psychology (AREA)
- Processing Or Creating Images (AREA)
- User Interface Of Digital Computer (AREA)
- Image Processing (AREA)
- Digital Computer Display Output (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
相关申请related application
本申请要求于2008年10月14日提交的美国(US)专利申请第61/105,243号的权益。This application claims the benefit of United States (US) Patent Application Serial No. 61/105,243, filed October 14, 2008.
本申请要求于2008年10月14日提交的美国专利申请第61/105,253号的权益。This application claims the benefit of US Patent Application Serial No. 61/105,253, filed October 14, 2008.
本申请是于2008年4月24日提交的美国专利申请第12/109,263号的部分的继续。This application is a continuation-in-part of US Patent Application Serial No. 12/109,263, filed April 24, 2008.
本申请是于2009年4月2日提交的美国专利申请第12/417,252号的部分的继续。This application is a continuation-in-part of US Patent Application Serial No. 12/417,252, filed April 2, 2009.
本申请是于2009年6月18日提交的美国专利申请第12/487,623号的部分的继续。This application is a continuation-in-part of US Patent Application Serial No. 12/487,623, filed June 18, 2009.
本申请是于2009年9月3日提交的美国专利申请第12/553,845号的部分的继续。This application is a continuation-in-part of US Patent Application Serial No. 12/553,845, filed September 3, 2009.
本申请是于2009年9月10日提交的美国专利申请第12/557,464号的部分的继续。This application is a continuation-in-part of US Patent Application Serial No. 12/557,464, filed September 10, 2009.
本申请是于2009年10月2日提交的美国专利申请第12/572,689号的部分的继续,美国专利申请第12/572,689号为美国专利第7,598,942号的部分的继续。This application is a continuation-in-part of US Patent Application Serial No. 12/572,689, filed October 2, 2009, which is a continuation-in-part of US Patent Application Serial No. 7,598,942.
技术领域technical field
本发明涉及计算进程之内及其之间的数据的表示、操纵和交换的实施例。The present invention relates to embodiments of the representation, manipulation and exchange of data within and between computing processes.
背景技术Background technique
传统编程环境不完全支持多计算机处理单元(CPU)和交叉网络执行、或大量计算进程之间的数据的灵活共享。面向用户的计算机程序传统上已经被构建为使得通过单个计算进程来产生进程的大部分和所有图形输出。这种机制虽然标准并且由工具链、开发环境和操作系统良好地支持,但是比例化欠佳,并且是对广泛使用的当代应用的膨胀和脆弱的明显贡献因素。Conventional programming environments do not fully support multiple computer processing units (CPUs) and cross-network execution, or flexible sharing of data among numerous computational processes. User-facing computer programs have traditionally been structured such that most and all graphical output of the process is produced by a single computing process. This mechanism, while standard and well supported by toolchains, development environments, and operating systems, is poorly scaled and a clear contributor to the bloat and fragility of widely used contemporary applications.
通过引用合并merge by reference
本说明书中提到的每个专利、专利申请和/或公开在此通过引用将其全部内容结合于此,如同每个单独的专利、专利申请和或公开被具体地并且单独地指示为通过引用而进行结合。Each patent, patent application, and/or publication mentioned in this specification is hereby incorporated by reference in its entirety as if each individual patent, patent application, and/or publication were specifically and individually indicated to be incorporated by reference And to combine.
附图说明Description of drawings
图1A是根据实施例的多进程交互系统的框图。Figure 1A is a block diagram of a multi-process interactive system, according to an embodiment.
图1B是根据替选实施例的多进程交互系统的框图。Figure IB is a block diagram of a multi-process interactive system according to an alternative embodiment.
图1C是根据另一替选实施例的多进程交互系统的框图。Figure 1C is a block diagram of a multi-process interactive system according to another alternative embodiment.
图2是根据实施例的多进程交互系统的操作的流程图。Figure 2 is a flowchart of the operation of the multi-process interactive system according to an embodiment.
图3是根据实施例的包括使用多色拉(slawx)、蛋白质(protein)和池(pool)的数据表示的处理环境的框图。3 is a block diagram of a processing environment including data representation using slawx, protein, and pool, according to an embodiment.
图4是根据实施例的蛋白质的框图。Figure 4 is a block diagram of a protein according to an embodiment.
图5是根据实施例的记述(descrip)的框图。Fig. 5 is a block diagram of a description according to an embodiment.
图6是根据实施例的摄取(ingest)的框图。Figure 6 is a block diagram of an ingest, under an embodiment.
图7是根据实施例的色拉的框图。7 is a block diagram of a salad, under an embodiment.
图8A是根据实施例的池中的蛋白质的框图。Figure 8A is a block diagram of proteins in a pool, according to an embodiment.
图8B示出根据实施例的色拉头部格式。Figure 8B illustrates a salad header format, according to an embodiment.
图8C是根据实施例的使用蛋白质的流程图。Figure 8C is a flow diagram for using proteins, under an embodiment.
图8D是根据实施例的用于构建或生成蛋白质的流程图。Figure 8D is a flowchart for constructing or generating proteins, according to an embodiment.
图9是根据实施例的包括使用多色拉、蛋白质和池的数据交换的处理环境的框图。9 is a block diagram of a processing environment including data exchange using slaws, proteins, and pools, under an embodiment.
图10是根据实施例的包括多个设备和运行于所述设备中的一个或多个上的大量程序的处理环境的框图,在这些设备中,血浆(plasma)构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于设备生成的事件。10 is a block diagram of a processing environment including multiple devices and a number of programs running on one or more of the devices in which plasma constructs (e.g., pools, proteins, and salads) according to an embodiment ) are used to allow a large number of running programs to share and collectively respond to events generated by the device.
图11是根据替选实施例的包括多个设备和运行于所述设备中的一个或多个上的大量程序的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于设备生成的事件。11 is a block diagram of a processing environment including a plurality of devices and a number of programs running on one or more of the devices in which plasma constructs (e.g., pools, proteins, and salads) according to an alternative embodiment Used to allow a large number of running programs to share and collectively respond to events generated by a device.
图12是根据另一替选实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个输入设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于输入设备生成的事件。12 is a block diagram of a processing environment including multiple input devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, protein and Salad) are used to allow a large number of running programs to share and collectively respond to events generated by input devices.
图13是根据另一替选实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于设备生成的图形事件。13 is a block diagram of a processing environment including multiple devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, proteins, and Salad) is used to allow a large number of running programs to share and collectively respond to device-generated graphics events.
图14是根据又一替选实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许对运行程序的状态检查、可视化和调试。14 is a block diagram of a processing environment including multiple devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, proteins, and Salad) is used to allow status inspection, visualization and debugging of running programs.
图15是根据附加的替选实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许影响或控制该进程池中产生并且放置的状态信息的特性。15 is a block diagram of a processing environment including multiple devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, proteins, and slaw) are used to allow influencing or controlling the properties of the state information generated and placed in the process pool.
图16是根据实施例的姿态(gestural)控制系统的框图。Figure 16 is a block diagram of a gestural control system, under an embodiment.
图17是根据实施例的标记标签的示图。Figure 17 is a diagram of a marker label, according to an embodiment.
图18是根据实施例的姿态词汇(gesture vocabulary)中的姿势的示图。Figure 18 is a diagram of gestures in a gesture vocabulary, under an embodiment.
图19是根据实施例的姿态词汇中的方位的示图。Figure 19 is a diagram of orientations in a gesture vocabulary, under an embodiment.
图20是根据实施例的姿态词汇中的两个手组合的示图。Figure 20 is a diagram of two hand combinations in a gesture vocabulary, under an embodiment.
图21是根据实施例的姿态词汇中的方位混合的示图。Figure 21 is a diagram of orientation blending in a gesture vocabulary, under an embodiment.
图22是根据实施例的姿态控制的流程图。Figure 22 is a flowchart of gesture control, under an embodiment.
图23是根据实施例的命令的示例。Figure 23 is an example of a command under an embodiment.
图24是根据实施例的通过多进程交互系统实现的空间操作环境(SOE)的框图。Figure 24 is a block diagram of a spatial operating environment (SOE) implemented by a multi-process interactive system, under an embodiment.
图25是根据实施例的使用来自姿态控制系统的输入的多进程交互系统的操作的流程图。25 is a flowchart of the operation of a multi-process interaction system using input from a gesture control system, under an embodiment.
具体实施方式detailed description
在此描述的实施例包括用于协调多个计算机进程的行为和输出从而产生交互应用程序的系统和方法。在此描述的实施例通常被称为多进程交互系统、程序或应用程序,包括划分为能够并行执行的多个不同计算机进程的应用程序。这些进程的集合能够产生用户通过其进行交互的总体系统输出的部分。这些进程的集合具有对用于协调活动的结构化的并且良好定义的数据交换机制的访问权利。这些进程的集合可操作为经由结构化数据交换机制来使用用户输入(例如原始用户输入,加重变换的用户输入、原始和加重变换的用户输入等)。Embodiments described herein include systems and methods for coordinating the behavior and output of multiple computer processes to produce interactive applications. Embodiments described herein are generally referred to as multi-process interactive systems, programs, or applications, including applications that are divided into multiple distinct computer processes that can execute in parallel. The collection of these processes can produce the portion of the overall system output through which the user interacts. A collection of these processes has access to a structured and well-defined data exchange mechanism for coordinating activities. The collection of these processes is operable to consume user input (eg, raw user input, weighted transformed user input, raw and weighted transformed user input, etc.) via a structured data exchange mechanism.
在此描述的实施例提供跨越计算进程的边界的应用程序组件的模块性。作为提供的模块性的结果,在此描述的实施例提供组件再使用、对于互操作性的更大的机会、更容易的测试和验证、增加的鲁棒性(robustness)、以及在执行期间的故障容忍性。Embodiments described herein provide modularity of application components across computing process boundaries. As a result of the modularity provided, the embodiments described herein provide for component reuse, greater opportunity for interoperability, easier testing and verification, increased robustness, and fault tolerance.
此外,现行计算机通常包含多个处理器元件(例如CPU内核)。在此的实施例比传统应用程序构造技术远更好地在多处理器架构上定标。作为计算机设计的趋势,这种“多核”定标变得越来越重要,并且制造业日益满足增加的内核计数而不是增加的时钟速度。In addition, current computers often contain multiple processor elements (eg, CPU cores). Embodiments herein scale much better on multiprocessor architectures than conventional application construction techniques. As a trend in computer design, this "multi-core" scaling is becoming more and more important, and manufacturing is increasingly catering to increased core counts rather than increased clock speeds.
在此描述的实施例使得能够进行处理组件的动态构建、破坏和重组。在此描述的实施例使得能够使用连网(或其它互连)协议跨越多个计算机进行结构化数据交换机制的扩展。在此描述的实施例使得能够在计算机之间动态传送处理组件。在此描述的实施例使得能够根据参与进程的数量、组成和执行上下文进行结构化数据交换机制的动态优化。在此描述的实施例使得能够将多个计算机上创建的图形输出在单个显示器上组合在一起。在此描述的实施例实现包括多个显示器的共享的、协调的图形上下文。在此描述的实施例实现包括由多个计算机驱动的多个显示器的共享的、协调的多显示图形上下文。在此描述的实施例将自动历史缓冲构建引入结构化数据交换机制,使得一些过去的数据量对于应用程序组件总是可用。Embodiments described herein enable dynamic construction, destruction and reorganization of processing components. Embodiments described herein enable the extension of structured data exchange mechanisms across multiple computers using networking (or other interconnection) protocols. Embodiments described herein enable dynamic transfer of processing components between computers. Embodiments described herein enable dynamic optimization of structured data exchange mechanisms according to the number, composition and execution context of participating processes. Embodiments described herein enable graphical output created on multiple computers to be combined on a single display. Embodiments described herein implement a shared, coordinated graphics context that includes multiple displays. Embodiments described herein implement a shared, coordinated multi-display graphics context comprising multiple displays driven by multiple computers. Embodiments described herein introduce automatic history buffer construction into the structured data exchange mechanism so that some amount of past data is always available to application components.
以下术语意在具有如它们在此被使用的以下通常意义。在此使用的术语“进程(process)”表示可分离的程序执行上下文。计算机架构和操作系统在进程实现的技术细节上不同。在此描述的机制被配置为跨越宽广范围的进程实现进行操作,并且促进利用尽可能多的可用计算资源的混合应用程序设计或配置。The following terms are intended to have the following ordinary meanings as they are used herein. The term "process" as used herein means a separable program execution context. Computer architectures and operating systems differ in the technical details of process implementation. The mechanisms described herein are configured to operate across a broad range of process implementations and facilitate hybrid application design or configuration that utilizes as many available computing resources as possible.
在此使用的术语“设备”表示运行一个或多个程序或算法的任何基于处理器的设备、在一个或多个程序或算法下运行的任何基于处理器的设备和/或耦合或连接到运行一个或多个程序或算法和/或在一个或多个程序或算法下运行的基于处理器的设备的任何设备。在此使用的术语“事件”表示与运行或执行程序或算法、基于处理器的设备和/或耦合或连接到基于处理器的设备的设备相关联的任何事件(例如,事件可以包括但不限于输入、输出、控制、状态、状态改变、动作、数据(无论数据的格式或数据与其关联的处理中的级)等)。The term "device" as used herein means any processor-based device running one or more programs or algorithms, any processor-based device running under one or more programs or algorithms, and/or coupled or connected to a running One or more programs or algorithms and/or any device that is a processor-based device that operates under one or more programs or algorithms. As used herein, the term "event" means any event associated with the running or execution of a program or algorithm, a processor-based device, and/or a device coupled or connected to a processor-based device (for example, an event may include, but is not limited to input, output, control, state, change of state, action, data (regardless of the format of the data or the stage in processing with which the data is associated), etc.).
在以下描述中,引入大量细节,以提供对于在此描述的实施例的彻底理解,并且使得能够对在此描述的实施例进行说明。然而,本领域技术人员应理解,可以在没有这些具体细节中的一个或多个的情况下、或者可以通过其它组件、系统等来实践这些实施例。在其它实例中,不详细示出或者描述公知的结构或操作,以免模糊公开的实施例的方面。In the following description, numerous details are introduced to provide a thorough understanding of, and to enable explanation of, the embodiments described herein. However, one skilled in the art would understand that the embodiments may be practiced without one or more of these specific details, or with other components, systems, etc. In other instances, well-known structures or operations are not shown or described in detail to avoid obscuring aspects of the disclosed embodiments.
在此的实施例包括在至少一个处理设备上执行大量进程的系统和方法。实施例的系统和方法将每个进程的事件转译为数据胶囊。实施例的系统和方法将数据胶囊传送到多个池或贮存器中。每个进程作为识别进程操作,其中,所述识别进程在池中识别包括与识别进程的交互功能和/或识别进程的标识对应的内容的数据胶囊。所述识别进程从池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。Embodiments herein include systems and methods that execute a multitude of processes on at least one processing device. The systems and methods of embodiments translate each process's events into data capsules. The systems and methods of embodiments transfer data capsules into multiple pools or storages. Each process operates as a recognition process that identifies in a pool a data capsule comprising content corresponding to an interaction function of the recognition process and/or an identity of the recognition process. The identification process retrieves identified data capsules from the pool and performs appropriate processing on the contents of the identified data capsules.
例如,图1A是根据实施例的多进程交互系统10的框图。该系统10包括主管或执行任何数量的进程P1-P7的处理设备11。该示例的多进程交互系统10包括一个计算机11或在一个计算机11上运行,但不限于一个计算机,并且可以跨越任何数量的处理设备或系统和/或其组合来运行。实施例的进程P1-P7包括一个或多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程,但实施例不限于此。在每个进程的执行期间生成或产生的事件转译为一些数量的数据胶囊DC1-DC9,并且数据胶囊被传送到多个池15-17或贮存器。系统10的椭圆元件表示池15-17,其中,池或贮存器是用于以下详细描述并且在相关申请中的结构化数据交换的机制。如下所述,通过池15-17的数据胶囊DC1-DC9(也被称为数据消息)通常描述为“蛋白质”。For example, FIG. 1A is a block diagram of a multi-process interaction system 10 according to an embodiment. The system 10 includes a processing device 11 hosting or executing any number of processes P1-P7. The example multi-process interactive system 10 includes or runs on one computer 11, but is not limited to one computer, and can run across any number and/or combination of processing devices or systems. The processes P1-P7 of the embodiment include detachable program execution contexts of one or more application programs, wherein each application program includes at least one process, but the embodiment is not limited thereto. Events generated or produced during the execution of each process are translated into some number of data capsules DC1-DC9, and the data capsules are transferred to a plurality of pools 15-17 or storages. The oval elements of system 10 represent pools 15-17, where a pool or reservoir is a mechanism for structured data exchange as described in detail below and in a related application. As described below, the data capsules DC1-DC9 (also referred to as data messages) passing through the pools 15-17 are generally described as "proteins".
每个进程P1-P7作为识别进程操作,其中,识别进程在池15-17中识别包括与识别进程P1-P7的交互功能和/或识别进程P1-P7的标识对应的内容的数据胶囊。识别进程P1-P7从池检索识别的数据胶囊DC1-DC9,并且执行对识别的数据胶囊的内容适当的进程。以下参照图3-图15更详细地描述多进程交互系统10。Each process P1-P7 operates as a recognition process, wherein the recognition process identifies in the pool 15-17 a data capsule comprising content corresponding to the interaction function of the recognition process P1-P7 and/or the identity of the recognition process P1-P7. The recognition processes P1-P7 retrieve the recognized data capsules DC1-DC9 from the pool and execute the processes appropriate to the content of the recognized data capsules. The multi-process interactive system 10 is described in more detail below with reference to FIGS. 3-15 .
图1B是根据替选实施例的多进程交互系统20的框图。该系统20包括主管或执行任何数量的进程P1-PX的处理设备21,其中,X表示对于处理设备21和/或系统20的配置适当的任何数量。系统20还包括主管或执行任何数量的进程P1-PY的处理设备22,其中,Y表示对于处理设备22和/或系统20的配置适当的任何数量。该示例的多进程交互系统20包括两个处理设备21/22或跨越两个处理设备21/22运行,但不限于两个设备,并且可以跨越任何数量的处理设备或系统和/或其组合来运行。实施例的进程P1-PX和P1-PY包括一个或多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程,但实施例不限于此。FIG. 1B is a block diagram of a multi-process interaction system 20 according to an alternative embodiment. The system 20 includes a processing device 21 hosting or executing any number of processes P1-PX, where X represents any number appropriate to the configuration of the processing device 21 and/or system 20 . System 20 also includes processing device 22 hosting or executing any number of processes P1 -PY, where Y represents any number appropriate to the configuration of processing device 22 and/or system 20 . The example multi-process interactive system 20 includes or operates across two processing devices 21/22, but is not limited to two devices, and may span any number and/or combination of processing devices or systems run. The processes P1-PX and P1-PY of the embodiment include detachable program execution contexts of one or more application programs, wherein each application program includes at least one process, but the embodiment is not limited thereto.
在每个进程的执行期间生成或产生的事件转译为数据胶囊(未示出),并且数据胶囊传送到一个或多个池中。系统20的椭圆元件表示池,其中,池或贮存器是用于以下详细描述并且在相关申请中的结构化数据交换的机制。在该示例中,在处理设备21上主管池PLl,但是可以在处理设备21上主管任何数量的池。在处理设备22上主管池PL1-PLY,其中,Y表示对于处理设备22和/或系统20的配置适当的任何数量,可以在处理设备22上主管任何数量的池。系统20还包括池PL11-PLX,其中,X表示对于处理设备22和/或系统20的配置适当的任何数量;在系统20中可以主管任何数量的池。生成数据胶囊的任何进程和/或设备可以将数据胶囊传送到系统中的任何池中。Events generated or produced during the execution of each process are translated into data capsules (not shown), and the data capsules are passed to one or more pools. The oval elements of system 20 represent pools, where a pool or repository is a mechanism for structured data exchange as described in detail below and in a related application. In this example, pool PL1 is hosted on processing device 21, but any number of pools may be hosted on processing device 21. Pools PL1-PLY are hosted on processing device 22, where Y represents any number appropriate to the configuration of processing device 22 and/or system 20, any number of pools may be hosted on processing device 22. System 20 also includes pools PL11-PLX, where X represents any number appropriate to the configuration of processing device 22 and/or system 20; any number of pools may be hosted in system 20. Any process and/or device that generates a data capsule can deliver a data capsule to any pool in the system.
每个进程P1-PX/P1-PY作为识别进程操作,其中,识别进程在池中识别包括与识别进程P1-PX/P1-PY的交互功能和/或识别进程P1-PX/P1-PY的标识对应的内容的数据胶囊。所述识别进程P1-PX/P1-PY从所述池检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。以下参照图3-图15更详细地描述多进程交互系统20。Each process P1-PX/P1-PY operates as a recognition process, wherein the recognition process in the pool recognizes the interaction functions with the recognition process P1-PX/P1-PY and/or the recognition process P1-PX/P1-PY A data capsule identifying the corresponding content. The recognition process P1-PX/P1-PY retrieves the recognized data capsule from the pool and performs processing appropriate to the content of the recognized data capsule. The multi-process interactive system 20 is described in more detail below with reference to FIGS. 3-15 .
在此的实施例包括在至少一个处理设备上执行大量进程的系统和方法。实施例的进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程。实施例的系统和方法将多个进程中的每个进程的事件转译为数据胶囊。数据胶囊包括发起数据胶囊的进程的状态信息和事件的事件数据的与应用程序无关的表示。实施例的系统和方法将数据胶囊传送到多个池或贮存器中。实施例的每个进程作为识别进程操作。识别进程在池中识别包括与识别进程的交互功能和/或识别进程的标识对应的内容的数据胶囊。所述识别进程从池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。Embodiments herein include systems and methods that execute a multitude of processes on at least one processing device. A process of an embodiment includes separable program execution contexts for multiple applications, wherein each application includes at least one process. The systems and methods of embodiments translate events for each of a plurality of processes into data capsules. The data capsule includes an application-independent representation of the event data of the process that initiated the data capsule and the state information of the event. The systems and methods of embodiments transfer data capsules into multiple pools or storages. Each process of an embodiment operates as a recognition process. The recognition process identifies in the pool a data capsule comprising content corresponding to an interaction function of the recognition process and/or an identification of the recognition process. The identification process retrieves identified data capsules from the pool and performs appropriate processing on the contents of the identified data capsules.
在此描述的实施例的示例包括用于协调多个计算机进程的行为和图形输出以启用交互应用程序的系统和方法。虽然该示例针对图形进程和图形输出,但多进程交互系统的实施例不限于图形进程,并且可以应用于在任何数量的处理设备下运行的任何进程。多进程交互系统包括划分为能够并行执行多个不同计算机进程的应用程序,这些进程的集合能够产生用户与其进行交互的总体图形输出的部分。这些进程的集合具有对结构化并且良好定义的数据交换机制的访问权利,该数据交换机制用于协调活动使得这些进程的集合可操作为经由结构化数据交换机制来使用用户输入。Examples of embodiments described herein include systems and methods for coordinating the behavior and graphical output of multiple computer processes to enable interactive applications. Although this example is directed to graphics processes and graphics output, embodiments of the multi-process interactive system are not limited to graphics processes, and can be applied to any process running under any number of processing devices. A multi-process interactive system includes a portion of an application program divided into multiple distinct computer processes capable of executing in parallel, the aggregate of which produces an overall graphical output with which the user interacts. The set of processes has access to a structured and well-defined data exchange mechanism for coordinating activities such that the set of processes is operable to use user input via the structured data exchange mechanism.
作为更具体的示例,以下描述教导一种在此被称为正方形的多进程图形程序,作为协调多个计算机进程的行为和图形输出从而产生交互应用程序的实施例的示例性实例。该示例性实例的描述目的在于示出在此公开的机制如何在足以实现它用于任何交互程序的细节的级别操作。该机制(以及实际上其组件部分)完全是普通的,并且实际上可以通过各种不同方式来实现。如同在这样的程序中的典型情况那样,在此公开的机制提供包括但不限于对用户输入的访问、跨越进程的程序状态的精细粒度的协调以及图形输出的协调的主要服务。As a more specific example, the following description teaches a multi-process graphics program, referred to herein as a square, as an illustrative example of an embodiment that coordinates the behavior and graphics output of multiple computer processes to produce an interactive application. The purpose of this illustrative example description is to show how the mechanisms disclosed herein operate at a level of detail sufficient to implement it for any interactive program. The mechanism (and indeed its component parts) is entirely generic and can actually be implemented in a variety of different ways. As is typical in such programs, the mechanisms disclosed herein provide primary services including, but not limited to, access to user input, fine-grained coordination of program state across processes, and coordination of graphical output.
在此提出的正方形程序用于展示若干种在真实世界程序中有用的基本协调。正方形程序提供灵活数量的上色的半透明正方形,以在一个或多个计算机显示器上渲染(render)。在单个计算进程中实施这些正方形中的每一个。每个正方形的状态和图形细节取决于各种因素,包括用户输入动作、其它正方形的状态、以及全局传递的外部消息。可以使用输入设备(例如鼠标、触摸屏等)在显示器上四处移动正方形。在相关申请中描述的姿态/空间(gestural/spatial)输入系统也可以用于移动正方形,在此情况下,正方形可以位于对于正在加入姿态/空间网络的计算机可用的任何显示器上。The square program presented here serves to demonstrate several basic coordinations that are useful in real-world programs. The square program provides a flexible number of colored translucent squares to render on one or more computer displays. Each of these squares is implemented in a single computational process. The state and graphical details of each square depend on various factors, including user input actions, the state of other squares, and external messages passed globally. The square can be moved around on the display using an input device (eg mouse, touch screen, etc.). The gestural/spatial input system described in the related application can also be used to move the square, in which case the square can be located on any display available to the computer that is joining the gestural/spatial network.
图1C是根据另一替选实施例的多进程交互系统100的框图。该系统100包括进行组合以形成程序的示例运行的进程和互连。实线矩形元件(例如通常为元件M、P、S、G)表示系统100中的进程。椭圆元件(例如元件Ui、Coo、帧)表示池,用于如以下详细描述的并且在相关申请中的结构化数据交换的机制。如下所述,通过池的数据消息通常描述为“蛋白质”。FIG. 1C is a block diagram of a multi-process interaction system 100 according to another alternative embodiment. The system 100 includes processes and interconnections that combine to form example operations of a program. Solid rectangular elements (eg, generally elements M, P, S, G) represent processes in system 100 . Elliptical elements (eg elements Ui, Coo, Frame) represent pools, mechanisms for structured data exchange as described in detail below and in related applications. As described below, data messages passing through a pool are generally described as "proteins".
该示例的多进程交互系统100包括两个计算机101和102或跨越两个计算机101和102允许,但不限于两个计算机,并且可以跨越任何数量的处理系统和/或其组合来运行。在该示例中,第一计算机101主管实施两个正方形S(例如S21、S22)的进程,第二计算机102主管实施四个正方形S(例如S11、S12、S13、S14)的进程。替选实施例可以包括在任何数量的计算机上运行的任何数量的正方形进程S。第一计算机101耦合到单个显示器110,第二计算机102耦合到三个显示器121、122、123。替选实施例可以包括耦合到任何数量的计算机的任何数量的显示器。The example multi-process interactive system 100 includes or spans two computers 101 and 102, but is not limited to two computers, and can run across any number and/or combination of processing systems. In this example, the first computer 101 hosts the process of implementing two squares S (eg S21 , S22 ) and the second computer 102 hosts the process of implementing four squares S (eg S11 , S12 , S13 , S14 ). Alternative embodiments may include any number of square processes S running on any number of computers. The first computer 101 is coupled to a single display 110 and the second computer 102 is coupled to three displays 121 , 122 , 123 . Alternative embodiments may include any number of displays coupled to any number of computers.
两个计算机101和102中的每个主管至少一个“鼠标”进程M(例如M1、M2)。鼠标进程M包括将计算机鼠标输入事件变换为用户输入蛋白质的合适的流并且将这些蛋白质传递到至少一个“用户输入”池Ui的高级驱动器。封装为姿态/空间进程G的姿态/空间系统(如以下详细描述)也将用户输入蛋白质传递到用户输入池Ui。Each of the two computers 101 and 102 hosts at least one "mouse" process M (eg M1, M2). The mouse process M includes a high-level driver that transforms computer mouse input events into a suitable stream of user input proteins and passes these proteins to at least one "user input" pool Ui. The gesture/space system packaged as a gesture/space process G (as described in detail below) also passes user input proteins to the user input pool Ui.
两个计算机101和102中的每个还主管至少一个“指针”进程P(例如P1、P2)。指针进程P从Ui池取得或接收数据,并且负责确定用户在何处正指令指针“关注”,并且负责绘制或渲染适当的指针图形。指针进程P将与指针位置和模式有关或表示指针位置和模式的数据置入“协调”池Coo。指针进程P将图形输出传递到作为以下详细描述的专用抽象的“帧”池。Each of the two computers 101 and 102 also hosts at least one "pointer" process P (eg P1, P2). The pointer process P fetches or receives data from the Ui pool and is responsible for determining where the user is directing the pointer to "focus" and for drawing or rendering the appropriate pointer graphics. Pointer process P places data relating to or representing pointer positions and modes into a "coordinating" pool Coo. Pointer process P passes graphics output to a "frame" pool, which is a dedicated abstraction described in detail below.
此外,两个计算机101和102中的每个主管如上所述的若干“正方形”进程S。每个正方形进程S对于指针数据和对等正方形进程S的状态查阅协调池Coo。每个正方形进程S还将描述它们自己的空间和模式状态的数据放置回协调池Coo。正方形进程S将图形输出传递到“帧”池。帧池是专用抽象,在下面详细描述。Furthermore, each of the two computers 101 and 102 hosts several "square" processes S as described above. Each square process S consults the coordinating pool Coo for pointer data and the state of the peer square process S. Each square process S also places data describing their own space and mode state back to the coordinating pool Coo. A square process S passes graphics output to the "frames" pool. Frame pools are specialized abstractions, described in detail below.
可以在两个计算机101和102中的任一个上主管姿态/空间进程G连同用户输入池Ui和协调池Coo。可替选地,可以在两个计算机101和102之间共享对姿态/空间进程G连同用户输入池Ui和协调池Coo的主管。作为另一替选配置,可以在其它计算机(未示出)上主管姿态/空间进程G连同用户输入池Ui和协调池Coo。The gesture/space process G along with the user input pool Ui and the coordination pool Coo can be hosted on either of the two computers 101 and 102 . Alternatively, the mastership of the pose/space process G together with the user input pool Ui and the coordination pool Coo can be shared between the two computers 101 and 102 . As another alternative configuration, the gesture/space process G along with the user input pool Ui and the coordination pool Coo may be hosted on other computers (not shown).
对于存放到本地帧池的蛋白质,系统100包括每一秒很多次将帧层组合为每个显示器的输出的单个帧的专用合成进程com。通常由系统级配置选择来设置整体显示帧速率,但构成正方形应用程序的单独进程中的每个能够使用不同帧速率。合成进程com适当地照顾与帧层匹配。For proteins deposited into the local frame pool, the system 100 includes a dedicated compositing process com that combines the frame layers into a single frame of output for each display many times per second. It is usually a system-level configuration choice to set the overall display frame rate, but each of the individual processes that make up the square application can use a different frame rate. The compositing process com takes care of matching the frame layers appropriately.
图2是根据实施例的多进程交互系统的操作的流程图200。操作包括在至少一个处理设备202上执行多个进程。多个进程包括多个应用程序的可分离的程序执行上下文,使得每个应用程序包括至少一个进程。操作包括将多个进程的每个进程的事件转译为数据胶囊204。数据消息包括发起数据消息的进程的状态信息和事件的事件数据的与应用程序无关的表示。操作包括将数据消息传送到多个池的至少一个池中206。每个进程作为识别进程操作,使得所述识别进程在多个池中识别包括与识别进程的交互功能和识别进程的标识对应的内容中的至少一个的数据胶囊208。所述识别进程从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理210。多进程交互系统的操作启用进程之间的协调,其中,协调包括通过从多个池中检索对等进程的状态信息,多个进程中的每个进程与多个进程的对等进程进行协调。通过交互地组合多个池的至少一个池的数据胶囊的集合的内容,操作还使得能够生成多个进程的输出。FIG. 2 is a flowchart 200 of the operation of a multi-process interactive system, according to an embodiment. Operations include executing a plurality of processes on at least one processing device 202 . The multiple processes include separable program execution contexts for multiple applications such that each application includes at least one process. Operations include translating events for each of the plurality of processes into data capsules 204 . A data message includes state information for the process that originated the data message and an application-independent representation of the event data for the event. Operations include transmitting 206 the data message to at least one pool of the plurality of pools. Each process operates as a recognition process such that the recognition process recognizes, in a plurality of pools, a data capsule 208 comprising at least one of content corresponding to an interaction function of the recognition process and an identification of the recognition process. The identification process retrieves identified data capsules from a plurality of pools and performs processing 210 appropriate to the contents of the identified data capsules. Operation of the multi-process interactive system enables coordination among processes, wherein the coordination includes each process of the plurality of processes coordinating with a peer process of the plurality of processes by retrieving state information of the peer processes from the plurality of pools. The operation also enables the generation of outputs of the plurality of processes by interactively combining the contents of the collection of data capsules of at least one of the plurality of pools.
在进程鼠标和姿态/空间输入中,鼠标进程M监控低级鼠标硬件,并且将传统的鼠标驱动器事件转译为与屏幕无关的蛋白质。根据以下描述,传递到用户输入池Ui的实施例的鼠标进程M蛋白质如下:In process mouse and gesture/spatial input, the mouse process M monitors the low-level mouse hardware and translates traditional mouse driver events into screen-independent proteins. According to the following description, the mouse process M protein of the embodiment passed to the user input pool Ui is as follows:
descrips:descriptions:
-input driver-input driver
-mango.local-mango.local
-mouse-mouse
ingests:ingests:
-id:0x012345-id: 0x012345
-pos:[1280,800]- pos: [1280, 800]
-buttons:[1]-buttons: [1]
姿态/空间进程G蛋白质将看起来类似,如下:The attitude/space process G protein will look similar, as follows:
descrips:descriptions:
-input driver-input driver
-mango.local-mango.local
-hand-hand
ingests:ingests:
-id:0x017845-id: 0x017845
-gripe:..|||-gripe: ..|||
-pos:[127.4,10.5,12.2]- pos: [127.4, 10.5, 12.2]
-point:[[-0.099833,0.000000,-0.995004],-point: [[-0.099833, 0.000000, -0.995004],
[0.099335 0.995004 -0.009967]][0.099335 0.995004 -0.009967]]
指针进程P将这些消息解释为暗示各个指针在它们负责绘制的三维空间中的位置。在应用程序代码中可能已经定义指针的静态集合,或者较早的蛋白质可以已经定义并且初始化指针。The pointer process P interprets these messages as hinting at the position of the individual pointers in the three-dimensional space they are responsible for rendering. A static collection of pointers may have been defined in the application code, or an earlier protein may have defined and initialized the pointers.
对于在空间操作环境内运行的正方形程序的实例,指针进程P中的每一个获知附接到主管它们的计算机的显示屏幕的确切真实世界的位置。此外,这些显示屏幕可能已经通过数据消息在启动时或动态地初始化。For the instance of the square program running within the spatial operating environment, each of the pointer processes P knows the exact real-world position of the display screen attached to the computer hosting them. Furthermore, these display screens may have been initialized at startup or dynamically via data messages.
随着蛋白质到达用户输入池Ui,指针进程P通过构建新的蛋白质并且将它们传递到协调池Coo进行反应,如下:As proteins arrive at user input pool Ui, pointer process P reacts by constructing new proteins and passing them to coordination pool Coo as follows:
descrips:descriptions:
-pointer-pointer
-click-click
-mouse-mouse
ingests:ingests:
-mid:0x2345-mid: 0x2345
-origin:[0.0,0.0,0.0]-origin: [0.0, 0.0, 0.0]
-passes-through:[0.0,1625.6,-2349.3]-passes-through: [0.0, 1625.6, -2349.3]
descrips:descriptions:
-pointer-pointer
-click-click
-hand-hand
-one-finger-one-finger
ingests:ingests:
-mid:0x2372-mid: 0x2372
-origin:[127.4,10.5,12.2]-origin: [127.4, 10.5, 12.2]
-passes-through:[0.0,1625.6,-2349.3]-passes-through: [0.0, 1625.6, -2349.3]
这些蛋白质或消息关于可用的显示器定义指针对象的位置。每个指针进程P被配置以便管理对于仅附接到在其上被主管的计算机的显示器的数学变换。These proteins or messages define the position of the pointer object with respect to the available displays. Each pointer process P is configured to manage mathematical transformations for displays attached only to the computer on which it is hosted.
周期性地,每个指针进程P还绘制图形输出的帧。该图形数据传递到帧池。指针进程P产生的每个帧渲染将在附接到主管该进程的计算机的显示器上出现的所有指针图形。Periodically, each pointer process P also draws frames of graphics output. This graphics data is passed to the frame pool. Each frame produced by pointer process P renders all pointer graphics that will appear on the display attached to the computer hosting the process.
借助实施例的应用程序模型和图形,正方形进程S负责跟踪并且绘制作为正方形应用程序的焦点的半透明正方形。每个正方形具有位置(position)、方向、大小(size)和颜色(color)。在正方形的状态改变的任何时间,正方形进程S将蛋白质放到协调池Coo中:With the application model and graphics of an embodiment, the square process S is responsible for tracking and drawing the translucent square that is the focus of the square application. Each square has a position, orientation, size and color. At any time the state of the square changes, the process S of the square puts the protein into the coordinating pool Coo:
descrips:descriptions:
-tsquare-tsquare
-position-position
ingests:ingests:
-tid:0x45878912-tid: 0x45878912
-pos:[0.0,0.0,0.0]- pos: [0.0, 0.0, 0.0]
-up:[0.0,1.0,0.0]-up: [0.0, 1.0, 0.0]
-over:[1.0,0.0,0.0]-over: [1.0, 0.0, 0.0]
-size:25.0-size: 25.0
-color:[1.0,1.0,1.0,1.0]-color: [1.0, 1.0, 1.0, 1.0]
正方形进程S还将图形输出传递到帧池,大多数如指针进程那样做。然而,每个正方形进程S渲染其自己的正方形,无论该正方形是否将在附接到主管进程的计算机的显示器上出现。以下详细描述帧处理。The square process S also passes graphics output to the frame pool, mostly as the pointer process does. However, each square process S renders its own square, whether or not that square will appear on a display attached to the computer hosting the process. Frame processing is described in detail below.
将描述指针和正方形的状态的蛋白质放置和传送到多用户池中允许构成该应用程序的分离的进程进行协调,由此在不相似的进程之间提供协调。实施例的正方形进程S监控指示进入正方形的边界的区域中的指针的蛋白质。当这发生时,正方形进程S将蛋白质放入指示交叠的池,并且参考涉及的正方形和指针,如下:Placing and passing the proteins describing the state of the pointers and squares into the multi-user pool allows the separate processes that make up the application to coordinate, thereby providing coordination between dissimilar processes. The square process S of an embodiment monitors proteins that indicate pointers entering the region of the border of the square. When this happens, the square process S puts the protein into the pool indicating the overlap, and references the squares and pointers involved, as follows:
descrips:descriptions:
-tsquare-tsquare
-pointer-overlap-pointer-overlap
-entrance-entrance
ingests:ingests:
-tid:0x45878912-tid: 0x45878912
-mid:0x2372-mid: 0x2372
指针进程P监控该形式的蛋白质。当指针进程P识别或看到参考其自身的mid的交叠蛋白质(overlap protein)时,改变当绘制指针帧时其使用的图形表示。将使用交叠指示图形,直到进程看见适当的交叠退出(overlap-exit)蛋白质,例如:Pointer process P monitors this form of protein. When pointer process P recognizes or sees an overlap protein referencing its own mid, it changes the graphical representation it uses when drawing pointer frames. The overlap indicator graph will be used until the process sees the appropriate overlap-exit protein, e.g.:
descrips:descriptions:
-tsquare-tsquare
-pointer-overlap-pointer-overlap
-exit-exit
ingests:ingests:
-tid:0x45878912-tid: 0x45878912
-mid:0x2372-mid: 0x2372
以上协调策略的很多变形也是可能的。指针进程P可以处理检查几何交叠的职责(而不是如上所述正方形进程S进行该操作)。进程可以都是帧同步的,并且交叠蛋白质可以针对每个帧生成,这将消除对于分离进入和退出蛋白质的需要。Many variations of the above coordination strategies are also possible. Pointer process P may handle the responsibility of checking geometric overlap (instead of square process S doing this as described above). Processes can all be frame-synchronized, and overlapping proteins can be generated for each frame, which would eliminate the need for separate entry and exit proteins.
当在这里描述的机制内工作时所面对的任何给定协调问题可用的解决方案几乎总是有多样性。实际上,这种灵活性是在此实施例的强度中的一个。在此的描述说明对于在尝试构建典型的多进程图形应用程序中面对的若干互锁问题实现的解决方案中的至少一个。多个参考搜集有用的传信模式,它们中的很多是可应用的,例如由G.Hohpe和B Woolf在ISBN 0321146530中的“Enterprise Integration Patterns:Designing,Building andDeploying Messaging Solutions”。There is almost always diversity in the solutions available to any given coordination problem faced when working within the mechanisms described here. In fact, this flexibility is one of the strengths of this embodiment. The description herein illustrates at least one of the implemented solutions to several interlocking problems faced in attempting to build typical multi-process graphics applications. Several references collect useful messaging patterns, many of which are applicable, eg "Enterprise Integration Patterns: Designing, Building and Deploying Messaging Solutions" by G. Hohpe and B Woolf in ISBN 0321146530.
根据实施例在将用户输入连接到操控动作中,交互地移动正方形包括:正方形进程S使用指针进程P放到协调池Coo中的数据。正方形进程S响应于识别的指针交叠条件和蛋白质与“指针”和“点击”记述的组合初始化移动。在移动在进行中的同时,正方形的图形表示发生改变,空间中的正方形的位置跟随指针。移动继续,直到对应的“指针”/“未点击”蛋白质产生。According to an embodiment, in connecting the user input to the manipulation action, interactively moving the square includes: the square process S uses the data put into the coordination pool Coo by the pointer process P. The square process S initiates movement in response to the identified pointer overlap condition and protein combination with "pointer" and "click" descriptions. While the movement is in progress, the graphical representation of the square changes and the position of the square in space follows the pointer. Movement continues until the corresponding "pointer"/"unclicked" protein is generated.
当实施例的正方形彼此交叠时,他们还改变它们的颜色。每当S进程看见“tsquare”/“position”蛋白质时,就计算在其本身与该蛋白质的保管之间是否存在任何交叠。如果存在,则当其渲染其下一帧时使用交叠指示颜色,否则,其使用正常颜色。When the squares of the embodiment overlap each other, they also change their color. Whenever the S process sees a "tsquare"/"position" protein, it calculates whether there is any overlap between itself and the custody of that protein. If present, it uses the overlap indication color when it renders its next frame, otherwise, it uses the normal color.
注意,实施例的松散耦合的架构的灵活性提供实现该行为的其它或替换方式。例如,正方形进程S可以避免进行交叠计算,而替代地将该工作卸载到另一进程,例如该进程将连续地进行针对一些或所有正方形的匹配并且将描述交叠条件的蛋白质放入协调池Coo。正方形进程S将简单地等待这些蛋白质:Note that the flexibility of the loosely coupled architecture of an embodiment provides additional or alternative ways of achieving this behavior. For example, a square process S could avoid doing the overlap calculation and instead offload this work to another process, e.g. that process would continuously do the matching for some or all squares and put the proteins describing the overlap conditions into the coordinating pool Coo. Square process S will simply wait for these proteins:
descrips:descriptions:
-tsquare-tsquare
-square-overlap-square-overlap
ingests:ingests:
-tids:[0x45878912,0x45878916].-tids: [0x45878912, 0x45878916].
将应用程序工作量切片和切块的这种灵活性是十分有用的。计算密集的任务可以移动到具有空闲能力的处理器或机器。数据的制造者可以根据需要例示帮助进程(并且当不再需要它们时终止它们)。更多计算和渲染资源可以应用于用户直接与其交互或用户立即能够感知更大粒度、细节或刷新速率的应用程序领域。This flexibility to slice and dice the application workload is very useful. Computationally intensive tasks can be moved to processors or machines with spare capacity. Producers of data can instantiate helper processes as needed (and terminate them when they are no longer needed). More computing and rendering resources can be applied to areas of the application where the user directly interacts with it, or where the user immediately perceives greater granularity, detail, or refresh rate.
因为在此描述的多进程交互系统外部化应用程序状态并且允许多进程访问该状态,所以这一切是可能的。相反,通过当代编程模型,运行时间状态在单独进程内总是完全“锁上”。This is all possible because the multi-process interaction system described herein externalizes application state and allows multiple processes to access that state. In contrast, with contemporary programming models, the runtime state is always fully "locked" within a single process.
多进程交互系统鼓励编程者将所有交互功能暴露为蛋白质-可驱动状态。应用程序编程接口(API)由每个进程识别的蛋白质来定义,而不是传统的功能调用。例如,定义改变任何(或所有)正方形的颜色的蛋白质:Multi-process interaction systems encourage programmers to expose all interaction functions as protein-drivable states. Application programming interfaces (APIs) are defined by proteins recognized by each process, rather than traditional function calls. For example, to define a protein that changes the color of any (or all) squares:
descrips:descriptions:
-tsquare-tsquare
-color-change-command-color-change-command
ingests:ingests:
-tids:[0x0]-tids: [0x0]
-normal-color:[1.0,0.0,0.0,0.65]-normal-color: [1.0, 0.0, 0.0, 0.65]
-overlap-color:[1.0,0.0,0.0,1.0]-overlap-color: [1.0, 0.0, 0.0, 1.0]
当任何正方形进程S在协调池Coo中看见该蛋白质时,其检查tids链表,来确定其自身唯一的对象id或通用地址0x0是否存在。如果存在,则进程开始使用指定的两个新的颜色(一个用于正常情况,一个用于交叠情况)来渲染其正方形。When any square process S sees the protein in the coordination pool Coo, it checks the tids linked list to determine whether its own unique object id or general address 0x0 exists. If present, the process starts rendering its square using the two new colors specified (one for the normal case and one for the overlapped case).
使用这种机制和这种“将所有交互函数暴露为蛋白质”的方法,在已经完成、部署和运行用于正方形应用程序的所有其它代码之后,可以写入用于控制正方形的颜色的新效用。不需要重新编译或重新链接来将新的功能添加到运行应用程序。Using this mechanism and this "expose all interaction functions as proteins" approach, after all other code for the square application has been completed, deployed and running, a new utility for controlling the color of the square can be written. No recompilation or relinking is required to add new functionality to a running application.
用于图形应用程序的交互调试器是从该方法获益的另一程序类型。在传统调试器可以显示非常多的程序内部状态之前,它们通常需要暂停程序。然而,如果经由在此描述的池暴露程序的所有可操控状态,则调试器可以在程序运行的同时监控并且操控程序状态。Interactive debuggers for graphical applications are another type of program that would benefit from this approach. Before traditional debuggers can reveal much of a program's internal state, they often need to halt the program. However, if all of the program's manipulable state is exposed via the pool described herein, the debugger can monitor and manipulate the program state while the program is running.
指针进程P和正方形进程S将图形数据推送到帧池,以使任何显示输出变为对用户可见。在此描述的实施例包括用于输出图形的多种方式,其中一些在此详细描述。其它实施例可以在以下描述的进程的不同组合下操作,以用于将图形数据推送到帧池,并且输出图形。Pointer process P and square process S push graphics data to the frame pool so that any display output becomes visible to the user. Embodiments described herein include a variety of ways for outputting graphics, some of which are described in detail herein. Other embodiments may operate under different combinations of the processes described below for pushing graphics data to the frame pool and outputting graphics.
在实施例中,进程可以使用直接渲染框架(例如OpenGL)直接绘制系统图形层。在该方法下,池用于协调,但不用于图形命令或像素数据。In an embodiment, a process may draw directly to the system graphics layer using a direct rendering framework such as OpenGL. Under this approach, the pool is used for coordination, but not for graphics commands or pixel data.
另一实施例经由将渲染命令传送到池的进程来输出图形数据。另一进程(或多个进程)然后负责解释渲染命令并且驱动系统图形层。例如,这些命令可以是非常低级的,例如暴露的OpenGL调用。反之,这些渲染命令可以是非常高级的,例如,比如以上所述的tsquare蛋白质,其包括专用渲染进程可以一帧接一帧地绘制正方形的足够信息。Another embodiment outputs graphics data via a process that passes rendering commands to the pool. Another process (or processes) is then responsible for interpreting rendering commands and driving the system graphics layer. For example, these commands can be very low-level, such as exposed OpenGL calls. Instead, these rendering commands can be very high-level, such as, for example, the tsquare protein described above, which includes enough information that a dedicated rendering process can draw a square frame by frame.
又一实施例经由渲染到存储器中像素缓冲器的进程来输出图形数据,然后将所得原始帧数据传送或放置到池中。另一进程(或多个进程)组合原始帧数据。通过该方法,池处理的数据的量通常远比以上描述的图形输出方法更大。然而,本地渲染和网络帧传送提供了大量灵活性,因此,如果高带宽网络和快速池实现可用,则一般使用它。Yet another embodiment outputs the graphics data via the process of rendering to a pixel buffer in memory, then transfers or places the resulting raw frame data into the pool. Another process (or processes) combines the raw frame data. With this approach, the amount of data processed by the pool is typically much greater than with the graphical output approach described above. However, local rendering and network frame delivery provide a lot of flexibility, so if a high-bandwidth network and fast pooling implementation is available, it is generally used.
参照图1C以上描述的示例系统100通常经由渲染到存储器中像素缓冲器的进程来输出图形数据,然后将所得原始帧数据传送到池中。另进程理(或多个进程)组合原始帧数据。通过该方法,池处理的数据的量通常远比以上描述的图形输出方法更大。然而,本地渲染和网络帧传送提供大量灵活性,因此,如果高带宽网络和快速池实现可用,则一般使用它。The example system 100 described above with reference to FIG. 1C typically outputs graphics data via the process of rendering to a pixel buffer in memory, and then transfers the resulting raw frame data to the pool. Another process (or processes) assembles the raw frame data. With this approach, the amount of data processed by the pool is typically much greater than with the graphical output approach described above. However, local rendering and network frame delivery provide a lot of flexibility, so if a high-bandwidth network and fast pool implementation is available, it is generally used.
因此,各指针进程P和正方形进程S渲染它们自己的单独图形元件。每个进程选取多个颜色组件和多个像素以渲染。进程可以使用RGBA(红色、绿色、蓝色、alpha)彩色空间或具有alpha混合和alpha合成的RGB彩色模型的组件来渲染(例如2560x1600)像素的全显示器。可是,为了节省计算周期、渲染开销和池带宽,进程可以仅产生必要的像素,以捕获特定图形对象的投射的边框,并且如果亮度(具有透明性)渲染足够,则可以仅使用两个组件。Thus, each pointer process P and square process S renders their own separate graphic elements. Each process picks multiple color components and multiple pixels to render. A process can render a full display of (eg 2560x1600) pixels using the RGBA (red, green, blue, alpha) color space or components of the RGB color model with alpha blending and alpha compositing. However, to save computation cycles, rendering overhead, and pool bandwidth, a process can generate only the necessary pixels to capture the projected bounding box of a particular graphics object, and only use two components if the luma (with transparency) rendering is sufficient.
渲染的像素数据连同各种元数据(例如几何范围、分层信息、帧率指示、额外颜色信息等)一起传送或传递到帧池中。随着正方形应用程序在空间操作环境的上下文中运行,每个进程具有对真实世界几何数据的访问权利,并且能够将适当的输出传递给帧池中的每一个。这可以包括对于每个输出周期渲染多于一个的帧。Rendered pixel data is transferred or passed into the frame pool along with various metadata such as geometric extents, layering information, frame rate indication, additional color information, etc. With a square application running in the context of a spatial operating environment, each process has access to real-world geometric data and is able to pass appropriate output to each of the frame pools. This may include rendering more than one frame per output cycle.
将蛋白质存放到本地帧池中以通常进行像素数据的不必要的压缩的速率而发生。然而,为了实现对于交互应用程序的相对低的时延,网络存放可以减少对于每个帧发送的数据的量。实施例使用硬件压缩来减少表示像素的每个阵列所需的字节的数量,但实施例不限于此。Pooling proteins into the local frame pool occurs at a rate that typically does unnecessary compression of pixel data. However, to achieve relatively low latency for interactive applications, network storage can reduce the amount of data sent for each frame. Embodiments use hardware compression to reduce the number of bytes required to represent each array of pixels, but embodiments are not limited thereto.
参照图1C,系统100的实施例使用将这些帧层每一秒很多次组合为用于每个显示器的输出的单个帧的专用合成进程COM。通常由系统级配置选择来设置全局显示帧率,但组成正方形应用程序的单独进程中的每一个能够使用不同的帧速率。合成进程com适当地照顾匹配帧层。Referring to Figure 1C, an embodiment of the system 100 uses a dedicated compositing process COM that combines these frame layers many times per second into a single frame for each display's output. It is usually a system-level configuration choice to set the global display frame rate, but each of the individual processes that make up the square application can use a different frame rate. The compositing process com takes care of matching frame layers appropriately.
如以上参照图1A-图1C描述的那样,实施例的多进程交互系统包括进程、池和蛋白质。系统中的实线矩形表示进程,而椭圆表示池、用于结构化数据交换的机制。通过池的数据消息通常描述为“蛋白质”。进程中的每一个生成蛋白质并且将蛋白质存放到一个或多个池中,并且从一个或多个池检索蛋白质。As described above with reference to FIGS. 1A-1C , the multi-process interaction system of the embodiment includes processes, pools and proteins. Solid rectangles in the system represent processes, while ovals represent pools, mechanisms for structured data exchange. Data messages passing through a pool are often described as "proteins". Each of the processes generates proteins and deposits proteins into and retrieves proteins from one or more pools.
池和蛋白质是在此描述的方法和系统的组件,用于封装要在进程之间或跨越进程共享的数据。除了蛋白质和池之外,这些机制还包括多色拉(多个“色拉(slaw)”)。通常,多色拉提供最低级的用于进程间交换的数据定义,蛋白质提供中级的用于查询和过滤的结构和钩子(hook),池提供高级的组织和访问语义。多色拉包括用于高效、与平台无关的数据表示和访问的机制。蛋白质使用多色拉作为有效载荷来提供数据封装和传送方案。池在进程内、本地进程之间、跨越远程或分布式进程之间的网络,并且经由长期(例如盘上,等)存储来提供蛋白质的结构化和灵活的会聚、排序、过滤和分布。Pools and proteins are components of the methods and systems described herein for encapsulating data to be shared between or across processes. These mechanisms include slaws (multiple "slaws") in addition to proteins and pools. In general, polysaras provide the lowest-level data definitions for interprocess exchange, proteins provide intermediate-level structures and hooks for querying and filtering, and pools provide high-level organization and access semantics. Multisala includes mechanisms for efficient, platform-independent data representation and access. Proteins provide data encapsulation and delivery schemes using slaws as payloads. Pooling provides structured and flexible aggregation, sorting, filtering, and distribution of proteins within-process, between local processes, across a network between remote or distributed processes, and via long-term (eg, on-disk, etc.) storage.
多进程交互系统的实施例的配置和实现包括若干构造,其一起启用多个能力。例如,在此描述的实施例提供如上所述的大量进程之间的数据的高效交换。在此描述的实施例还提供灵活的数据“类型”和结构,使得支持数据的广泛变化种类和使用。此外,在此描述的实施例包括数据交换的灵活机制(例如本地存储器、盘、网络等),所有通过基本上相似的应用程序编程接口(API)来驱动。此外,描述的实施例启用以不同编程语言编写的进程之间的数据交换。此外,在此描述的实施例启用数据缓存和会聚状态的自动维护。The configuration and implementation of an embodiment of the multi-process interaction system includes several constructs that together enable multiple capabilities. For example, embodiments described herein provide efficient exchange of data between a large number of processes as described above. Embodiments described herein also provide flexible data "types" and structures so that a wide variety of data types and uses are supported. Furthermore, embodiments described herein include flexible mechanisms for data exchange (eg, local storage, disk, network, etc.), all driven through substantially similar application programming interfaces (APIs). Furthermore, the described embodiments enable data exchange between processes written in different programming languages. Furthermore, embodiments described herein enable automatic maintenance of data caching and convergence state.
图3是根据实施例的包括使用多色拉、蛋白质和池的数据表示的处理环境的框图。在此提出的实施例的主要构造包括多色拉(多个“色拉”)、蛋白质和池。在此描述的多色拉包括用于高效的、与平台无关的数据表示和访问的机制。在此详细描述的蛋白质提供数据封装和传输方案,实施例的蛋白质的有效载荷包括多色拉。在此描述的池提供蛋白质的结构化但却灵活的聚集、排序、过滤和分布。池在进程之内、本地进程之间、跨越远程或分布式进程之间的网络并且经由“长期”(例如盘上)存储借助于蛋白质提供对数据的访问。3 is a block diagram of a processing environment including data representation using slaws, proteins, and pools, according to an embodiment. The main configurations of the embodiments presented here include multi-salads (multiple "salads"), proteins, and pools. The polysala described here includes mechanisms for efficient, platform-independent data representation and access. The proteins described in detail herein provide data encapsulation and transmission schemes, and the payload of the example proteins includes slaw. The pools described here provide structured yet flexible aggregation, ordering, filtering and distribution of proteins. Pools provide access to data by means of proteins within a process, between local processes, across a network between remote or distributed processes, and via "long-term" (eg, on-disk) storage.
图4是根据实施例的蛋白质的框图。如以下详细描述的那样,蛋白质包括长度头部、记述和摄取。记述和摄取中的每个包括色拉或多色拉。Figure 4 is a block diagram of a protein according to an embodiment. As described in detail below, a protein includes a length header, description, and uptake. Each of the description and intake includes a salad or multi-salad.
图5是根据实施例的记述的框图。如以下详细描述的那样,记述包括偏移、长度和多色拉。Figure 5 is a block diagram of a description according to an embodiment. As described in detail below, descriptions include offset, length, and slaw.
图6是根据实施例的摄取的框图。如以下详细描述的那样,摄取包括偏移、长度和多色拉。Figure 6 is a block diagram of ingestion, under an embodiment. As detailed below, intake includes offset, length, and slaw.
图7是根据实施例的色拉的框图。如以下详细描述的那样,色拉包括类型头和类型专用数据。7 is a block diagram of a salad, under an embodiment. As described in detail below, a slaw includes a type header and type-specific data.
图8A是根据实施例的池中的蛋白质的框图。蛋白质包括长度头部(“蛋白质长度”)、记述偏移、摄取偏移、记述和摄取。记述包括偏移、长度和色拉。摄取包括偏移、长度和色拉。Figure 8A is a block diagram of proteins in a pool, according to an embodiment. A protein includes a length header ("Protein Length"), Descriptor Offset, Ingest Offset, Descriptor and Ingest. Descriptions include offset, length, and slaw. Intake includes offset, length and slaw.
在此描述的蛋白质是用于封装数据的机制,所述数据需要在进程之间共享或者需要跨越总线或网络或其它处理结构而移动。作为示例,蛋白质提供了用于传输和操纵数据的改进机制,所述数据包括与用户接口事件对应或相关联的数据的数据,具体地说,实施例的用户接口事件包括美国专利第7,598,942号中描述的姿态接口的用户接口事件,并且通过引用将其全部内容结合于此。作为另一示例,蛋白质提供了用于传输和操纵数据的改进机制,所述数据包括但不限于图形数据或事件以及状态信息,这只是举几个例子。蛋白质是结构化的记录格式和用于操纵记录的方法的关联的集合。在此使用的记录的操纵包括:将数据放入结构中、将数据从结构取出、以及查询数据的格式和存在。蛋白质被配置为经由以多种计算机语言编写的代码来使用。如在此描述的那样,蛋白质还被配置为用于池的基本建构块。此外,蛋白质被配置为天然地能够在处理器之间并跨越网络移动,同时保持它们包括的数据原封不动。The proteins described here are mechanisms for encapsulating data that needs to be shared between processes or moved across a bus or network or other processing structure. As an example, proteins provide an improved mechanism for transmitting and manipulating data, including data corresponding to or associated with user interface events, in particular the user interface events of the embodiments included in U.S. Patent No. 7,598,942 User Interface Events for the Gesture Interface described and incorporated herein by reference in its entirety. As another example, proteins provide improved mechanisms for transmitting and manipulating data including, but not limited to, graphical data or events and state information, just to name a few. A protein is an associated collection of structured record formats and methods for manipulating records. As used herein, manipulation of records includes putting data into structures, getting data out of structures, and querying the format and existence of data. Proteins are configured for use via code written in a variety of computer languages. As described herein, proteins are also configured as basic building blocks for pools. Furthermore, proteins are configured to be naturally able to move between processors and across networks while leaving the data they comprise intact.
与传统的数据传输机制形成对照,蛋白质是非类型化的(untyped)。虽然是非类型化的,但蛋白质提供强大并且灵活的模式匹配工具,在其上实现“类型相似”功能。如在此描述的那样配置的蛋白质也固有地是多点(虽然点对点形式作为多点传输的子集是容易地实现的)。此外,例如,蛋白质定义了在例如存储器中、盘上和线上(网络)格式之间并无不同(或仅在执行的可选优化的类型方面不同)的“通用”记录格式。In contrast to traditional data transfer mechanisms, proteins are untyped. Although untyped, proteins provide powerful and flexible pattern-matching tools on which to implement "type-alike" functions. Proteins configured as described herein are also inherently multipoint (although point-to-point forms are readily achievable as a subset of multipoint transmission). Furthermore, for example, proteins define a "universal" recording format that does not differ (or differs only in the type of optional optimizations performed) between eg in-memory, on-disk and online (network) formats.
参照图4和图8,实施例的蛋白质是字节的线性序列。在这些字节内封装记述链表和称为摄取的键-值对的集合。记述列表包括任意精细但却高效可过滤的每蛋白质事件描述。摄取包括包含蛋白质的实际内容的键-值对的集合。Referring to Figures 4 and 8, the proteins of the embodiments are linear sequences of bytes. Within these bytes encapsulate a linked list of descriptions and a collection of key-value pairs called ingestions. The description list includes arbitrarily fine-grained yet efficiently filterable per-protein event descriptions. Ingestion consists of a collection of key-value pairs containing the actual content of the protein.
蛋白质与键-值对以及关于网络友好和多点数据交换的一些核心构思的相关性,与给予“元组(tuple)”的概念特权的较早系统(例如Linda,Jini)共享。蛋白质与面向元组的系统在几个主要方面不同,包括使用记述列表以提供标准的、可优化的模式匹配基底(substrate)。蛋白质还与面向元组的系统在适合于多种存储和语言构造的记录格式的严格规范连同对该记录格式的“接口”的几个特定实现方面不同。The association of proteins with key-value pairs and some core ideas about network-friendliness and multipoint data exchange is shared with earlier systems (eg Linda, Jini) that privileged the concept of "tuples". Proteins differ from tuple-oriented systems in several major ways, including the use of lists of descriptions to provide a standard, optimizeable pattern-matching substrate. Proteins also differ from tuple-oriented systems in a strict specification of a record format suitable for a variety of storage and language constructs, along with a few specific implementations of an "interface" to that record format.
转向蛋白质的描述,蛋白质的前四个或八字节指定了蛋白质的长度,其在实施例中必须是16字节的倍数。16字节粒度确保了字节对准和总线对准效率在当代的硬件上可实现。未被自然地“四字对准的”蛋白质被填充以任意字节,使得其长度是16字节的倍数。Turning to the description of the protein, the first four or octets of the protein specify the length of the protein, which in an embodiment must be a multiple of 16 bytes. The 16-byte granularity ensures byte alignment and bus alignment efficiency is achievable on contemporary hardware. Proteins that are not naturally "quad-aligned" are padded with arbitrary bytes such that their length is a multiple of 16 bytes.
蛋白质的长度部分具有以下格式:在高位优先(big-endian)格式中,指定长度的32位,其中,四个最低阶位充当标志用于指示宏级蛋白质结构特性;如果蛋白质的长度大于2^32字节,则跟随32个另外的位。The length part of a protein has the following format: in big-endian format, 32 bits specifying the length, where the four lowest-order bits serve as flags to indicate macro-level protein structural properties; if the length of the protein is greater than 2^ 32 bytes, followed by 32 additional bits.
实施例的16字节对准限制意味着前四个字节的最低阶位可用作标志。并且因此,前三个低阶位标志分别指示蛋白质的长度可以用前四字节表示,还是需要八个,蛋白质使用高位优先字节排序还是低位优先(little-endian)字节排序,以及蛋白质是采用标准还是非标准结构,但蛋白质不限于此。第四标志位被保留以供将来使用。The 16 byte alignment restriction of an embodiment means that the lowest order bits of the first four bytes can be used as flags. And thus, the first three low-order bit flags indicate, respectively, whether the length of the protein can be represented in the first four bytes or requires eight, whether the protein uses little-endian or little-endian byte ordering, and whether the protein is Whether a standard or non-standard structure is adopted, but the protein is not limited to this. The fourth flag bit is reserved for future use.
如果设置了八字节长度标志位,则通过读取下四个字节并且使用它们作为高位优先的八字节整数的高阶字节(其中,已经读取的四字节提供低阶部分)来计算蛋白质的长度。如果设置了低位优先标志,则蛋白质中的所有二进制数值数据将被解释为低位优先(否则为高位优先)。如果设置了非标准标志位,则蛋白质的其余部分不符合以下将要描述的标准结构。If the eight-byte length flag is set, by reading the next four bytes and using them as the high-order byte of an eight-byte integer with big-endian priority (where the four bytes already read provide the low-order part) to calculate the length of the protein. If the little-endian flag is set, all binary numeric data in the protein will be interpreted as little-endian (otherwise big-endian). If the non-standard flag bit is set, the rest of the protein does not conform to the standard structure described below.
除了要说存在用于使用蛋白质和池来描述并且同步对于系统编程者可用的非标准蛋白质格式的各种方法,并且当空间或计算机周期受到约束时这些方法可以是有用的之外,在此将不进一步讨论非标准蛋白质结构。例如,实施例的最短蛋白质是十六字节。标准格式蛋白质无法将任何实际有效载荷数据适配到这十六字节中(其中的最大份额已经转移为描述蛋白质的组成部分的位置)。但非标准格式的蛋白质可以想象地使用其16字节中的12个用于数据。交换蛋白质的两个应用程序可以相互决定它们发出的任何16字节长的蛋白质总是包括表示例如来自实时模数转换器的12个8位传感器值的12个字节。In addition to saying that there are various methods for using proteins and pools to describe and synchronize non-standard protein formats available to system programmers, and that these methods can be useful when space or computer cycles are constrained, here Non-standard protein structures are not discussed further. For example, the shortest protein of an embodiment is sixteen bytes. A standard format protein cannot fit any actual payload data into these sixteen bytes (the lion's share of which has been shifted to describe the location of the protein's constituent parts). But a protein in a non-standard format could conceivably use 12 of its 16 bytes for data. Two applications exchanging proteins can mutually decide that any 16-byte long protein they send always includes 12 bytes representing, for example, 12 8-bit sensor values from a real-time analog-to-digital converter.
在蛋白质的标准结构中,紧跟着长度头部,出现另外两个可变长度整数。这些数字分别指定了对记述链表中的第一个元素和第一键-值对(摄取)的偏移。这些偏移在此分别也被称为记述偏移和摄取偏移。这些数字的每四位的字节的顺序由蛋白质字节顺序(endianness)标志位来指定。对于每个而言,前四字节的最高有效位确定数字是四个或八个字节宽。如果设置最高有效位(msb),则前四个字节是双字(八字节)数字的最高有效字节。这在此被称为“偏移形式”。指向记述和对(pair)的单独偏移的使用允许通过不同代码路径来处理记述和对,使得例如与记述模式匹配和蛋白质组装有关的特定优化称为可能。在蛋白质的开始处这两个偏移的存在还允许若干有用的优化。In the standard structure of proteins, following the length header, two other variable-length integers appear. These numbers specify the offset to the first element and first key-value pair (ingest) in the description list, respectively. These offsets are also referred to herein as descriptive offsets and ingest offsets, respectively. The byte order of each quadrangle of these numbers is specified by the protein endianness flag. For each, the most significant bit of the first four bytes determines whether the number is four or eight bytes wide. If the most significant bit (msb) is set, the first four bytes are the most significant bytes of the doubleword (eight byte) number. This is referred to herein as an "offset form". The use of separate offsets pointing to descriptions and pairs allows descriptions and pairs to be processed by different code paths, enabling certain optimizations related to, for example, description pattern matching and protein assembly. The presence of these two offsets at the beginning of the protein also allows several useful optimizations.
多数蛋白质不会如此大以至于要求八字节的长度或指针,因此通常长度(带有标志)和两个偏移数字将仅占据蛋白质的前三字节。在很多硬件或系统架构中,超过第一个的特定数量字节的取得或读取是“免费的”(例如,16个字节正好取与单个字节相同数目的时钟周期,以跨越单元处理器的主总线拉送(pull))。Most proteins will not be so large as to require eight bytes of length or pointers, so usually the length (with flags) and two offset numbers will only occupy the first three bytes of the protein. In many hardware or system architectures, the fetching or reading of a certain number of bytes beyond the first is "free" (for example, 16 bytes take exactly the same number of clock cycles as a single byte to process across units device's main bus pull (pull)).
在很多实例中,允许蛋白质内部的实现专用或上下文专用的缓存或元数据是有用的。偏移的使用允许在蛋白质的开始附近创建任意大小的“洞”,可以在其中插入这样的元数据。可以利用八个字节的元数据的实施在很多系统架构上免费得到那些字节,其中每次取得蛋白质的长度头部。In many instances, it is useful to allow implementation-specific or context-specific caches or metadata inside proteins. The use of offsets allows to create arbitrarily sized "holes" near the beginning of the protein, into which such metadata can be inserted. Implementations that can take advantage of eight bytes of metadata get those bytes for free on many system architectures, where the protein's length header is taken each time.
记述偏移指定了蛋白质的开始与第一记述项之间的字节的数目。每个记述项包括对下一个记述项的偏移(当然,以偏移格式),接着是可变宽度的长度字段(也是以偏移格式),接着是色拉。如果没有其它记述,则按照规则,偏移是四字节的零。否则,偏移指定该记述项的开始与下一个记述项之间的字节的数目。长度字段以字节的方式指定色拉的长度。The description offset specifies the number of bytes between the start of the protein and the first description entry. Each descriptor includes an offset to the next descriptor (in offset format, of course), followed by a variable-width length field (also in offset format), followed by a slaw. If nothing else is specified, the offset is, by rule, four bytes of zero. Otherwise, the offset specifies the number of bytes between the start of this descriptor and the next descriptor. The length field specifies the length of the salad in bytes.
在多数蛋白质中,每个记述都是以色拉串方式格式化的串:四字节的长度/类型头部,其中最高有效位被设置并且只有较低的30位用于指定长度,接着是头部指示的数目的数据字节。通常,长度头部从蛋白质取得其字节顺序。假设字节编码UTF-8字符(因此——注意(nota bene)——字符的数目不一定与字节的数目相同)。In most proteins, each description is a string formatted in a salad string fashion: a four-byte length/type header with the most significant bit set and only the lower 30 bits used to specify the length, followed by the header section indicates the number of data bytes. Normally, the length header takes its byte order from the protein. The bytes are assumed to encode UTF-8 characters (so - note (nota bene) - the number of characters is not necessarily the same as the number of bytes).
摄取偏移指定了蛋白质的开始与第一个摄取项之间的字节的数目。每个摄取项包括对下一个摄取项的偏移(以偏移格式),再次接着是长度字段和色拉。除了摄取偏移指向下一个摄取项而不是下一个记述项之外,摄取偏移在功能上与记述偏移相同。The ingestion offset specifies the number of bytes between the start of the protein and the first ingestion entry. Each ingest item includes an offset (in offset format) to the next ingest item, again followed by a length field and a slaw. An ingest offset is functionally identical to a describe offset, except that it points to the next ingest item instead of the next describe item.
在多数蛋白质中,每个摄取具有包括通常用作键/值对的双值链表的色拉cons类型。色拉cons记录包括四字节的长度/类型头部,其中第二最高有效位被设置并且只有较低的30位用于指定长度;对值(第二)元件的开始的四字节偏移;四字节长度的键元素;对于键元素的色拉记录;四字节长度的值元素,以及最后对于值元素的色拉记录。In most proteins, each ingest has a salad cons type that includes a linked list of two values usually used as key/value pairs. A shara cons record includes a four-byte length/type header with the second most significant bit set and only the lower 30 bits used to specify the length; a four-byte offset to the start of the value (second) element; A key element of four bytes in length; a slaw record for a key element; a value element of four bytes in length, and finally a slaw record for a value element.
通常,cons键是色拉串。跨越若干蛋白质和色拉cons长度和偏移字段的数据的复制还提供用于细化和优化的更多机会。Usually, cons keys are salad skewers. Replication of data across several protein and salad cons length and offset fields also provides more opportunities for refinement and optimization.
如上所述,根据实施例用于在蛋白质内嵌入类型化的(typed)数据的构造是被称为“色拉”(复数是“多色拉”)的标签化的(tagged)字节序列规范和抽象。色拉是表示一条(可能是聚集的)类型化的数据的字节的线性序列,并且与编程语言专用API相关联,该API允许在存储器空间、存储介质与机器之间创建、修改和四处移动多色拉。色拉类型方案意在是可扩展的并且尽可能地重量轻,并且是从任何编程语言可以使用的公共基底。As mentioned above, constructs for embedding typed data within proteins according to embodiments are tagged byte sequence specifications and abstractions called "salads" (plural is "salads") . A slaw is a linear sequence of bytes representing a piece of (possibly aggregated) typed data, and is associated with a programming language-specific API that allows the creation, modification, and movement of multiple salad. The Salad type scheme is intended to be extensible and as lightweight as possible, and to be a common base usable from any programming language.
构建高效大规模的进程间通信机制的期望是色拉配置的驱动。传统编程语言提供在进程专用存储器布局中工作良好的复杂数据结构和类型工具,但当在进程之间移动或在盘上存储数据时,这些数据表示总是损坏。色拉架构是用于进程间通信的首要的基本上有效的多平台友好的低级数据模型。The desire to build an efficient and large-scale inter-process communication mechanism is the driving force of the slaw configuration. Traditional programming languages provide complex data structures and type facilities that work well in process-specific memory layouts, but when data is moved between processes or stored on disk, these data representations are always corrupted. The shara schema is the premier essentially efficient multi-platform friendly low-level data model for inter-process communication.
但更重要的是,多色拉被配置为连同蛋白质一起影响并且启用未来计算硬件(微处理器、存储器控制器、盘控制器)的开发。对比如公共可用的微处理器的指令集合的几个特定添加使得多色拉有可能变得即使对于单个进程、存储器中数据布局也与在多数编程语言中使用的方案一样高效。But more importantly, the slaw is configured to influence and enable the development of future computing hardware (microprocessors, memory controllers, disk controllers) along with proteins. A few specific additions to the instruction set of eg publicly available microprocessors make it possible for multi-sharara to become even for a single process, an in-memory data layout as efficient as the scheme used in most programming languages.
每个色拉包括可变长度的类型头部,接着是类型专用数据布局。在以例如C、C++和Ruby支持完全色拉功能的示例实施例中,通过可从每种语言访问的系统头文件中定义的通用整数来指示类型。还能够实现更复杂的和灵活的类型分辨功能:例如,经由通用对象ID和网络查找的间接类型。Each slaw consists of a variable-length type header, followed by a type-specific data layout. In example embodiments that support full slaw functionality in, for example, C, C++, and Ruby, the type is indicated by a generic integer defined in a system header file accessible from each language. More complex and flexible type resolution functions can also be implemented: for example, indirect types via generic object IDs and network lookups.
例如,实施例的色拉配置允许色拉记录用作来自Ruby和C++两者的语言友好方式的对象。C++编译器外部的一套实用程序完整地检查色拉字节布局,创建专用于单独色拉类型的头文件和宏,并且自动生成用于Ruby的绑定。结果,即使当从单个进程内使用时,良好配置的色拉类型也非常高效。进程的可访问存储器中的任何地方的任何色拉都可以被寻址,而无需拷贝或“去串行化”步骤。For example, the slaw configuration of an embodiment allows slaw records to be used as objects from both Ruby and C++ in a language-friendly manner. A suite of utilities external to the C++ compiler fully inspects the slaw byte layout, creates header files and macros specific to the individual slaw types, and automatically generates bindings for Ruby. As a result, well-configured salad types are very efficient even when used from within a single process. Any slaw anywhere in a process's accessible memory can be addressed without copying or "deserialization" steps.
实施例的色拉功能包括用于执行以下中的一个或多个的API工具:创建专用类型的新色拉;创建或构建对来自盘上或存储器中的字节的色拉的语言专用引用;以类型专用方式在色拉内嵌入数据,查询色拉的大小;从色拉内检索数据;克隆色拉,并且转译色拉内的所有数据的字节顺序和其它格式属性。每个色拉执行以上行为。The salad function of an embodiment includes an API facility for performing one or more of: creating a new salad of a specialized type; creating or constructing a language-specific reference to a salad from bytes on disk or in memory; methods to embed data in the salad, query the size of the salad; retrieve data from the salad; clone the salad, and translate the byte order and other format properties of all data in the salad. Each salad performs the above behavior.
图8B示出根据实施例的色拉头部格式。色拉的详细描述如下。Figure 8B illustrates a salad header format, according to an embodiment. A detailed description of the salad follows.
每个色拉的内部结构都优化类型分辨、对封装数据的访问、以及用于该色拉实例的大小信息中的每一个。在实施例中,色拉类型的完全集合通过设计最小化地完成,并且包括:色拉串、色拉cons(即对(dyad));色拉列表;以及色拉数值对象,其自身表示被理解为半打的排列或这种基本属性的单独数值类型的广泛集合。任何色拉的其它基本性质是其大小。在实施例中,多色拉具有量化为四的倍数的字节长度;这些四字节字在此被称为“quad(四元组)”。通常,这样的基于四元组的大小将多色拉与现代计算机硬件架构的配置良好地对准。The internal structure of each salad optimizes each of type resolution, access to encapsulated data, and size information for that salad instance. In an embodiment, the full set of salad types is done minimally by design, and includes: salad strings, salad cons (ie, dyads); salad lists; Permutations or broad collections of individual numeric types of this basic property. The other essential quality of any salad is its size. In an embodiment, polysaras have byte lengths quantized to multiples of four; these four-byte words are referred to herein as "quads." In general, such quad-based sizes align polysara well with the configuration of modern computer hardware architectures.
实施例中的每个色拉的前四个字节包括头部结构,其对类型描述和其它元信息进行编码,并且将专用类型意义归因于特定位模式的。例如,色拉头的第一(最高有效)位用于指定该色拉的大小(四元组字中的长度)是否遵循初始四字节类型头部。当这个位被设置时,可以理解的是,在色拉的下四个字节(例如字节五至八)中明确地记录色拉的大小;如果色拉的大小是不能通过四个字节来表示(即,如果大小等于或大于二的三十二次幂),则色拉的初始四字节的下一最高有效位也被设置,这说明色拉具有八字节(而不是四字节)长度。在此情况下,检查进程将发现存储在顺序字节五到十二中的色拉的长度。另一方面,小数目的色拉类型意味着在很多情况下完全指定的典型位模式“留下未用的”四字节色拉头中的很多位,并且在这样的情况下,这些位可以用于编码色拉的长度,从而节省否则将会需要的字节(五至八)。The first four bytes of each slaw in an embodiment include a header structure that encodes a type description and other meta-information, and attributes a specific type meaning to a particular bit pattern. For example, the first (most significant) bit of the slaw header is used to specify whether the size of the slaw (the length in a quad word) follows the original four-byte type header. When this bit is set, it is understood that the size of the slaw is explicitly recorded in the next four bytes of the slaw (eg, bytes five through eight); if the size of the slaw cannot be represented by four bytes ( That is, if the size is equal to or greater than two to the thirty-second power), the next most significant bit of the initial four bytes of the slaw is also set, which indicates that the slaw is eight bytes (rather than four bytes) long. In this case, the checking process will find the length of the slaw stored in sequential bytes five through twelve. On the other hand, a small number of slaw types means that in many cases the fully specified typical bit pattern "leaves unused" many bits in the four-byte slaw header, and in such cases, these bits can be used for Encodes the length of the slaw, saving bytes (five to eight) that would otherwise be required.
例如,实施例留下色拉头部的最高有效位(“长度服从”标志)未设置,并且将下一位设置为指示色拉是“微小cons(wee cons)”,在此情况下,在其余三十位中编码(四元组中的)色拉的长度。类似地,在头部中通过模式001来标记“微小串(wee string)”,这留下二十九位用于表示色拉串的长度;头部中的引导0001描述“微小链表(wee list)”,其通过二十八个可用长度表示位可以是大小高达二到二十八个四元组的色拉列表。“完全串(fullstring)”(或cons或链表)在头部中具有不同的位签名,其中,因为在字节五至八(或在极端情况下,为十二)中分离地编码色拉长度,所以最高有效头部位必定被设置。注意,血浆实现在色拉构建之时“决定”是采用这些构造的“微小”或“完全”版本(该决定基于得到的大小是否将“适合(fit)”可用的微小位),但是完全对比于微小的细节对于血浆实现的用户是隐藏的,用户只知道并且仅关注她正使用色拉串、或色拉cons或色拉列表。For example, an embodiment leaves the most significant bit of the slaw header (the "length obeys" flag) unset, and sets the next bit to indicate that the slaw is a "wee cons", in which case the remaining three The length of the slaw encoded (in 4-tuples) in tens. Similarly, "wee string" is marked by pattern 001 in the header, which leaves twenty-nine bits for the length of the salad string; bootstrap 0001 in the header describes "wee list ", which can be represented by twenty-eight available length bits, which can be a slaw list of sizes up to two to twenty-eight quadruples. A "full string" (or cons or linked list) has a different bit signature in the header, where, since the slaw length is encoded separately in bytes five to eight (or twelve in extreme cases), So the most significant header bit must be set. Note that the plasma implementation "decides" at salad build time whether to take "tiny" or "full" versions of these constructs (the decision is based on whether the resulting size will "fit" the available tiny bits), but full contrast to Minute details are hidden from the user of the plasma implementation, the user only knows and cares only that she is using salad skewers, or salad cons, or salad lists.
在实施例中,由引导头部模式00001来指示数值多色拉。后续的头部位用于表示在任意排列中可以组合的正交特性的集合。实施例采用但不限于五个这样的字符位来指示数字是否为:(1)浮点;(2)复数;(3)无符号;(4)“宽(wide)”;(5)“粗短(stumpy)”((4)“宽”和(5)“粗短”排列组合为指示八、十六、三十二和六十四位的数表示)。两个另外的位(例如(7)和(8))指示封装的数值数据是二、三、或四元素矢量(其中,两个位为零表明数值是“一元素矢量”(即标量))。在该实施例中,第四个头部字节的八位用于编码封装的数值数据的大小(以字节计,而不是四元组)。这个大小的编码被偏移一,使得它可以表示包括一与二百五十六字节以及之间的任何大小。最后,两个字符位(例如(9)和(10))用于指示数值数据编码单独数值项的数组,其中的每一个是字符位(1)至(8)描述的类型。在数组的情况下,单独数值项不是每个用另外的头部标签化,而是被打包为跟随单个头部以及可能地明确的色拉大小信息的连续数据。In an embodiment, the value slaw is indicated by the leading header pattern 00001. Subsequent header bits are used to represent sets of orthogonal features that can be combined in arbitrary permutations. Embodiments employ, but are not limited to, five such character bits to indicate whether a number is: (1) floating point; (2) complex; (3) unsigned; (4) "wide"; "stumpy" (permutations of (4) "wide" and (5) "stumpy" are represented as numbers indicating eight, sixteen, thirty-two, and sixty-four digits). Two additional bits (e.g. (7) and (8)) indicate that the packed numeric data is a two-, three-, or four-element vector (where two bits of zero indicate that the value is a "one-element vector" (i.e., a scalar)) . In this embodiment, eight bits of the fourth header byte are used to encode the size (in bytes, not quads) of the packed numeric data. The encoding of this size is offset by one so that it can represent any size between one and two hundred and fifty-six bytes and in between. Finally, two character bits (eg (9) and (10)) are used to indicate that the numeric data encodes an array of individual numeric items, each of which is of the type described by the character bits (1) to (8). In the case of arrays, the individual value items are not each tagged with another header, but are packed as contiguous data following a single header and possibly explicit slaw size information.
该实施例提供了简单而高效的色拉复制(其可以实现为字节对字节拷贝)和及其直接和高效的色拉比较(在该实施例中,当且仅当存在序列中考虑的它们的组成字节中的每一个的一一匹配,这两个多色拉是相同的)。例如,后一特性对于蛋白质架构的高效实现是重要的,蛋白质架构的关键和普遍的特征中的一个是搜索或“匹配”蛋白质的记述链表的能力。This embodiment provides simple and efficient salad copying (which can be implemented as a byte-for-byte copy) and extremely direct and efficient salad comparison (in this embodiment, if and only if there are A one-to-one match of each of the constituent bytes, the two polysaras are the same). For example, the latter property is important for the efficient implementation of protein architectures, one of the key and pervasive features of protein architectures being the ability to search or "match" descriptive linked lists of proteins.
此外,在此的实施例允许简单并且高效地构建聚集色拉形式(例如色拉cons和色拉链表)。例如,实施例通过以下步骤从两个组成多色拉建构色拉cons(其可以是任何类型,包括自身聚集):(a)查询每个组成色拉的大小,(b)分配大小等于两个组成多色拉的大小与头部加上大小结构所需的一个、两个或三个四元组之和的存储器。(c)在前四个、八个或十二个字节中记录色拉头部(加上大小信息);以及然后(d),将组成多色拉的字节进而拷贝到紧接着后面的存储器中。重要的是,这样的构造例程不需要知到关于两个组成多色拉的类型的任何东西,只有它们的大小(以及作为字节序列的可访问性)有关系。相同的进程适用于色拉链表的构造,所述色拉链表是(可能地)异类类型的任意许多子多色拉的排序封装。Furthermore, embodiments herein allow simple and efficient construction of aggregate salad forms (eg, salad cons and salad chain lists). For example, an embodiment constructs salad cons (which can be of any type, including self-aggregate) from two constituent multisala by the following steps: (a) query the size of each constituent salad, (b) allocate a size equal to the two constituent multisala The size of the header plus the memory for the sum of one, two, or three quadruples required for the size structure. (c) record the slaw header (plus size information) in the first four, eight or twelve bytes; and then (d), copy the bytes that make up the slaw to the next memory . Importantly, such a constructor need not know anything about the two types that make up the polysara, only their size (and accessibility as a sequence of bytes) matters. The same process applies to the construction of slaw-lists, which are sorted wrappers of (possibly) many sub-multi-salads of (possibly) heterogeneous types.
作为存储器中的顺序字节的色拉系统的基本格式的另一结果结合“遍历”活动获得——循环使用模式使用例如对色拉链表中存储的单独多色拉的顺序访问。必须类似地遍历表示蛋白质结构内记述和摄取的单独多色拉。以极其直接和高效方式完成这样的调动,以“到达”色拉链表中的下一个色拉,将当前色拉的长度添加到其在存储器中的位置,得到的存储器位置同样是下一色拉的头部。因为色拉和蛋白质设计避开“间接(indirection)”,所以这样的简化是可能的;不存在指针;相反地,数据简单地以其全体存在就位。Another consequence of the basic format of the slaw system as sequential bytes in memory is obtained in conjunction with the "traversal" activity - the cyclic usage pattern uses, for example, sequential access to individual multi-salads stored in a slaw-linked table. Individual slaws representing descrip- tions and uptake within protein structures must similarly be traversed. Such a transfer is done in an extremely straightforward and efficient manner to "reach" the next salad in the salad chain list, adding the length of the current salad to its location in memory, and the resulting memory location is likewise the head of the next salad . Such simplifications are possible because Salad and Protein Design eschew "indirection"; there are no pointers; instead, the data simply exists in its entirety in place.
关于色拉比较这一点,血浆系统的完全实现必须承认跨越不同操作系统、CPU与硬件架构以及在他们之中的不同且不兼容的数据表示方案的存在。大多数这样的不同包括字节排序策略(例如低位优先对比高位优先)和浮点表示,也存在其它不同。血浆规范要求确保多色拉封装的数据可解释(即必须以从中检查色拉的架构或平台的自然格式出现)。这种要求进而意味着血浆系统自身负责数据格式转换。然而,规范仅规定转换仅在色拉变为对可以检查它的执行进程“全可视(at all visible)”之前发生。因此,其取决于单独实现,此时,其选择执行这种格式c转换;两个适当的方法是色拉数据有效载荷符合本地架构的数据格式(1)由于单独的色拉是其中其已经被打包的蛋白质的“拉出(pull out)”,或(2)同时用于蛋白质中的所有色拉,由于从其中其长驻的池提取该蛋白质。注意,转换约束考虑硬件辅助实现的可能性。例如,基于接收系统的已知特性,建构有显示血浆能力的连网芯片集可以选择智能地并且在“传输的时刻”执行格式转换。或者,传输的进程可以将数据有效载荷转换为规范的格式,而接收进程对称地从规范格式转换到“本地”格式。另一实施例“在金属(atthe metal)”执行格式转换,意思是总是以规范的格式存储数据,即使在本地存储器中,并且当数据从存储器中检索并且被放置在最接近的CPU的寄存器中,存储器控制器硬件自身执行转换。On the point of salad comparison, a full implementation of a plasma system must acknowledge the existence of different and incompatible data representation schemes across and among different operating systems, CPUs, and hardware architectures. Most of these differences include byte ordering strategies (such as little-endian vs. big-endian) and floating-point representation, but there are others as well. The Plasma specification requires ensuring that data packaged in a multi-sala is interpretable (i.e. must appear in the native format of the schema or platform from which the slaw is checked). This requirement in turn means that the plasma system itself is responsible for the data format conversion. However, the specification only states that the transition occurs only before the slaw becomes "at all visible" to an executing process that can inspect it. So it's up to the individual implementation, at which point, it chooses to perform this format-c conversion; the two appropriate methods are the data format of the slaw data payload conforming to the local schema (1) since the slaw alone is where it's already packed "Pull out" of the protein, or (2) all salads used in the protein at the same time, due to the extraction of the protein from the pool in which it resides. Note that conversion constraints allow for the possibility of hardware-assisted implementations. For example, a networking chipset built with display plasma capabilities may choose to perform format conversion intelligently and "on the fly" based on known properties of the receiving system. Alternatively, the transmitting process can convert the data payload into the canonical format, while the receiving process symmetrically converts from the canonical format to the "native" format. Another embodiment performs format conversion "at the metal", meaning that data is always stored in a canonical format, even in local memory, and when data is retrieved from memory and placed in the register closest to the CPU In , the memory controller hardware performs the translation itself.
实施例的最小(和只读)蛋白质实现包括利用蛋白质的一个或多个应用程序或编程语言中的操作或行为。图8C是根据实施例的使用蛋白质的流程图850。操作开始于查询蛋白质的以字节计的长度852。查询记述项的数目854。查询摄取的数目856。通过索引号检索记述项858。通过索引号检索摄取860。A minimal (and read-only) protein implementation of an embodiment includes operations or behaviors in one or more applications or programming languages that utilize the protein. Figure 8C is a flowchart 850 for using proteins, under an embodiment. The operation begins by querying the length in bytes 852 of the protein. The number 854 of query description items. The number 856 of queries ingested. The description item 858 is searched by the index number. Ingestion 860 is retrieved by index number.
在此描述的实施例还定义了允许蛋白质被构建并且填充以数据的基本方法、对于程序员更容易地进行公共任务的帮助方法、以及用于创建优化的钩子(hook)。图8D是根据实施例的用于构建或生成蛋白质的流程图870。操作开始于创建新蛋白质872。附加一系列的记述项874。还附加摄取876。查询匹配记述的存在878,并且查询匹配摄取键的存在880。给定摄取键,检索摄取值882。跨越记述执行模式匹配884。在蛋白质的开始附近嵌入非结构化元数据886。Embodiments described here also define basic methods that allow proteins to be constructed and populated with data, helper methods for programmers to more easily perform common tasks, and hooks for creating optimizations. Figure 8D is a flowchart 870 for constructing or generating proteins, according to an embodiment. Operation begins with creating 872 a new protein. A series of description items 874 are added. Ingest 876 additionally. The query matches the existence 878 of the description, and the query matches the existence 880 of the ingestion key. Given an ingestion key, an ingestion value is retrieved 882 . Pattern matching is performed 884 across descriptions. Embed unstructured metadata 886 near the beginning of the protein.
如上所述,多色拉提供最低级的用于进程间交换的数据定义,蛋白质提供中级的用于查询和过滤的结构和钩子,池提供高级的组织和访问语义。池是用于蛋白质的贮存器,提供线性序列化和状态缓存。池还通过大量不同类型的多个程序或应用程序提供多进程访问。此外,池提供共同的可优化的过滤和模式匹配行为的集合。As mentioned above, polysaras provide the lowest-level data definitions for inter-process exchange, proteins provide mid-level structures and hooks for querying and filtering, and pools provide high-level organization and access semantics. Pools are storage for proteins, providing linear serialization and state caching. Pools also provide multi-process access by multiple programs or applications of a large number of different types. Additionally, pools provide a common set of optimizeable filtering and pattern matching behaviors.
可以容纳上万个蛋白质的实施例的池用作保持状态,使得单独的进程可以卸载对多进程程序代码共同的多数冗长的簿记。池保持或保留可用的过去蛋白质的大缓冲器——柏拉图理想(Platonic)池是明确地无限的——使得参加的进程可以随意在池中向后和向前扫描。当然,缓冲器的大小是依赖于实现的,但在通常使用中,一般可以在池中保留蛋白质几小时或几天。The pool of an embodiment, which can hold tens of thousands of proteins, is used as holding state so that individual processes can offload much of the lengthy bookkeeping common to multi-process program code. The pool holds or holds a large buffer of past proteins available—Platonic pools are explicitly infinite—so that participating processes can scan backwards and forwards in the pool at will. Of course, the size of the buffer is implementation dependent, but in typical use it is generally possible to keep proteins in the pool for hours or days.
与现有进程间通信框架采用的机械点对点方法形成对照,在此描述的池使用的最通常的风格遵守生物学暗喻。名称蛋白质暗指生物学启示:池中的数据蛋白质可用于大量计算进程进行的灵活查询和模式匹配,就像活体组织中的化学蛋白质可用于大量的细胞试剂进行的模式匹配和过滤。In contrast to the mechanical peer-to-peer approach taken by existing inter-process communication frameworks, the most common style used by the pools described here adheres to biological metaphors. The name protein alludes to biological implications: data proteins in pools can be used for flexible querying and pattern matching by massive computational processes, just as chemical proteins in living tissue can be used for pattern matching and filtering by huge numbers of cellular reagents.
两个另外的抽象依靠生物学暗喻,包括使用“句柄(handler)”和Golgi框架。参与池的进程通常创建多个句柄。句柄是将匹配条件与处理行为相关联的相对小束的代码。通过将一个或多个句柄联系到池,进程设置对状态进行封装并且对新蛋白质起反应的灵活的回调触发器。Two additional abstractions rely on biological metaphors, including the use of "handlers" and the Golgi framework. Processes participating in a pool typically create multiple handles. Handles are relatively small bundles of code that associate matching conditions with processing actions. By associating one or more handles to the pool, the process sets flexible callback triggers that encapsulate state and react to new proteins.
参与若干池的进程通常从抽象Golgi类继承。Golgi框架提供用于管理多个池和句柄的多个有用的例程。Golgi类还封装父子关系,提供不使用池的本地蛋白质交换的机制。Processes participating in several pools usually inherit from the abstract Golgi class. The Golgi framework provides several useful routines for managing multiple pools and handles. The Golgi class also encapsulates parent-child relationships, providing a mechanism for local protein exchange without using pools.
根据实施例提供的池API被配置为允许以各种方式实现池,以便既考虑系统专用目标,又考虑给定硬件和网络架构的可用能力。池所取决于的两个基本系统规定是存储工具和进程间通信的装置。在此描述的现存系统使用共享存储器、虚拟存储器和用于存储工具的盘、以及用于进程间通信的IPC队列和TCP/IP套接字的灵活组合。The pooling API provided according to the embodiments is configured to allow pooling to be implemented in a variety of ways to take into account both system-specific goals and the capabilities available for a given hardware and network architecture. The two fundamental system provisions upon which pools depend are the storage facility and the means for interprocess communication. Existing systems described herein use a flexible combination of shared memory, virtual memory, and disk for storage tools, and IPC queues and TCP/IP sockets for inter-process communication.
实施例的池功能包括但不限于以下:参加池;将蛋白质放置在池中;从池中检索下一个未看到的蛋白质;重绕或快进池内的内容(例如蛋白质)。此外,池功能可以包括但不限于以下:设立用于进程的流池回调;选择性地检索匹配记述或摄取键的特定模式的蛋白质,向后并且向前扫描匹配记述或摄取键的特定模式的蛋白质。Pool functions of an embodiment include, but are not limited to, the following: join a pool; place proteins in a pool; retrieve the next unseen protein from a pool; rewind or fast-forward content (eg, proteins) within a pool. Additionally, pooling functions may include, but are not limited to the following: setting up stream pool callbacks for processes; selectively retrieving proteins matching a particular pattern of descriptive or ingestion keys, scanning backwards and forwards for proteins matching a particular pattern of descriptive or ingestion keys protein.
以与其它应用程序共享蛋白质数据内容的方式,将以上描述的蛋白质提供给池。图9是根据实施例的包括使用多色拉、蛋白质和池的数据交换的处理环境的框图。该示例环境包括通过使用以上描述的多色拉、蛋白质和池来共享数据的三个设备(例如设备X、设备Y和设备Z,在此统称为“设备”)。设备中的每一个耦合到三个池(例如池1、池2、池3)。池1包括从各个设备贡献或传送到池的多个蛋白质(例如,蛋白质X1、蛋白质Z2、蛋白质Y2、蛋白质X4、蛋白质Y4)(例如,设备Z将蛋白质Z2传送或贡献到池1等)。池2包括从各个设备贡献或传送到池的多个蛋白质(例如蛋白质Z4、蛋白质Y3、蛋白质Z1、蛋白质X3)(例如,设备Y将蛋白质Y3传送或贡献到池2等)。池3包括从各个设备贡献或传送到池的多个蛋白质(蛋白质Y1、蛋白质Z3、蛋白质X2)(例如,设备X将蛋白质X2传送或贡献到池3等)。虽然以上描述的示例包括耦合或连接在三个池之中的三个设备,但任何数目的设备可以通过任何方式或组合来耦合或连接在任何数目的池之中,并且任何池可以包括从任何数目或组合的设备贡献的任何数目的蛋白质。该示例的蛋白质和池如上参照图3-图8所描述。The proteins described above are provided to the pool in such a way that the protein data content is shared with other applications. 9 is a block diagram of a processing environment including data exchange using slaws, proteins, and pools, under an embodiment. This example environment includes three devices (eg, device X, device Y, and device Z, collectively referred to herein as "devices") that share data using the slaw, protein, and pool described above. Each of the devices is coupled to three pools (eg pool 1, pool 2, pool 3). Pool 1 includes multiple proteins (e.g., protein X1, protein Z2, protein Y2, protein X4, protein Y4) contributed or transferred to the pool from various devices (e.g., device Z transferred or contributed protein Z2 to pool 1, etc.). Pool 2 includes a plurality of proteins (eg, protein Z4, protein Y3, protein Z1, protein X3) contributed or transferred to the pool from various devices (eg, device Y transferred or contributed protein Y3 to pool 2, etc.). Pool 3 includes a plurality of proteins (Protein Y1, Protein Z3, Protein X2) contributed or transferred to the pool from various devices (eg, device X transfers or contributes protein X2 to Pool 3, etc.). While the example described above includes three devices coupled or connected in three pools, any number of devices may be coupled or connected in any number of pools in any manner or combination, and any pool may include devices from any number or Any number of proteins contributed by the combined device. The proteins and pools of this example are as described above with reference to Figures 3-8.
图10是根据实施例的包括多个设备和运行于所述设备中的一个或多个上的大量程序的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于设备生成的事件的。该系统仅是多用户、多设备、多计算机交互控制场景或配置的一个示例。更具体地说,在该示例中,包括多个设备(例如设备A、B等)和在设备上运行的多个程序(例如应用程序AA-AX、应用程序BA-BX等)的交互系统使用血浆构建(例如池、蛋白质和色拉),以允许运行程序共享并且共同地响应于这些输入设备生成的事件。10 is a block diagram of a processing environment including multiple devices and a number of programs running on one or more of the devices where plasma constructs (e.g., pools, proteins, and salads) are used, according to an embodiment Designed to allow a large number of running programs to share and collectively respond to events generated by a device. This system is only one example of a multi-user, multi-device, multi-computer interactive control scenario or configuration. More specifically, in this example, an interactive system that includes multiple devices (eg, devices A, B, etc.) and multiple programs (eg, applications AA-AX, applications BA-BX, etc.) running on the devices uses Plasma constructs (such as pools, proteins, and salads) to allow running programs to share and collectively respond to events generated by these input devices.
在该示例中,每个设备(例如设备A、B等)将由各设备上运行的程序(例如应用程序AA-AX、应用程序BA-BX等)生成或从其输出的离散原始数据转译为血浆蛋白质,并且将这些蛋白质存放到血浆池。例如,程序AX生成数据或输出,并且将该输出提供给设备A,设备A进而将原始数据转译为蛋白质(例如蛋白质1A、蛋白质2A等),并且将这些蛋白质存放到池中。作为另一示例,程序BC生成数据并且将该数据提供给设备B,设备B进而将数据转译为蛋白质(例如蛋白质1B、蛋白质2B等),并且将这些蛋白质存放到池中。In this example, each device (eg, device A, B, etc.) translates discrete raw data generated by or output from programs running on the respective device (eg, applications AA-AX, applications BA-BX, etc.) into plasma proteins, and store these proteins in the plasma pool. For example, program AX generates data or output and provides that output to device A, which in turn translates the raw data into proteins (eg, protein 1A, protein 2A, etc.) and deposits these proteins into a pool. As another example, program BC generates data and provides that data to device B, which in turn translates the data into proteins (eg, protein 1B, protein 2B, etc.) and deposits these proteins into a pool.
每个蛋白质包括记述链表,其指定应用程序登记的数据或输出以及用于程序自身的标识信息。在可能的情况下,蛋白质记述也可以给予输出事件或动作通用的语义意义。蛋白质的数据有效载荷(例如摄取)承载了用于程序事件的有用状态信息的全部集合。Each protein includes a linked list of descriptions specifying the data or output registered by the application as well as identification information for the program itself. Where possible, protein descriptions can also give generic semantic meaning to output events or actions. A protein's data payload (eg, ingestion) carries the entire set of useful state information for program events.
无论程序或设备的类型如何,上述蛋白质在耦合或连接到池的任何程序或设备使用的池中是可用的。任何数量的计算机上运行的任何数量的程序都可以从输入池提取事件蛋白质。这些设备仅需要能够经由本地存储器总线或网络连接而参与池,以便从池中提取蛋白质。这种情况的直接结果是将负责生成处理事件的进程与使用或解释事件的进程解耦合的有利可能性。另一结果是事件的消费者和源的复用,使得设备可以由一个人控制,或者可以由几个人同时使用(例如基于血浆的输入框架支持很多并发用户),同时得到的事件流对于多个事件消费者依次可见。Regardless of the type of procedure or device, the aforementioned proteins are available in pools used by any program or device coupled or connected to the pool. Any number of programs running on any number of computers can extract event proteins from the input pool. These devices need only be able to participate in a pool via a local memory bus or network connection in order to extract proteins from the pool. A direct consequence of this situation is the advantageous possibility of decoupling the processes responsible for generating processing events from the processes consuming or interpreting them. Another consequence is the multiplexing of consumers and sources of events, such that a device can be controlled by one person, or used simultaneously by several people (e.g. plasma-based input framework supports many concurrent users), while the resulting event stream is useful for multiple Event consumers are visible in turn.
作为示例,设备C可以从池中提取一个或多个蛋白质(例如蛋白质1A、蛋白质2A等)。在蛋白质提取之后,在蛋白质数据所对应的处理事件中,设备C可以使用从蛋白质的摄取和记述的色拉中检索或读取的蛋白质的数据。作为另一示例,设备B可以从池中提取一个或多个蛋白质(例如蛋白质1C、蛋白质2A等)。在蛋白质提取之后,设备B可以在蛋白质数据对应的处理事件中使用蛋白质的数据。As an example, device C may extract one or more proteins (eg, protein 1A, protein 2A, etc.) from the pool. After protein extraction, in a processing event corresponding to the protein data, device C may use the data of the protein retrieved or read from the protein's ingestion and the described slaw. As another example, Device B may extract one or more proteins (eg, Protein 1C, Protein 2A, etc.) from the pool. After protein extraction, device B can use the protein data in processing events corresponding to the protein data.
耦合或连接到池的设备和/或程序可以在池中向后和向前浏览,查找蛋白质的特定序列。例如,通常有用的是,设立程序以等待匹配特定模式的蛋白质出现,然后向后浏览以确定该蛋白质是否已经结合特定的其它蛋白质一起出现。用于利用输入池中的存储的事件历史的这种工具通常使得编写状态管理代码不必要,或者至少明显减少对这样的不期望的编码模式的依赖。A device and/or program coupled or connected to the pool can browse backwards and forwards in the pool for specific sequences of proteins. For example, it is often useful to set up a program to wait for a protein matching a particular pattern to appear, and then browse back to see if that protein has already appeared in conjunction with particular other proteins. Such tools for utilizing stored event histories in input pools generally make writing state management code unnecessary, or at least significantly reduce reliance on such undesirable coding patterns.
图11是根据替选实施例的包括多个设备和运行于所述设备中的一个或多个上的大量程序的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于设备生成的事件。该系统仅是多用户、多设备、多计算机交互控制场景或配置的一个示例。更具体地说,在该示例中,包括多个设备(例如分别耦合到设备A和B的设备X和Y)和一个或多个计算机(例如设备A、设备B等)上运行的多个程序(例如应用程序AA-AX、应用程序BA-BX等)的交互系统使用血浆构建(例如池、蛋白质和色拉),以允许运行程序共享并且共同地响应于这些输入设备生成的事件。11 is a block diagram of a processing environment including a plurality of devices and a number of programs running on one or more of the devices in which plasma constructs (e.g., pools, proteins, and salads) according to an alternative embodiment Used to allow a large number of running programs to share and collectively respond to events generated by a device. This system is only one example of a multi-user, multi-device, multi-computer interactive control scenario or configuration. More specifically, in this example, multiple programs running on multiple devices (eg, devices X and Y coupled to devices A and B, respectively) and one or more computers (eg, device A, device B, etc.) Interactive systems (such as Apps AA-AX, Apps BA-BX, etc.) are built using Plasma (eg, Pools, Proteins, and Salads) to allow running programs to share and collectively respond to events generated by these input devices.
在该示例中,每个设备(例如分别耦合到设备A和B的设备X和Y)被管理和/或耦合以在相应设备上(例如,设备A、设备B等)主管的一个或多个程序下或与其相关联地运行,所述相应设备将由设备(例如设备X、设备A、设备Y、设备设备B等)硬件所生成的离散原始数据转译为血浆蛋白质并且将这些蛋白质存放到血浆池中。例如,与设备A上主管的应用程序AB相关联地运行的设备X生成原始数据,将离散原始数据转译为蛋白质(例如蛋白质1A、蛋白质2A等),并且将这些蛋白质存放到池中。作为另一示例,与设备A上主管的应用程序AT相关联地运行的设备X生成原始数据,将离散原始数据转译为蛋白质(例如蛋白质1A、蛋白质2A等),并且将这些蛋白质存放到池中。作为又一示例,与设备C上主管的应用程序CD相关联地运行的设备Z生成原始数据,将离散原始数据转译为蛋白质(例如蛋白质1C、蛋白质2C等),并且将这些蛋白质存放到池中。In this example, each device (e.g., devices X and Y coupled to devices A and B, respectively) is managed and/or coupled to one or more Runs under or in association with a program that translates discrete raw data generated by the hardware of a device (e.g., device X, device A, device Y, device B, etc.) into plasma proteins and deposits these proteins into a plasma pool middle. For example, device X running in association with application AB hosted on device A generates raw data, translates discrete raw data into proteins (eg, protein 1A, protein 2A, etc.), and deposits these proteins into a pool. As another example, device X running in association with application AT hosted on device A generates raw data, translates discrete raw data into proteins (e.g., protein 1A, protein 2A, etc.), and deposits these proteins into a pool . As yet another example, device Z running in association with an application CD hosted on device C generates raw data, translates discrete raw data into proteins (e.g., protein 1C, protein 2C, etc.), and deposits these proteins into a pool .
每个蛋白质包括记述链表,其指定输入设备登记的动作以及用于设备自身的标识信息。在可能的情况下,蛋白质记述也可以给予设备动作通用的语义意义。蛋白质的数据有效载荷(例如摄取)承载了用于设备事件的有用状态信息的全部集合。Each protein includes a linked list of descriptions specifying the actions registered by the input device as well as identification information for the device itself. Where possible, protein descriptions can also give generic semantic meaning to device actions. The protein's data payload (eg, ingestion) carries the entire set of useful state information for device events.
无论程序或设备的类型如何,上述蛋白质在耦合或连接到池的任何程序或设备使用的池中是可用的。任何数量的计算机上运行的任何数量的程序可以从输入池中提取事件蛋白质。这些设备仅需要能够经由本地存储器总线或网络连接而参与池,以便从池中提取蛋白质。这种情况的直接结果是将负责生成处理事件的进程与使用或解释事件的进程解耦合的有利可能性。另一结果是事件的消费者和源的复用,使得该输入设备可以由一个人控制,或者可以由几个人同时使用(例如基于血浆的输入框架支持很多并发用户),同时得到的事件流对于多个事件消费者依次可见。Regardless of the type of procedure or device, the aforementioned proteins are available in pools used by any program or device coupled or connected to the pool. Any number of programs running on any number of computers can extract event proteins from the input pool. These devices need only be able to participate in a pool via a local memory bus or network connection in order to extract proteins from the pool. A direct consequence of this situation is the advantageous possibility of decoupling the processes responsible for generating processing events from the processes consuming or interpreting them. Another consequence is the multiplexing of consumers and sources of events, such that the input device can be controlled by one person, or used simultaneously by several people (e.g. a plasma-based input framework supports many concurrent users), while the resulting event stream is useful for Multiple event consumers are visible sequentially.
耦合或连接到池的设备和/或程序可以在池中向后并且向前浏览,以查找蛋白质的特定序列。例如,通常有用的是,设立程序以等待匹配特定模式的蛋白质出现,然后向后浏览以确定该蛋白质是否已经结合特定的其它蛋白质一起出现。用于利用输入池中的存储的事件历史的这种工具通常使得编写状态管理代码不必要,或者至少明显减少对这样的不期望的编码模式的依赖。A device and/or program coupled or connected to the pool can browse backwards and forwards in the pool to find specific sequences of proteins. For example, it is often useful to set up a program to wait for a protein matching a particular pattern to appear, and then browse back to see if that protein has already appeared in conjunction with particular other proteins. Such tools for utilizing stored event histories in input pools generally make writing state management code unnecessary, or at least significantly reduce reliance on such undesirable coding patterns.
图12是根据另一替选实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个输入设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于输入设备生成的事件。该系统仅是多用户、多设备、多计算机交互控制场景或配置的一个示例。更具体地说,在该示例中,包括多个输入设备(例如输入设备A、B、BA和BB等)以及在一个或多个计算机(例如设备A、设备B等)上运行的多个程序(未示出)的交互系统使用血浆构建(例如池、蛋白质和色拉),以允许运行程序共享并且共同地响应于这些输入设备生成的事件。12 is a block diagram of a processing environment including multiple input devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, protein and Salad) are used to allow a large number of running programs to share and collectively respond to events generated by input devices. This system is only one example of a multi-user, multi-device, multi-computer interactive control scenario or configuration. More specifically, in this example, multiple input devices (eg, input devices A, B, BA, and BB, etc.) and multiple programs running on one or more computers (eg, device A, device B, etc.) An interactive system (not shown) uses plasma builds (eg, pools, proteins, and salads) to allow running programs to share and collectively respond to events generated by these input devices.
在该示例中,每个输入设备(例如输入设备A、B、BA和BB等)由相应设备(例如设备A、设备B等)上主管的软件驱动程序管理,所述相应设备将由输入设备硬件所生成的离散原始数据转译为血浆蛋白质并且将这些蛋白质存放到血浆池中的。例如,输入设备A生成原始数据,并且将该原始数据提供给设备A,设备A进而将离散原始数据转译为蛋白质(例如蛋白质1A、蛋白质2A等),并且将这些蛋白质存放到池中。作为另一示例,输入设备BB生成原始数据,并且将该原始数据提供给设备B,设备B进而将离散原始数据转译为蛋白质(例如蛋白质1B、蛋白质3B等),并且将这些蛋白质存放到池中。In this example, each input device (eg, input devices A, B, BA, and BB, etc.) is managed by a software driver hosted on the corresponding device (eg, device A, device B, etc.) that will be controlled by the input device hardware The generated discrete raw data is translated into plasma proteins and these proteins are deposited into the plasma pool. For example, input device A generates raw data and provides that raw data to device A, which in turn translates discrete raw data into proteins (eg, protein 1A, protein 2A, etc.) and deposits these proteins into a pool. As another example, input device BB generates raw data and provides that raw data to device B, which in turn translates discrete raw data into proteins (e.g., protein 1B, protein 3B, etc.) and deposits these proteins into a pool .
每个蛋白质包括记述链表,其指定输入设备登记的动作以及用于设备Each protein includes a list of descriptions that specify the actions registered by the input device and the
自身的标识信息。在可能的情况下,蛋白质记述也可以给予设备动作通用的语义意义。蛋白质的数据有效载荷(例如摄取)承载了用于设备事件的有用状态信息的全部集合。self-identifying information. Where possible, protein descriptions can also give generic semantic meaning to device actions. The protein's data payload (eg, ingestion) carries the entire set of useful state information for device events.
为了示意,这里是用于这样的系统中的两个典型事件的示例蛋白质。蛋白质在此表示为文本,然而,在实际实施中,这些蛋白质的组成部分是类型化的数据束(例如色拉)。描述一般而言的“一个手指点击”姿势(pose)(相关申请中描述的)的蛋白质如下:For illustration, here are example proteins for two typical events in such a system. Proteins are represented here as text, however, in actual implementation, the components of these proteins are typed data bundles (eg salad). The proteins describing the "one finger click" pose (described in a related application) in general are as follows:
作为另一示例,描述鼠标点击的蛋白质如下:As another example, a protein describing a mouse click is as follows:
前述样本蛋白质的一个或两个可以使得主机设备的参与程序运行其代码的特定部分。这些程序可能对一般的语义标注感兴趣:所有当中最一般的是“point”,或更具体的是对“engage,one”。或者,它们可以查找似乎仅会由精确设备生成的事件“one-finger-engage”、乃至单个聚集对象“hand-id-23”。One or both of the aforementioned sample proteins may cause a participating program of the host device to run a specific portion of its code. These programs may be interested in semantic annotation in general: "point" most generally of all, or more specifically "engage, one". Alternatively, they could look for the event "one-finger-engage", or even a single aggregated object "hand-id-23", which only appears to be generated by the precise device.
无论程序或设备的类型如何,上述蛋白质在耦合或连接到池的任何程序或设备使用的池中是可用的。任何数量的计算机上运行的任何数量的程序可以从输入池中提取事件蛋白质。这些设备仅需要能够经由本地存储器总线或网络连接而参与池,以便从池中提取蛋白质。这种情况的直接结果是将负责生成“输入事件”的进程与使用或解释事件的进程解耦合的有利可能性。另一结果是事件的消费者和源的复用,使得该输入设备可以由一个人控制,或者可以由几个人同时使用(例如基于血浆的输入框架支持很多并发用户),同时得到的事件流对于多个事件消费者依次可见。Regardless of the type of procedure or device, the aforementioned proteins are available in pools used by any program or device coupled or connected to the pool. Any number of programs running on any number of computers can extract event proteins from the input pool. These devices need only be able to participate in a pool via a local memory bus or network connection in order to extract proteins from the pool. A direct consequence of this situation is the advantageous possibility of decoupling the processes responsible for generating "input events" from the processes that consume or interpret them. Another consequence is the multiplexing of consumers and sources of events, such that the input device can be controlled by one person, or used simultaneously by several people (e.g. a plasma-based input framework supports many concurrent users), while the resulting event stream is useful for Multiple event consumers are visible sequentially.
作为示例或蛋白质使用,设备C可以从池中提取一个或多个蛋白质(例如蛋白质1B等)。在蛋白质提取之后,在处理蛋白质数据所对应的输入设备CA和CC的输入事件中,设备C可以使用从蛋白质的摄取和记述的色拉中检索或读取的蛋白质的数据。作为另一示例,设备A可以从池中提取一个或多个蛋白质(例如蛋白质1B等)。在蛋白质提取之后,设备A可以在处理蛋白质数据所对应的输入设备A的输入事件中使用蛋白质的数据。As an example or protein use, device C may extract one or more proteins (eg, protein 1B, etc.) from the pool. After protein extraction, in processing the input events of the input devices CA and CC to which the protein data corresponds, device C may use the protein's data retrieved or read from the protein's uptake and described slaw. As another example, device A may extract one or more proteins (eg, protein 1B, etc.) from the pool. After protein extraction, device A can use the protein data in processing input events of input device A corresponding to the protein data.
耦合或连接到池的设备和/或程序可以在池中向后并且向前浏览,查找蛋白质的特定序列。例如,通常有用的是,设立程序以等待匹配特定模式的蛋白质出现,然后向后浏览以确定该蛋白质是否已经结合特定的其它蛋白质一起出现。用于利用输入池中的存储的事件历史的这种工具通常使得编写状态管理代码不必要,或者至少明显减少对这样的不期望的编码模式的依赖。A device and/or program coupled or connected to the pool can browse backwards and forwards in the pool, looking for specific sequences of proteins. For example, it is often useful to set up a program to wait for a protein matching a particular pattern to appear, and then browse back to see if that protein has already appeared in conjunction with particular other proteins. Such tools for utilizing stored event histories in input pools generally make writing state management code unnecessary, or at least significantly reduce reliance on such undesirable coding patterns.
在此描述的系统的实施例中使用的输入设备的示例包括例如消费电子中使用的姿态输入传感器、键盘、鼠标、红外遥控,以及面向任务的有形介质对象,这里只是举几个例子。Examples of input devices used in embodiments of the system described herein include gesture input sensors such as those used in consumer electronics, keyboards, mice, infrared remote controls, and task-oriented tangible media objects, just to name a few.
图13是根据另一替换实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许大量运行程序共享并且共同地响应于设备生成的图形事件。该系统仅是包括多个运行程序(例如图形A-E)和一个或多个显示设备(未示出)的系统的一个示例,其中,使用血浆构建(例如池、蛋白质和色拉)以协调的方式使得程序中的一些或全部的图形输出对于其它程序可用,以允许运行程序共享并且共同地响应于设备生成的图形事件。13 is a block diagram of a processing environment including multiple devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, proteins, and salads) are processed according to another alternative embodiment. ) are used to allow a large number of running programs to share and collectively respond to device-generated graphics events. This system is just one example of a system that includes multiple running programs (eg, Figures A-E) and one or more display devices (not shown), where plasma constructs (eg, pool, protein, and salad) are used to make Graphics output from some or all of the programs is available to other programs to allow running programs to share and collectively respond to device-generated graphics events.
对于计算机程序而言通常有用的是显示由另一程序生成的图形。几个公共示例包括视频会议应用程序、基于网络的幻灯片和演示程序以及窗口管理器。在该配置下,池用作血浆库,以实现封装视频、网络应用程序共享和窗口管理的通用框架,并且允许程序员添加这样的程序的当前版本中通常不可用的多个特征。It is often useful for a computer program to display graphics generated by another program. A few common examples include video conferencing applications, web-based slideshow and presentation programs, and window managers. In this configuration, the pool serves as a plasma library to implement a common framework that encapsulates video, network application sharing, and window management, and allows programmers to add several features that are not normally available in current versions of such programs.
在血浆合成环境中运行的程序(例如图形A-E)通过耦合和/或连接到池来参与协调池。每个程序都可以将蛋白质存放在该池中,以指示各种图形源的可用性。对于显示图形可用的程序也存放蛋白质,以指示它们的显示的能力、安全性和用户简档、以及物理和网络位置。Programs running in the plasma synthesis environment (eg, Figures A-E) participate in the coordination pool by coupling and/or connecting to the pool. Each program can deposit proteins in this pool to indicate the availability of various graph sources. Programs available for display graphics also deposit proteins to indicate their display capabilities, security and user profiles, and physical and network locations.
也可以通过池发送图形数据,或者显示程序可以指向其它种类的网络资源(例如RSTP流)。在此使用的短语“图形数据”指的是依赖于宽阔连续区的多种不同表示;图形数据的示例包括但不限于文字示例(例如“图像”或像素块)、过程示例(例如,“绘制”指示的序列,比如在典型的openGL管线流下)、以及描述性示例(例如,通过几何变换、剪切和合成操作的方式组合其它图形构造的指令)。Graphics data can also be sent through the pool, or the display program can point to other kinds of network resources (such as RSTP streams). As used herein, the phrase "graphics data" refers to a variety of different representations that rely on a broad continuum; examples of graphics data include, but are not limited to, textual instances (such as "image" or blocks of pixels), procedural instances (such as "drawing " indicates sequences, such as under typical openGL pipeline flow), and descriptive examples (eg, instructions to combine other graphics constructs by means of geometric transformation, clipping, and compositing operations).
在本地机器上,可以通过平台专用显示驱动器优化来传递图形数据。即使当没有经由池发送图形时,通常也会在协调池中存储周期性的屏幕捕获,使得客户在不直接访问更深奥的源的情况下仍然可以显示后退图形。On the local machine, graphics data can be passed through platform-specific display driver optimizations. Even when graphics are not being sent via the pool, periodic screen captures are usually stored in the coordination pool so that clients can still display back graphics without directly accessing more esoteric sources.
与多数消息传递框架和网络协议不同,在此描述的多进程交互系统包括保持数据的大量缓冲的池。因此,程序可以重绕回到池中,以查看访问和使用模式(在协调池的情况下)或提取先前的图形帧(在图形池的情况下)。Unlike most messaging frameworks and network protocols, the multi-process interactive system described herein includes a pool that holds a large buffer of data. Thus, programs can rewind back into the pool to see access and usage patterns (in the case of coordination pools) or to fetch previous graphics frames (in the case of graphics pools).
图14是根据又一替换实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许运行程序的状态检查、可视化和调试的。该系统仅是包括多个设备(例如设备A、设备B等)上的多个运行程序(例如程序P-A、程序P-B等)的系统的一个示例,在所述设备中,一些程序使用或经由池访问其它程序的内部状态。14 is a block diagram of a processing environment including multiple devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, proteins, and salads) are processed according to yet another alternative embodiment. ) are used to allow status inspection, visualization and debugging of running programs. This system is just one example of a system that includes multiple running programs (eg, program P-A, program P-B, etc.) on multiple devices (eg, device A, device B, etc.), where some programs use or access Access the internal state of other programs.
多数交互计算机系统包括在单个机器或在多个机器上彼此并排运行并且跨越网络进行交互的很多程序。因为运行时间数据隐藏在每个进程内部并且难以访问,所以多程序系统可能难以配置、分析和调试。在此描述的实施例的通用框架和血浆构建允许运行程序使得多数它们的数据经由池可用,从而其它程序可以检查它们的状态。该框架启用比传统调试器更灵活的调试工具、复杂的系统维护工具、以及被配置为允许人工操作者详细分析一个或多个已经经过的状态的序列的可视化器具。Most interactive computer systems include many programs running side by side with each other on a single machine or on multiple machines and interacting across a network. Because runtime data is hidden inside each process and difficult to access, multiprogrammed systems can be difficult to configure, analyze, and debug. The general framework and plasma architecture of the embodiments described here allows running programs to have most of their data available via the pool so other programs can check their status. The framework enables debugging tools that are more flexible than traditional debuggers, sophisticated system maintenance tools, and visualization tools configured to allow a human operator to analyze in detail a sequence of states that one or more have passed through.
参照图14,该框架中运行的程序(例如程序P-A、程序P-B等)在程序启动时生成或创建进程池。在系统历书中登记该池,并且应用安全和访问控制。更具体地说,每个设备(例如设备A、B等)将由运行于各个设备上的程序(例如程序P-A、程序P-B等)生成的或从其输出的离散原始数据转译为血浆蛋白质,并且将这些蛋白质存放到血浆池中。例如,程序P-A生成数据或输出,并且将该输出提供给设备A,设备A进而将原始数据转译为蛋白质(例如蛋白质1A、蛋白质2A、蛋白质3A等),并且将这些蛋白质存放到池中。作为另一示例,程序P-B生成数据并且将该数据提供给设备B,设备B进而将数据转译为蛋白质(例如蛋白质1B-4B等),并且将这些蛋白质存放到池中。Referring to FIG. 14, the programs running in the framework (such as program P-A, program P-B, etc.) generate or create a process pool when the program starts. The pool is registered in the system calendar, and security and access controls are applied. More specifically, each device (e.g., device A, B, etc.) translates discrete raw data generated by or output from a program (e.g., program P-A, program P-B, etc.) running on the respective device into plasma proteins, and These proteins are deposited into the plasma pool. For example, program P-A generates data or output and provides that output to device A, which in turn translates the raw data into proteins (e.g., protein 1A, protein 2A, protein 3A, etc.) and deposits these proteins into a pool. As another example, program P-B generates data and provides that data to device B, which in turn translates the data into proteins (eg, proteins 1B-4B, etc.) and deposits these proteins into a pool.
对于程序生命的持续时间,具有足够访问许可的其它程序可以附接到池并且读取程序存放的蛋白质;这表示基本检查形态,并且在概念上是“单向”或“只读”命题:对程序P-A感兴趣的实体检查P-A在其进程池中存放的状态信息的流。例如,在设备C下运行的检查程序或应用程序可以从池中提取一个或多个蛋白质(例如蛋白质1A、蛋白质2A等)。在蛋白质提取之后,设备C可以使用从蛋白质的摄取和记述的色拉中检索或读取的蛋白质的数据,以访问、解释并且检查程序P-A的内部状态。For the duration of the program's life, other programs with sufficient access permissions can attach to the pool and read the program's deposited proteins; this represents a basic checking pattern, and is conceptually a "one-way" or "read-only" proposition: yes An interested entity of program P-A examines the stream of state information that P-A keeps in its process pool. For example, an inspection program or application running under device C may extract one or more proteins (eg, protein 1A, protein 2A, etc.) from the pool. After protein extraction, device C can use the protein's data retrieved or read from the protein's ingestion and described slaw to access, interpret and examine the internal state of program P-A.
但是,回顾(recall)血浆系统不仅是有效的状态传输方案而且还是全向消息收发环境,几个另外的模式支持程序到程序状态检查。授权的检查程序可以自身将蛋白质存放到程序P的进程池中,以影响或控制该进程池中产生并且放置的状态信息的特性(毕竟,程序P不仅写入而且还读取)。However, recalling that the Plasma system is not only an efficient state transfer scheme but also an omni-directional messaging environment, several additional patterns support program-to-program status checking. Authorized checkers can themselves deposit proteins into program P's process pool to influence or control the properties of the state information produced and placed in the process pool (after all, program P not only writes but also reads).
图15是根据附加的替换实施例的包括在运行于一个或多个设备上的大量程序之中耦合的多个设备的处理环境的框图,在这些设备中,血浆构建(例如池、蛋白质和色拉)被用于允许影响或控制该进程池中产生并且放置的状态信息的特性。在该系统示例中,设备C的检查程序可以例如请求程序(例如程序P-A、程序P-B等)在单个时刻或在特定持续时间将比正常更多的状态倾倒到池中。或者,预示调试通信的下一“级”,感兴趣的程序可以请求程序(例如程序P-A、程序P-B等)发出列举在其运行时间环境中现存的对象的蛋白质,它们单独地能够并且可用于经由调试池进行交互。由此可知,感兴趣的程序可以在程序运行时间中在对象之中“寻址”个体,将蛋白质放置在特定对象将单独占用并且响应的进程池中。例如,感兴趣的程序可以请求对象发出描述所有其组成变量的瞬时值的报告蛋白质。甚至更重要的是,感兴趣的程序可以经由其它蛋白质指令对象改变其行为或其变量的值。15 is a block diagram of a processing environment including multiple devices coupled among a multitude of programs running on one or more devices in which plasma constructs (e.g., pools, proteins, and salads) are included, according to additional alternative embodiments. ) are used to allow influencing or controlling the properties of state information generated and placed in the process pool. In this system example, a checker program for device C may, for example, request a program (eg, program P-A, program P-B, etc.) to dump more state than normal into the pool at a single moment or for a certain duration. Or, heralding the next "level" of debug communication, an interested program can request that a program (e.g., program P-A, program P-B, etc.) emit proteins that enumerate objects existing in its runtime environment, which individually can and can be used via The debug pool interacts. From this it follows that a program of interest can "address" individuals among objects during program runtime, placing proteins in a pool of processes that a particular object will individually occupy and respond to. For example, a program of interest may request an object to emit a reporter protein describing the instantaneous values of all its constituent variables. Even more importantly, a program of interest can change its behavior or the value of its variables via other protein instruction objects.
更具体地,在该示例中,设备C的检查应用程序将对于对象链表的请求(例如“请求对象链表”)(以蛋白质的形式)放置到池中,该请求然后由耦合到池的每个设备(例如设备A、设备B等)提取。响应于该请求,每个设备(例如设备A、设备B等)将列举其运行时间环境中现存的对象的蛋白质(例如蛋白质1A、蛋白质1B等)放置到池中,它们单独地能够并且可用于经由调试池进行交互。More specifically, in this example, device C's inspection application places a request (in the form of a protein) for a linked list of objects (eg, "request-object-list") into the pool, which is then processed by each Device (e.g. Device A, Device B, etc.) extraction. In response to this request, each device (e.g., device A, device B, etc.) places into the pool proteins (e.g., protein 1A, protein 1B, etc.) that enumerate objects existing in its runtime environment, which are individually capable and available for Interact via the debug pool.
由此可知,经由来自设备的列举,并且响应于对象的列举,设备C的检查应用程序在程序运行时间中在对象之中寻址个体,将蛋白质放置在特定对象将单独占用并且响应的进程池中。例如,设备C的检查应用程序可以将请求蛋白质(例如蛋白质“请求报告P-A-O”、“请求报告P-B-O”)放置在对象(例如分别是对象P-A-O、对象P-B-O)发出描述其所有组成变量的瞬时值的报告蛋白质(例如蛋白质2A、蛋白质2B等)的池中。每个对象(例如对象P-A-O、对象P-B-O)提取其请求(例如分别是蛋白质“请求报告P-A-O”、“请求报告P-B-O”),并且,响应于此,将包括请求的报告的蛋白质(例如分别为蛋白质2A、蛋白质2B)放置到池中。设备C然后提取各个报告蛋白质(例如蛋白质2A、蛋白质2B等),并且采取对于报告的内容适当的后续处理动作。It follows that, via enumeration from the device, and in response to the enumeration of objects, the inspection application of device C addresses individuals among the objects at program runtime, placing proteins in the pool of processes that a particular object will individually occupy and respond to middle. For example, an inspection application of device C may place a requesting protein (e.g., protein "request report P-A-O", "request report P-B-O") at a point where an object (e.g., object P-A-O, object P-B-O, respectively) emits instantaneous values describing all of its constituent variables. In a pool of reporter proteins (eg, protein 2A, protein 2B, etc.). Each object (e.g. object P-A-O, object P-B-O) extracts its request (e.g. protein "request report P-A-O", "request report P-B-O", respectively) and, in response thereto, will include the requested reported protein (e.g. protein 2A, protein 2B) were placed in the pool. Device C then extracts the individual reporting proteins (eg, protein 2A, protein 2B, etc.) and takes subsequent processing actions appropriate to the reported content.
以此方式,使用血浆作为交换介质最终趋于侵蚀调试、进程控制与程序到程序通信和协调之间的区别。In this way, using plasma as a medium of exchange ultimately tends to erode the distinction between debugging, process control, and program-to-program communication and coordination.
至此,通用血浆框架允许以松散耦合的方式设计可视化和分析程序。例如,可以结合将其基本存储器读取和写入输出到池的任何程序来使用显示存储器访问模式的可视化工具。受到分析的程序无需获知可视化工具的存在或设计,反之亦然。So far, the generic plasma framework allows the design of visualization and analysis programs in a loosely coupled manner. For example, a visualizer that shows memory access patterns can be used in conjunction with any program that outputs its basic memory reads and writes to the pool. The program being profiled does not need to know about the existence or design of the visualization tool, and vice versa.
以上述方式使用池并不过度地影响系统性能。例如,实施例已经允许池中每秒存放几十万个蛋白质,从而使得即使相对冗长的数据输出也能够不显著地抑制大多数程序的响应性或交互特性。Using pools in the manner described above does not unduly impact system performance. For example, embodiments have allowed hundreds of thousands of proteins per second to be pooled, enabling even relatively lengthy data output without significantly inhibiting the responsiveness or interactive nature of most programs.
空间操作环境(SOE)。Space Operating Environment (SOE).
多进程交互系统可以是空间操作环境(SOE)的组件或被耦合以用于空间操作环境(SOE)。包括姿态控制系统或基于姿态的控制系统的SOE也可以被称为空间用户接口(SUI)或空间接口(SI)。作为示例,图16是根据实施例的空间操作环境(SOE)的框图。用户将他的手1601和1602定位在相机1604A-1604D的阵列的浏览区域1650中。相机检测手指和手1601和1602的位置、方向、和移动,并且生成到预处理器1605的输出信号。预处理器1605将相机输出转译为提供给系统的计算机处理单元1607的姿态信号。计算机1607使用输入信息来生成用于控制屏幕上的一个或多个光标的命令,并且将视频输出提供给显示器1603。The multi-process interactive system may be a component of or coupled for a space operating environment (SOE). An SOE including an attitude control system or an attitude-based control system may also be referred to as a Space User Interface (SUI) or a Space Interface (SI). As an example, Figure 16 is a block diagram of a space operating environment (SOE), under an embodiment. The user positions his hands 1601 and 1602 in the viewing area 1650 of the array of cameras 1604A-1604D. The camera detects the position, orientation, and movement of fingers and hands 1601 and 1602 and generates an output signal to preprocessor 1605 . The pre-processor 1605 translates the camera output into gesture signals provided to the computer processing unit 1607 of the system. Computer 1607 uses the input information to generate commands for controlling one or more cursors on the screen and provides video output to display 1603 .
虽然示出的系统用单个用户的手作为输入,但可以使用多个用户来实现SOE。此外,代替手或除了手之外,系统可以跟踪用户的身体的任意一个或多个部分,包括头、脚、腿、臂、肘、膝等。While the system shown uses a single user's hand as input, multiple users can be used to implement SOE. Furthermore, instead of or in addition to hands, the system may track any one or more parts of the user's body, including head, feet, legs, arms, elbows, knees, and the like.
在所示实施例中,四个相机或传感器用于在浏览区域1650中检测用户的手1601和1602的位置、方向、和移动。应理解,在不脱离SOE的范围和精神的情况下,SOE可以包括更多(例如六个相机、八个相机等)或更少(例如两个相机)相机或传感器。此外,虽然在示例实施例中对称地布置相机或传感器,但对于SOE中的这种对称性没有要求。在SOE中可以使用允许用户的手的位置、方向和移动的任何数量的相机或传感器或相机或传感器的定位。In the illustrated embodiment, four cameras or sensors are used to detect the position, orientation, and movement of the user's hands 1601 and 1602 in the viewing area 1650 . It should be understood that an SOE may include more (eg, six cameras, eight cameras, etc.) or fewer (eg, two cameras) cameras or sensors without departing from the scope and spirit of the SOE. Furthermore, although the cameras or sensors are arranged symmetrically in example embodiments, there is no requirement for such symmetry in the SOE. Any number of cameras or sensors or positioning of cameras or sensors that allow for the position, orientation and movement of the user's hand may be used in the SOE.
在一个实施例中,使用的相机是能够捕获灰度图像的运动捕获相机。在一个实施例中,使用的相机是Vicon制造的相机(例如Vicon MX40相机)。该相机包括相机上处理,并且能够以每秒1000帧来进行图像捕获。运动捕获相机能够检测并且定位标记。In one embodiment, the camera used is a motion capture camera capable of capturing grayscale images. In one embodiment, the camera used is a camera manufactured by Vicon (eg, a Vicon MX40 camera). The camera includes on-camera processing and is capable of image capture at 1000 frames per second. Motion capture cameras are able to detect and locate markers.
在描述的实施例中,相机是用于光学检测的传感器。在其它实施例中,相机或其它检测器可以用于电磁、静磁、RFID、或任何其它合适类型的检测。In the described embodiment, the camera is a sensor for optical detection. In other embodiments, cameras or other detectors may be used for electromagnetic, magnetostatic, RFID, or any other suitable type of detection.
预处理器1605生成三维空间点重构和骨骼点标注。姿态转译器(gesturetranslator)1606将3D空间信息和标记运动信息转换为计算机处理器可以解释的命令语言,以更新显示器上光标的位置、形状和动作。在SOE的替换实施例中,预处理器1605和姿态转译器1606被集成或组合到单个设备。The preprocessor 1605 generates 3D space point reconstruction and skeleton point annotation. A gesture translator 1606 converts the 3D spatial information and marker motion information into a command language that the computer processor can interpret to update the position, shape and motion of the cursor on the display. In an alternative embodiment of the SOE, the pre-processor 1605 and gesture translator 1606 are integrated or combined into a single device.
计算机1607可以是例如Apple、Dell或任何其它合适的制造商制造的任何通用计算机。计算机1607运行应用程序并且提供显示输出。否则将来自鼠标或其它现有技术输入设备的光标信息现在来自姿态系统。Computer 1607 may be any general purpose computer made by, for example, Apple, Dell, or any other suitable manufacturer. Computer 1607 runs application programs and provides display output. Cursor information that would otherwise come from a mouse or other prior art input device now comes from the gesture system.
SOE或实施例预期在用户的一个或多个手指上使用标记(mark)标签(tag),使得系统可以定位用户的手,识别是否其正浏览左手或右手,以及哪些手指可见。这允许系统检测用户的手的位置、方向和移动。该信息允许多个姿态由系统识别并且由用户用作命令。The SOE or embodiment contemplates the use of a mark tag on one or more of the user's fingers so that the system can locate the user's hand, identify whether it is looking at the left or right hand, and which fingers are visible. This allows the system to detect the position, orientation and movement of the user's hand. This information allows multiple gestures to be recognized by the system and used as commands by the user.
一个实施例中的标记标签是物理标签,包括(在该实施例中适合于附于人手上的各个位置)衬底和以唯一标识模式在衬底的表面上设置的离散标记。The marker tag in one embodiment is a physical tag comprising (in this embodiment adapted to be attached at various locations on a human hand) a substrate and discrete indicia disposed on the surface of the substrate in a uniquely identifying pattern.
标记和关联的外部感测系统可以在允许精确、准确和快速以及连续获取它们的三空间位置(three-space position)的任何域(光、电磁、静磁等)中操作。标记本身可以主动地(例如通过发射结构化电磁脉冲)或被动地(例如,在该实施例中,通过光学地反光)操作。The markers and associated external sensing systems can operate in any domain (optical, electromagnetic, magnetostatic, etc.) that allows precise, accurate and rapid as well as continuous acquisition of their three-space position. The markers themselves may operate actively (eg by emitting structured electromagnetic pulses) or passively (eg, in this embodiment, by optically reflecting light).
在获取的每一帧,检测系统从目前在器具化工作空间体积(在相机或其它检测器的可视范围内)中的标签接收包括所有标记的恢复的三空间位置的会聚“云”。每个标签上的标记是足够多样性的,并且以唯一的模式进行布置,从而检测系统可以执行以下任务:(1)分段,其中,每个恢复的标记位置被分配给形成单个标签的点的一个且仅一个子集;(2)标注,其中,点的每个分段的子集被标识为特定标签;(3)位置,其中,恢复标识的标签的三空间位置;(4)方向,其中,恢复标识的标签的三空间方向。如以下描述的那样,并且如图17中一个实施例示出的那样,通过标记模式的特定特性使得任务(1)和(2)是可能的。At each frame acquired, the detection system receives a converging "cloud" comprising the recovered three-space positions of all markers from the markers currently in the instrumented workspace volume (within view of the camera or other detector). The markers on each label are sufficiently diverse and arranged in a unique pattern that a detection system can perform the following tasks: (1) Segmentation, where each recovered marker position is assigned to a point forming a single label One and only a subset of ; (2) labeling, where a subset of each segment of points is identified as a specific label; (3) location, where the three-space position of the identified label is recovered; (4) orientation , where the three-space orientation of the identified label is recovered. As described below, and as shown in one embodiment in FIG. 17 , tasks (1 ) and (2) are made possible by certain properties of the marking pattern.
一个实施例中的标签上的标记附于常规栅格位置的子集。如在本实施例中那样,这种潜在栅格可以是传统笛卡尔类别、或可以替代为一些其它常规平面镶嵌(例如三角形/六角形铺盖布置)。关于标记感测系统的已知空间分辨率建立栅格的比例和空间,使得邻近栅格位置不可能被混淆。用于所有标签的标记模式的选择应满足以下约束:通过旋转、平移(translation)或镜像的任何组合,没有标签的模式会符合任何其它标签模式。可以进一步选取标记的多样性和布置,使得一些指定数量的组件标记的损失(或阻塞)是可容忍的。在进行任何任意变换之后,应该仍不可能将折衷的模块与任何其它模块混淆。The markings on the label in one embodiment are attached to a subset of the regular grid locations. As in this embodiment, such a potential grid may be of the traditional Cartesian class, or may instead be some other conventional planar tessellation (eg a triangular/hexagonal bedding arrangement). The known spatial resolution of the marker sensing system establishes the scale and space of the grid such that adjacent grid positions cannot be confused. The choice of labeling pattern for all labels should satisfy the constraint that a pattern with no labels will conform to any other labeling pattern by any combination of rotation, translation or mirroring. The diversity and arrangement of markers can further be chosen such that loss (or blocking) of some specified number of component markers is tolerable. After any arbitrary transformations, it should still be impossible to confuse a compromised module with any other.
现参照图17,示出多个标签1701A-1701E(左手)和1702A-1702E(右手)。每个标签是矩形,并且在该实施例中包括5x7栅格阵列。选取矩形形状作为确定标签的方向的辅助,并且减少镜像复制的可能性。在所示实施例中,存在用于每个手上的每个手指的标签。在一些实施例中,使用每手一个、两个、三个、或四个标签可以是足够的。每个标签具有不同灰度或色光(color shade)的边界。在该边界内是3x5栅格阵列。在栅格阵列中的特定点设置(图17的黑点表示的)标记,以提供信息。Referring now to FIG. 17, a plurality of tags 1701A-1701E (left hand) and 1702A-1702E (right hand) are shown. Each label is rectangular and in this embodiment comprises a 5x7 grid array. Pick a rectangular shape as an aid in orienting the label and reduce the possibility of mirror duplication. In the illustrated embodiment, there is a label for each finger on each hand. In some embodiments, it may be sufficient to use one, two, three, or four tags per hand. Each label has a border of a different grayscale or color shade. Within that boundary is a 3x5 grid array. Markers (indicated by black dots in Figure 17) are placed at specific points in the grid array to provide information.
通过将每个模式分段为“公共”和“唯一”子模式,可以在标签的标记模式中编码质量信息。例如,该实施例指定两个可能的“边界模式”、关于矩形边界的标记的分布。由此建立标签的“族”——针对左手的标签可以因此都使用与标签1701A-1701E所示的相同边界模式,而附接到右手手指的标签可以被分配如标签1702A-1702E所示的不同模式。选取该子模式,使得在标签的所有方向上,可以区分左模式和右模式。在图示示例中,左手模式包括每个角上的标记和距角栅格位置的第二上的标记。右手模式具有在仅两个角上标记和在非角栅格位置上的两个标记。模式的检查说明,只要四个标记中的任何三个可见,就可以肯定地区分左手模式与左手模式。在一个实施例中,边界的颜色或阴影也可以用作用手习惯的指示符。Quality information can be encoded in a tag's tagging schema by segmenting each schema into "common" and "unique" sub-patterns. For example, this embodiment specifies two possible "boundary patterns", distributions of markers about the boundaries of a rectangle. A "family" of tags is thus established - the tags for the left hand can thus all use the same boundary pattern as shown by tags 1701A-1701E, while the tags attached to the fingers of the right hand can be assigned different border patterns as shown by tags 1702A-1702E. model. This subpattern is chosen such that in all orientations of the label, left and right patterns are distinguished. In the illustrated example, the left-handed pattern includes markings on each corner and markings on the second from the corner grid positions. The right hand pattern has marks on only two corners and two marks on non-corner grid positions. Examination of the modes shows that as long as any three of the four markers are visible, one can definitely distinguish left-handed from left-handed. In one embodiment, the color or shading of the border may also be used as an indicator of handedness.
当然,每个标签必须仍采用唯一的内部模式、标签的族的公共边界内分布的标记。在所示实施例中,已经发现,由于手指的旋转或方向,内部栅格阵列中的两个标记足以唯一地标识没有重复的十个手指中的每一个。即使标记中的一个被阻塞了,标签的用手习惯和模式的组合也产生唯一的标识符。Of course, each tag must still employ a unique internal schema, tags distributed within the common boundaries of the tag's family. In the illustrated embodiment, it has been found that two markers in the inner grid array are sufficient to uniquely identify each of the ten fingers without duplication due to the rotation or orientation of the fingers. Even if one of the tags is blocked, the combination of the tag's handedness and pattern produces a unique identifier.
在该实施例中,栅格位置可视地呈现在刚性衬底上,作为对在其预期的位置附加每个反光标记的(手动)任务的辅助。经由彩色喷墨打印机将这些栅格和预期的标记位置逐字地打印到衬底上,衬底在此是(初始地)柔性“收缩膜”的片材。每个模块从片材切割并且然后炉烘焙,在此热处理期间每个模块经历精确和可重复的收缩。例如,对于该过程之后的简短间隔,冷却的标签可以略微地成形——以遵循手指的纵向曲线;然后,衬底是合适地刚性的,并且标记可以附加在指示的栅格点处。In this embodiment, the grid location is visually represented on the rigid substrate as an aid to the (manual) task of attaching each reflective marker at its intended location. These grids and expected marking positions are literally printed via a color inkjet printer onto a substrate, here a (initially) sheet of flexible "shrink film". Each module is cut from sheet material and then oven baked, during which heat treatment each module undergoes precise and repeatable shrinkage. For example, for a brief interval after the process, the cooled label can be slightly shaped - to follow the longitudinal curve of the finger; the substrate is then suitably rigid and markings can be affixed at the indicated grid points.
在一个实施例中,标记本身是三维的(例如经由粘接剂或一些其它适当的手段附加到衬底的小反射球面)。标记的三维性可以是在二维标记上的检测和定位中的辅助。然而,在不脱离在此描述的SOE的精神和范围的情况下,可以使用二者之一。In one embodiment, the markings themselves are three-dimensional (eg, small reflective spheres attached to the substrate via adhesive or some other suitable means). The three-dimensionality of the markers can be an aid in detection and localization on two-dimensional markers. However, either may be used without departing from the spirit and scope of the SOE described herein.
目前,标签经由Velcro或其它适当的手段附加到操作者佩戴的手套,或可替选地使用软质的双棒带另外直接附加到操作者的手指。在第三实施例中,可以将单独标记连同刚性衬底一起分配并且附加——或“描画”——到操作者的手指和手上。Currently, the tags are attached via Velcro or other suitable means to the glove worn by the operator, or alternatively directly to the operator's finger using a soft double stick strap. In a third embodiment, individual markers can be dispensed along with the rigid substrate and affixed - or "painted" - onto the operator's fingers and hands.
实施例的SOE预期包括手姿势(pose)、方向、手组合和方向混合的姿态词汇。还实施符号语言用于设计和交流SOE的姿态词汇中的姿势和姿态。姿态词汇是用于以简洁的文本形式表示运动学链接(kinematic linkage)的瞬时“姿势状态”的系统。所讨论的链接可以是生物的(例如人手;或整个人身体、或蝗虫腿、或狐猴的关节脊柱),或可以替代为非生物的(例如机器人臂)。在任何情况下,链接可以是简单的(脊柱)或分支(手)。SOE的姿态词汇系统对于任何特定链接建立恒定长度串,占据串的“字符位置”的特定ASCII字符的聚合则是链接的“姿势”或即时状态的唯一描述。The SOE of an embodiment is expected to include a gesture vocabulary of hand pose, orientation, hand combination, and orientation mix. A sign language is also implemented for designing and communicating poses and gestures in the SOE's gesture vocabulary. A pose vocabulary is a system for representing instantaneous "pose states" of kinematic linkages in a compact textual form. The linkages in question may be biological (such as a human hand; or an entire human body, or a locust leg, or the articulated spine of a lemur), or may instead be non-biological (such as a robotic arm). In any case, links can be simple (spine) or branched (hands). SOE's gesture vocabulary system builds a constant-length string for any particular link, and the aggregation of specific ASCII characters occupying a "character position" of the string is the unique description of the link's "pose" or immediate state.
图18示出根据实施例的SOE的姿态词汇的实施例中的手姿势。SOE假设使用手上五个手指中的每一个。这些手指编码为p-小指、r-无名指、m-中指、i-食指以及t-拇指。图18定义并且图示了用于手指和拇指的多个姿势。姿态词汇串为链接(在此情况下,手指)的每个可表达自由度建立单个字符位置。此外,每个这样的自由度理解为被离散化(或“量化”),使得通过在串位置处分配有限数量的标准ASCII字符中的一个可以表达其运动的完全范围。相对于身体特定原点(手背、蝗虫身体的中心、机器人臂的基座等)和坐标系表达这些自由度。因此,少数附加姿态词汇字符位置用于在更全局的坐标系统中“总体上”表达链接的位置和方向。Figure 18 illustrates hand gestures in an example of the gesture vocabulary of the SOE, according to an embodiment. SOE assumes use of each of the five fingers on the hand. These fingers are coded as p-little, r-ring, m-middle, i-index, and t-thumb. Figure 18 defines and illustrates a number of gestures for fingers and thumbs. The gesture vocabulary string establishes a single character position for each expressible degree of freedom of the link (in this case, a finger). Furthermore, each such degree of freedom is understood to be discretized (or "quantized") such that its full range of motion can be expressed by assigning one of a finite number of standard ASCII characters at a string position. These degrees of freedom are expressed relative to a body-specific origin (back of hand, center of locust body, base of robot arm, etc.) and coordinate system. Thus, a small number of additional gesture-lexical character positions are used to express the position and orientation of links "in general" in a more global coordinate system.
仍参照图18,使用ASCII字符定义并且标识多个姿势。在拇指与非拇指之间区分一些姿势。该实施例中的SOE使用编码,使得ASCII字符本身是姿势的暗示。然而,任何字符可以用于表示姿势,无论是否暗示。此外,在本发明中不要求使用ASCII字符用于符号串。在不脱离本发明范围和精神的情况下,可以使用任何合适的符号、数字或其它表示。例如,如果期望,符号可以使用每手指两个位,或根据期望,一些其它数量的位。Still referring to FIG. 18, a number of gestures are defined and identified using ASCII characters. Distinguish some gestures between thumb and non-thumb. The SOE in this embodiment uses an encoding such that the ASCII characters themselves are suggestive of gestures. However, any character may be used to indicate a gesture, implied or not. Furthermore, it is not required to use ASCII characters for symbol strings in the present invention. Any suitable symbols, numbers or other representations may be used without departing from the scope and spirit of the invention. For example, a symbol may use two bits per finger, if desired, or some other number of bits, as desired.
字符“^”表示弯曲的手指,而“>”表示弯曲的拇指。向上指的直手指或拇指由“1”指示,并且处于某角度处由“\”或“/”表示。“-”表示横向直指的拇指,“x”表示指向平面的拇指。The characters "^" indicate a bent finger, and ">" indicate a bent thumb. A straight finger or thumb pointing upward is indicated by a "1" and at an angle is indicated by a "\" or "/". A "-" indicates a thumb pointing straight across, and an "x" indicates a thumb pointing flat.
使用这些单独的手指和拇指描述,可以使用本发明的方案来定义和编写鲁棒(robust)数量的手姿势。每个姿势由五个字符按照如上所述的p-r-m-i-t的顺序表示。图18示出多个姿势,并且在此通过说明和示例的方式描述一些。“11111”表示保持平直(flat)并且平行于地的手。“^^^^>”表示拳头。“111^>”表示“OK”符号。Using these individual finger and thumb descriptions, a robust number of hand poses can be defined and programmed using the scheme of the present invention. Each pose is represented by five characters in the order p-r-m-i-t as described above. Figure 18 shows a number of gestures, and some are described here by way of illustration and example. "11111" indicates a hand kept flat and parallel to the ground. "^^^^>" means fist. "111^>" represents the "OK" symbol.
当使用暗示的字符时,字符串提供用于直接“人可读性”的机会。用眼睛通常可以选取描述每个自由度的可能字符的集合,以快速识别和显然地类推。例如,垂直条(“|”)将可能地表示链接元件是“直的”,直角弯(“L”)可以表示九十度弯曲,抑扬符号(“^”)可以指示尖锐弯曲。如上所述,根据期望可以使用任何字符或编码。Strings offer the opportunity for immediate "human readability" when implied characters are used. The set of possible characters describing each degree of freedom can usually be picked by eye for quick identification and obvious analogy. For example, a vertical bar ("|") would likely indicate that a link element is "straight", a right-angle bend ("L") could indicate a ninety-degree bend, and a circumflex ("^") could indicate a sharp bend. As mentioned above, any character or encoding can be used as desired.
采用如在此描述的姿态词汇串的任何系统享受串比较的高计算效率的优点——对于任何指定的姿势的标识或搜索完全变为期望的姿势串与瞬时实际串之间的“串比较”(例如UNIX的“strcmp()”函数)。此外,通配符字符的使用为编程者或系统设计者提供附加的熟悉的效率和功效:其即时状态对于匹配不相关的自由度可以指定为问号点(“?”);可以分配另外的通配符意义。Any system employing pose vocabulary strings as described herein enjoys the advantage of the high computational efficiency of string comparisons - the identification or search for any given pose becomes entirely a "string comparison" between the desired pose string and the instantaneous actual string (eg UNIX "strcmp()" function). Furthermore, the use of wildcard characters provides programmers or system designers with additional familiar efficiency and efficacy: degrees of freedom whose immediate state is irrelevant for matching can be designated as question mark points ("?"); additional wildcard meanings can be assigned.
除了手指和拇指的姿势之外,手的方向可以表示信息。显然地也可以选取描述全局空间方向的字符:当在方向字符位置中遇到时,字符“<”、“>”、“^”和“v”可以用于指示左、右、上和下的想法。图19示出将姿势和方向组合的编码的手方向描述符和示例。在实施例中,两个字符位置首先指定手掌的方向,然后是手指的方向(它们是否是直的,无论手指的实际弯曲如何)。用于这两个位置的可能的字符表达方向的“身体中心”符号:“-”、“+”、“x”、“*”、“^”、和“v”描述中间、侧面、前面(向前,离开身体)、后面(向后,离开身体)、头部(向上)和尾部(向下)。In addition to finger and thumb gestures, hand orientation can represent information. Characters describing directions in global space can obviously also be chosen: the characters "<", ">", "^" and "v" when encountered in a direction character position can be used to indicate left, right, up and down idea. Figure 19 shows an encoded hand orientation descriptor and an example combining pose and orientation. In an embodiment, the two character positions first specify the orientation of the palm, then the orientation of the fingers (whether they are straight or not, regardless of the actual curvature of the fingers). Possible characters for these two positions represent the "center of body" symbols for orientation: "-", "+", "x", "*", "^", and "v" describe middle, side, front ( forward, away from the body), rear (backward, away from the body), head (up) and tail (down).
在本发明的实施例的符号方案中,指示字符的五个手指姿势后面跟着冒号,然后是两个方向字符,以定义完整的命令姿势。在一个实施例中,开始位置被称为“xyz”姿势,其中拇指向上直指的,食指向前指,中指垂直于食指,当通过右手进行这个姿势时指向左。这由串“^^x1-:-x”来表示。In the notation scheme of an embodiment of the invention, a five finger gesture indicating a character is followed by a colon and then two directional characters to define a complete command gesture. In one embodiment, the starting position is referred to as the "xyz" pose, where the thumb is pointing straight up, the index finger is pointing forward, and the middle finger is perpendicular to the index finger, pointing left when performing this pose with the right hand. This is represented by the string "^^x1-:-x".
“XYZ-手”是利用人手的几何学以允许可视地呈现的三维结构的完全六个自由度导航的技术。虽然该技术仅取决于操作者的手的大块平移和旋转——使得其手指可以主要地保持于期望的任何姿势——但该实施例优选静态配置,其中,食指指向身体以外,拇指指向天花板;中指指向左右。因此三个手指描述(粗略地,但具有清楚明显的意图)三空间坐标系统的三个相互正交的轴:因此“XYZ-手”。"XYZ-Hand" is a technique that exploits the geometry of the human hand to allow full six degrees of freedom navigation of visually rendered three-dimensional structures. While the technique relies only on massive translation and rotation of the operator's hand - so that his fingers can be held in essentially any pose desired - this embodiment prefers a static configuration with the index finger pointing away from the body and the thumb pointing toward the ceiling ; The middle finger points left and right. The three fingers thus describe (roughly, but with a clear and obvious intent) the three mutually orthogonal axes of a three-dimensional coordinate system: hence "XYZ-hand".
XYZ-手导航然后以在预定的“中立位置”处、在操作者的身体之前保持的上述姿势中的手、手指进行。通过以下自然方式影响对三空间对象(或相机)的三个平移和三个旋转自由度的访问:手的左右移动(相对于身体的自然坐标系统)产生沿着计算的上下文的x轴的移动,手的上下移动产生沿着控制的上下文的y轴的移动,前后手移动(朝向/离开操作者的身体)产生上下文内的z轴运动。类似地,操作者的手关于食指的旋转导致计算的上下文的方向的“滚动”改变;通过操作者的手分别关于中指和拇指的旋转类似地影响“倾斜”和“偏转”改变。XYZ-hand navigation is then performed with the hand, fingers in the above-mentioned posture held in front of the operator's body at a predetermined "neutral position". Access to the three translational and three rotational degrees of freedom of a three-space object (or camera) is affected in the following natural ways: Left-right movement of the hand (relative to the body's natural coordinate system) produces movement along the computed context's x-axis , up and down movement of the hand produces movement along the y-axis of the controlled context, and forward and backward hand movement (towards/away from the operator's body) produces z-axis movement within the context. Similarly, rotation of the operator's hand about the index finger results in a "roll" change in the orientation of the computed context; "tilt" and "yaw" changes are similarly affected by rotation of the operator's hand about the middle finger and thumb, respectively.
注意,虽然“计算的上下文(computational context)”在此用于表示XYZ-手方法控制的实体——并且似乎建议合成的三空间对象或相机——但应理解,该技术对于控制真实世界对象的各个自由度:装配有适当的旋转激励器的视频或运动图片相机的摇摄/倾斜/滚动控制同等有用。此外,甚至在虚拟域中,可以稍微更少地逐字地映射XYZ-手姿势提供的身体自由度。在该实施例中,XYZ-手还用于提供对大全景显示图像的导航访问,使得操作者的手的左右和上下运动导致关于图像的预期的左右或上下“摇摄”,但操作者的手的前后运动映射为“变焦”控制。Note that while "computational context" is used here to denote entities controlled by an XYZ-hand approach—and seem to suggest synthetic three-dimensional objects or cameras—it should be understood that this technique is useful for controlling real-world objects. Various degrees of freedom: pan/tilt/roll control of a video or motion picture camera equipped with appropriate rotational actuators is equally useful. Furthermore, even in the virtual domain, the body degrees of freedom afforded by XYZ-hand poses can be mapped somewhat less literally. In this embodiment, the XYZ-hands are also used to provide navigational access to the large panorama display image, such that side-to-side and up-down movements of the operator's hand result in a desired side-to-side or up-down "pan" about the image, but the operator's The back and forth movement of the hand is mapped as a "zoom" control.
在每个情况下,手的运动与引起的计算转译/旋转之间的耦合可以是直接的(即操作者的手的位置或旋转偏移经由一些线性或非线性函数一对一映射为计算的上下文中相机或对象的位置或旋转偏移)或间接的(即操作者的手的位置或旋转偏移经由一些线性或非线性函数一对一映射为计算的上下文中位置/方向的一阶或更高阶导数,进行中的积分然后作用于计算的上下文的实际零阶位置/方向的非静态改变)。控制的后一手段与汽车“气踏板”的使用类似,其中,踏板的恒定偏移,或多或少,导致恒定的车辆速度。In each case, the coupling between hand motion and the resulting computational translation/rotation can be direct (i.e. operator's hand position or rotational offset is mapped one-to-one to computational position or rotation offset of the camera or object in the context of the computation) or indirect (i.e. the position or rotation offset of the operator's hand is mapped one-to-one to the position/orientation in the computed context via some linear or non-linear function order or higher derivatives, the ongoing integration then acts on a non-stationary change of the actual zero-order position/orientation of the context of the computation). This latter means of control is similar to the use of a car "gas pedal", where a constant deflection of the pedal, more or less, results in a constant vehicle speed.
充当真实世界XYZ-手的本地六自由度坐标原点的“中立位置”可以被建立为(1)空间中的绝对位置和方向(比如相对于封闭的房间);(2)相对于操作者本身的固定的位置和方向(例如在身体前面八英寸,在下颚下面十英寸,侧面符合肩平面),无论操作者的总体位置和“朝向(heading)”如何,或(3)交互地,通过操作者的故意的次要动作(例如,使用操作者的“另一”手颁布的姿态命令,所述命令指示XYZ-手的当前位置和方向从此用作平移和旋转原点)。A "neutral position" that serves as the origin of the real-world XYZ-hand's local 6DOF coordinates can be established as (1) an absolute position and orientation in space (such as relative to an enclosed room); (2) relative to the operator's own Fixed position and orientation (e.g., eight inches in front of the body, ten inches below the chin, sideways at shoulder level), regardless of the operator's general position and "heading," or (3) interactively, by the operator Deliberate secondary actions of , (e.g., gesture commands issued using the operator's "other" hand indicating that the current position and orientation of the XYZ-hand is used from here on as the origin of translation and rotation).
进一步方便的是提供关于XYZ-手的中立位置的“制动器”区域(或“死区”),使得该体积内的运动不映射到控制的上下文中的运动。It is further convenient to provide a "detent" region (or "dead zone") about the XYZ-hand neutral position, so that motion within this volume does not map to motion in the context of the control.
其它姿势可以包括:Other poses can include:
[|||||:vx]是手掌朝下且手指向前的平直的手(拇指平行于手指)。[|||||:vx] is a straight hand with the palm facing down and the fingers forward (thumb parallel to the fingers).
[|||||:x^]是手掌向前和手指朝向天花板的平直的手。[|||||:x^] is a straight hand with the palm facing forward and the fingers facing the ceiling.
[|||||:-x]是手掌朝向身体的中心(如果是左手,则朝向右,如果是右手则朝向左)且手指向前的平直的手[|||||:-x] is a straight hand with the palm facing the center of the body (right if left handed, left if right handed) and fingers forward
[^^^^-:-x]是拇指向上(具有指向天花板的拇指)的单手。[^^^^-:-x] is one hand with the thumb up (with the thumb pointing toward the ceiling).
[^^^|-:-x]是指向前的模仿手枪。[^^^|-:-x] refers to a forward imitation pistol.
实施例的SOE预期有单手命令和姿势以及两手的命令和姿势。图20示出SOE的实施例中的两手组合和关联的符号的示例。回顾第一示例的符号,“句号”说明其包括两个闭合的拳头。“快照”示例具有延伸的每个手的拇指和食指,拇指指向彼此,定义球门(goalpost)形状的帧。“舵和节流阀开始位置”是手指和拇指向上指手掌面向屏幕。The SOE of an embodiment anticipates one-handed commands and gestures as well as two-handed commands and gestures. Figure 20 shows an example of two-hand combinations and associated symbols in an embodiment of the SOE. Referring back to the notation of the first example, "period" indicates that it consists of two closed fists. The "snapshot" example has the thumb and forefinger of each hand extended, with the thumbs pointing towards each other, defining a goalpost shaped frame. "Rudder and Throttle Start Position" is fingers and thumb pointing up with the palm facing the screen.
图21示出SOE的实施例中的方向混合的示例。在所示示例中,在手指姿势串之后通过包围在括号中的多对方向符号来表示混合。例如,第一命令示出所有直指的手指位置。第一对方向命令将产生平直朝向显示器的手掌,第二对具有旋转到向屏幕倾斜45度的手指。虽然在该示例中示出多对混合,但在SOE中预期有任何数量的混合。Figure 21 shows an example of directional mixing in an embodiment of the SOE. In the example shown, blending is indicated by pairs of directional symbols enclosed in parentheses following the string of finger gestures. For example, the first command shows all pointed finger positions. The first pair of directional commands will produce a palm facing straight toward the display, the second pair has fingers rotated to tilt 45 degrees toward the screen. While multiple pairs of mixes are shown in this example, any number of mixes are contemplated in the SOE.
图23示出可以用于SOE的多个可能的命令。虽然在此已经关于在显示器上控制光标进行一些讨论,但SOE不限于该活动。实际上,SOE在操纵屏幕上的任何和所有数据、数据的部分以及显示器的状态中具有很大的应用。例如,在视频媒体的回放期间,命令可以用于取代视频控制。命令可以用于暂停、快进、后退等。此外,命令可以实现为图像的放大或缩小,以改变图像的方向、在任何方向上摇摄,等。SOE也可以用于代替菜单命令,例如打开、关闭、保存等。换句话说,通过手姿态可以实现可以想象到的任何命令或活动。Figure 23 shows a number of possible commands that can be used for SOE. While there has been some discussion herein regarding controlling a cursor on a display, SOE is not limited to this activity. In fact, SOE has great application in manipulating any and all data on the screen, portions of data, and the state of the display. For example, commands may be used to override video controls during playback of video media. Commands can be used to pause, fast forward, rewind, etc. In addition, the commands can be implemented as zooming in or out of the image, changing the orientation of the image, panning in any direction, etc. SOE can also be used in place of menu commands such as Open, Close, Save, etc. In other words, any command or activity imaginable can be achieved through hand gestures.
图22是根据实施例的SOE的操作的流程图。在2201,检测系统检测标记和标签。在2202,确定是否检测到标签和标记。如果不是,则系统返回2201。如果在2202检测到标签和标记,则系统进行到2203。在2203,系统从检测到的标签和标记识别手、手指和姿势。在2204,系统识别姿势的方向。在2205,系统识别检测到的一个或多个手的三维空间位置(请注意,可以组合2203、2204和2205中的任意或所有)。Figure 22 is a flowchart of the operation of the SOE according to an embodiment. At 2201, a detection system detects markers and labels. At 2202, it is determined whether tags and markers are detected. If not, the system returns 2201. If tags and markers are detected at 2202, the system proceeds to 2203. At 2203, the system recognizes hands, fingers, and gestures from the detected tags and markers. At 2204, the system identifies the direction of the gesture. At 2205, the system identifies the three-dimensional spatial location of the detected hand or hands (note that any or all of 2203, 2204, and 2205 can be combined).
在2206,将信息转译为如上所述的姿态符号。在2207,确定姿势是否有效。使用生成的符号串经由简单串比较可以实现该操作。如果姿势无效,则系统返回2201。如果姿势有效,则在2208,系统将符号和位置信息发送到计算机。在2209,计算机确定响应于姿态要进行的适当的动作,并且相应地在2210更新显示。At 2206, the information is translated into gesture symbols as described above. At 2207, it is determined whether the gesture is valid. This can be done via simple string comparison using the generated string of symbols. If the gesture is invalid, the system returns to 2201. If the gesture is valid, then at 2208 the system sends symbol and location information to the computer. At 2209, the computer determines the appropriate action to perform in response to the gesture, and updates the display at 2210 accordingly.
在SOE的一个实施例中,通过相机上处理器完成操作2201-2205。在其它实施例中,如果期望,可以通过系统计算机来完成处理。In one embodiment of the SOE, operations 2201-2205 are performed by an on-camera processor. In other embodiments, processing may be accomplished by the system computer, if desired.
系统能够“解析(parse)”并且“转译(translate)”潜在系统恢复的低级姿态的流,并且将这些解析和转译的姿态转变为可以用于控制宽广范围的计算机应用程序和系统的命令或事件数据的流。这些技术和算法可以体现在包括计算机代码的系统中,计算机代码提供实现这些技术的引擎和用于构建利用引擎的能力的计算机应用程序的平台。The system is capable of "parsing" and "translating" the stream of low-level gestures recovered by the underlying system, and turning these parsed and translated gestures into commands or events that can be used to control a wide range of computer applications and systems flow of data. These techniques and algorithms can be embodied in systems that include computer code that provides an engine that implements these techniques and a platform for building computer applications that exploit the capabilities of the engine.
一个实施例关注启用在计算机接口中使用人手的丰富姿态,但也能够识别其它身体部分(包括但不限于臂、躯干、腿和头)进行的姿态、以及静态和铰接的各种非手物理工具,包括但不限于卡钳、罗盘、灵活曲线近似器、以及各种形状的指点设备。标记和标签可以根据期望应用于操作者携带和使用的物品和工具。One embodiment focuses on enabling rich gestures using the human hand in computer interfaces, but is also capable of recognizing gestures made by other body parts including, but not limited to, arms, torso, legs, and head, as well as static and articulated various non-hand physical tools , including but not limited to calipers, compasses, flexible curve approximators, and pointing devices of various shapes. Markings and labels can be applied as desired to items and tools carried and used by operators.
在此描述的系统结合有使得可以构建在可以被识别和作用的姿态的范围中丰富的姿态系统的多个创新,同时易于集成到应用程序中。The system described here incorporates several innovations that make it possible to build gesture systems rich in the range of gestures that can be recognized and acted upon, while being easy to integrate into applications.
一个实施例中的姿态解析和转译系统包括:The gesture parsing and translation system in one embodiment includes:
1)用于指定(编码以用于计算机程序)若干不同的会聚级别的姿态的简洁和高效方式:1) A concise and efficient way to specify (code for use in a computer program) poses for several different levels of convergence:
a.三维空间中的单手的“姿势”(手的部分相对于彼此的配置和方向)、单手的方向和位置。a. The "pose" (position and orientation of parts of the hand relative to each other) of the hand in three-dimensional space, the orientation and position of the hand.
b.两手组合,用于考虑姿势、位置或二者的一个手b. Two-handed combination, one hand used to account for posture, position, or both
c.多人组合;系统可以跟踪多于两个的手,因此多于一个的人可以协作地(或在游戏应用程序的情况下,竞争地)控制目标系统。c. Multiplayer teaming; the system can track more than two hands, so more than one person can collaboratively (or in the case of gaming applications, competitively) control the target system.
d.其中姿势被按顺序组合的顺序姿态,我们称之为“活跃的(animating)”姿态。d. Sequential poses in which poses are combined sequentially, we call "animating" poses.
e.“字形”姿态,其中操作者跟踪空间中的形状e. "Glyph" poses, where the operator traces a shape in space
2)用于从以上与给定应用程序上下文有关的每个类别登记特定姿态的编程技术2) Programming techniques for registering specific gestures from each of the above categories relevant to a given application context
3)用于解析姿态流使得可以识别登记的姿态并且可以将封装这些姿态的事件传递到有关应用程序上下文的算法。3) Algorithms for parsing the gesture stream so that registered gestures can be recognized and events encapsulating these gestures can be delivered to the relevant application context.
具有构成元件(1a)至(1f)的规范系统(1)提供使用在此描述的系统的解析和转译能力的基础。The canonical system (1) with constituent elements (1a) to (1f) provides the basis for using the parsing and translation capabilities of the system described herein.
单手“姿势”表示为以下的串:A one-hand "pose" is represented as the following string:
i)手指与手背之间的相对方向,i) the relative orientation between the fingers and the back of the hand,
ii)量化为少数离散状态。ii) Quantization to a few discrete states.
使用相对结合方向允许在此描述的系统避免与不同的手的大小和几何学相关联的问题。该系统不需要“操作者校准”。此外,指定姿势作为相对方向的串或集合允许通过组合姿势表示与其它过滤器和规范容易地创建更复杂的姿态规范。Using relative bonding directions allows the system described here to avoid problems associated with different hand sizes and geometries. The system does not require "operator calibration". Furthermore, specifying poses as strings or sets of relative orientations allows more complex pose specifications to be easily created by combining pose representations with other filters and norms.
使用姿势规范的少数离散状态使得可以简洁地指定姿势并且确保使用各种潜在跟踪技术(例如,使用相机的被动光学跟踪,使用光点和相机的主动光学跟踪、电磁场跟踪等)的精确姿势识别。Using a small number of discrete states for pose specifications makes it possible to specify poses succinctly and ensures accurate pose recognition using a variety of potential tracking techniques (e.g., passive optical tracking using cameras, active optical tracking using points of light and cameras, electromagnetic field tracking, etc.).
可以部分地(或最小地)指定每个类别(1a)至(1f)中的姿态,从而忽略非关键数据。例如,其中两个手指的位置固定而其它手指位置不重要的姿态可以由其中给出两个有关手指的可操作位置并且在相同串内,对于其它手指列出“通配符”或通用的“忽略这些”指示符的单个规范来表示。The poses in each category (1a) to (1f) can be specified partially (or minimally), ignoring non-critical data. For example, gestures in which the positions of two fingers are fixed and the positions of the other fingers are unimportant can be made by listing a "wildcard" or a generic "ignore these " designator to represent a single specification.
在此描述的所有创新用于姿态识别,包括但不限于多层规范技术、相对方向的使用、数据的量化以及允许在每一级的部分或最小规范,使用其它身体部分和“制造的”工具和对象将手姿态的规范推广到姿态的规范。All innovations described here for pose recognition, including but not limited to multi-layer specification techniques, use of relative orientations, quantification of data and allowing partial or minimal specification at each level, use of other body parts and "fabricated" tools and objects generalize the specification of hand poses to the specification of gestures.
用于“登记姿态”(2)的编程技术包括允许编程者定义引擎应使得哪些姿态对于运行系统的其它部分可用的定义的应用程序编程接口调用的集合。The programming technique for "registering gestures" (2) consists of a set of defined application programming interface calls that allow the programmer to define which gestures the engine should make available to the rest of the runtime system.
这些API程序可以用在应用程序建立时间,创建贯穿运行应用程序的生命所使用的静态接口定义。在运行的过程期间也可以使用它们,允许接口特性匆忙地(on the fly)改变。接口的这种实时变化使得可以:These API procedures can be used at application build time to create static interface definitions that are used throughout the life of the running application. They can also be used during the running process, allowing interface properties to change on the fly. This real-time change of the interface makes it possible to:
i)建构复杂上下文和条件控制状态,i) Construct complex context and conditional control state,
ii)将癔病(hysterism)动态地添加到控制环境,以及ii) dynamically adding hysterism to the control environment, and
iii)创建其中用户能够改变或扩展运行系统本身的接口词汇的应用程序。iii) Create applications in which the user can change or extend the interface vocabulary of the runtime system itself.
用于解析姿态流(3)的算法比较(1)中指定并且(2)中登记的姿态与到来的低级姿态数据。当识别到登记的姿态的匹配时,表示匹配的姿态的事件数据在栈上传递到运行应用程序。The algorithm for parsing the pose stream (3) compares the pose specified in (1) and registered in (2) with the incoming low-level pose data. When a match for a registered gesture is identified, event data representing the matched gesture is passed on the stack to the running application.
在该系统的设计中期望高效实时匹配,并且指定的姿态被看作尽可能快地处理的概率的树。Efficient real-time matching is desired in the design of this system, and specified poses are viewed as trees of probabilities that are processed as quickly as possible.
此外,用于识别指定的姿态的内部使用的原始比较操作符也暴露以用于应用程序编程者使用,使得另一比较(例如,复杂或混合姿态中的灵活的状态检查)可以甚至从应用程序上下文内出现。Furthermore, the native comparison operators used internally to recognize specified gestures are also exposed for use by application programmers, so that another comparison (e.g., flexible state checks in complex or hybrid gestures) can be performed even from the application Appears in context.
识别“锁定”语义是在此描述的系统的创新。登记API(2)暗示这些语义(并且对于更少的扩展,嵌入规范词汇(1)内)。登记API调用包括:Recognizing "lock" semantics is an innovation of the system described here. The Registry API (2) implies these semantics (and, for fewer extensions, embeds within the specification vocabulary (1)). Registration API calls include:
i)“登录(entry)”状态通知符和“继续”状态通知符,以及i) "entry" status notifier and "continue" status notifier, and
ii)姿态优先级指定符。ii) Gesture priority designator.
如果已经识别姿态,则其“继续”条件取得超过用于具有相同或更低优先级的姿态的所有“登录”条件的优先。登录状态与继续状态之间的这种区分明显地添加到感知的系统使用性。If a gesture has been recognized, its "continue" condition takes precedence over all "login" conditions for gestures with the same or lower priority. This distinction between the login state and the continue state adds significantly to the perceived system usability.
在此描述的系统包括用于在面对真实世界数据误差和不确定性时的鲁棒操作的算法。来自低级跟踪系统的数据可以是不完整的(出于各种原因,包括光学跟踪中的标记的阻塞,网络退出或处理滞后等)。The system described herein includes algorithms for robust operation in the face of real world data errors and uncertainties. Data from low-level tracking systems can be incomplete (for various reasons including blockage of markers in optical tracking, network dropout or processing lag, etc.).
根据缺少数据的量和上下文,缺少数据由解析系统标记,并且内插到Depending on the amount and context of missing data, missing data is flagged by the parsing system and interpolated into
“最后已知的”或“最可能的”状态。The "last known" or "most probable" state.
如果关于特定姿态组件的数据(例如,特定结合点的方位)缺少,但可以物理上可能分析该特定组件的“最后已知的”状态,则系统在其实时匹配中使用该最近已知的状态。If data about a particular pose component (e.g., the orientation of a particular joint point) is missing, but it is physically possible to analyze the "last known" state of that particular component, then the system uses that last known state in its real-time matching .
反之,如果物理上不可能分析最后已知的状态,则系统落回组件的“最佳猜测范围”,并且在其实时匹配中使用该合成数据。Conversely, if it is not physically possible to analyze the last known state, the system falls back to a "best guess range" of components and uses this synthetic data in its real-time matching.
在此描述的规范和解析系统已经被仔细地设计为支持“用手习惯不可知论”,使得对于多手姿态,允许任一只手满足姿势需求。The specification and parsing system described here has been carefully designed to support "handedness agnosticism", such that for multi-handed poses, either hand is allowed to satisfy the pose requirements.
实施例的系统可以提供其中一个或多个显示设备上描述的虚拟空间The system of an embodiment may provide a virtual space depicted on one or more display devices wherein
(“屏幕”)被看作与系统的一个或多个操作者占据的物理空间一致的环境。在此描述这种环境的实施例。该当前实施例包括在固定的位置的三个投影仪驱动的屏幕,由单个桌面计算机驱动,并且使用在此描述的姿态词汇和接口系统来控制。然而,注意,描述的技术支持任何数量的屏幕;这些屏幕可以是移动的(而不是固定的),屏幕可以由很多独立的计算机同时驱动,并且任何输入设备或技术可以控制整个系统。("Screen") is considered an environment consistent with the physical space occupied by one or more operators of the system. An example of such an environment is described herein. This current embodiment consists of three projector-driven screens at fixed locations, driven by a single desktop computer, and controlled using the gesture vocabulary and interface system described herein. Note, however, that the technology described supports any number of screens; the screens can be mobile (rather than fixed), the screens can be driven simultaneously by many independent computers, and any input device or technology can control the overall system.
该公开中描述的接口系统应具有确定物理空间中的屏幕的尺寸、方向和位置的装置。给定该信息,系统能够将其中这些屏幕定位(并且系统的操作者禁止)为投影的物理空间动态地映射到系统上运行的计算机应用程序的虚拟空间。作为这种自动映射的部分,根据系统主管的应用程序的需要,系统还通过各种方式转译两个空间的比例、角度、深度、尺寸和其它空间特性。The interface system described in this publication shall have means to determine the size, orientation and position of the screen in physical space. Given this information, the system is able to dynamically map the physical space in which these screens are positioned (and prohibited by the system's operator) to be projected to the virtual space of the computer applications running on the system. As part of this automatic mapping, the system also translates the scale, angle, depth, size and other spatial characteristics of the two spaces in various ways, depending on the needs of the system-hosting application.
物理与虚拟空间之间的这种连续转译使得在现有应用程序平台上难以实现或对于现有平台上运行的每个应用程序必须片餐(piece-meal)实现的多个接口技术的一致和普遍使用是可能的。这些技术包括(但不限于):This continuous translation between physical and virtual spaces enables the alignment and integration of multiple interface technologies that are difficult to implement on existing application platforms or must be implemented piece-meal for each application running on existing platforms. Universal use is possible. These techniques include (but are not limited to):
1)“文字指点(literal pointing)”的使用——使用姿态接口环境中的手,或使用物理指点工具或设备——作为普遍和自然的接口技术1) The use of "literal pointing" - using the hand in a gestural interface environment, or using a physical pointing tool or device - as a pervasive and natural interface technique
2)对于屏幕的运动或重定位的自动补偿。2) Automatic compensation for screen motion or repositioning.
3)根据操作者位置而改变的图形渲染,例如仿真视差转变以增强深度感知。3) Graphics rendering that changes based on operator position, such as simulated parallax transitions to enhance depth perception.
4)屏上显示中的物理对象的包括——考虑真实世界位置、方向、状态等。例如,站在大透明屏幕前面的操作者可以看见屏幕后面的比例模型的真实位置的应用程序图形和表示(并且或许正移动或改变方向)。4) Inclusion of physical objects in on-screen display - taking into account real world position, orientation, state, etc. For example, an operator standing in front of a large transparent screen can see application graphics and representations of the scale model's true location (and perhaps moving or changing direction) behind the screen.
注意,重要的是,文字指点与基于鼠标的视窗接口和多数其它现代系统中使用的抽象指点不同。在这些系统中,操作者必须学习管理虚拟指针与物理指点设备之间的转译,并且必须认知地在二者之间映射。It is important to note that text pointing is distinct from the abstract pointing used in mouse-based windowing interfaces and most other modern systems. In these systems, the operator must learn to manage the translation between the virtual pointer and the physical pointing device, and must cognitively map between the two.
通过对比,在该公开中描述的系统中,在来自应用程序或用户观点的虚拟和物理空间之间不存在差别(除了虚拟空间对于数学操纵更顺从之外),因此不存在操作者的所需的认知转译。By contrast, in the system described in this publication, there is no difference between virtual and physical space from the application or user point of view (except that the virtual space is more amenable to mathematical manipulation), so there is no need for the operator to cognitive translation.
对于在此描述的实施例提供的文字指点的最接近的类推是(例如,在很多ATM机器上找到的)触敏屏幕。触敏屏幕提供屏幕上的二维显示空间与屏幕表面的二维输入空间之间的一对一映射。通过类似方式,在此描述的系统在一个或多个屏幕上显示的虚拟空间与操作者住用的物理空间之间提供灵活映射(可能地,但不一定,一对一)。无论类推的有用性如何,值得理解的是该“映射方法”扩展到三维以及任意大的架构环境和多个屏幕并非无关紧要。The closest analogue to the textual pointers provided by the embodiments described herein are touch-sensitive screens (eg, found on many ATM machines). Touch-sensitive screens provide a one-to-one mapping between the two-dimensional display space on the screen and the two-dimensional input space on the screen surface. In a similar manner, the system described herein provides flexible mapping (possibly, but not necessarily, one-to-one) between the virtual space displayed on one or more screens and the physical space occupied by the operator. Regardless of the usefulness of the analogy, it is worth understanding that the extension of this "mapping method" to three dimensions and to arbitrarily large architectural environments and multiple screens is not trivial.
除了在此描述的组件之外,系统还可以实现实现环境的物理空间与每个屏幕的显示空间之间的(或许通过旋转、平移、缩放或其它几何变换修改的)连续系统级映射的算法。In addition to the components described here, the system may implement algorithms that enable a continuous system-level mapping (perhaps modified by rotation, translation, scaling, or other geometric transformations) between the physical space of the environment and the display space of each screen.
取得计算对象和映射并输出虚拟空间的图形表示的渲染栈。A rendering stack that takes compute objects and maps and outputs a graphical representation of the virtual space.
从控制系统取得事件数据(在当前实施例中,来自系统和鼠标输入的姿态和指点数据),并且将来自输入事件的空间数据映射到虚拟空间中的坐标的输入事件处理栈。转译的事件然后传递到运行的应用程序。An input event processing stack that takes event data from the control system (in the current embodiment, gesture and pointing data from system and mouse input) and maps spatial data from input events to coordinates in virtual space. Translated events are then delivered to the running application.
允许系统主管跨越局域网上的若干计算机运行的应用程序的“粘接层”。A "glue layer" that allows a system to host applications running across several computers on a LAN.
如以上参照图1A-图1C并且在此另外描述的那样,考虑SOE的以上描述,SOE可以用作多进程交互系统的组件和/或耦合到多进程交互系统。如上所述,实施例的SOE可以封装为将用户输入蛋白质传递到用户输入池Ui的姿态/空间进程G。As described above with reference to FIGS. 1A-1C and otherwise described herein, considering the above description of the SOE, the SOE may be used as a component of and/or coupled to a multi-process interactive system. As mentioned above, the SOE of an embodiment may be encapsulated as a gesture/spatial process G that transfers user input proteins to the user input pool Ui.
在此的实施例包括从姿态数据检测身体进行的姿态的系统和方法。经由检测器接收姿态数据。实施例的系统和方法在处理设备上执行大量进程。进程生成包括表示姿态的事件的集合的事件。实施例的系统和方法将每个进程的事件转译为数据胶囊。实施例的系统和方法将数据胶囊传送到多个池或贮存器。大量进程中的进程的集合作为识别进程操作。识别进程在池中识别包括与姿态对应的内容的数据胶囊。识别进程从池中检索识别的数据胶囊,并且通过合成识别的数据胶囊的内容以形成姿态信号来从识别的数据胶囊生成姿态信号。姿态信号表示姿态。Embodiments herein include systems and methods for detecting gestures made by a body from gesture data. Pose data is received via a detector. The systems and methods of embodiments execute a multitude of processes on a processing device. The process generates an event that includes a collection of events representing gestures. The systems and methods of embodiments translate each process's events into data capsules. The systems and methods of embodiments transfer data capsules to multiple pools or storages. A collection of processes in a large number of processes operates as a recognition process. The recognition process identifies data capsules in the pool that include content corresponding to the pose. The recognition process retrieves the recognized data capsules from the pool and generates a pose signal from the recognized data capsules by synthesizing the contents of the recognized data capsules to form the pose signal. The attitude signal indicates attitude.
图24是根据实施例的通过多进程交互系统或作为多进程交互系统的组件实现的空间操作环境(SOE)(见图1C,元件G)的框图。用户将其手2401和2402定位在相机2404A-2404D的阵列的浏览区域2450中。相机检测手指和手2401和2402的位置,方向、和移动,并且生成到预处理器2405的输出信号。预处理器2405将相机输出转译为提供给系统的计算机处理器的姿态信号。在该实施例中,上述计算机2407执行的计算机处理器的功能可以由多进程交互系统的处理器和/或耦合到多进程交互系统的处理器(图1C)来执行。姿态信号可以被提供或传送到多进程交互系统的池(池Ui,图1C)。因此,多进程交互系统使用姿态信号来生成用于控制耦合到多进程交互系统的一个或多个组件的命令(例如显示器光标等)。Figure 24 is a block diagram of a space operating environment (SOE) (see Figure 1C, element G) implemented by or as a component of a multi-process interactive system, under an embodiment. The user positions his hands 2401 and 2402 in the viewing area 2450 of the array of cameras 2404A-2404D. The camera detects the position, orientation, and movement of fingers and hands 2401 and 2402 and generates an output signal to preprocessor 2405. The pre-processor 2405 translates the camera output into pose signals that are provided to the system's computer processor. In this embodiment, the functions of the computer processor performed by the computer 2407 described above may be performed by a processor of the multi-process interactive system and/or a processor coupled to the multi-process interactive system (FIG. 1C). The gesture signal can be provided or transmitted to the pool of the multi-process interactive system (pool Ui, Fig. 1C). Accordingly, the multi-process interactive system uses gesture signals to generate commands for controlling one or more components coupled to the multi-process interactive system (eg, a display cursor, etc.).
虽然系统示出为用单个用户的手作为输入,但可以使用多个用户来实现SOE。此外,代替手或除了手之外,系统可以跟踪用户的身体的任意一个或多个部分,包括头、脚、腿、臂、肘、膝等。Although the system is shown with a single user's hand as input, multiple users can be used to implement SOE. Furthermore, instead of or in addition to hands, the system may track any one or more parts of the user's body, including head, feet, legs, arms, elbows, knees, and the like.
在所示实施例中,四个相机或传感器用于在浏览区域2450中检测用户的手2401和2402的位置、方向、和移动。应理解,在不脱离SOE的范围和精神的情况下,SOE可以包括更多(例如六个相机、八个相机等)或更少(例如两个相机)相机或传感器。此外,虽然在示例实施例中对称地布置相机或传感器,但对于SOE中的这种对称性没有要求。在SOE中可以使用允许用户的手的位置、方向和移动的任何数量的相机或传感器或相机或传感器的定位。In the illustrated embodiment, four cameras or sensors are used to detect the position, orientation, and movement of the user's hands 2401 and 2402 in the viewing area 2450 . It should be understood that an SOE may include more (eg, six cameras, eight cameras, etc.) or fewer (eg, two cameras) cameras or sensors without departing from the scope and spirit of the SOE. Furthermore, although the cameras or sensors are arranged symmetrically in example embodiments, there is no requirement for such symmetry in the SOE. Any number of cameras or sensors or positioning of cameras or sensors that allow for the position, orientation and movement of the user's hand may be used in the SOE.
在一个实施例中,使用的相机是能够捕获灰度图像的运动捕获相机。在一个实施例中,使用的相机是Vicon制造的相机(例如Vicon MX40相机)。该相机包括相机上处理,并且能够以每秒1000帧来进行图像捕获。运动捕获相机能够检测并且定位标记。In one embodiment, the camera used is a motion capture camera capable of capturing grayscale images. In one embodiment, the camera used is a camera manufactured by Vicon (eg, a Vicon MX40 camera). The camera includes on-camera processing and is capable of image capture at 1000 frames per second. Motion capture cameras are able to detect and locate markers.
在描述的实施例中,相机是用于光学检测的传感器。在其它实施例中,相机或其它检测器可以用于电磁、静磁、RFID、或任何其它合适类型的检测。In the described embodiment, the camera is a sensor for optical detection. In other embodiments, cameras or other detectors may be used for electromagnetic, magnetostatic, RFID, or any other suitable type of detection.
预处理器2405生成三维空间点重构和骨骼点标注。姿态转译器2406将3D空间信息和标记运动信息转换为从池Ui(见图1)接收信息的多进程交互系统的组件可以解释的命令语言。在SOE的替换实施例中,预处理器2405和姿态转译器106被集成或组合到单个设备。The preprocessor 2405 generates 3D space point reconstruction and skeleton point annotation. The pose translator 2406 converts the 3D spatial information and marker motion information into a command language that can be interpreted by the components of the multi-process interaction system receiving the information from the pool Ui (see FIG. 1 ). In an alternative embodiment of the SOE, the pre-processor 2405 and gesture translator 106 are integrated or combined into a single device.
图25是根据实施例的使用来自姿态控制系统的输入的多进程交互系统100的操作的流程图2500。操作包括:从姿态数据检测身体进行的姿态2502。经由检测器接收姿态数据。操作包括在处理设备2504上执行多个进程。进程生成包括表示姿态的事件的集合的事件。进程包括空间操作应用程序的可分离的程序执行上下文,但不限于此。每个进程的事件转译为数据胶囊2506。数据胶囊包括发起数据胶囊的进程的状态信息和事件的事件数据的与应用程序无关的表示,但不限于此。数据胶囊被转译为多个池2508。大量进程的进程的集合作为识别进程操作。识别进程在池中识别包括与姿态对应的内容的数据胶囊2510。识别进程从池中检索识别的数据胶囊,并且通过合成识别的数据胶囊的内容以形成姿态信号来从识别的数据胶囊生成姿态信号2512。姿态信号表示姿态。25 is a flowchart 2500 of the operation of the multi-process interaction system 100 using input from a gesture control system, under an embodiment. Operations include detecting 2502 gestures performed by the body from the gesture data. Pose data is received via a detector. Operations include executing a number of processes on the processing device 2504 . The process generates an event that includes a collection of events representing gestures. A process includes, but is not limited to, a separable program execution context for a spatial manipulation application. Events for each process are translated into data capsules 2506 . A data capsule includes, but is not limited to, an application-independent representation of event data for events and state information of the process that initiated the data capsule. The data capsules are translated into pools 2508. A collection of processes of a large number of processes operates as an identifying process. The recognition process identifies a data capsule 2510 in the pool that includes content corresponding to the gesture. The recognition process retrieves the recognized data capsules from the pool and generates a pose signal 2512 from the recognized data capsules by synthesizing the contents of the recognized data capsules to form the pose signal. The attitude signal indicates attitude.
在此描述的实施例包括一种方法,包括:在至少一个处理设备上执行多个进程;将多个进程中的每个进程的事件转译为数据胶囊,将数据胶囊传送到多个池;每个进程作为识别进程操作,识别进程在多个池中识别包括与识别进程的交互功能和识别进程的标识对应的内容中的至少一个的数据胶囊;以及识别进程从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。Embodiments described herein include a method comprising: executing a plurality of processes on at least one processing device; translating events of each of the plurality of processes into data capsules, transmitting the data capsules to a plurality of pools; a process operating as a recognition process that identifies, in a plurality of pools, a data capsule comprising at least one of content corresponding to an interactive function of the recognition process and an identification of the recognition process; and the recognition process retrieves the recognized data from the plurality of pools capsule, and perform appropriate processing on the contents of the identified data capsule.
实施例的数据胶囊包括发起数据消息的进程的状态信息和事件的事件数据的与应用程序无关的表示。The data capsule of an embodiment includes an application-independent representation of the state information of the process originating the data message and the event data of the event.
实施例的方法包括:使用数据胶囊和多个池通过协调多个进程中的每个进程的操作从多个进程形成交互应用程序。The method of an embodiment includes forming an interactive application from the plurality of processes by coordinating the operation of each of the plurality of processes using the data capsule and the plurality of pools.
实施例的方法包括:使用数据胶囊和多个池中的至少一个来协调多个进程的操作。The method of an embodiment includes coordinating operations of the plurality of processes using at least one of the data capsule and the plurality of pools.
实施例的方法包括:将应用程序划分为进程的集合,其中,多个进程包括进程的集合。The method of an embodiment includes: dividing an application program into a set of processes, wherein the plurality of processes includes a set of processes.
实施例的方法包括通过交互地处理多个池中的至少一个池的多个检索的数据胶囊来生成输出的进程。The method of an embodiment includes the process of generating an output by interactively processing a plurality of retrieved data capsules of at least one of the plurality of pools.
实施例的多个进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程。The multiple processes of an embodiment comprise separable program execution contexts of multiple application programs, wherein each application program comprises at least one process.
实施例的方法包括:并行执行多个进程。The method of an embodiment includes: executing multiple processes in parallel.
实施例的方法包括:并行执行进程的第一集合,并且顺序执行进程的第二集合,其中,多个进程包括进程的第一集合和进程的第二集合。The method of an embodiment includes executing a first set of processes in parallel and executing a second set of processes sequentially, wherein the plurality of processes includes the first set of processes and the second set of processes.
实施例的事件表示进程输入。An event of an embodiment represents process input.
实施例的事件表示进程输出。An event of an embodiment represents process output.
实施例的事件包括用户接口事件。The events of an embodiment include user interface events.
实施例的事件包括图形事件。The events of an embodiment include graphics events.
实施例的事件表示进程状态。An event of an embodiment represents a process state.
实施例的进程的状态表示进程的交互功能,其中,进程的交互功能作为数据胶囊的内容暴露于多个进程。The state of the process of the embodiment represents the interactive function of the process, wherein the interactive function of the process is exposed to multiple processes as the content of the data capsule.
实施例的方法包括:通过数据胶囊的内容来定义多个进程的应用程序编程接口(API),而不是通过功能调用来定义该API。The method of an embodiment includes: defining an application programming interface (API) of a plurality of processes through the content of the data capsule, rather than defining the API through function calls.
实施例的数据胶囊的内容与应用程序无关并且可由多个进程识别。The content of the data capsule of an embodiment is application independent and identifiable by multiple processes.
实施例的至少一个处理设备包括多个处理设备。The at least one processing device of an embodiment comprises a plurality of processing devices.
实施例的多个进程中的至少一个进程的第一集合在多个处理设备中的至少一个处理设备的第一集合下运行,多个进程中的至少一个进程的第二集合在多个处理设备中的至少一个处理设备的第二集合下运行。A first set of at least one process in the plurality of processes of the embodiment runs under the first set of at least one processing device in the plurality of processing devices, and a second set of at least one process in the plurality of processes runs on the plurality of processing devices The at least one processing device in the second set operates.
实施例的多个进程包括第一进程。The plurality of processes of an embodiment includes a first process.
实施例的转译包括:将第一进程的事件变换为包括指定事件的第一进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming an event of the first process into at least one data sequence comprising first process event data specifying the event and state information of the event.
实施例的第一进程事件数据和状态信息是具有与第一进程的应用程序对应的类型的类型特定的数据。The first process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the first process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,该数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure including an application-independent representation of the at least one data sequence.
实施例的多个进程包括第二进程。The plurality of processes of an embodiment includes a second process.
实施例的转译包括:将第二进程的状态改变事件变换为包括指定事件的第二进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming the state change event of the second process into at least one data sequence comprising second process event data specifying the event and state information of the event.
实施例的第二进程事件数据和状态信息是具有与第二进程的应用程序对应的类型的类型特定的数据。The second process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the second process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,该数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure including an application-independent representation of the at least one data sequence.
实施例的识别进程是第二进程,检索包括:从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理的第二进程。The identification process of an embodiment is a second process, and the retrieval includes retrieving the identified data capsules from the plurality of pools and performing the second process of processing appropriate to the contents of the identified data capsules.
实施例的识别的数据胶囊的内容是表示第一进程的状态信息的数据。The content of the identified data capsule of an embodiment is data representing state information of the first process.
实施例的转译包括:将识别的数据胶囊的内容变换为至少一个新的数据序列,该至少一个新的数据序列表示第一进程的事件和第二进程的事件中的至少一个。The translating of an embodiment includes transforming the content of the identified data capsule into at least one new data sequence representing at least one of an event of the first process and an event of the second process.
实施例的至少一个新的数据序列包括第一进程和第二进程中的至少一个进程的状态信息和指定事件的事件数据。The at least one new data sequence of an embodiment includes state information of at least one of the first process and the second process and event data specifying an event.
实施例的第一进程和第二进程中的至少一个进程的事件数据和状态信息是具有与第一进程和第二进程中的至少一个进程的应用程序对应的类型的类型特定的数据。The event data and state information of at least one of the first process and the second process of an embodiment are type-specific data having a type corresponding to an application program of the at least one of the first process and the second process.
实施例的转译包括:将数据胶囊形成为包括至少一个新的数据序列,该数据胶囊具有包括至少一个新的数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one new data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one new data sequence.
实施例的多个进程使用至少一个新的数据序列。Processes of an embodiment use at least one new data sequence.
实施例的对识别的数据胶囊的内容适当的处理包括:渲染图形对象,其中,在至少一个处理设备的显示器上渲染图形对象。Proper processing of the content of the identified data capsule of an embodiment includes rendering the graphical object, wherein the graphical object is rendered on a display of the at least one processing device.
实施例的渲染包括直接渲染,其中多个进程直接绘制到至少一个处理设备的图形层,其中,多个池用于对于渲染适当地在多个进程之间的协调。The rendering of an embodiment includes direct rendering, wherein multiple processes draw directly to a graphics layer of at least one processing device, wherein multiple pools are used for coordination among the multiple processes as appropriate for rendering.
实施例的渲染包括:将包括渲染命令的数据胶囊传送到多个池的多个进程。实施例的渲染包括:从多个池检索渲染命令,解释渲染命令,并且响应于渲染命令驱动至少一个处理设备的图形层的多个进程。The rendering of an embodiment includes transferring a data capsule comprising rendering commands to a plurality of processes of a plurality of pools. The rendering of an embodiment includes retrieving rendering commands from a plurality of pools, interpreting the rendering commands, and driving a plurality of processes of a graphics layer of at least one processing device in response to the rendering commands.
实施例的渲染包括:渲染到像素缓冲器的多个进程。实施例的渲染包括:将原始帧数据传送到多个池的多个进程,所述原始帧数据由到像素缓冲器的渲染而产生。实施例的渲染包括:从多个池中检索原始帧数据,并且组合所述原始帧数据,以在驱动至少一个处理设备的图形层中使用的多个进程。The rendering of an embodiment includes multiple processes rendering to pixel buffers. The rendering of an embodiment includes: a plurality of processes passing raw frame data resulting from rendering to a pixel buffer to a plurality of pools. The rendering of an embodiment includes retrieving raw frame data from a plurality of pools and combining said raw frame data for use in a plurality of processes driving a graphics layer of at least one processing device.
实施例的方法包括:检测多个进程的事件。实施例的方法包括:生成包括指定事件的事件数据和事件的状态信息的至少一个数据序列,其中,所述事件数据和状态信息是具有与至少一个处理设备的应用程序对应的类型的类型特定的数据。实施例的方法包括:将数据胶囊形成为包括至少一个数据序列,该数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The method of an embodiment includes detecting events of a plurality of processes. The method of an embodiment includes generating at least one data sequence comprising event data for a specified event and state information for the event, wherein the event data and state information are type-specific with a type corresponding to an application program of at least one processing device data. The method of an embodiment comprises forming a data capsule comprising at least one data sequence, the data capsule having a data structure comprising an application-independent representation of the at least one data sequence.
实施例的生成至少一个数据序列包括:生成包括第一各自事件数据的第一各自数据集。实施例的生成至少一个数据序列包括:生成包括第二各自状态信息的第二各自数据集。实施例的生成至少一个数据序列包括:将第一数据序列形成为包括第一各自数据集和第二各自数据集。The generating at least one data sequence of an embodiment comprises generating a first respective data set comprising first respective event data. The generating of at least one data sequence of an embodiment comprises generating a second respective data set comprising second respective state information. The generating of the at least one data sequence of an embodiment comprises forming the first data sequence to include a first respective data set and a second respective data set.
实施例的生成第一各自数据集包括:将第一各自数据集形成为包括至少一个处理设备的标识数据,该标识数据包括标识至少一个处理设备的数据。Generating the first respective data set of an embodiment comprises forming the first respective data set to include identification data of the at least one processing device, the identification data comprising data identifying the at least one processing device.
实施例的生成至少一个数据序列包括:生成包括第一各自事件数据的第一各自数据集。实施例的生成至少一个数据序列包括:生成包括第二各自状态信息的第二各自数据集。实施例的生成至少一个数据序列包括:将第二数据序列形成为包括第一各自数据集和第二各自数据集。The generating at least one data sequence of an embodiment comprises generating a first respective data set comprising first respective event data. The generating of at least one data sequence of an embodiment comprises generating a second respective data set comprising second respective state information. The generating of the at least one data sequence of an embodiment comprises forming the second data sequence to include the first respective data set and the second respective data set.
实施例的生成第一各自数据集包括:生成第一各自数据集偏移,其中,该第一各自数据集偏移指向第二数据序列的第一各自数据集。The generating the first respective data set of an embodiment comprises: generating the first respective data set offset, wherein the first respective data set offset points to the first respective data set of the second data sequence.
实施例的生成第二各自数据集包括:生成第二各自数据集偏移,其中,该第二各自数据集偏移指向第二数据序列的第二各自数据集。The generating of the second respective data set of an embodiment comprises: generating a second respective data set offset, wherein the second respective data set offset points to a second respective data set of the second data sequence.
实施例的第一各自数据集是描述链表,该描述链表包括数据的描述。The first respective data set of an embodiment is a description list that includes a description of the data.
实施例的事件数据是表示类型化的数据的标签化的字节序列。The event data of an embodiment is a tagged sequence of bytes representing typed data.
实施例的事件数据包括类型头部和类型特定的数据布局。The event data of an embodiment includes a type header and a type-specific data layout.
实施例的状态信息是表示类型化的数据的标签化的字节序列。The state information of an embodiment is a tagged sequence of bytes representing typed data.
实施例的状态信息包括类型头部和类型特定的数据布局。The state information of an embodiment includes a type header and a type-specific data layout.
实施例的方法包括:生成至少一个偏移。实施例的方法包括:将数据胶囊形成为包括至少一个偏移。The method of an embodiment includes generating at least one offset. The method of an embodiment includes forming the data capsule to include at least one offset.
实施例的方法包括:生成具有第一可变长度的第一偏移,其中,该第一偏移指向至少一个数据序列中的第一数据序列的事件数据。The method of an embodiment includes generating a first offset having a first variable length, wherein the first offset points to event data of a first data sequence of the at least one data sequence.
实施例的方法包括:生成具有第二可变长度的第二偏移,其中,该第二偏移指向至少一个数据序列中的第一数据序列的状态信息。The method of an embodiment includes: generating a second offset having a second variable length, wherein the second offset points to state information of a first data sequence in the at least one data sequence.
实施例的方法包括:使用至少一个偏移中的第一偏移通过数据胶囊形成第一代码路径。实施例的方法包括:使用至少一个偏移中的第二偏移通过数据胶囊形成第二代码路径,其中,第一代码路径和第二代码路径是不同的路径。The method of an embodiment includes forming a first code path through the data capsule using a first offset of the at least one offset. The method of an embodiment includes forming a second code path through the data capsule using a second offset of the at least one offset, wherein the first code path and the second code path are different paths.
实施例的第一偏移和第二偏移中的至少一个包括元数据,该元数据包括与应用程序的上下文对应的上下文特定元数据。At least one of the first offset and the second offset of an embodiment includes metadata including context specific metadata corresponding to a context of the application.
实施例的方法包括:生成包括数据胶囊的长度的头部。实施例的方法包括:将该数据胶囊形成为包括该头部。The method of an embodiment includes generating a header including a length of the data capsule. The method of an embodiment includes forming the data capsule to include the header.
实施例的方法包括:将数据胶囊传送到多个池中的池。The method of an embodiment includes transmitting the data capsule to a pool of the plurality of pools.
实施例的方法包括:检测至少一个处理设备的第二事件。实施例的方法包括:在多个池中搜索与第二事件对应的数据胶囊。The method of an embodiment includes detecting a second event of at least one processing device. The method of an embodiment includes searching the plurality of pools for a data capsule corresponding to the second event.
实施例的方法包括:识别数据胶囊与第二事件之间的对应性。实施例的方法包括:响应于识别从池中提取数据胶囊。实施例的方法包括:响应于数据胶囊的内容,代表至少一个处理设备执行与第二事件对应的处理操作,其中,该至少一个处理设备与第一类型的应用程序以及第二类型的第二应用程序对应。The method of an embodiment includes identifying a correspondence between the data capsule and the second event. The method of an embodiment includes extracting a data capsule from the pool in response to identifying. The method of an embodiment includes: in response to the content of the data capsule, performing a processing operation corresponding to the second event on behalf of at least one processing device, wherein the at least one processing device is associated with the application program of the first type and the second application program of the second type Program correspondence.
实施例的多个池耦合到多个应用程序,多个池包括与多个应用程序对应的多个数据胶囊,多个池提供通过多个应用程序对多个数据胶囊的访问,其中,多个应用程序中的至少两个应用程序是不同的应用程序。The plurality of pools of an embodiment is coupled to a plurality of applications, the plurality of pools includes a plurality of data capsules corresponding to the plurality of applications, the plurality of pools provides access to the plurality of data capsules through the plurality of applications, wherein the plurality of At least two of the applications are different applications.
实施例的多个池提供多个数据胶囊的状态缓存。The multiple pools of an embodiment provide a stateful cache of multiple data capsules.
实施例的多个池提供多个数据胶囊的线性排序。The multiple pools of an embodiment provide a linear ordering of multiple data capsules.
实施例的数据结构是非类型化的。The data structures of an embodiment are untyped.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的表示。The data structure of the data capsule of an embodiment provides a platform-independent representation of event data and state information.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的访问。The data structure of the data capsule of an embodiment provides platform-independent access to event data and state information.
实施例的传送包括:将数据胶囊从具有第一应用程序类型的第一应用程序传送到具有至少一个第二应用程序类型的至少一个第二应用程序,其中,第一应用程序类型与第二应用程序类型不同,其中,生成至少一个数据序列由第一应用程序来执行,所述方法包括:在传送期间保持数据胶囊的至少一个数据序列完好。The transferring of an embodiment includes transferring the data capsule from a first application having a first application type to at least one second application having at least one second application type, wherein the first application type is the same as the second application Depending on the type of program, wherein generating the at least one data sequence is performed by a first application, the method includes keeping intact the at least one data sequence of the data capsule during the transfer.
实施例的方法包括:在第二应用程序的操作期间使用至少一个数据序列。The method of an embodiment includes using at least one sequence of data during operation of the second application.
实施例的方法包括:生成包括至少一个处理设备的源设备的事件数据和标识数据的第一数据集合,设备事件数据包括指定源设备登记的事件的数据,标识数据包括标识源设备的数据。The method of an embodiment includes generating a first data set comprising event data for a source device of at least one processing device, the device event data including data specifying events registered by the source device, and identification data including data identifying the source device.
实施例的方法包括:生成包括事件的状态信息的完全集合的第二数据集,其中,第一数据集和第二数据集中的每一个包括类型特定的数据布局中的类型化的数据束。The method of an embodiment includes generating a second data set comprising the complete set of state information for the event, wherein each of the first data set and the second data set comprises a typed data bundle in a type-specific data layout.
实施例的转译包括:通过将数据胶囊形成为包括第一数据集和第二数据集来封装第一数据集和第二数据集,其中,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes encapsulating the first data set and the second data set by forming a data capsule to include the first data set and the second data set, wherein the data capsule has an application-independent Represented data structure.
实施例的方法包括:检测在第一类型的应用程序下运行的第一处理设备的事件。实施例的方法包括:生成包括第一处理设备的事件数据的数据序列,事件数据指定事件和事件的状态信息,其中,事件数据和状态信息是具有与应用程序对应的类型的类型特定的数据。实施例的方法包括:将数据胶囊形成为包括数据序列,数据胶囊具有包括数据序列的与应用程序无关的表示的数据结构。实施例的方法包括:检测在具有至少一个第二类型的至少一个第二应用程序下运行的第二处理设备的第二事件,其中,第二类型与第一类型不同,其中,至少一个处理设备包括第一处理设备和第二处理设备。实施例的方法包括:识别数据胶囊与第二事件之间的对应性。实施例的方法包括:使用数据胶囊的数据序列的内容、响应于第二事件执行操作。The method of an embodiment includes detecting an event of a first processing device running under an application of a first type. The method of an embodiment includes generating a data sequence comprising event data of the first processing device, the event data specifying the event and state information for the event, wherein the event data and state information are type-specific data having a type corresponding to the application. The method of an embodiment includes forming a data capsule to include a data sequence, the data capsule having a data structure including an application-independent representation of the data sequence. The method of an embodiment comprises: detecting a second event of a second processing device running under at least one second application of at least one second type, wherein the second type is different from the first type, wherein the at least one processing device A first processing device and a second processing device are included. The method of an embodiment includes identifying a correspondence between the data capsule and the second event. The method of an embodiment comprises: using the contents of the data sequence of the data capsule, performing the operation in response to the second event.
实施例的生成数据序列包括:生成包括事件数据的第一数据集。实施例的生成数据序列包括:生成包括状态信息的第二数据集。实施例的生成数据序列包括:将第一数据序列形成为包括第一数据集和第二数据集。Generating the data sequence of an embodiment includes generating a first data set comprising event data. Generating the data sequence of an embodiment includes generating a second data set including state information. Generating the data sequence of an embodiment includes forming the first data sequence to include the first data set and the second data set.
实施例的事件数据是表示类型化的数据的标签化的字节序列。The event data of an embodiment is a tagged sequence of bytes representing typed data.
实施例的事件数据包括类型头部和类型特定的数据布局。The event data of an embodiment includes a type header and a type-specific data layout.
实施例的状态信息是表示类型化的数据的标签化的字节序列。The state information of an embodiment is a tagged sequence of bytes representing typed data.
实施例的状态信息包括类型头和类型特定数据布局。The state information of an embodiment includes a type header and a type-specific data layout.
实施例的方法包括:生成至少一个偏移。实施例的方法包括:将数据胶囊形成为包括至少一个偏移。The method of an embodiment includes generating at least one offset. The method of an embodiment includes forming the data capsule to include at least one offset.
实施例的方法包括:生成具有第一可变长度的第一偏移,其中,第一偏移指向至少一个数据序列中的第一数据序列的事件数据。实施例的方法包括:生成具有第二可变长度的第二偏移,其中,第二偏移指向至少一个数据序列中的第一数据序列的状态信息。The method of an embodiment includes generating a first offset having a first variable length, wherein the first offset points to event data of a first data sequence of the at least one data sequence. The method of an embodiment includes: generating a second offset having a second variable length, wherein the second offset points to state information of a first data sequence in the at least one data sequence.
实施例的方法包括:使用至少一个偏移中的第一偏移通过数据胶囊形成第一代码路径。实施例的方法包括:使用至少一个偏移中的第二偏移通过数据胶囊形成第二代码路径,其中,第一代码路径和第二代码路径是不同的路径。The method of an embodiment includes forming a first code path through the data capsule using a first offset of the at least one offset. The method of an embodiment includes forming a second code path through the data capsule using a second offset of the at least one offset, wherein the first code path and the second code path are different paths.
实施例的第一偏移和第二偏移中的至少一个包括元数据,元数据包括与应用程序的上下文对应的上下文特定元数据。At least one of the first offset and the second offset of an embodiment includes metadata including context specific metadata corresponding to a context of the application.
实施例的方法包括:将数据胶囊传送到多个池中的池。The method of an embodiment includes transmitting the data capsule to a pool of the plurality of pools.
实施例的方法包括:在多个池中搜索与第二事件对应的数据胶囊。实施例的方法包括:响应于对应性的识别从池中提取数据胶囊。The method of an embodiment includes searching the plurality of pools for a data capsule corresponding to the second event. The method of an embodiment includes extracting a data capsule from the pool in response to identifying the correspondence.
实施例的多个池耦合到应用程序和至少一个第二应用程序,多个池包括与应用程序和至少一个第二应用程序对应的多个数据胶囊,多个池提供通过应用程序和至少一个第二应用程序对多个数据胶囊的访问。The plurality of pools of an embodiment are coupled to the application and at least one second application, the plurality of pools include a plurality of data capsules corresponding to the application and the at least one second application, the plurality of pools provide Two applications have access to multiple data capsules.
实施例的多个池提供多个数据胶囊的状态缓存。The multiple pools of an embodiment provide a stateful cache of multiple data capsules.
实施例的多个池提供多个数据胶囊的线性排序。The multiple pools of an embodiment provide a linear ordering of multiple data capsules.
实施例的数据结构是非类型化的。The data structures of an embodiment are untyped.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的表示。The data structure of the data capsule of an embodiment provides a platform-independent representation of event data and state information.
实施例的数据胶囊的数据结构提供对事件数据和状态信息的与平台无关的访问。The data structure of the data capsule of an embodiment provides platform-independent access to event data and state information.
在此描述的实施例包括一种方法,包括:在处理设备上执行多个进程,多个进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程;将多个进程的每个进程的事件转译为数据消息,其中,数据消息包括发起数据消息的进程的状态信息和事件的事件数据的与应用程序无关的表示;将数据消息传送到多个池中的至少一个池;在进程之间协调,所述协调包括:通过从多个池中检索对等进程的状态信息,多个进程中的每个进程与多个进程中的对等进程进行协调;以及通过交互地组合多个池中的至少一个池的数据消息的集合来生成多个进程的输出。Embodiments described herein include a method comprising: executing a plurality of processes on a processing device, the plurality of processes including separable program execution contexts of a plurality of application programs, wherein each application program includes at least one process; events for each of the plurality of processes are translated into data messages, where the data messages include state information for the process originating the data message and an application-independent representation of the event data for the event; data messages are delivered to multiple pools at least one pool; coordinating among the processes, the coordinating comprising: each process of the plurality of processes coordinating with a peer process of the plurality of processes by retrieving state information of the peer process from the plurality of pools; and Output of the plurality of processes is generated by interactively combining sets of data messages of at least one of the plurality of pools.
在此描述的实施例包括一种系统,包括:至少一个处理设备,处理设备执行多个进程;以及多个池,耦合到至少一个处理设备;至少一个处理设备将多个进程中的每个进程的事件转译为数据胶囊,并且将数据胶囊传送到多个池;多个进程的每个进程作为识别进程操作,识别进程在多个池中识别包括与识别进程的交互功能和识别进程的标识对应的内容中的至少一个的数据胶囊;识别进程从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。Embodiments described herein include a system comprising: at least one processing device that executes a plurality of processes; and a plurality of pools coupled to the at least one processing device; The events of are translated into data capsules, and the data capsules are transmitted to multiple pools; each process of the multiple processes operates as a recognition process, and the recognition process in the multiple pools includes corresponding to the interaction function of the recognition process and the identity of the recognition process a data capsule of at least one of the contents of the identified data capsules; the identification process retrieves the identified data capsules from the plurality of pools, and performs processing appropriate to the contents of the identified data capsules.
在此描述的实施例包括一种方法,包括:在至少一个处理设备上执行多个进程,多个进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程;将多个进程中的每个进程的事件转译为数据胶囊,其中,数据胶囊包括发起数据胶囊的进程的状态信息和事件的事件数据的与应用程序无关的表示;将数据胶囊传送到多个池;每个进程作为识别进程操作,识别进程在多个池中识别包括与识别进程的交互功能和识别进程的标识对应的内容中的至少一个的数据胶囊;以及识别进程从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。Embodiments described herein include a method comprising: executing a plurality of processes on at least one processing device, the plurality of processes comprising separable program execution contexts of a plurality of applications, wherein each application comprises at least one process ; Translate events for each of the multiple processes into data capsules, where the data capsules include state information for the process that originated the data capsule and an application-independent representation of the event data for the event; deliver the data capsule to multiple a pool; each process operates as a recognition process, the recognition process identifies in a plurality of pools a data capsule comprising at least one of content corresponding to an interaction function of the recognition process and an identification of the recognition process; and the recognition process retrieves from the plurality of pools The identified data capsule is identified, and appropriate processing is performed on the contents of the identified data capsule.
实施例的方法包括:使用数据胶囊和多个池通过协调多个进程中的每个进程的操作从多个进程形成交互应用程序。The method of an embodiment includes forming an interactive application from the plurality of processes by coordinating the operation of each of the plurality of processes using the data capsule and the plurality of pools.
实施例的方法包括:使用数据胶囊和多个池中的至少一个来协调多个进程的操作。The method of an embodiment includes coordinating operations of the plurality of processes using at least one of the data capsule and the plurality of pools.
实施例的方法包括:将应用程序划分为进程的集合,其中,多个进程包括进程的集合。The method of an embodiment includes: dividing an application program into a set of processes, wherein the plurality of processes includes a set of processes.
实施例的方法包括进程通过交互地处理多个池中的至少一个池的多个检索的数据胶囊来生成输出。The method of an embodiment includes the process of generating an output by interactively processing a plurality of retrieved data capsules of at least one of the plurality of pools.
实施例的方法包括:并行执行多个进程。The method of an embodiment includes: executing multiple processes in parallel.
实施例的方法包括:并行执行进程的第一集合,并且顺序执行进程的第二集合,其中,多个进程包括进程的第一集合和进程的第二集合。The method of an embodiment includes executing a first set of processes in parallel and executing a second set of processes sequentially, wherein the plurality of processes includes the first set of processes and the second set of processes.
实施例的事件表示进程输入。An event of an embodiment represents process input.
实施例的事件表示进程输出。An event of an embodiment represents process output.
实施例的事件包括用户接口事件。The events of an embodiment include user interface events.
实施例的事件包括图形事件。The events of an embodiment include graphics events.
实施例的事件表示进程状态。An event of an embodiment represents a process state.
实施例的进程的状态表示进程的交互功能,其中,进程的交互功能作为数据胶囊的内容暴露于多个进程。The state of the process of the embodiment represents the interactive function of the process, wherein the interactive function of the process is exposed to multiple processes as the content of the data capsule.
实施例的方法包括:通过数据胶囊的内容来定义多个进程的应用程序编程接口API,而不是通过功能调用来定义该API。The method of the embodiment includes: defining the application programming interface APIs of multiple processes through the contents of the data capsules instead of defining the APIs through function calls.
实施例的数据胶囊的内容是与应用程序无关的并且可由多个进程识别。The content of the data capsule of an embodiment is application-independent and recognizable by multiple processes.
实施例的至少一个处理设备包括多个处理设备。The at least one processing device of an embodiment comprises a plurality of processing devices.
实施例的多个进程中的至少一个进程的第一集合在多个处理设备中的至少一个处理设备的第一集合下运行,多个进程中的至少一个进程的第二集合在多个处理设备中的至少一个处理设备的第二集合下运行。A first set of at least one process in the plurality of processes of the embodiment runs under the first set of at least one processing device in the plurality of processing devices, and a second set of at least one process in the plurality of processes runs on the plurality of processing devices The at least one processing device in the second set operates.
实施例的多个进程包括第一进程。The plurality of processes of an embodiment includes a first process.
实施例的转译包括:将第一进程的事件变换为包括指定事件的第一进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming an event of the first process into at least one data sequence comprising first process event data specifying the event and state information of the event.
实施例的第一进程事件数据和状态信息是具有与第一进程的应用程序对应的类型的类型特定的数据。The first process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the first process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的多个进程包括第二进程。The plurality of processes of an embodiment includes a second process.
实施例的转译包括:将第二进程的状态改变事件变换为包括指定事件的第二进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming the state change event of the second process into at least one data sequence comprising second process event data specifying the event and state information of the event.
实施例的第二进程事件数据和状态信息是具有与第二进程的应用程序对应的类型的类型特定的数据。The second process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the second process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的识别进程是第二进程,检索包括:从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理的第二进程。The identification process of an embodiment is a second process, and the retrieval includes retrieving the identified data capsules from the plurality of pools and performing the second process of processing appropriate to the contents of the identified data capsules.
实施例的识别的数据胶囊的内容是表示第一进程的状态信息的数据。The content of the identified data capsule of an embodiment is data representing state information of the first process.
实施例的转译包括:将识别的数据胶囊的内容变换为至少一个新的数据序列,至少一个新的数据序列表示第一进程的事件和第二进程的事件中的至少一个。The translating of an embodiment includes transforming the content of the identified data capsule into at least one new data sequence representing at least one of an event of the first process and an event of the second process.
实施例的至少一个新的数据序列包括第一进程和第二进程中的至少一个进程的状态信息和指定事件的事件数据。The at least one new data sequence of an embodiment includes state information of at least one of the first process and the second process and event data specifying an event.
实施例的第一进程和第二进程中的至少一个进程的事件数据和状态信息是具有与第一进程和第二进程中的至少一个进程的应用程序对应的类型的类型特定的数据。The event data and state information of at least one of the first process and the second process of an embodiment are type-specific data having a type corresponding to an application program of the at least one of the first process and the second process.
实施例的转译包括:将数据胶囊形成为包括至少一个新的数据序列,数据胶囊具有包括至少一个新的数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one new data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one new data sequence.
实施例的多个进程使用至少一个新的数据序列。Processes of an embodiment use at least one new data sequence.
实施例的多个进程包括输入进程,输入进程从输入设备接收输入事件。The processes of an embodiment include an input process that receives input events from input devices.
实施例的转译包括:将输入设备的输入事件变换为包括指定事件的输入设备事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming an input event of the input device into at least one data sequence including input device event data specifying the event and state information of the event.
实施例的输入设备事件数据和状态信息是具有与源设备的应用程序对应的类型的类型特定的数据。The input device event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the source device.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的多个进程包括指针进程。The plurality of processes of an embodiment include pointer processes.
实施例的识别进程是指针进程,检索包括:从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理的指针进程。The identification process of an embodiment is a pointer process, and the retrieval includes a pointer process that retrieves the identified data capsules from a plurality of pools and performs appropriate processing on the contents of the identified data capsules.
实施例的识别的数据胶囊的内容是表示来自输入进程的输入事件的数据。The content of the identified data capsule of an embodiment is data representing input events from the input process.
实施例的识别的数据胶囊的内容是表示显示器上的至少一个处理设备的用户正指令指针对象的位置的数据。The content of the identified data capsule of an embodiment is data representing a position on the display at which a user of the at least one processing device is commanding a pointer object.
实施例的转译包括:将识别的数据胶囊的内容变换为至少一个新的数据序列,至少一个新的数据序列指针对象关于显示器定义的位置。The translating of an embodiment includes transforming the content of the identified data capsule into at least one new data sequence, the at least one new data sequence pointing to a defined position of the object with respect to the display.
实施例的至少一个新的数据序列包括指定事件的指针进程事件数据和指针进程事件的状态信息。The at least one new data sequence of an embodiment includes pointer progress event data and pointer progress event status information for a given event.
实施例的指针进程事件数据和状态信息是具有与指针进程的应用程序对应的类型的类型特定的数据。The pointer process event data and state information of an embodiment are type-specific data having a type corresponding to the application of the pointer process.
实施例的转译包括:将数据胶囊形成为包括至少一个新的数据序列,数据胶囊具有包括至少一个新的数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one new data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one new data sequence.
实施例的多个进程使用至少一个新的数据序列在显示器上渲染指针对象。The processes of an embodiment render the pointer object on the display using the at least one new data sequence.
实施例的多个进程包括图形进程。The plurality of processes of an embodiment includes a graphics process.
实施例的转译包括:将图形进程的状态改变事件变换为包括指定事件的图形进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming a state change event of a graphics process into at least one data sequence including graphics process event data specifying the event and state information of the event.
实施例的图形进程事件数据和状态信息是具有与图形进程的应用程序对应的类型的类型特定数据。The graphics process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the graphics process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的识别进程是图形进程,检索包括:从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理的图形进程。The identification process of an embodiment is a graph process, and the retrieval includes retrieving the identified data capsules from a plurality of pools and performing appropriate processing on the contents of the identified data capsules.
实施例的识别的数据胶囊的内容是表示多个进程中的另一进程的状态信息的数据。The content of the identified data capsule of an embodiment is data representing state information of another process of the plurality of processes.
实施例的状态信息包括空间状态和模式状态中的至少一个的信息。The status information of an embodiment includes information of at least one of a space status and a mode status.
实施例的识别的数据胶囊的内容是表示显示器上的至少一个处理设备的用户正指令指针对象的位置的数据。The content of the identified data capsule of an embodiment is data representing a position on the display at which a user of the at least one processing device is commanding a pointer object.
实施例的指针对象的位置在图形对象的边界内,其中,图形对象由图形进程渲染。The position of the pointer object of an embodiment is within the bounds of the graphics object, wherein the graphics object is rendered by the graphics process.
实施例的转译包括:将识别的数据胶囊的内容变换为至少一个新的数据序列,至少一个新的数据序列表示图形对象、指针对象、指针对象与边界的交叠部分中的至少一个。The translating of an embodiment includes transforming the content of the identified data capsule into at least one new data sequence, the at least one new data sequence representing at least one of a graphic object, a pointer object, an overlapping portion of a pointer object and a boundary.
实施例的至少一个新的数据序列包括指定事件的图形进程事件数据图形进程事件的状态信息。The at least one new data sequence of an embodiment includes graphics process event data specifying event status information for the graphics process event.
实施例的图形进程事件数据和状态信息是具有与图形进程的应用程序对应的类型的类型特定的数据。The graphics process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the graphics process.
实施例的转译包括:将数据胶囊形成为包括至少一个新的数据序列,数据胶囊具有包括至少一个新的数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one new data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one new data sequence.
实施例的多个进程使用至少一个新的数据序列在显示器上渲染图形对象和指针对象中的至少一个。The processes of an embodiment render at least one of the graphics object and the pointer object on the display using the at least one new data sequence.
实施例的对识别的数据胶囊的内容适当的处理包括:渲染图形对象,其中,图形对象渲染在至少一个处理设备的显示器上。Appropriate processing of the content of the identified data capsule of an embodiment includes rendering a graphical object, wherein the graphical object is rendered on a display of at least one processing device.
实施例的渲染包括:直接渲染,其中多个进程直接绘制到至少一个处理设备的图形层,其中,多个池用于对于渲染适当地在多个进程之间的协调。The rendering of an embodiment includes direct rendering, wherein multiple processes draw directly to a graphics layer of at least one processing device, wherein multiple pools are used for coordination among the multiple processes as appropriate for rendering.
实施例的渲染包括:将包括渲染命令的数据胶囊传送到多个池的多个进程。实施例的渲染包括:从多个池检索渲染命令,解释渲染命令,并且响应于渲染命令驱动至少一个处理设备的图形层的多个进程。The rendering of an embodiment includes transferring a data capsule comprising rendering commands to a plurality of processes of a plurality of pools. The rendering of an embodiment includes retrieving rendering commands from a plurality of pools, interpreting the rendering commands, and driving a plurality of processes of a graphics layer of at least one processing device in response to the rendering commands.
实施例的渲染包括渲染到像素缓冲器的多个进程。实施例的渲染包括将原始帧数据传送到多个池的多个进程,原始帧数据由到像素缓冲器的渲染而产生。实施例的渲染包括从多个池中检索原始帧数据,并且组合原始帧数据,以在驱动至少一个处理设备的图形层中使用的多个进程。The rendering of an embodiment includes multiple processes rendering to pixel buffers. The rendering of an embodiment includes a plurality of processes that transfer raw frame data resulting from rendering to a pixel buffer to a plurality of pools. The rendering of an embodiment includes retrieving raw frame data from a plurality of pools and combining the raw frame data for use in a plurality of processes driving a graphics layer of at least one processing device.
实施例的方法包括:检测多个进程的事件。实施例的方法包括:生成包括指定事件的事件数据和事件的状态信息的至少一个数据序列,其中,事件数据和状态信息是具有与至少一个处理设备的应用程序对应的类型的类型特定的数据。实施例的方法包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The method of an embodiment includes detecting events of a plurality of processes. The method of an embodiment comprises generating at least one data sequence comprising event data specifying an event and state information of the event, wherein the event data and state information are type-specific data having a type corresponding to an application of at least one processing device. The method of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的生成至少一个数据序列包括:生成包括第一各自事件数据的第一各自数据集。实施例的生成至少一个数据序列包括:生成包括第二各自状态信息的第二各自数据集。实施例的生成至少一个数据序列包括:将第一数据序列形成为包括第一各自数据集和第二各自数据集。The generating at least one data sequence of an embodiment comprises generating a first respective data set comprising first respective event data. The generating of at least one data sequence of an embodiment comprises generating a second respective data set comprising second respective state information. The generating of the at least one data sequence of an embodiment comprises forming the first data sequence to include a first respective data set and a second respective data set.
实施例的生成第一各自数据集包括:将第一各自数据集形成为包括至少一个处理设备的标识数据,标识数据包括标识至少一个处理设备的数据。Generating the first respective data set of an embodiment comprises forming the first respective data set to include identification data of the at least one processing device, the identification data comprising data identifying the at least one processing device.
实施例的生成至少一个数据序列包括:生成包括第一各自事件数据的第一各自数据集。实施例的生成至少一个数据序列的包括:生成包括第二各自状态信息的第二各自数据集。实施例的生成至少一个数据序列包括:将第二数据序列形成为包括第一各自数据集和第二各自数据集。The generating at least one data sequence of an embodiment comprises generating a first respective data set comprising first respective event data. The generating of the at least one data sequence of an embodiment comprises: generating a second respective data set comprising second respective state information. The generating of the at least one data sequence of an embodiment comprises forming the second data sequence to include the first respective data set and the second respective data set.
实施例的生成第一各自数据集包括:生成第一各自数据集偏移,其中,第一各自数据集偏移指向第二数据序列的第一各自数据集。The generating the first respective data set of an embodiment comprises: generating the first respective data set offset, wherein the first respective data set offset points to the first respective data set of the second data sequence.
实施例的生成第二各自数据集包括:生成第二各自数据集偏移,其中,第二各自数据集偏移指向第二数据序列的第二各自数据集。The generating the second respective data set of an embodiment comprises: generating the second respective data set offset, wherein the second respective data set offset points to the second respective data set of the second data sequence.
实施例的第一各自数据集是描述链表,描述链表包括数据的描述。The first respective data set of an embodiment is a description link list comprising a description of the data.
实施例的事件数据是表示类型化的数据的标签化的字节序列。The event data of an embodiment is a tagged sequence of bytes representing typed data.
实施例的事件数据包括类型头部和类型特定的数据布局。The event data of an embodiment includes a type header and a type-specific data layout.
实施例的状态信息是表示类型化的数据的标签化的字节序列。The state information of an embodiment is a tagged sequence of bytes representing typed data.
实施例的状态信息包括类型头部和类型特定的数据布局。The state information of an embodiment includes a type header and a type-specific data layout.
实施例的方法包括:生成至少一个偏移。实施例的方法包括:将数据胶囊形成为包括至少一个偏移。The method of an embodiment includes generating at least one offset. The method of an embodiment includes forming the data capsule to include at least one offset.
实施例的方法包括:生成具有第一可变长度的第一偏移,其中,第一偏移指向至少一个数据序列中的第一数据序列的事件数据。The method of an embodiment includes generating a first offset having a first variable length, wherein the first offset points to event data of a first data sequence of the at least one data sequence.
实施例的方法包括:生成具有第二可变长度的第二偏移,其中,第二偏移指向至少一个数据序列中的第一数据序列的状态信息。The method of an embodiment includes: generating a second offset having a second variable length, wherein the second offset points to state information of a first data sequence in the at least one data sequence.
实施例的方法包括:使用至少一个偏移中的第一偏移通过数据胶囊形成第一代码路径。实施例的方法包括:使用至少一个偏移中的第二偏移通过数据胶囊形成第二代码路径,其中,第一代码路径和第二代码路径是不同的路径。The method of an embodiment includes forming a first code path through the data capsule using a first offset of the at least one offset. The method of an embodiment includes forming a second code path through the data capsule using a second offset of the at least one offset, wherein the first code path and the second code path are different paths.
实施例的第一偏移和第二偏移中的至少一个包括元数据,元数据包括与应用程序的上下文对应的上下文特定元数据。At least one of the first offset and the second offset of an embodiment includes metadata including context specific metadata corresponding to a context of the application.
实施例的方法包括:生成包括数据胶囊的长度的头部。实施例的方法包括:将数据胶囊形成为包括头部。The method of an embodiment includes generating a header including a length of the data capsule. The method of an embodiment includes forming the data capsule to include the header.
实施例的方法包括:将数据胶囊传送到多个池中的池。The method of an embodiment includes transmitting the data capsule to a pool of the plurality of pools.
实施例的方法包括:检测至少一个处理设备的第二事件。实施例的方法包括:在多个池中搜索与第二事件对应的数据胶囊。The method of an embodiment includes detecting a second event of at least one processing device. The method of an embodiment includes searching the plurality of pools for a data capsule corresponding to the second event.
实施例的方法包括:识别数据胶囊与第二事件之间的对应性。The method of an embodiment includes identifying a correspondence between the data capsule and the second event.
实施例的方法包括:响应于识别从池中提取数据胶囊。实施例的方法包括:响应于数据胶囊的内容,代表至少一个处理设备执行与第二事件对应的处理操作,其中,至少一个处理设备与第一类型的应用程序以及第二类型的第二应用程序对应。The method of an embodiment includes extracting a data capsule from the pool in response to identifying. The method of an embodiment includes: in response to content of the data capsule, performing a processing operation corresponding to a second event on behalf of at least one processing device, wherein the at least one processing device is associated with an application of a first type and a second application of a second type correspond.
实施例的多个池耦合到多个应用程序,多个池包括与多个应用程序对应的多个数据胶囊,多个池提供通过多个应用程序对多个数据胶囊的访问,其中,多个应用程序中的至少两个应用程序是不同的应用程序。The plurality of pools of an embodiment is coupled to a plurality of applications, the plurality of pools includes a plurality of data capsules corresponding to the plurality of applications, the plurality of pools provides access to the plurality of data capsules through the plurality of applications, wherein the plurality of At least two of the applications are different applications.
实施例的多个池提供多个数据胶囊的状态缓存。The multiple pools of an embodiment provide a stateful cache of multiple data capsules.
实施例的多个池提供多个数据胶囊的线性排序。The multiple pools of an embodiment provide a linear ordering of multiple data capsules.
实施例的数据结构是非类型化的。The data structures of an embodiment are untyped.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的表示。The data structure of the data capsule of an embodiment provides a platform-independent representation of event data and state information.
实施例的数据胶囊的数据结构提供对事件数据和状态信息的与平台无关的访问。The data structure of the data capsule of an embodiment provides platform-independent access to event data and state information.
传送包括:将数据胶囊从具有第一应用程序类型的第一应用程序传送到具有至少一个第二应用程序类型的至少一个第二应用程序,其中,第一应用程序类型与第二应用程序类型不同,其中,生成至少一个数据序列由第一应用程序来执行,所述方法包括:在传送期间保持数据胶囊的至少一个数据序列完好。Transferring includes transferring a data capsule from a first application of a first application type to at least one second application of at least one second application type, wherein the first application type is different from the second application type , wherein generating the at least one data sequence is performed by a first application, the method comprising: keeping the at least one data sequence of the data capsule intact during transmission.
实施例的方法包括:在第二应用程序的操作期间使用至少一个数据序列。The method of an embodiment includes using at least one sequence of data during operation of the second application.
实施例的方法包括:生成包括至少一个处理设备的源设备的事件数据和标识数据的第一数据集,设备事件数据包括指定源设备登记的事件的数据,标识数据包括标识源设备的数据。The method of an embodiment includes generating a first data set comprising event data for a source device of at least one processing device, the device event data including data specifying events registered by the source device, and identification data including data identifying the source device.
实施例的方法包括:生成包括事件的状态信息的完全集合的第二数据集,其中,第一数据集和第二数据集中的每一个包括类型特定的数据布局中的类型化的数据束。The method of an embodiment includes generating a second data set comprising the complete set of state information for the event, wherein each of the first data set and the second data set comprises a typed data bundle in a type-specific data layout.
实施例的转译包括:通过将数据胶囊形成为包括第一数据集和第二数据集来封装第一数据集和第二数据集,其中,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes encapsulating the first data set and the second data set by forming a data capsule to include the first data set and the second data set, wherein the data capsule has an application-independent Represented data structure.
实施例的方法包括:检测在第一类型的应用程序下运行的第一处理设备的事件;生成包括第一处理设备的事件数据的数据序列,事件数据指定事件和事件的状态信息,其中,事件数据和状态信息是具有与应用程序对应的类型的类型特定的数据;将数据胶囊形成为包括数据序列,数据胶囊具有包括数据序列的与应用程序无关的表示的数据结构;检测在具有至少一个第二类型的至少一个第二应用程序下运行的第二处理设备的第二事件,其中,第二类型与第一类型不同,其中,至少一个处理设备包括第一处理设备和第二处理设备;识别数据胶囊与第二事件之间的对应性;以及使用数据胶囊的数据序列的内容、响应于第二事件执行操作。The method of an embodiment comprises: detecting an event of a first processing device running under an application program of a first type; generating a data sequence comprising event data of the first processing device, the event data specifying the event and state information of the event, wherein the event The data and state information are type-specific data having a type corresponding to the application; forming a data capsule to include a data sequence, the data capsule having a data structure including an application-independent representation of the data sequence; A second event of a second processing device running under at least one second application of two types, wherein the second type is different from the first type, and wherein the at least one processing device includes a first processing device and a second processing device; identifying a correspondence between the data capsule and the second event; and performing an operation in response to the second event using the contents of the data sequence of the data capsule.
实施例的生成数据序列包括:生成包括事件数据的第一数据集。实施例的生成数据序列包括:生成包括状态信息的第二数据集。实施例的生成数据序列包括:将第一数据序列形成为包括第一数据集和第二数据集。Generating the data sequence of an embodiment includes generating a first data set comprising event data. Generating the data sequence of an embodiment includes generating a second data set including state information. Generating the data sequence of an embodiment includes forming the first data sequence to include the first data set and the second data set.
实施例的事件数据是表示类型化的数据的标签化的字节序列。The event data of an embodiment is a tagged sequence of bytes representing typed data.
实施例的事件数据包括类型头部和类型特定的数据布局。The event data of an embodiment includes a type header and a type-specific data layout.
实施例的状态信息是表示类型化的数据的标签化的字节序列。The state information of an embodiment is a tagged sequence of bytes representing typed data.
实施例的状态信息包括类型头部和类型特定的数据布局。The state information of an embodiment includes a type header and a type-specific data layout.
实施例的方法包括:生成至少一个偏移。实施例的方法包括:将数据胶囊形成为包括至少一个偏移。The method of an embodiment includes generating at least one offset. The method of an embodiment includes forming the data capsule to include at least one offset.
实施例的方法包括:生成具有第一可变长度的第一偏移,其中,第一偏移指向至少一个数据序列中的第一数据序列的事件数据。实施例的方法包括:生成具有第二可变长度的第二偏移,其中,第二偏移指向至少一个数据序列中的第一数据序列的状态信息。The method of an embodiment includes generating a first offset having a first variable length, wherein the first offset points to event data of a first data sequence of the at least one data sequence. The method of an embodiment includes: generating a second offset having a second variable length, wherein the second offset points to state information of a first data sequence in the at least one data sequence.
实施例的方法包括:使用至少一个偏移中的第一偏移通过数据胶囊形成第一代码路径。实施例的方法包括:使用至少一个偏移中的第二偏移通过数据胶囊形成第二代码路径,其中,第一代码路径和第二代码路径是不同的路径。The method of an embodiment includes forming a first code path through the data capsule using a first offset of the at least one offset. The method of an embodiment includes forming a second code path through the data capsule using a second offset of the at least one offset, wherein the first code path and the second code path are different paths.
实施例的第一偏移和第二偏移中的至少一个包括元数据,元数据包括与应用程序的上下文对应的上下文特定元数据。At least one of the first offset and the second offset of an embodiment includes metadata including context specific metadata corresponding to a context of the application.
实施例的方法包括:将数据胶囊传送到多个池中的池。The method of an embodiment includes transmitting the data capsule to a pool of the plurality of pools.
实施例的方法包括:在多个池中搜索与第二事件对应的数据胶囊。实施例的方法包括:响应于对应性的识别从池中提取数据胶囊。The method of an embodiment includes searching the plurality of pools for a data capsule corresponding to the second event. The method of an embodiment includes extracting a data capsule from the pool in response to identifying the correspondence.
实施例的多个池耦合到应用程序和至少一个第二应用程序,多个池包括与该应用程序和至少一个第二应用程序对应的多个数据胶囊,多个池提供通过该应用程序和至少一个第二应用程序对多个数据胶囊的访问。The plurality of pools of an embodiment is coupled to the application and at least one second application, the plurality of pools includes a plurality of data capsules corresponding to the application and the at least one second application, the plurality of pools provides Access to multiple data capsules by a second application.
实施例的多个池提供多个数据胶囊的状态缓存。The multiple pools of an embodiment provide a stateful cache of multiple data capsules.
实施例的多个池提供多个数据胶囊的线性排序。The multiple pools of an embodiment provide a linear ordering of multiple data capsules.
实施例的数据结构是非类型化的。The data structures of an embodiment are untyped.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的表示。The data structure of the data capsule of an embodiment provides a platform-independent representation of event data and state information.
实施例的数据胶囊的数据结构提供对事件数据和状态信息的与平台无关的访问。The data structure of the data capsule of an embodiment provides platform-independent access to event data and state information.
在此描述的实施例包括一种方法,包括:将应用程序划分为多个进程;使用多个进程中的进程来生成应用程序的输出的部分;在第一数据胶囊中封装输出的部分,并且将第一数据胶囊传送到多个池中的至少一个池,其中,多个池包括从多个进程接收的多个数据胶囊;访问多个池,并且在输入中检索多个进程中的第二进程,其中,输入在多个数据胶囊的第二数据胶囊中;以及使用多个数据胶囊和多个池在多个进程之间协调处理。Embodiments described herein include a method comprising: dividing an application into a plurality of processes; using a process of the plurality of processes to generate a portion of the output of the application; encapsulating the portion of the output in a first data capsule, and transferring a first data capsule to at least one of a plurality of pools, wherein the plurality of pools includes a plurality of data capsules received from a plurality of processes; accessing the plurality of pools, and retrieving a second of the plurality of processes in the input a process, wherein the input is in a second data capsule of the plurality of data capsules; and coordinating processing among the plurality of processes using the plurality of data capsules and the plurality of pools.
在此描述的实施例包括一种系统,包括:至少一个处理设备,处理设备执行多个进程,多个进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程;以及多个池,耦合到至少一个处理设备;至少一个处理设备将多个进程中的每个进程的事件转译为数据胶囊,并且将数据胶囊传送到多个池,其中,数据胶囊包括发起数据胶囊的进程的状态信息和事件的事件数据的与应用程序无关的表示;每个进程作为识别进程操作,识别进程在多个池中识别包括与识别进程的交互功能和识别进程的标识对应的内容中的至少一个的数据胶囊;识别进程从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理。Embodiments described herein include a system comprising: at least one processing device executing a plurality of processes including separable program execution contexts for a plurality of applications, wherein each application includes at least one processes; and a plurality of pools coupled to at least one processing device; the at least one processing device translates events of each of the plurality of processes into data capsules and transmits the data capsules to the plurality of pools, wherein the data capsules include initiated An application-independent representation of state information for a process and event data for an event of a data capsule; each process operates as a recognition process that recognizes in a plurality of pools including the interaction function corresponding to the recognition process and the identity of the recognition process A data capsule of at least one of the contents; the identification process retrieves the identified data capsule from the plurality of pools and performs processing appropriate to the content of the identified data capsule.
在此描述的实施例包括一种方法,包括:从姿态数据检测身体进行的姿态,其中,经由检测器接收姿态数据;在处理设备上执行多个进程,多个进程生成事件,事件包括表示姿态的事件的集合;将多个进程中的每个进程的事件转译为数据胶囊;将数据胶囊传送到多个池;多个进程中的进程的集合作为识别进程操作,识别进程在多个池中识别包括与姿态对应的内容的数据胶囊;以及识别进程从多个池中检索识别的数据胶囊,并且通过合成识别的数据胶囊的内容以形成姿态信号来从识别的数据胶囊生成姿态信号,其中,姿态信号表示姿态。Embodiments described herein include a method comprising: detecting gestures performed by a body from gesture data, wherein the gesture data is received via a detector; and executing a plurality of processes on a processing device, the plurality of processes generating events, the events comprising representing gestures collection of events for each of multiple processes; translating events for each of multiple processes into data capsules; delivering data capsules to multiple pools; collection of processes in multiple processes operating as a recognition process that is in multiple pools identifying a data capsule comprising content corresponding to the gesture; and the identification process retrieves the identified data capsule from the plurality of pools and generates a gesture signal from the identified data capsule by synthesizing the contents of the identified data capsule to form the gesture signal, wherein, The attitude signal indicates attitude.
实施例的多个进程包括空间操作应用的可分离的程序程序执行上下文。The plurality of processes of an embodiment includes a separable program execution context for a spatial manipulation application.
实施例的姿态数据是用户在时间和空间中的点处的即时状态的绝对三空间位置数据。The gesture data of an embodiment is absolute three-spatial position data of the user's immediate state at a point in time and space.
实施例的方法包括:仅使用姿态数据来识别姿态。The method of an embodiment includes recognizing gestures using only gesture data.
实施例的检测包括:检测身体的位置、检测身体的方向和检测身体的运动中的至少一个。The detection of an embodiment includes: at least one of detecting the position of the body, detecting the direction of the body, and detecting the motion of the body.
实施例的方法包括:识别姿态,其中,识别包括:识别身体的部分的姿态和方向。The method of an embodiment includes recognizing a gesture, wherein recognizing includes recognizing a pose and an orientation of a body part.
实施例的检测包括:检测身体的附肢的第一集合和附肢的第二集合中的至少一个。The detecting of an embodiment includes detecting at least one of the first set of appendages and the second set of appendages of the body.
实施例的检测包括:动态地检测耦合到身体的至少一个标签的位置。The detecting of an embodiment comprises dynamically detecting a position of at least one tag coupled to the body.
实施例的检测包括:检测耦合到身体的标签的集合的位置。The detecting of an embodiment includes detecting a position of the set of tags coupled to the body.
实施例的标签的集合中的每个标签包括模式,其中,标签的集合中的每个标签的每个模式与多个标签的任何其余标签的任何模式不同。Each tag in the set of tags of an embodiment includes a pattern, wherein each pattern of each tag in the set of tags is different from any pattern of any remaining tags of the plurality of tags.
实施例的检测包括:动态地检测并且定位身体上的标记。The detection of an embodiment includes dynamically detecting and locating markers on the body.
实施例的检测包括:检测耦合到身体的标记的集合的位置。The detecting of an embodiment comprises detecting a position of the set of markers coupled to the body.
实施例的标记的集合在身体上形成多个模式。The collection of markers of the embodiments form a plurality of patterns on the body.
实施例的检测包括:使用耦合到身体的多个附肢中的每一个的标记的集合来检测身体的多个附肢的位置。The detecting of an embodiment includes detecting a position of the plurality of appendages of the body using a set of markers coupled to each of the plurality of appendages of the body.
实施例的转译包括:将姿态的信息转译为姿态符号。The translating of an embodiment includes translating information of gestures into gesture symbols.
实施例的姿态符号表示姿态词汇,并且姿态信号包括姿态词汇的通信。The gesture symbol of an embodiment represents a gesture vocabulary, and the gesture signal includes a communication of the gesture vocabulary.
实施例的姿态词汇以文本形式表示身体的运动学链接的即时姿态状态。The pose vocabulary of an embodiment represents the instant pose state of the kinematic linkages of the body in textual form.
实施例的姿态词汇以文本形式表示身体的运动学链接的方向。The gesture vocabulary of an embodiment represents in textual form the orientation of the body's kinematic linkages.
实施例的姿态词汇以文本形式表示身体的运动学链接的方向的组合。The gesture vocabulary of an embodiment represents in textual form combinations of directions of kinematic linkages of the body.
实施例的姿态词汇包括表示身体的运动学链接的状态的字符的串。The gesture vocabulary of an embodiment includes strings of characters representing states of kinematic linkages of the body.
实施例的运动学链接是身体的至少一个第一附肢。The kinematic link of an embodiment is at least one first appendage of the body.
实施例的方法包括:将串中的每个位置分配给第二附肢,第二附肢连接到第一附肢。The method of an embodiment includes assigning each position in the string to a second appendage, the second appendage being connected to the first appendage.
实施例的方法包括:将多个字符中的字符分配给第二附肢的多个位置中的每一个。The method of an embodiment includes assigning a character of the plurality of characters to each of the plurality of positions of the second appendage.
实施例的多个位置相对于坐标原点而建立。Various positions of an embodiment are established relative to a coordinate origin.
实施例的方法包括:无论身体的总体位置和朝向如何,并且响应于身体的动作交互地,使用从由空间中的绝对位置和方向、相对于身体的固定位置和方向所构成的组中选择的位置来建立坐标原点。The method of an embodiment comprises: regardless of the general position and orientation of the body, and interactively in response to the movement of the body, using an absolute position and orientation in space, a fixed position and orientation relative to the body position to establish the coordinate origin.
实施例的方法包括:将多个字符中的字符分配给第一附肢的多个方向中的每一个。The method of an embodiment includes assigning a character of the plurality of characters to each of the plurality of orientations of the first appendage.
实施例的检测包括:检测身体的外推的位置何时与虚拟空间交叉,其中,虚拟空间包括在耦合到至少一个处理设备的显示设备上描述的空间。The detecting of an embodiment comprises detecting when the extrapolated position of the body intersects a virtual space, wherein the virtual space comprises a space described on a display device coupled to the at least one processing device.
实施例的方法包括:当外推的(extrapolated)位置与虚拟对象交叉时,控制虚拟空间中的虚拟对象。The method of an embodiment includes controlling a virtual object in a virtual space when an extrapolated position intersects the virtual object.
实施例的控制包括:在虚拟空间中响应于外推的位置,控制虚拟空间中的虚拟对象的位置。The controlling of an embodiment includes controlling the position of the virtual object in the virtual space in response to the extrapolated position in the virtual space.
实施例的控制包括:响应于姿态,控制虚拟空间中的虚拟对象的态势。The controlling of an embodiment includes controlling a gesture of the virtual object in the virtual space in response to the gesture.
实施例的方法包括:控制检测和控制的比例,以生成虚拟空间与物理空间之间的一致性,其中,虚拟空间包括在显示器上描述的空间,其中,物理空间包括身体占据的空间。The method of an embodiment includes controlling the ratio of detection and control to generate consistency between a virtual space comprising a space depicted on a display and a physical space comprising a space occupied by a body.
实施例的方法包括:响应于至少一个物理对象在物理空间中的移动来控制虚拟空间中的至少一个虚拟对象。The method of an embodiment includes controlling at least one virtual object in the virtual space in response to movement of the at least one physical object in the physical space.
实施例的方法包括:使用姿态信号控制组件,该组件耦合到至少一个处理设备。The method of an embodiment includes controlling a component using the gesture signal, the component being coupled to at least one processing device.
实施例的组件的控制包括:通过将姿态映射到三空间对象来同时地通过六个自由度控制三空间对象。Control of components of an embodiment includes simultaneously controlling a three-dimensional object through six degrees of freedom by mapping poses to the three-dimensional object.
实施例的组件的控制包括:通过三个平移自由度和三个旋转自由度来控制三空间对象。Control of components of an embodiment includes controlling a three-dimensional object through three translational degrees of freedom and three rotational degrees of freedom.
实施例的三空间对象在耦合到至少一个处理设备的显示设备上显现。The three-spatial object of an embodiment is visualized on a display device coupled to at least one processing device.
实施例的三空间对象是耦合到计算机的远程系统。The three-spatial object of an embodiment is a remote system coupled to a computer.
实施例的方法包括:通过将姿态映射到三空间对象的多个对象平移来控制三空间对象的运动。The method of an embodiment includes controlling motion of a three-space object by mapping poses to a plurality of object translations of the three-space object.
实施例的映射包括:姿态与多个对象平移之间的直接映射。The mapping of an embodiment includes direct mapping between pose and translation of multiple objects.
实施例的映射包括:姿态与多个对象平移之间的间接映射。The mapping of an embodiment includes indirect mapping between poses and translations of multiple objects.
实施例的数据胶囊包括发起数据消息的进程的状态信息和事件的事件数据的与应用程序无关的表示。The data capsule of an embodiment includes an application-independent representation of the state information of the process originating the data message and the event data of the event.
实施例的方法包括:使用数据胶囊和多个池通过协调多个进程中的每一个的操作从多个进程形成交互的应用程序。The method of an embodiment includes forming an interactive application from a plurality of processes using the data capsule and the plurality of pools by coordinating the operation of each of the plurality of processes.
实施例的方法包括:使用数据胶囊和多个池中的至少一个来协调多个进程的操作。The method of an embodiment includes coordinating operations of the plurality of processes using at least one of the data capsule and the plurality of pools.
实施例的方法包括:将应用程序划分为进程的集合,其中,多个进程包括进程的集合。The method of an embodiment includes: dividing an application program into a set of processes, wherein the plurality of processes includes a set of processes.
实施例的方法包括通过交互地处理多个池中的至少一个池的多个检索的数据胶囊来生成输出的进程。The method of an embodiment includes the process of generating an output by interactively processing a plurality of retrieved data capsules of at least one of the plurality of pools.
实施例的多个进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程。The multiple processes of an embodiment comprise separable program execution contexts of multiple application programs, wherein each application program comprises at least one process.
实施例的方法包括:并行执行多个进程。The method of an embodiment includes: executing multiple processes in parallel.
实施例的方法包括:并行执行进程的第一集合,并且顺序执行进程的第二集合,其中,多个进程包括进程的第一集合和进程的第二集合。The method of an embodiment includes executing a first set of processes in parallel and executing a second set of processes sequentially, wherein the plurality of processes includes the first set of processes and the second set of processes.
实施例的事件表示进程输入。An event of an embodiment represents process input.
实施例的事件表示进程输出。An event of an embodiment represents process output.
实施例的事件包括用户接口事件。The events of an embodiment include user interface events.
实施例的事件包括图形事件。The events of an embodiment include graphics events.
实施例的事件表示进程状态。An event of an embodiment represents a process state.
实施例的进程状态表示进程的交互功能,其中,进程的交互功能作为数据胶囊的内容暴露于多个进程。The process state of an embodiment represents the interactive function of the process, wherein the interactive function of the process is exposed to multiple processes as the content of the data capsule.
实施例的方法包括:通过数据胶囊的内容来定义多个进程的应用程序编程接口(API),而不是通过功能调用来定义该API。The method of an embodiment includes: defining an application programming interface (API) of a plurality of processes through the content of the data capsule, rather than defining the API through function calls.
实施例的数据胶囊的内容是与应用程序无关的并且可由多个进程识别。The content of the data capsule of an embodiment is application-independent and recognizable by multiple processes.
实施例的至少一个处理设备包括多个处理设备。The at least one processing device of an embodiment comprises a plurality of processing devices.
实施例的多个进程中的至少一个进程的第一集合在多个处理设备中的至少一个处理设备的第一集合下运行,多个进程中的至少一个进程的第二集合在多个处理设备中的至少一个处理设备的第二集合下运行。A first set of at least one process in the plurality of processes of the embodiment runs under the first set of at least one processing device in the plurality of processing devices, and a second set of at least one process in the plurality of processes runs on the plurality of processing devices The at least one processing device in the second set operates.
实施例的多个进程包括第一进程。The plurality of processes of an embodiment includes a first process.
实施例的转译包括:将第一进程的事件变换为包括指定事件的第一进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming an event of the first process into at least one data sequence comprising first process event data specifying the event and state information of the event.
实施例的第一进程事件数据和状态信息是具有与第一进程的应用程序对应的类型的类型特定的数据。The first process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the first process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的多个进程包括第二进程。The plurality of processes of an embodiment includes a second process.
实施例的转译包括:将第二进程的状态改变事件变换为包括指定事件的第二进程事件数据和事件的状态信息的至少一个数据序列。The translating of an embodiment includes transforming the state change event of the second process into at least one data sequence comprising second process event data specifying the event and state information of the event.
实施例的第二进程事件数据和状态信息是具有与第二进程的应用程序对应的类型的类型特定的数据。The second process event data and state information of an embodiment are type-specific data having a type corresponding to an application program of the second process.
实施例的转译包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的识别进程是第二进程,检索包括:从多个池中检索识别的数据胶囊,并且执行对识别的数据胶囊的内容适当的处理的第二进程。The identification process of an embodiment is a second process, and the retrieval includes retrieving the identified data capsules from the plurality of pools and performing the second process of processing appropriate to the contents of the identified data capsules.
实施例的识别的数据胶囊的内容是表示第一进程的状态信息的数据。The content of the identified data capsule of an embodiment is data representing state information of the first process.
实施例的转译包括:将识别的数据胶囊的内容变换为至少一个新的数据序列,该至少一个新的数据序列表示第一进程的事件和第二进程的事件中的至少一个。The translating of an embodiment includes transforming the content of the identified data capsule into at least one new data sequence representing at least one of an event of the first process and an event of the second process.
实施例的至少一个新的数据序列包括第一进程和第二进程中的至少一个进程的状态信息和指定事件的事件数据。The at least one new data sequence of an embodiment includes state information of at least one of the first process and the second process and event data specifying an event.
实施例的第一进程和第二进程中的至少一个进程的事件数据和状态信息是具有与第一进程和第二进程中的至少一个进程的应用程序对应的类型的类型特定的数据。The event data and state information of at least one of the first process and the second process of an embodiment are type-specific data having a type corresponding to an application program of the at least one of the first process and the second process.
实施例的转译包括:将数据胶囊形成为包括至少一个新的数据序列,数据胶囊具有包括至少一个新的数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes forming a data capsule to include at least one new data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one new data sequence.
实施例的多个进程使用至少一个新的数据序列。Processes of an embodiment use at least one new data sequence.
实施例的对识别的数据胶囊的内容适当的处理包括:渲染图形对象,其中,在至少一个处理设备的显示器上渲染图形对象。Proper processing of the content of the identified data capsule of an embodiment includes rendering the graphical object, wherein the graphical object is rendered on a display of the at least one processing device.
实施例的渲染包括:直接渲染,其中多个进程直接绘制到至少一个处理设备的图形层,其中,多个池用于对于渲染适当地在多个进程之间的协调。The rendering of an embodiment includes direct rendering, wherein multiple processes draw directly to a graphics layer of at least one processing device, wherein multiple pools are used for coordination among the multiple processes as appropriate for rendering.
实施例的渲染包括将包括渲染命令的数据胶囊传送到多个池的多个进程。实施例的渲染包括从多个池检索渲染命令,解释渲染命令,并且响应于渲染命令驱动至少一个处理设备的图形层的多个进程。The rendering of an embodiment includes a plurality of processes that transmit data capsules including rendering commands to a plurality of pools. The rendering of an embodiment includes retrieving rendering commands from a plurality of pools, interpreting the rendering commands, and driving a plurality of processes of a graphics layer of at least one processing device in response to the rendering commands.
实施例的渲染包括渲染到像素缓冲器的多个进程。实施例的渲染包括将原始帧数据传送到多个池的多个进程,原始帧数据由到像素缓冲器的渲染而产生。实施例的渲染包括从多个池中检索原始帧数据,并且组合原始帧数据以在驱动至少一个处理设备的图形层中使用的多个进程。The rendering of an embodiment includes multiple processes rendering to pixel buffers. The rendering of an embodiment includes a plurality of processes that transfer raw frame data resulting from rendering to a pixel buffer to a plurality of pools. The rendering of an embodiment includes a plurality of processes retrieving raw frame data from a plurality of pools and combining the raw frame data for use in a graphics layer driving at least one processing device.
实施例的方法包括:检测多个进程的事件。实施例的方法包括:生成包括指定事件的事件数据和事件的状态信息的至少一个数据序列,其中,事件数据和状态信息是具有与至少一个处理设备的应用程序对应的类型的类型特定的数据。实施例的方法包括:将数据胶囊形成为包括至少一个数据序列,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The method of an embodiment includes detecting events of a plurality of processes. The method of an embodiment comprises generating at least one data sequence comprising event data specifying an event and state information of the event, wherein the event data and state information are type-specific data having a type corresponding to an application of at least one processing device. The method of an embodiment includes forming a data capsule to include at least one data sequence, the data capsule having a data structure that includes an application-independent representation of the at least one data sequence.
实施例的生成至少一个数据序列包括:生成包括第一各自事件数据的第一各自数据集。实施例的生成至少一个数据序列包括:生成包括第二各自状态信息的第二各自数据集。实施例的生成至少一个数据序列包括:将第一数据序列形成为包括第一各自数据集和第二各自数据集。The generating at least one data sequence of an embodiment comprises generating a first respective data set comprising first respective event data. The generating of at least one data sequence of an embodiment comprises generating a second respective data set comprising second respective state information. The generating of the at least one data sequence of an embodiment comprises forming the first data sequence to include a first respective data set and a second respective data set.
实施例的生成第一各自数据集包括:将第一各自数据集形成为包括至少一个处理设备的标识数据,标识数据包括标识至少一个处理设备的数据。Generating the first respective data set of an embodiment comprises forming the first respective data set to include identification data of the at least one processing device, the identification data comprising data identifying the at least one processing device.
实施例的生成至少一个数据序列包括:生成包括第一各自事件数据的第一各自数据集。实施例的生成至少一个数据序列包括:生成包括第二各自状态信息的第二各自数据集。实施例的生成至少一个数据序列包括:将第二数据序列形成为包括第一各自数据集和第二各自数据集。The generating at least one data sequence of an embodiment comprises generating a first respective data set comprising first respective event data. The generating of at least one data sequence of an embodiment comprises generating a second respective data set comprising second respective state information. The generating of the at least one data sequence of an embodiment comprises forming the second data sequence to include the first respective data set and the second respective data set.
实施例的生成第一各自数据集包括:生成第一各自数据集偏移,其中,第一各自数据集偏移指向第二数据序列的第一各自数据集。The generating the first respective data set of an embodiment comprises: generating the first respective data set offset, wherein the first respective data set offset points to the first respective data set of the second data sequence.
实施例的生成第二各自数据集包括:生成第二各自数据集偏移,其中,第二各自数据集偏移指向第二数据序列的第二各自数据集。The generating the second respective data set of an embodiment comprises: generating the second respective data set offset, wherein the second respective data set offset points to the second respective data set of the second data sequence.
实施例的第一各自数据集是描述链表,描述链表包括数据的描述。The first respective data set of an embodiment is a description link list comprising a description of the data.
实施例的事件数据是表示类型化的数据的标签化的字节序列。The event data of an embodiment is a tagged sequence of bytes representing typed data.
实施例的事件数据包括类型头部和类型特定的数据布局。The event data of an embodiment includes a type header and a type-specific data layout.
实施例的状态信息是表示类型化的数据的标签化的字节序列。The state information of an embodiment is a tagged sequence of bytes representing typed data.
实施例的状态信息包括类型头部和类型特定的数据布局。The state information of an embodiment includes a type header and a type-specific data layout.
实施例的方法包括:生成至少一个偏移。实施例的方法包括:将数据胶囊形成为包括至少一个偏移。The method of an embodiment includes generating at least one offset. The method of an embodiment includes forming the data capsule to include at least one offset.
实施例的方法包括:生成具有第一可变长度的第一偏移,其中,第一偏移指向至少一个数据序列中的第一数据序列的事件数据。The method of an embodiment includes generating a first offset having a first variable length, wherein the first offset points to event data of a first data sequence of the at least one data sequence.
实施例的方法包括:生成具有第二可变长度的第二偏移,其中,第二偏移指向至少一个数据序列中的第一数据序列的状态信息。The method of an embodiment includes: generating a second offset having a second variable length, wherein the second offset points to state information of a first data sequence in the at least one data sequence.
实施例的方法包括:使用至少一个偏移中的第一偏移通过数据胶囊形成第一代码路径。实施例的方法包括:使用至少一个偏移中的第二偏移通过数据胶囊形成第二代码路径,其中,第一代码路径和第二代码路径是不同的路径。The method of an embodiment includes forming a first code path through the data capsule using a first offset of the at least one offset. The method of an embodiment includes forming a second code path through the data capsule using a second offset of the at least one offset, wherein the first code path and the second code path are different paths.
实施例的第一偏移和第二偏移中的至少一个包括元数据,元数据包括与应用程序的上下文对应的上下文特定元数据。At least one of the first offset and the second offset of an embodiment includes metadata including context specific metadata corresponding to a context of the application.
实施例的方法包括:生成包括数据胶囊的长度的头部。实施例的方法包括:将数据胶囊形成为包括头部。The method of an embodiment includes generating a header including a length of the data capsule. The method of an embodiment includes forming the data capsule to include the header.
实施例的方法包括:将数据胶囊传送到多个池中的池。The method of an embodiment includes transmitting the data capsule to a pool of the plurality of pools.
实施例的方法包括:检测至少一个处理设备的第二事件。实施例的方法包括:在多个池中搜索与第二事件对应的数据胶囊。The method of an embodiment includes detecting a second event of at least one processing device. The method of an embodiment includes searching the plurality of pools for a data capsule corresponding to the second event.
实施例的方法包括:识别数据胶囊与第二事件之间的对应性。实施例的方法包括:响应于识别从池中提取数据胶囊。实施例的方法包括:响应于数据胶囊的内容,代表至少一个处理设备执行与第二事件对应的处理操作,其中,至少一个处理设备与第一类型的应用程序以及第二类型的第二应用程序对应。The method of an embodiment includes identifying a correspondence between the data capsule and the second event. The method of an embodiment includes extracting a data capsule from the pool in response to identifying. The method of an embodiment includes: in response to content of the data capsule, performing a processing operation corresponding to a second event on behalf of at least one processing device, wherein the at least one processing device is associated with an application of a first type and a second application of a second type correspond.
实施例的多个池耦合到多个应用程序,多个池包括与多个应用程序对应的多个数据胶囊,多个池提供通过多个应用程序对多个数据胶囊的访问,其中,多个应用程序中的至少两个应用程序是不同的应用程序。The plurality of pools of an embodiment is coupled to a plurality of applications, the plurality of pools includes a plurality of data capsules corresponding to the plurality of applications, the plurality of pools provides access to the plurality of data capsules through the plurality of applications, wherein the plurality of At least two of the applications are different applications.
实施例的多个池提供多个数据胶囊的状态缓存。The multiple pools of an embodiment provide a stateful cache of multiple data capsules.
实施例的多个池提供多个数据胶囊的线性排序。The multiple pools of an embodiment provide a linear ordering of multiple data capsules.
实施例的数据结构是非类型化的。The data structures of an embodiment are untyped.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的表示。The data structure of the data capsule of an embodiment provides a platform-independent representation of event data and state information.
实施例的数据胶囊的数据结构提供对事件数据和状态信息的与平台无关的访问。The data structure of the data capsule of an embodiment provides platform-independent access to event data and state information.
实施例的传送包括:将数据胶囊从具有第一应用程序类型的第一应用程序传送到具有至少一个第二应用程序类型的至少一个第二应用程序,其中,第一应用程序类型与第二应用程序类型不同,其中,生成至少一个数据序列由第一应用程序来执行,所述方法包括:在传送期间保持数据胶囊的至少一个数据序列完好。The transferring of an embodiment includes transferring the data capsule from a first application having a first application type to at least one second application having at least one second application type, wherein the first application type is the same as the second application Depending on the type of program, wherein generating the at least one data sequence is performed by a first application, the method includes keeping intact the at least one data sequence of the data capsule during the transfer.
实施例的方法包括:在第二应用程序的操作期间使用至少一个数据序列。The method of an embodiment includes using at least one sequence of data during operation of the second application.
实施例的方法包括:生成包括至少一个处理设备的源设备的事件数据和标识数据的第一数据集,设备事件数据包括指定源设备登记的事件的数据,标识数据包括标识源设备的数据。The method of an embodiment includes generating a first data set comprising event data for a source device of at least one processing device, the device event data including data specifying events registered by the source device, and identification data including data identifying the source device.
实施例的方法包括:生成包括事件的状态信息的完全集合的第二数据集,其中,第一数据集和第二数据集中的每一个包括类型特定的数据布局中的类型化的数据束。The method of an embodiment includes generating a second data set comprising the complete set of state information for the event, wherein each of the first data set and the second data set comprises a typed data bundle in a type-specific data layout.
实施例的转译包括:通过将数据胶囊形成为包括第一数据集和第二数据集来封装第一数据集和第二数据集,其中,数据胶囊具有包括至少一个数据序列的与应用程序无关的表示的数据结构。The translating of an embodiment includes encapsulating the first data set and the second data set by forming a data capsule to include the first data set and the second data set, wherein the data capsule has an application-independent Represented data structure.
实施例的方法包括:检测在第一类型的应用程序下运行的第一处理设备的事件。实施例的方法包括:生成包括第一处理设备的事件数据的数据序列,事件数据指定事件和事件的状态信息,其中,事件数据和状态信息是具有与应用程序对应的类型的类型特定的数据。实施例的方法包括:将数据胶囊形成为包括数据序列,数据胶囊具有包括数据序列的与应用程序无关的表示的数据结构。实施例的方法包括:检测在具有至少一个第二类型的至少一个第二应用程序下运行的第二处理设备的第二事件,其中,第二类型与第一类型不同,其中,至少一个处理设备包括第一处理设备和第二处理设备。实施例的方法包括:识别数据胶囊与第二事件之间的对应性。实施例的方法包括:使用数据胶囊的数据序列的内容、响应于第二事件执行操作。The method of an embodiment includes detecting an event of a first processing device running under an application of a first type. The method of an embodiment includes generating a data sequence comprising event data of the first processing device, the event data specifying the event and state information for the event, wherein the event data and state information are type-specific data having a type corresponding to the application. The method of an embodiment includes forming a data capsule to include a data sequence, the data capsule having a data structure including an application-independent representation of the data sequence. The method of an embodiment comprises: detecting a second event of a second processing device running under at least one second application of at least one second type, wherein the second type is different from the first type, wherein the at least one processing device A first processing device and a second processing device are included. The method of an embodiment includes identifying a correspondence between the data capsule and the second event. The method of an embodiment comprises: using the contents of the data sequence of the data capsule, performing the operation in response to the second event.
实施例的生成数据序列包括:生成包括事件数据的第一数据集。实施例的生成数据序列包括:生成包括状态信息的第二数据集。实施例的生成数据序列包括:将第一数据序列形成为包括第一数据集和第二数据集。Generating the data sequence of an embodiment includes generating a first data set comprising event data. Generating the data sequence of an embodiment includes generating a second data set including state information. Generating the data sequence of an embodiment includes forming the first data sequence to include the first data set and the second data set.
实施例的事件数据是表示类型化的数据的标签化的字节序列。The event data of an embodiment is a tagged sequence of bytes representing typed data.
实施例的事件数据包括类型头部和类型特定的数据布局。The event data of an embodiment includes a type header and a type-specific data layout.
实施例的状态信息是表示类型化的数据的标签化的字节序列。The state information of an embodiment is a tagged sequence of bytes representing typed data.
实施例的状态信息包括类型头部和类型特定的数据布局。The state information of an embodiment includes a type header and a type-specific data layout.
实施例的方法包括:生成至少一个偏移。实施例的方法包括:将数据胶囊形成为包括至少一个偏移。The method of an embodiment includes generating at least one offset. The method of an embodiment includes forming the data capsule to include at least one offset.
实施例的方法包括:生成具有第一可变长度的第一偏移,其中,第一偏移指向至少一个数据序列中的第一数据序列的事件数据。实施例的方法包括:生成具有第二可变长度的第二偏移,其中,第二偏移指向至少一个数据序列中的第一数据序列的状态信息。The method of an embodiment includes generating a first offset having a first variable length, wherein the first offset points to event data of a first data sequence of the at least one data sequence. The method of an embodiment includes: generating a second offset having a second variable length, wherein the second offset points to state information of a first data sequence in the at least one data sequence.
实施例的方法包括:使用至少一个偏移中的第一偏移通过数据胶囊形成第一代码路径。实施例的方法包括:使用至少一个偏移中的第二偏移通过数据胶囊形成第二代码路径,其中,第一代码路径和第二代码路径是不同的路径。The method of an embodiment includes forming a first code path through the data capsule using a first offset of the at least one offset. The method of an embodiment includes forming a second code path through the data capsule using a second offset of the at least one offset, wherein the first code path and the second code path are different paths.
实施例的第一偏移和第二偏移中的至少一个包括元数据,元数据包括与应用程序的上下文对应的上下文特定元数据。At least one of the first offset and the second offset of an embodiment includes metadata including context specific metadata corresponding to a context of the application.
实施例的方法包括:将数据胶囊传送到多个池中的池。The method of an embodiment includes transmitting the data capsule to a pool of the plurality of pools.
实施例的方法包括:在多个池中搜索与第二事件对应的数据胶囊。实施例的方法包括:响应于对应性的识别从池中提取数据胶囊。The method of an embodiment includes searching the plurality of pools for a data capsule corresponding to the second event. The method of an embodiment includes extracting a data capsule from the pool in response to identifying the correspondence.
实施例的多个池耦合到应用程序和至少一个第二应用程序,多个池包括与应用程序和至少一个第二应用程序对应的多个数据胶囊,多个池提供通过应用程序和至少一个第二应用程序对多个数据胶囊的访问。The plurality of pools of an embodiment are coupled to the application and at least one second application, the plurality of pools include a plurality of data capsules corresponding to the application and the at least one second application, the plurality of pools provide Two applications have access to multiple data capsules.
实施例的多个池提供多个数据胶囊的状态缓存。The multiple pools of an embodiment provide a stateful cache of multiple data capsules.
实施例的多个池提供多个数据胶囊的线性排序。The multiple pools of an embodiment provide a linear ordering of multiple data capsules.
实施例的数据结构是非类型化的。The data structures of an embodiment are untyped.
实施例的数据胶囊的数据结构提供事件数据和状态信息的与平台无关的表示。The data structure of the data capsule of an embodiment provides a platform-independent representation of event data and state information.
实施例的数据胶囊的数据结构提供对事件数据和状态信息的对的访问。The data structure of the data capsule of an embodiment provides access to pairs of event data and state information.
在此描述的实施例包括一种方法,包括:在处理设备上执行多个进程,多个进程包括多个应用程序的可分离的程序执行上下文,其中,每个应用程序包括至少一个进程;将多个进程的每个进程的事件转译为数据消息,其中,数据消息包括发起数据消息的进程的状态信息和事件的事件数据的与应用程序无关的表示;将数据消息传送到多个池中的至少一个池;在进程之间协调,协调包括:通过从多个池中检索对等进程的状态信息,多个进程的每个进程与多个进程中的对等进程进行协调;以及通过交互地组合多个池中的至少一个池的数据消息的集合来生成多个进程的输出。Embodiments described herein include a method comprising: executing a plurality of processes on a processing device, the plurality of processes including separable program execution contexts of a plurality of application programs, wherein each application program includes at least one process; events for each of the plurality of processes are translated into data messages, where the data messages include state information for the process originating the data message and an application-independent representation of the event data for the event; data messages are delivered to multiple pools at least one pool; coordinating among the processes, including: each process of the plurality of processes coordinating with a peer process in the plurality of processes by retrieving state information for the peer process from the plurality of pools; and by interactively A collection of data messages from at least one of the plurality of pools is combined to generate an output of the plurality of processes.
在此描述的实施例包括一种系统,包括:检测器,用于接收表示身体进行的姿态的姿态数据;以及处理器,耦合到检测器,处理器从姿态数据自动检测姿态,处理器执行多个进程,多个进程生成包括表示姿态的事件的集合的事件,处理器将多个进程中的每个进程的事件转译为数据胶囊,处理器将数据胶囊传送到多个池,其中,多个进程中的进程的集合运作为识别进程,识别进程在多个池中识别包括与姿态对应的内容的数据胶囊,识别进程从多个池中检索识别的数据胶囊,并且通过合成识别的数据胶囊的内容以形成姿态信号来从识别的数据胶囊生成姿态信号,其中,姿态信号表示姿态。Embodiments described herein include a system comprising: a detector for receiving gesture data representing a gesture performed by a body; and a processor coupled to the detector, the processor automatically detects the gesture from the gesture data, the processor executes multiple processes, multiple processes generate events including a collection of events representing gestures, the processor translates the events of each of the multiple processes into data capsules, the processor transmits the data capsules to multiple pools, wherein multiple The collection of processes in the process operates as a recognition process, the recognition process identifies a data capsule comprising content corresponding to the pose in the plurality of pools, the recognition process retrieves the identified data capsule from the plurality of pools, and synthesizes the identified data capsule by The content is to form a gesture signal to generate a gesture signal from the recognized data capsule, wherein the gesture signal represents a gesture.
在此描述的系统和方法包括和/或运行在处理系统下和/或与处理系统相关联。如本领域已知的那样,处理系统包括操作在一起的基于处理器的设备或计算设备、或处理系统或设备的组件的任何集合。例如,处理系统可以包括便携式计算机、在通信网络中操作的便携式通信设备和或网络服务器中的一个或多个。便携式计算机可以是从个人计算机、蜂窝电话、个人数字助理、便携式计算设备和便携式通信设备之中选择的任意多个设备和/或设备的组合,但不限于此。处理系统可以包括较大计算机系统内的组件。The systems and methods described herein include and/or operate under and/or in association with a processing system. As is known in the art, a processing system includes any collection of processor-based or computing devices, or components of a processing system or device, operating together. For example, a processing system may include one or more of a portable computer, a portable communication device operating in a communication network, and or a network server. A portable computer may be any number and/or combination of devices selected from among, but not limited to, a personal computer, a cellular telephone, a personal digital assistant, a portable computing device, and a portable communication device. A processing system may include components within a larger computer system.
实施例的处理系统包括至少一个处理器和至少一个存储器设备或子系统。处理系统可以还包括或耦合到至少一个数据库。在此通常使用的术语“处理器”指的是任何逻辑处理单元,例如一个或多个中央处理单元(CPU)、数字信号处理器(DSP)、专用集成电路(ASIC)等。处理器和存储器可以整体地集成到单个芯片,分布在主机系统的多个芯片或组件之中,和/或由算法的一些组合提供。在此描述的方法可以通过一个或多个软件算法、程序、固件、硬件、组件、电路中的一个或多个以任何组合实现。The processing system of an embodiment includes at least one processor and at least one memory device or subsystem. The processing system may also include or be coupled to at least one database. The term "processor" is used generally herein to refer to any logical processing unit, such as one or more central processing units (CPUs), digital signal processors (DSPs), application specific integrated circuits (ASICs), and the like. The processor and memory may be integrally integrated into a single chip, distributed among multiple chips or components in the host system, and/or provided by some combination of algorithms. The methods described herein may be implemented by one or more of software algorithms, programs, firmware, hardware, components, circuits in any combination.
实现在此描述的系统和方法的系统组件可以定位在一起或在分离的位置。因此,实现在此描述的系统和方法的系统组件可以是单个系统、多个系统和/或地理上分离的系统的组件。这些组件也可以是单个系统、多个系统和/或地理上分离的系统的子组件或子系统。这些组件可以耦合到主机系统或耦合到主机系统的系统的一个或多个其它组件。System components implementing the systems and methods described herein may be located together or in separate locations. Accordingly, system components implementing the systems and methods described herein may be components of a single system, multiple systems, and/or geographically separated systems. These components may also be subcomponents or subsystems of a single system, multiple systems, and/or geographically separated systems. These components may be coupled to the host system or one or more other components of a system coupled to the host system.
通信路径耦合系统组件,并且包括用于在组件之中通信或传送文件的任何介质。通信路径包括无线连接、有线连接以及混合无线/有线连接。通信路径还包括到网络的耦合或连接,网络包括局域网(LAN)、城域网(MAN)、广域网(WAN)、私有网络、办公室间或后端网络和因特网。此外,通信路径包括可拆卸固定介质,例如软盘、硬盘驱动器、以及CD-ROM盘)以及闪速RAM、通用串行总线(USB)连接、RS-232连接、电话线路、总线,以及电子邮件消息。Communication paths couple system components and include any medium used to communicate or transfer files among the components. Communication paths include wireless connections, wired connections, and hybrid wireless/wired connections. Communication paths also include couplings or connections to networks including local area networks (LANs), metropolitan area networks (MANs), wide area networks (WANs), private networks, inter-office or back-end networks, and the Internet. In addition, communication paths include removable fixed media such as floppy disks, hard drives, and CD-ROM disks) and flash RAM, Universal Serial Bus (USB) connections, RS-232 connections, telephone lines, buses, and e-mail messages .
除非上下文明确地另外要求,贯穿说明书,词语“包括”、“包含”等应理解为与排除或排他意义相反的包括的意义,也就是说,“包括,但不限于”的意义。使用单数或复数的词语分别还包括复数或单数。此外,词语“在此”、“下文”、“以上”、“以下”和类似意思的词语指代本申请整体,而不是本申请的任何特定部分。当参照两个或更多个项的列表使用词语“或”时,该词语覆盖以下所有解释:列表中的任意项、列表中的所有项、以及列表中的项的任意组合。Unless the context clearly requires otherwise, throughout the specification the words "comprises", "comprising", etc. are to be read in an inclusive sense as opposed to an exclusive or exclusive sense, ie, "including, but not limited to". Words using the singular or the plural also include the plural or the singular, respectively. Additionally, the words "herein," "below," "above," "below," and words of similar import refer to this application as a whole and not to any particular portions of this application. When the word "or" is used with reference to a list of two or more items, that word covers all interpretations of any of the items in the list, all of the items in the list, and any combination of the items in the list.
实施例的以上描述并非意在穷举或者将描述的系统和方法限制为所公开的精确形式。虽然为了示例的目的在此描述了具体的实施例和示例,但本领域技术人员应理解,在其它系统和方法的范围内,各种等效修改是可能的。在此提供的教示不仅用于上述系统和方法,而且可以应用于其它处理系统和方法。The above description of embodiments is not intended to be exhaustive or to limit the described systems and methods to the precise forms disclosed. While specific embodiments, and examples, are described herein for illustrative purposes, various equivalent modifications are possible within the scope of other systems and methods, those skilled in the art will understand. The teachings provided herein are not only applicable to the systems and methods described above, but can also be applied to other processing systems and methods.
可以组合以上描述的各个实施例的元件和动作,以提供其它实施例。根据以上详细描述,可以对实施例进行这些和其它改变。The elements and acts of the various above-described embodiments can be combined to provide other embodiments. These and other changes can be made to the embodiments in light of the above detailed description.
通常,在所附权利要求中,使用的术语不应理解为将实施例限制为说明书和权利要求中公开的具体实施例,而应理解为包括在权利要求下的操作的所有系统。因此,实施例不限于在此的公开,而是实施例的范围由权利要求完整地确定。Generally, in the appended claims, the terms used should not be construed to limit the embodiments to the specific embodiments disclosed in the specification and claims, but rather should be understood to include all systems operating under the claims. Accordingly, the embodiments are not limited by the disclosure herein, but rather the scope of the embodiments is determined entirely by the claims.
虽然以特定权利要求形式呈现了实施例的特定方面,但发明人预期采用任何数量的权利要求的形式的实施例的各个方面。因此,发明人保留在提交申请之后添加附加权利要求的权利,以追随用于实施例的其它方面的这些附加权利要求形式。Although certain aspects of the embodiments are presented in certain claim forms, the inventors contemplate the various aspects of the embodiments in any number of claim forms. Accordingly, the inventors reserve the right to add additional claims after filing the application to follow such additional claim forms for other aspects of the embodiments.
Claims (325)
Applications Claiming Priority (15)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US10525308P | 2008-10-14 | 2008-10-14 | |
| US10524308P | 2008-10-14 | 2008-10-14 | |
| US61/105,243 | 2008-10-14 | ||
| US61/105,253 | 2008-10-14 | ||
| US12/417,252 US9075441B2 (en) | 2006-02-08 | 2009-04-02 | Gesture based control using three-dimensional information extracted over an extended depth of field |
| US12/417,252 | 2009-04-02 | ||
| US12/487,623 | 2009-06-18 | ||
| US12/487,623 US20090278915A1 (en) | 2006-02-08 | 2009-06-18 | Gesture-Based Control System For Vehicle Interfaces |
| US12/553,845 US8531396B2 (en) | 2006-02-08 | 2009-09-03 | Control system for navigating a principal dimension of a data space |
| US12/553,845 | 2009-09-03 | ||
| US12/557,464 US9910497B2 (en) | 2006-02-08 | 2009-09-10 | Gestural control of autonomous and semi-autonomous systems |
| US12/557,464 | 2009-09-10 | ||
| US12/572,689 | 2009-10-02 | ||
| US12/572,689 US8866740B2 (en) | 2005-02-08 | 2009-10-02 | System and method for gesture based control system |
| PCT/US2009/060725 WO2010045394A1 (en) | 2008-10-14 | 2009-10-14 | Multi-process interactive systems and methods |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN102224476A CN102224476A (en) | 2011-10-19 |
| CN102224476B true CN102224476B (en) | 2017-08-01 |
Family
ID=42106884
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN200980146827.0A Expired - Fee Related CN102224476B (en) | 2008-10-14 | 2009-10-14 | Multi-process interactive systems and method |
Country Status (5)
| Country | Link |
|---|---|
| EP (1) | EP2350774A4 (en) |
| JP (1) | JP5805537B2 (en) |
| KR (1) | KR101649769B1 (en) |
| CN (1) | CN102224476B (en) |
| WO (1) | WO2010045394A1 (en) |
Families Citing this family (44)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9740293B2 (en) | 2009-04-02 | 2017-08-22 | Oblong Industries, Inc. | Operating environment with gestural control and multiple client devices, displays, and users |
| US9684380B2 (en) * | 2009-04-02 | 2017-06-20 | Oblong Industries, Inc. | Operating environment with gestural control and multiple client devices, displays, and users |
| US9952673B2 (en) | 2009-04-02 | 2018-04-24 | Oblong Industries, Inc. | Operating environment comprising multiple client devices, multiple displays, multiple users, and gestural control |
| US10824238B2 (en) | 2009-04-02 | 2020-11-03 | Oblong Industries, Inc. | Operating environment with gestural control and multiple client devices, displays, and users |
| US9971807B2 (en) | 2009-10-14 | 2018-05-15 | Oblong Industries, Inc. | Multi-process interactive systems and methods |
| US10481769B2 (en) * | 2013-06-09 | 2019-11-19 | Apple Inc. | Device, method, and graphical user interface for providing navigation and search functionalities |
| US9430808B2 (en) * | 2013-06-19 | 2016-08-30 | Microsoft Technology Licensing, Llc | Synchronization points for state information |
| GB2521151B (en) * | 2013-12-10 | 2021-06-02 | Advanced Risc Mach Ltd | Configurable thread ordering for a data processing apparatus |
| US9990046B2 (en) | 2014-03-17 | 2018-06-05 | Oblong Industries, Inc. | Visual collaboration interface |
| EP3062142B1 (en) | 2015-02-26 | 2018-10-03 | Nokia Technologies OY | Apparatus for a near-eye display |
| US9734000B2 (en) * | 2015-06-18 | 2017-08-15 | Microsoft Technology Licensing, Llc | Seamless transitions between applications and devices |
| CN106055123B (en) * | 2016-06-08 | 2019-01-29 | Tcl移动通信科技(宁波)有限公司 | A kind of alternative word search speed control method and system based on text input speed |
| CN106571888B (en) * | 2016-11-10 | 2018-08-14 | 中国人民解放军空军航空大学军事仿真技术研究所 | A kind of analogue system automatic synchronization reliable communication method |
| US10650552B2 (en) | 2016-12-29 | 2020-05-12 | Magic Leap, Inc. | Systems and methods for augmented reality |
| EP3343267B1 (en) | 2016-12-30 | 2024-01-24 | Magic Leap, Inc. | Polychromatic light out-coupling apparatus, near-eye displays comprising the same, and method of out-coupling polychromatic light |
| US10578870B2 (en) | 2017-07-26 | 2020-03-03 | Magic Leap, Inc. | Exit pupil expander |
| CN107479973A (en) * | 2017-08-08 | 2017-12-15 | 西安万像电子科技有限公司 | Data transmission method, device, system |
| AU2018379105B2 (en) | 2017-12-10 | 2023-12-21 | Magic Leap, Inc. | Anti-reflective coatings on optical waveguides |
| US11187923B2 (en) | 2017-12-20 | 2021-11-30 | Magic Leap, Inc. | Insert for augmented reality viewing device |
| CN108196686B (en) * | 2018-03-13 | 2024-01-26 | 北京无远弗届科技有限公司 | Hand motion gesture capturing device, method and virtual reality interaction system |
| JP7344896B2 (en) | 2018-03-15 | 2023-09-14 | マジック リープ, インコーポレイテッド | Image corrections due to deformation of components of the viewing device |
| EP3803450A4 (en) | 2018-05-31 | 2021-08-18 | Magic Leap, Inc. | POSITIONING A RADAR HEAD |
| WO2020010097A1 (en) | 2018-07-02 | 2020-01-09 | Magic Leap, Inc. | Pixel intensity modulation using modifying gain values |
| US11856479B2 (en) | 2018-07-03 | 2023-12-26 | Magic Leap, Inc. | Systems and methods for virtual and augmented reality along a route with markers |
| US11510027B2 (en) | 2018-07-03 | 2022-11-22 | Magic Leap, Inc. | Systems and methods for virtual and augmented reality |
| WO2020014324A1 (en) | 2018-07-10 | 2020-01-16 | Magic Leap, Inc. | Thread weave for cross-instruction set architecture procedure calls |
| JP7426982B2 (en) | 2018-07-24 | 2024-02-02 | マジック リープ, インコーポレイテッド | Temperature-dependent calibration of movement sensing devices |
| US11624929B2 (en) | 2018-07-24 | 2023-04-11 | Magic Leap, Inc. | Viewing device with dust seal integration |
| EP3831058B1 (en) | 2018-08-02 | 2025-10-08 | Magic Leap, Inc. | A viewing system with interpupillary distance compensation based on head motion |
| JP7438188B2 (en) | 2018-08-03 | 2024-02-26 | マジック リープ, インコーポレイテッド | Unfused pose-based drift correction of fused poses of totems in user interaction systems |
| CN109143983B (en) * | 2018-08-15 | 2019-12-24 | 杭州电子科技大学 | Motion control method and device for embedded programmable controller |
| EP3840645A4 (en) | 2018-08-22 | 2021-10-20 | Magic Leap, Inc. | PATIENT VISUALIZATION SYSTEM |
| CN109491725B (en) * | 2018-11-12 | 2022-12-27 | 火烈鸟网络(广州)股份有限公司 | Interactive multi-opening method and system of application program, storage medium and electronic equipment |
| JP7472127B2 (en) | 2018-11-16 | 2024-04-22 | マジック リープ, インコーポレイテッド | Image size triggered clarification to maintain image clarity |
| JP7543274B2 (en) | 2018-12-21 | 2024-09-02 | マジック リープ, インコーポレイテッド | Air pocket structures for enhancing total internal reflection in waveguides. |
| CN119200808A (en) * | 2019-02-06 | 2024-12-27 | 奇跃公司 | Clock speed determination and adjustment based on target intent |
| CN113544766B (en) | 2019-03-12 | 2024-12-03 | 奇跃公司 | Registering local content between first and second augmented reality viewers |
| WO2020223636A1 (en) | 2019-05-01 | 2020-11-05 | Magic Leap, Inc. | Content provisioning system and method |
| JP7609844B2 (en) | 2019-07-26 | 2025-01-07 | マジック リープ, インコーポレイテッド | Systems and methods for augmented reality - Patents.com |
| EP4058936A4 (en) | 2019-11-14 | 2023-05-03 | Magic Leap, Inc. | SYSTEMS AND PROCESSES FOR VIRTUAL AND AUGMENTED REALITY |
| CN114667538A (en) | 2019-11-15 | 2022-06-24 | 奇跃公司 | Viewing system for use in a surgical environment |
| CN112907437A (en) * | 2021-03-26 | 2021-06-04 | 长沙景嘉微电子股份有限公司 | Method and device for running multiple 3D processes, electronic equipment and storage medium |
| CN116302579B (en) * | 2023-05-25 | 2023-08-04 | 智成时空(西安)创新科技有限公司 | Space-time big data efficient loading rendering method and system for Web end |
| WO2026019013A1 (en) * | 2024-07-16 | 2026-01-22 | 삼성전자 주식회사 | Electronic device and method for communicating between plurality of processes, and storage medium |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1266512A (en) * | 1997-05-08 | 2000-09-13 | 艾瑞迪公司 | Hardware acceleration for an object-oriented programming language |
| US20040193413A1 (en) * | 2003-03-25 | 2004-09-30 | Wilson Andrew D. | Architecture for controlling a computer using hand gestures |
| US20070121125A1 (en) * | 2003-10-24 | 2007-05-31 | Microsoft Corporation | Framework for Ordered Handling of Information |
| US20070282951A1 (en) * | 2006-02-10 | 2007-12-06 | Selimis Nikolas A | Cross-domain solution (CDS) collaborate-access-browse (CAB) and assured file transfer (AFT) |
Family Cites Families (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2517531B2 (en) * | 1994-02-28 | 1996-07-24 | 株式会社エイ・ティ・アール通信システム研究所 | Posture detection device using stereo images |
| US7548238B2 (en) * | 1997-07-02 | 2009-06-16 | Nvidia Corporation | Computer graphics shader systems and methods |
| JP3762173B2 (en) * | 1999-11-26 | 2006-04-05 | 株式会社東芝 | Computer system, network system, and recording medium |
| SE0000850D0 (en) * | 2000-03-13 | 2000-03-13 | Pink Solution Ab | Recognition arrangement |
| US7366368B2 (en) * | 2004-06-15 | 2008-04-29 | Intel Corporation | Optical add/drop interconnect bus for multiprocessor architecture |
| US7613830B2 (en) * | 2004-12-10 | 2009-11-03 | Microsoft Corporation | Reliably transferring queued application messages |
| EP1851750A4 (en) * | 2005-02-08 | 2010-08-25 | Oblong Ind Inc | System and method for genture based control system |
| JP5007060B2 (en) * | 2006-03-28 | 2012-08-22 | 株式会社野村総合研究所 | Job management apparatus and job management method |
| EP2163987A3 (en) * | 2007-04-24 | 2013-01-23 | Oblong Industries, Inc. | Processing of events in data processing environments |
-
2009
- 2009-10-14 CN CN200980146827.0A patent/CN102224476B/en not_active Expired - Fee Related
- 2009-10-14 JP JP2011532225A patent/JP5805537B2/en not_active Expired - Fee Related
- 2009-10-14 EP EP09821219.4A patent/EP2350774A4/en not_active Withdrawn
- 2009-10-14 KR KR1020117011074A patent/KR101649769B1/en not_active Expired - Fee Related
- 2009-10-14 WO PCT/US2009/060725 patent/WO2010045394A1/en not_active Ceased
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1266512A (en) * | 1997-05-08 | 2000-09-13 | 艾瑞迪公司 | Hardware acceleration for an object-oriented programming language |
| US20040193413A1 (en) * | 2003-03-25 | 2004-09-30 | Wilson Andrew D. | Architecture for controlling a computer using hand gestures |
| US20070121125A1 (en) * | 2003-10-24 | 2007-05-31 | Microsoft Corporation | Framework for Ordered Handling of Information |
| US20070282951A1 (en) * | 2006-02-10 | 2007-12-06 | Selimis Nikolas A | Cross-domain solution (CDS) collaborate-access-browse (CAB) and assured file transfer (AFT) |
Also Published As
| Publication number | Publication date |
|---|---|
| CN102224476A (en) | 2011-10-19 |
| WO2010045394A1 (en) | 2010-04-22 |
| EP2350774A1 (en) | 2011-08-03 |
| JP5805537B2 (en) | 2015-11-04 |
| KR20110079839A (en) | 2011-07-08 |
| JP2012506097A (en) | 2012-03-08 |
| EP2350774A4 (en) | 2014-11-05 |
| KR101649769B1 (en) | 2016-08-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN102224476B (en) | Multi-process interactive systems and method | |
| US10565030B2 (en) | Multi-process interactive systems and methods | |
| US9063801B2 (en) | Multi-process interactive systems and methods | |
| US10990454B2 (en) | Multi-process interactive systems and methods | |
| US9933852B2 (en) | Multi-process interactive systems and methods | |
| US9984285B2 (en) | Adaptive tracking system for spatial input devices | |
| US8669939B2 (en) | Spatial, multi-modal control device for use with spatial operating system | |
| CN103988150B (en) | For the quick finger tip detection for the hand tracker for initializing view-based access control model | |
| US9823747B2 (en) | Spatial, multi-modal control device for use with spatial operating system | |
| CN103930944B (en) | Adaptive Tracking System for Spatial Input Devices | |
| CN102460510B (en) | For the space multi-mode opertaing device used together with spatial operation system | |
| US8665213B2 (en) | Spatial, multi-modal control device for use with spatial operating system | |
| US9052970B2 (en) | Multi-process interactive systems and methods | |
| US20130076616A1 (en) | Adaptive tracking system for spatial input devices | |
| US20150309581A1 (en) | Cross-user hand tracking and shape recognition user interface | |
| CN102804206B (en) | The control system based on posture representing including data, operate and exchanging |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| C10 | Entry into substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant | ||
| CF01 | Termination of patent right due to non-payment of annual fee | ||
| CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170801 Termination date: 20201014 |