Show?过滤器)生成输出帧。组合器450对(例如,DirectX?)呈现管道进行管理。在启动时,组合器450创建顶级(例如,DirectX ? )对象。该组合器随后使用该对象来创建呈现目标,后者被用来将所呈现的视图收集到相机输出帧中。组合器450生成针对呈现目标的背衬结构以及用来提取帧缓冲器的CPU分级结构。在相机视图被呈现之后,呈现目标的背衬结构被复制到CPU分级结构中,后者随后被锁定以提取所呈现的数位。
[0047]在构造之后,组合器450可以在其等待视图被添加至呈现队列时生成空白帧。在视图被添加时,呈现循环针对托管图形在媒体采样接口(例如,MediaSample)中生成帧之前对视图进行迭代。
[0048]如以上参考图3所描述的,在一种实施方式中,DirectShow ?过滤器实施了单个引脚,包括产生图像媒体样本的引脚。视频引脚负责与托管图形和下游过滤器进行格式协商。一旦视频引脚完成该协商,该引脚就创建帧组合器,并且随后开始生成帧。
[0049]图5以示例步骤的形式对这里所描述的一些操作进行了概括,其在步骤502开始,其中虚拟相机与帧源建立连接。在步骤504,帧被读入分级图形结构,并且在步骤506,该结构被复制(例如,以异步方式)到图形卡的存储器的硬件加速结构中。
[0050]以规律的间隔,由步骤508所表示的,呈现线程列举视图对象。在步骤510,对动画进行更新,应用网格和着色程序对象,并且对结构进行呈现。一旦视图被呈现,该虚拟相机就将所产生的呈现帧从图形卡的存储器复制到计算机主存储器中的结构中,其在那里被重新封装为媒体样本以便由主机应用的视频管道进一步进行处理(步骤512)。
[0051]转向另一个方面,源之一可以提供增强现实数据或者被组合为图像的一部分的其它叠加数据。为此,如图6中所表示的,相机650提供相机数据652,并且叠层数据源654提供叠层数据。示例的叠层数据可以包括“投影”文本或图形,在显示中坐着和/或移动的虚拟头像,可以悬在底层视频流上方的?目息或虚拟对象,等等。
[0052]如这里所描述的,虚拟相机实例656使用由主机应用662所指示的任意变换660而将相机数据652和叠层数据654组合为所组合的帧集合658,后者包括被结合的相机数据652和叠层数据654。当远程应用664接收到视频流时,该被结合的相机数据和叠层数据658已经存在于每个帧中。因此,如呈现帧666中所表示的,视图可以具有在人的图像上方悬着的人名标签,对象可以被标记等等。动画可以按需要在帧之间对头像、标签、虚拟对象等进行移动。
[0053]如以上所描述的,用户可以控制(框668)叠层数据。例如,用户可以关闭头像、关闭标签、请求增强型标签(例如,不仅看到用户的姓名而且还看到有关那个人的简介)等。如这里所描述的,任何且所有的组合都可以经由服务器侧的虚拟相机来进行,由此远程客户端应用就像许多类型的客户端应用已经被配置为所做的那样仅需要接收并呈现视频流。
[0054]注意到,使用高性能图形会处理器允许在将视频流输出至远程流之前利用各种效果对其进行操控。
[0055]应当注意的是,虽然这里所描述的技术是参考将多个数据源(例如,多个相机或来自单个相机的不同视图)结合为单个数据帧进行描述的,但是该技术可以输出比单个帧更多的帧。例如,不同于单个虚拟相机,虚拟相机可以包括均能够对来自多个源的视频进行组合的两个组件集合,并且因此可以被用作对预期立体相机输入的应用的输入。接收立体相机输入的程序可以从并非虚拟相机的第一相机以及作为虚拟相机的第二相机接收输入。基本上,在任何预期相机输入(单个或立体)的地方,虚拟相机或虚拟相机集合都可以被替代以提供该输入。
[0056]示例网络和分布式环境
本领域技术人员能够意识到,这里所描述的各个实施例和方法能够结合任意计算机或其它客户端或服务器设备来实施,它们能够被部署为计算机网络的一部分或者被部署在分布式计算环境之中,并且能够连接至任意类型的一个或多个数据存储装置。就此而言,这里所描述的各个实施例能够在具有任意数量的存储器或存储单元以及跨任意数量的存储单元进行的任意数量的应用和处理的任意计算机系统或环境中实施。这包括但并不局限于具有部署在网络环境或分布式计算环境中的服务器计算机和客户端计算机的环境,它们具有远程或本地的存储。
[0057]分布式计算通过计算设备和系统之间的通信交换而提供了计算资源和服务的共享。这些资源和服务包括信息交换,针对诸如文件的对象的高速缓存存储和磁盘存储。这些资源和服务还包括处理功率为了负载平衡、资源扩展、处理特殊化等而跨多个处理单元的共享。分布式计算利用了网络连接性,这允许客户端对它们共同的功率进行利用从而使得整个企业获益。就此而言,各种设备可以具有可以参与到如针对该主题公开的各个实施例所描述的资源管理机制之中的应用、对象或资源。
[0058]图7提供了示例性的联网或分布式计算环境的示意图。该分布式计算环境包括计算对象710、712等以及计算对象或设备720、722、724、726、728等,它们可以包括由示例应用730、732、734、736、738所表示的程序、方法、数据存储装置、可编程逻辑等。能够意识到的是,计算对象710、712等以及计算对象或设备720、722、724、726、728等可以包括不同设备,诸如个人数字助理(PDA)、音频/视频设备、移动电话、MP3播放器、个人计算机、膝上电脑等。
[0059]每个计算对象710、712等以及计算对象或设备720、722、724、726、728等能够利用通信网络740直接或间接地与一个或多个其它的计算对象710、712等以及计算对象或设备720、722、724、726、728等进行通信。尽管在图7中被图示为单个元素,但是通信网络740可以包括向图7的系统提供服务的其它计算对象和计算设备,和/或可以表示多个互连的网络,它们并未被示出。每个计算对象710、712等或计算对象或设备720、722、724、726、728等还可以包含诸如730、732、734、736、738之类的应用,它们可能利用API或其它对象、软件、固件和/或硬件,后者适于与依据该主题公开的各个实施例中所提供的应用进行通信或者适于该应用的实施方式。
[0060]存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统能够通过有线或无线系统、通过本地网络或广泛分布的网络连接在一起。目前,虽然任何网络基础设施都能够用于针对如各个实施例中所描述的系统而容易进行的示例性通信,但是许多网络耦合至互联网,后者提供了用于广泛分布的计算的基础设置并且涵盖了许多不同的网络。
[0061]因此,诸如客户端/服务器、端对端或混合体系结构的网络拓扑和网络基础设施中的主机都能够被加以利用。“客户端”是使用与其并不相关的另一个类别或群组的服务的类别或群组的成员。客户端可以是处理,例如大致为指令或任务的集合,其请求另一个程序或处理所提供的服务。客户端处理采用所请求的服务而无需“了解”与其它程序或服务自身相关的任何工作细节。
[0062]在特别是联网系统的客户端/服务器体系结构中,客户端通常是访问由例如服务器的另一个计算机所提供的共享网络资源的计算机。虽然任何计算机根据情况都可以被视为是客户端、服务器或者其二者,但是在图7的图示中,作为非限制性示例,计算对象或设备720、722、724、726、728等能够被认为是客户端而计算对象710、712等则能够被认为是服务器,其中计算对象710、712等用作提供数据服务的服务器,诸如从客户端计算对象或设备720、722、724、726、728等接收数据,存储数据、处理数据,向客户端计算对象或设备720、722、724、726、728 等传送数据。
[0063]服务器通常是能够通过诸如互联网或无线网络基础设施之类的远程或本地网络进行访问的远程计算机系统。客户端处理可以在第一计算机系统中是活动的,而服务器处理则可以在第二计算机系统中是活动的,上述第一和第二计算机系统通过通信媒体互相通信,因此提供分布式功能并且允许多个客户端利用服务器的信息收集能力。
[0064]例如,在其中通信网络740或总线为互联网的网络环境中,计算对象710、712等可以是Web服务器,其它计算对象或设备720、722、724、726、728等经由诸如超文本传输协议(HTTP)之类的多个已知协议的任一个与之进行通信。用作服务器的计算对象710、712等也可以用作客户端,例如计算对象或设备720、722、724、726、728等,因为这可能是分布式计算环境的特性。
[0065]示例计算设备
如所提到的,有利地,这里所描述的技术能够被应用于任意设备。因此,能够理解的是,手持、便携式和其它计算设备以及所有类型的计算对象都预期结合各个实施例而使用。因此,以下在图8中所描述的通用远程计算机仅是计算设备的一个示例。
[0066]实施例能够部分经由操作系统来实施,以便由服务的开发方用于设备或对象,和/或包括在进行操作以执行这里所描述的各个实施例的一个或多个功能方面的应用软件之内。软件可以在由诸如客户端工作站、服务器或其它设备的一个或多个计算机所执行的诸如程序模块之类的计算机可执行指令的一般上下文中进行描述。本领域技术人员将会意识至IJ,计算机系统具有能够被用来传输数据的各种配置和协议,并