视频显现网络管理方法转让专利

申请号 : CN200510089687.1

文献号 : CN1716194B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : B·L·兰雷M·J·安德鲁斯M·米利鲁德

申请人 : 微软公司

摘要 :

本发明涉及一种具有多个输出的视频显现网络的资源,该资源可以被配置。可以支持一个临时配置。输入配置可以与输出配置分开完成。网络资源之间的相关性可以被考虑为将所提供的选项限制为那些与一个临时配置共同作用的选项。客户可以利用一组由服务器经过配置解空间提供的功能。这些功能可以支持一个相互影响的配置方式。可以将考虑相关性的责任交给一个视频驱动器,例如一个视频微端口。客户可以利用多种方法找出所要求的配置。这个要求的配置可以被作为NP-完全图形问题的一个解决方法。考虑到相关性可以获得多种配置目标(例如最佳配置)。

权利要求 :

1.一种配置包含多个资源和包含多个输出的视频显现网络的方法,该方法包括:接收该视频显现网络的部分配置的指示,其中该部分配置包括用于所述视频显现网络的所述多个资源中的第一资源的配置的指示;

基于所述视频显现网络的所述多个资源之间的相关性,为该视频显现网络的所述多个资源中的第二资源确定一个或多个配置选项,所述一个或多个配置选项与该视频显现网络的所述部分配置的指示共同作用;以及为该第二资源指示共同作用的配置选项。

2.如权利要求1所述的方法,其特征在于:所述接收动作由视频驱动器执行;

所述确定动作由该视频驱动器执行;并且所述指示动作由该视频驱动器执行。

3.如权利要求2所述的方法,其特征在于:该视频驱动器包括视频微端口;

所述接收动作由该视频微端口执行;

所述确定动作由该视频微端口执行;并且所述指示动作由该视频微端口执行。

4.如权利要求1所述的方法,其特征在于:响应于对设备驱动器接口的枚举功能的编程调用来执行所述指示动作。

5.如权利要求1所述的方法,其特征在于:所述指示动作为该视频显现网络的所述多个资源指示共同作用的配置选项。

6.如权利要求1所述的方法,其特征在于:该第一资源位于该视频显现网络的第一视频路径中;并且该第二资源位于该视频显现网络的第二视频路径中。

7.如权利要求1所述的方法,其特征在于:所述视频显现网络的该部分配置为该视频显现网络的多个视频输入中的一个指示配置。

8.如权利要求1所述的方法,其特征在于:所述视频显现网络的该部分配置为该视频显现网络的多个视频输出中的一个指示配置。

9.如权利要求1所述的方法,其特征在于:该视频显现网络的该部分配置为该视频显现网络的多个数字-视频-输入-显现-至-视频-输出-信号转换器中的一个指示配置。

10.如权利要求9所述的方法,其特征在于:该数字-视频-输入-显现-至-视频-输出-信号转换器包括视频编解码器。

11.如权利要求9所述的方法,其特征在于:该数字-视频-输入-显现-至-视频-输出-信号转换器包括数模转换器。

12.如权利要求1所述的方法,其特征在于:该第一资源包括该视频显现网络的输入;并且该第二资源包括该视频显现网络的输出。

13.如权利要求1所述的方法,其特征在于:该视频显现网络的该部分配置为该视频显现网络指示拓扑。

14.如权利要求1所述的方法,其特征在于:该视频显现网络的该部分配置指示从视频适配器输出至视频设备的映射。

15.一种配置包含多个资源和包含多个输出的视频显现网络的设备,该设备包括:接收该视频显现网络的部分配置的指示的逻辑模块,其中该部分配置包括用于所述视频显现网络的所述多个资源中的第一资源的配置的指示;

基于所述视频显现网络的所述多个资源之间的相关性,为该视频显现网络的所述多个资源中的第二资源确定一个或多个配置选项的逻辑模块,所述一个或多个配置选项与该视频显现网络的所述部分配置的指示共同作用;以及为该第二资源指示共同作用的配置选项的逻辑模块。

说明书 :

技术领域

本技术领域涉及视频显示适配器(例如计算机显示卡)的配置。

背景技术

使用多个监视器的计算机系统正在普及。例如,现在对于一个计算机来说,驱动一个LCD显示控制板和一个投影机装置是很普通的。此外,现在计算机使用者常规地使用他们的计算机观看视频图像(例如DVD)。在这种情况下,该计算机可能驱动一个传统的监视器和一个电视机。
为适应需要,现在视频适配器硬件制造者使视频适配器上包括多个输出。这样,一个使用者可以更加容易地使用一个计算机以便驱动希望的装置,而不必切换用于单独输出的电缆以及重新调整输出。
虽然这样的多监视器视频适配器具有多种功能,但是可利用的配置通常有限。因此,需要改进与配置多监视器计算机系统相关的功能。

发明内容

由于可能的配置的绝对数量以及在资源之中的配置相关性,配置一个具有多个输出的视频显现网络是有挑战性的。
在此描述的多种技术可以用于一个具有多个输出的视频显现网络的配置资源。例如,临时的配置可被支持。输入的配置可与输出的配置分开实现。网络资源之间的相关性可被认为将所提供的选项限制到那些与临时配置共同起作用的选项。一个客户可以使用一个服务所提供的一组功能以便横越配置解决方案空间。横越可能的配置解决方案可以包括反馈。例如,当一个选择的配置选项使另一个希望的配置选项无效时,可以使用反馈。临时的配置功能可以支持相互影响配置方法,并且资源可以被单独地配置。基于网络资源之间的相关性,一个枚举功能可以仅提供那些与临时配置共同起作用的选项。枚举的选项的有效性在固定之后可被保证。
该功能可被组合到包括枚举配置(例如那些与临时配置共同起作用的配置)的调用和固定资源的接口中。可以提供其它的调用以便建立一个配置和提交该配置。该功能可以支持一个相互影响配置方法。
根据相关性可以得到最符合配置目的的拓扑。例如,可以找到一种通过可利用的编解码器布置目标到源以便最大程度上支持源模式组的最好方式,假设目标必须支持与它们连接的显示装置上的较佳模式。其它的目的可被支持。优先化排序也可被支持。在一个较符合该目的的拓扑的实行期间可以使用枚举和固定功能。
临时配置可以借助于配置不同资源(例如一个用于一个视频输出的调用以及另一个用于一个视频输入的调用)的分离的装置驱动器接口调用支持增加的配置。在调用之间,枚举可以表示用于保持未固定的(例如还没有临时地配置的)资源共同起作用的资源。
考虑相关性的责任可被委托给(例如由其实现)一个视频驱动器,诸如一个视频小端口。一个客户可以使用多种方法以便得到一个希望的配置。该希望的配置可被作为一个NP-完全图表问题的解决方法对待。
从下列参照附图进行的公开的实施例的详细描述,上述的和其它的特征和优势将变得更加明显。
附图简述
图1是一个示范性的可配置的视频显现网络的方框图。
图2是另一示范性的可配置的视频显现网络的方框图。
图3是一个视频显现网络配置的组合的方框图。
图4是用于配置诸如在图1中示出的可配置的视频显现网络的方法的流程图。
图5是诸如在图1中示出的视频显现网络的示范性的临时配置的图表。
图6是实现诸如在图1中示出的视频显现网络的配置的示范性的相互影响方法的方框图。
图7是借助于相互影响方法实现配置的示范性方法的流程图。
图8A是在诸如图1中示出的视频显现网络的临时配置期间用于反馈的示范性的源的方框图。
图8B是与图8A相似的用于反馈但是有多个资源的反馈的示范性的源的方框图。
图9A、9B和9C是在固定期间用于多个资源的示范性的共同起作用的选项的方框图。
图10A、10B和10C是在固定期间用于多个资源的另一示范性的共同起作用的选项的方框图。
图11是用于获得诸如在图1中示出的视频显现网络的配置的一个示范性的具有反馈的相互影响方法的方框图。
图12是用于从服务器观点借助于具有反馈的相互影响方法实现配置的一个示范性方法的流程图。
图13是用于从客户观点借助于具有反馈的相互影响方法实现配置的一个示范性方法的流程图。
图14是其中可以实现临时配置的示范性结构的方框图。
图15是配置一个视频显现网络的示范性方法的流程图。
图16是通过系统地横越解空间从而会聚在希望的配置上来得到一个希望的配置的示范性方法的流程图。
图17A-B是通过系统地横越解空间从而会聚在希望的配置上来得到一个希望的配置的第一示范性详细方法的流程图。
图18A-C是通过系统地横越解空间从而会聚在希望的配置上来得到一个希望的配置的第二示范性详细方法的流程图。
图19是确定视频显现网络的拓扑的示范性方法的流程图。
图20是在客户和服务器之间调用以得出用于视频显现网络的配置的方框图。
图21是将技术的实施整合到具有多个视频显示装置的计算机系统中的方框图。
图22是优先考虑确定希望的视频配置的客户-服务器系统的方框图。
图23是在诸如图22的客户-服务器中确定希望的视频配置的示范性方法的流程图。
图24是通过系统地横越解空间的来得到希望的配置的示范性方法的流程图,其中在该方法的执行中可以改变该拓扑。
图25是示范性的多监视器/多视图系统的方框图。
图26是描述组成用于实现所公开的技术的一个示范性系统的通用计算装置的示意图。

具体实施方式

实施例1-示范性的视频显现网络
图1示出可配置的视频显现网络100。在本文中在任一实施例中描述的技术可以用于配置该视频显现网络100。
以在此描述的技术的方式使用的视频显现网络100可以具有一个或多个输入110A-110N(例如总共∑个输入,σ)、两个或多个输出120A-120N(例如总共T个输出,τ)以及一个或多个数字-视频-输入-表示-成-视频-输出-信号转换器130A-130N(例如总共K个转换器,κ)。
输入110A-110N有时称为“源”或“表面”。输出120A-120N有时称为“目标”。数字-视频-输入-表示-成-视频-输出-信号转换器有时称为“转换器”。
除输入、转换器和输出之外,该视频显现网络可以包括其它的资源140(例如视频存储器、带宽、存储容量等等)。其它的资源140可以被输入、转换器和输出使用以便获得视频显现功能。
视频显现网络100可以硬件形式诸如一个视频显示适配器(例如显示卡)实现。有时,一些资源可以位于该适配器外部。
一个示范性的计算机系统可以包括一个或多个数字形式的视频视图(例如通过该计算机系统的应用被写入的),通过输入110A-110N使用这些视频视图。来自多个输出120A-120N的得到的信号可以用于驱动多个视频显示装置。
实施例2-示范性的可替代的视频显现网络
图2示出另一可配置的视频显现网络200。在本文的任一实施例中描述的技术都可以用于配置该视频显现网络200。
在该实施例中,多个输入可被用于一个单独的数字-视频-输入-表示-成-视频-输出-信号转换器(例如输入210B和210N都用作转换器230N的输入)。这样的配置在通过使用具有两个输入的视频输出编解码器在另一个视频信号上部重叠一个视频信号中是有用的,其中该第一输入是主要内容并且该第二输入是重叠内容。在这样的情况下,重叠的位置和尺寸可被规定为用于表示重叠内容的视频显现网络源的视频显现源模式的一部分。
视频显现网络可以采用许多其它的形式,具有任意数量的输入、转换器以及多个输出。
实施例3-示范性的视频显现网络资源
在本文中的任一实施例中,一个资源可以包括视频显现网络输入(例如源或表面)、视频显现网络输出(例如目标)、转换器、视频存储器、带宽、存储容量等等。
一个视频显现网络的拓扑有时也称为一个资源。例如,配置一个资源可以包括仅仅选择一个拓扑,而不考虑选择用于包括在该拓扑中的单个资源的配置选项。
实施例4-在一个视频显现网络中的示范性的视频路径
一个视频显现网络100可以具有多个视频路径。例如,如图1中所示,一个路径可以从输入110A,经过转换器130A,到达输出120A。另一路径可以从输入110A经过转换器130A到达输出120B,等等。
视频显现网络100的拓扑可以被配置以便根据该配置存在不同的路径。例如,代替发送转换器130N的输出到视频输出120N,通过改变配置设置可以布置到不同的视频输出(例如120B)。
实施例5-示范性的视频显现网络输入
在此描述的任一实施例中,视频输入(或“源”)可以采取各种形式,诸如那些提供数字表面的输入。实际上,输入可以配置成使用各种源模式。这样的模式可以包括参数,诸如宽度、高度、单元格式、光栅化的图像滤波技术、主表面链接长度等等,或者一些它们的组合。
实施例6-示范性的视频显现网络输出
在此描述的任一实施例中,视频输出(或“目标”)可以采取各种形式,诸如那些提供输出信号的输出。一个描述符可以与输出相联系。该描述符可以表示一个格式(例如DVI、HDMI、HD-15、BNC、S-视频、RF、RCA等等)和HPD感知。输出也可以与视频编码类型相联系。此外,一个输出可以配置成与另一输出同步。
实际上,输出可以配置成使用各种目标模式。这样的模式可以包括参数,诸如有源区域(例如宽度和高度)、总区域(例如宽度和高度)、有源区域位移、像素编码格式、垂直回扫频率、水平回扫频率、像素时钟频率、内容排序、彩色原色、白点参照、彩色空间转换矩阵等等,或者它们的一些组合。
实施例7-示范性的转换器
在本文的任一实施例中,一个数字-视频-输入-表示-成-视频-输出-信号转换器可以采取一个视频编解码器、一个数字-到-模拟转换器等等的形式。一些转换器是可分享的。例如,在一个复制(例如镜象)模式中,一个编解码器可以发送信号到两个输出。
实施例8-示范性的资源的相关性
虽然理论上任何数量的视频显现网络100的配置都是可能的,但是只有有限数量的理论的配置是起作用的配置。实际上,视频显现网络100的资源是以配置相关性为条件的。
例如,配置视频输入110A成为一个特定的类型可以消耗大量视频存储器。在这种情况下,没有足够的剩余的存储器用于使另一视频输入(例如110N)成为同样的类型。例如,它只能配置成消耗较少存储器的类型。
存在许多种其他的相关性。例如,转换器可以只接收特定的视频输入类型或者只产生特定的视频输出类型。因此,一个特定输入与一个特定转换器结合可能不起作用,诸如此类。
因此,实际上,实现希望的配置的障碍在于它可能是不起作用的。此外,不容易从视频显现网络的无数的理论上可能的视频显现网络组合当中确定哪个组合是起作用的,其中视频显现网络具有多个视频输入、多个转换器以及多个视频输出(其可以各种方式互连)。
图3是用于一个视频显现网络的可配置的资源的组合的方框图。在该实施例中,该理论上可能的配置300可通过将一个或多个配置的第一资源302(例如一个视频显现网络输入)与一个或多个配置的第二资源304(例如一个视频显现网络转换器)相连接,其中该第二资源304与一个或多个配置的第三资源306(例如一个视频显现网络输出)相连接。该得到的理论上可能的配置310的组作为可能配置的大量的集合示出,依赖于其中资源的配置,这些可能配置中的一些是起作用的,并且另一些是不起作用的。
在这样的大量的解决方法空间中得到用于最佳配置的解决方法是一个三分裂的图表匹配问题,其是一个NP-完全问题。因此,当用于资源的可能的配置的数量超过一个合理的数量时,使用穷举法可能是有问题的。
实施例9-示范性的配置
在此描述的任一实施例中,资源的配置可以采取多种形式,包括选择用于一组视频显现网络的资源的拓扑或者选择用于网络(例如无论网络是否互相连接)中一个或多个资源的配置选项(例如模式)。
实施例10-示范性的配置方法
图4示出可用于在此描述的任何视频显现网络以便获得配置的示范性的配置方法400。该方法和任何在此描述的其它方法可以通过在一个或多个计算机可读介质上的计算机可执行指令实现。
在410,接收视频显现网络的第一资源的配置的指示。例如,可以接收用于视频显现网络的一个特定视频输入的配置。
在420,与该第一资源的配置的指示分离地接收该视频显现网络的第二资源的配置的指示。例如,可以接收用于视频显现网络的多个输出的一个特定视频输出的配置。
接着,在430,根据配置的指示配置该视频显现网络。
实际上,用于视频显现网络的任何资源(例如,用于两个不同的输入、两个不同的输出、两个不同的转换器、一个转换器和一个输出等等)的另外的配置的指示可以单独地接收。
单独地接收的指示可以包括通过使用两个不同的调用所接收的那些指示,诸如到编程接口的那些调用(例如装置驱动器接口调用)。例如,可以使用两个不同的装置驱动器的调用。或者,在同一调用中可以使用两个不同的参数。或者,可以使用单独的值表示资源的一个或多个数据结构。这样的调用可以来自一个客户,诸如一个操作系统。
用这样一种方法,视频显现网络的资源可以被独立配置。这样的配置还可以表示用于视频显现网络的拓扑(例如资源是怎样互相连接的)。
实施例11-示范性的临时的配置
使用一个临时配置方法可以促进各种功能,包括在无数可能的功能配置中得到一个希望的配置。图5示出了表示诸如在图1中示出的视频显现网络的资源的临时配置的图表500。
在该实施例中,资源σ1已经被临时配置了(例如,用于视频显现网络的资源的配置参数被存储,但是该配置不需要是完全起作用的)。这样的一个临时配置可以是以部分配置(例如来自视频显现网络资源的一个资源的配置或者该视频显现网络的拓扑的指示)的接收为基础的。对于一个临时配置不需要接收所有资源的配置。因为没有全组配置参数的配置通常仍然不起作用,所以一个临时配置有时称为“半-功能的”。提供用于一个资源的部分配置有时称为“固定”该资源。如果需要,该部分配置可被移除(或忽略)。移除该部分配置有时称为“未固定”。
实施例12-示范性的相互影响配置
获得一个视频显现网络的配置的相互影响方法可以是以所描述的临时配置为基础的。图6示出用于借助于一个相互影响方法获得视频显现网络630(例如在图1中示出的视频显现网络)的配置的示范性的设置600。
在该实施例设置600中,一个客户610可以发送用于视频显现网络的部分配置信息到服务器620。依据接收到一个提交,然后服务器620可以根据部分配置的指示配置视频显现网络630。
图7示出用于借助于相互影响方法执行配置的示范性的方法700。在710,接收到一系列用于视频显现网络的部分配置(例如通过一个服务器从一个客户接收)。该部分配置可以用于建立一个临时起作用的配置。
在720,该临时起作用的配置被提交。该提交可以在视频显现网络(例如网络630)中实现临时起作用的配置。
一个临时起作用的配置在没有被实现的情况下可以被存储。例如,该配置可以在没有配置视频显现网络的资源的情况下被存储视频显现(例如直到提交的配置指示被处理)。
实施例13-示范性的共同起作用的配置选项的确定
由于视频显现网络的资源之间的相关性,考虑到已经装配的一个临时起作用的配置,一些理论上可能的配置选项也许是不起作用的。例如,假定资源σ1已经被临时配置了(例如,如图5中所示),对于视频显现网络的另一资源(例如σ∑)可利用的配置选项可能被限制。
图8A示出考虑到另一资源σ1已经被临时配置时用于一个资源σ∑的示范性的配置选项组850,从该选项中只有一个子组860配置选项是可利用的(例如将产生一个起作用的配置)。在这样的设置中,该可利用的配置选项有时描述为与另一个配置选项(例如该临时起作用的配置的选项)“共同起作用的”或者“未使无效”临时配置。
用于一个资源的共同起作用的配置选项组860在一个处理的临时配置期间有时称为“枚举”可被作为反馈提供。然后这样的反馈可以用于作出关于进一步的配置的决定(例如用于进一步的建立临时起作用的配置或者用于反馈到一个较早的临时起作用的配置)。
有时,可能希望从该临时起作用的配置移除一部分配置。例如,可能发现该临时起作用的配置不允许一个至今未配置的资源以希望的方式配置。因此,在此描述的任一配置方法可以包括接收一个指示以便从该临时起作用的配置移除一部分配置并且响应于接收指示来移除该部分配置(或者,仅仅一个新的部分配置来覆盖旧的部分配置)。因此,一个方法可以反馈(例如末固定一个资源)到一个较早的临时起作用的配置(例如在提交该临时起作用的配置之前)。
实施例14-用于多个资源的共同起作用的配置选项的示范性的确定
实际上,可能希望立刻确定用于多个资源的共同起作用的配置选项。例如,在一个给定的拓扑作为一个部分配置的一部分被选择后,可能希望枚举用于视频显现网络资源的配置选项,该配置选项是与所选的拓扑共同起作用的。
图8B示出其中示出用于各个资源(例如σ1、σ2和σ3)的共同起作用的配置选项880A、880B和880C的设置,其中示出同时用于超过一个资源的配置选项。该示出的共同起作用的配置选项相对于所选择的拓扑是共同起作用的。该选项相对于彼此可能不是共同起作用的。例如,为第一资源选择共同起作用的选项中的一个可能使另一资源的另一个共同起作用的选项无效(例如,与另一资源的另一共同起作用的选项不是共同起作用的)。
在该实施例中,考虑到所选择的拓扑,至少一些原始选项(例如870A、870B和870C)不再是可利用的(例如不是共同起作用的)。当为其它资源(例如目标)枚举选项时,一个类似的设置是可能的。
这样的选项可以通过软件(例如一个视频驱动器)枚举。在此描述的任一实施例中,如果为一个资源选择了任一枚举的选项,则可能希望保证这样的选择与用于任何其它资源的至少一个(例如不会使所有的无效)选项是共同起作用的。
实施例15-示范性的在固定期间共同起所用的选项的无效
实际上,在已经枚举了用于多个资源的与一个拓扑共同起作用的配置选项(例如,对于多个资源)之后,这样的配置选项可被包括在一个部分、临时配置中。然而,固定(例如临时选择)用于第一资源的一个配置选项可能使用于另一资源的另一选项无效(例如,与另一选项不是共同起作用的)。
图9A-C示出选择用于一个资源的配置选项使用于另一资源的配置选项无效的例子。一个拓扑可被选择。图9A示出在选择了一个拓扑后枚举的共同起作用的选项920A、920B和920C(例如分别是理论上可能的选项910A、910B和910C的子组)。接着,图9B示出对于第一资源已经选择(例如固定)了一个特定选项921。因此,用于另一个资源的一些配置选项可能不再是可利用的(例如它们是无效的)。在该实施例中,一个选项不再出现在920B’中。有时,其它选项是无效的。或者,也许没有选项是无效的。
图9C示出对于另一个资源已经选择了(例如固定的)一个特定选项922。因此,用于剩余的资源的一些配置选项可能不再是可利用的。在该实施例中,一个选项不再出现在920C”中。有时,用于第一资源的一些选项也可能是无效的(例如,产生一组920A’,未示出)。然而,实际上,在一个资源被固定后
(例如对于该资源已经选择了一个配置选项),该固定的配置选项不会由于选择另一个枚举的配置选项而无效。
由于在图9A-9C中示出的现象,当对于多个资源枚举时,在固定一个资源后有必要检查无效的选项。这可以通过重新枚举来执行。
实施例16-在另一固定情况期间示范性的共同起作用的选项的无效
图10A-C示出其中选择用于一个资源的的配置选项使用于另一资源的配置选项无效的另一例子。一个拓扑可被选择。图10A示出在选择了一个拓扑后枚举的共同起作用的选项1020A、1020B和1020C(例如,分别是理论上可能的选项1010A、1010B和1010C的子组)。接着,图10B示出对于第一资源已经选择了(例如固定的)一个特定选项1021。因此,用于另一资源的一些配置选项可能不再是可利用的(例如,它们是无效的)。在该实施例中,一个选项不再出现在1020B’中。有时,其它选项是无效的。或者,也许没有选项是无效的。
图10C示出对于另一资源已经选择了(例如固定的)一个特定选项1022。因此,用于剩余资源的一些配置选项可能不再是可利用的。在该实施例中,一个选项不再出现在1020C”中。有时,用于第一资源的一些选项也可能是无效的(例如产生一组1020A’,未示出)。然而,实际上,在固定了一个资源后(例如对于该资源已经选择了一个配置选项),该固定的配置选项不会由于选择另一个枚举的配置选项被无效。许多其它的情况是可能的。
实施例17-示范性的具有反馈的相互影响方法
图11示出用于借助于一个具有反馈的相互影响方法获得视频显现网络1130(例如图1中示出的视频显现网络)的配置的示范性的设置1100。
在该示例设置1100中,一个客户1110可以发送用于视频显现网络的部分配置信息到服务器1120。该部分配置信息可以用于视频显现网络的任一资源。该部分配置可以表示该视频显现网络的一个拓扑。
在接收到该配置信息(例如一个部分配置,诸如用于第一资源)后,共同起作用的配置选项(例如用于第二资源)可以被提供。该共同起作用的配置选项可以用于不同于该部分配置的资源,用于在不同路径中的资源等等。该共同起作用的选项基于该配置信息可以被限制(例如至少一个非共同起作用选项被移除)。如在此描述的,该选项可以通过枚举被提供,并且可以同时对多个资源作出枚举。
用于另一资源的共同起作用的配置选项可以是以视频显现网络的资源之间的相关性为基础的。该客户可以从共同起作用的配置选项之间选择,并且继续建立一个临时起作用的配置。
依据接收到一个提交,该服务器1120可以根据部分配置的指示接着配置该视频显现网络1130。
图12示出用于从服务器观点执行具有反馈的配置的示范性方法1200。该方法可以借助于在图11中示出的设置操作。在1210,一个部分视频显现网络配置的指示被接收。例如,该部分配置可以表示用于该视频显现网络的第一资源的一个配置。
在1220,共同起作用的配置选项被表示(例如,如以上对于图11A或11B所描述的)。可替代地,除一个或多个非共同起作用的配置选项之外,所有的配置选项可以被表示,在该选项被表示之前,非共同起作用的选项将从被表示的选项中移除。该方法也可以包括一个提交(未示出),通过该提交该配置可以被提交到视频显现网络。
图13示出用于从客户观点执行具有反馈的配置的示范性的方法1300。该方法可以借助于在图11中示出的设置操作。在1310,一个部分视频显现网络配置的指示被发送。例如,该部分配置可以表示用于视频显现网络的第一资源的配置。
在1320,一组共同起作用的配置选项(例如,如以上对于图11A或11B所描述的)被表示。此外,该方法也可以包括一个提交(未示出),通过该提交该配置被提交到视频显现网络。
实施例18-在视频驱动器中的示范性的服务器实施
确定共同起作用的配置选项可以委托给一个视频驱动器。在此描述的任一实施例中,由服务器执行的动作可以被一个视频驱动器(例如一个视频小端口)执行。
图14示出其中具有反馈的临时配置可被实现的示范性结构1400。该实施例包括一个客户1410(例如一个操作系统,诸如图形子系统,一个应用,等等)、一个具有相关性逻辑1425的驱动器1420(例如以内核模式操作的装置-特定的视频驱动器)以及一个视频适配器1430,该视频适配器提供视频输出到多个显示装置1440A-1440N。
在此描述的任何实施例中,该视频驱动器1420可以用作一个服务器。该相关性逻辑1425可以包括用于接收部分配置、枚举共同起作用的配置选项、以及提交一个配置的功能。
因此,一个显示适配器的硬件厂家可以开发一个结合适当的相关性逻辑1425的合适的驱动器1420以便帮助确定一个希望的视频显现网络配置。
实施例19-示范性的优势
在一个视频驱动器中实现相关性逻辑,如在实施例18中所讨论的,通过减少具有某组限制的给定硬件实施的范围可以简化确定一个合适的配置。如果该逻辑改为在该操作系统中,该任务可能是更加复杂的(例如,需要是完全的通配的并且支持每个可能的相关性)。
实施例20-视频显现网络的示范性的配置
图15示出借助于部分配置用于视频显现网络的配置的示范性方法1500。在1504,用于该视频显现网络的拓扑被选择。在1506,用于资源的配置选项被枚举并固定。在1508,用于目标的配置选项被枚举并固定。一个提交(未示出)可被用于实现该配置。
在本文的任一实施例中,虽然有时示出的资源是在目标之前被固定的,但是不必是这样的情况。例如,目标可以在资源之前被固定。
实施例21-示范性的横越解空间集中在起作用的配置
图16示出横越可能起作用的多个视频输出配置组合的图表的示范性方法1600的流程图。这样的方法可被与一个服务器(例如视频驱动器1420)相互作用的客户(例如客户1410)使用。该实施例示出一个视频小端口,但是另一个视频驱动器(例如视频驱动器1420)可被使用。
该实施例还包括一个固定的拓扑有作用的视频显现网络配置搜索,但是其它实施例可以包括在该搜索期间改变该拓扑的选项。例如,在一个视频显现源模式在视频显现网络源上固定使得用于另一视频显现网络源的至少一个其它视频显现源模式无效后,可能希望改变一个拓扑。
在1602,一个希望的视频显现网络拓扑已经被选择。
在1604,已知该希望的视频显现网络拓扑,对于一个视频显现网络配置(例如拓扑)查询一个视频小端口,该视频显现网络配置支持在至少一个视频显现网络目标(例如所有的目标)上的至少一个支持监视器的视频信号模式(例如所有的模式)。
在1606,枚举在所获得的视频显现网络配置(例如拓扑)中的至少一个视频显现源(例如所有的源)上的该可利用的视频显现源模式的组。
在1608,一个视频显现源模式被固定在至少一个视频显现网络源(例如所有的源)上。
在1610,确定是否还存在视频显现网络源,一个视频显现源模式将要固定在这些网络源上。如果存在另一将要固定的视频显现网络源,该处理前进到1612。否则,该处理前进到1614。
在1612,确定是否任何以前枚举的视频显现源模式已经是无效的。如果是,该处理回到1606。如果不是,该处理回到1608。在该实施例中,基于另一视频显现源模式的选择,可使至少一个以前枚举的视频显现源模式无效,但是通过这样的选择,不能使所有的视频显现源模式无效。
在1614,枚举在所获得的视频显现网络配置中的至少一个视频显现目标(例如所有的目标)上的该可利用的视频显现目标模式的组。
在1616,一个视频显现目标模式被固定在至少一个视频显现网络目标(例如所有的目标)上。
在1618,确定是否还存在视频显现网络目标,一个视频显现目标模式将要固定在这些网络目标上。如果存在另一将要固定的视频显现网络目标,该处理前进到1620。否则,该处理前进到1622。
在1620,确定是否任何以前枚举的视频显现目标模式已经被无效。如果是,该处理回到1614。如果不是,该处理回到1616。
在1622,一个最后所得到的起作用的视频显现网络配置组合被提交。
实施例22-第一示范性具体横越解空间集中在起作用的配置上的例子
图17A-B示出横越可能的起作用的多个视频输出配置组合的图表的第一示范性具体方法1700的流程图。这样的方法可被与一个服务器(例如视频驱动器1420)相互作用的一个客户(例如客户1410)使用。该实施例示出一个视频小端口,但是另一视频驱动器(例如视频驱动器1420)可被使用。
在1702,已经提供了一个初始的视频显现网络拓扑。
在1704,已知该初始的视频显现网络拓扑,对于一个视频显现网络配置(例如拓扑)查询一个视频小端口,该视频显现网络配置支持在至少一个视频显现网络目标(例如所有的目标)上的至少一个支持监视器视频信号模式(例如所有的模式)。
在1706,作出由1704的查询所规定的视频显现网络拓扑是否被支持的确定。如果所规定的视频显现网络拓扑被支持,接着该处理前进到1708。否则,该处理前进到1710。
在1708,作出当前视频显现网络拓扑是否是最希望的视频显现网络拓扑的确定。如果是,然后该处理前进到1712。否则,该处理前进到1714。
在1710,作出至少一个其它初始视频显现网络拓扑是否存在的确定。如果是,然后该处理回到1704。否则,由于不集中到具有希望的搜索参数的起作用的配置组合,该处理在1790终止。
在1712,枚举在所获得的视频显现网络配置中的至少一个视频显现网络源(例如所有的源)上的可利用的视频显现源模式组。然后该处理前进到1722。
在1714,通过增加或者移除视频显现路径(例如多路径),该视频显现网络拓扑可被调整到一个新的有效的视频显现网络拓扑。接着该处理前进到1716,其中作出该新的有效的视频显现网络拓扑是否被支持的确定。如果是,然后该处理回到1708。否则,该处理前进到1718。
在1718,作出是否存在至少一个其它的希望的视频显现网络拓扑的确定,其中该视频显现网络拓扑可以通过经由有效的视频显现网络拓扑的增加改变来获得。如果是,该处理前进到1720。否则,该处理在1790终止。
在1720,作出仅通过无效拓扑(例如该拓扑不能被进一步调整)另一希望的视频显现网络拓扑是否是可获得的确定。如果是,该处理回到1704。否则,该处理回到1714。
在1722,作出任何枚举的视频显现源模式是否遗漏了相应视频显现网络源所希望的一个模式的确定。如果是,该处理前进到1724。否则,该处理前进到1732。
在1724,作出任何视频显现网络源是否具有一个固定的视频显现源模式的确定。如果是,该处理前进到1728,其中一个固定的视频显现源模式被解除固定,并且然后该处理回到1712。否则,该处理前进到1730。在1728解除固定的该视频显现源模式可以根据视频显现网络源重要性进行排序(例如该源模式可以按重要性从大到小来区分优先次序)。
在1730,作出是否存在对于视频显现网络源可利用的至少一个其它视频显现源模式的确定。如果是,该处理回到1732,其中一个视频显现源模式固定在至少一个视频显现网络源(例如对于所有的源)上,并且然后该处理前进到1734。否则,该处理在1790终止。在1732固定的该视频显现源模式可以根据视频显现网络源重要性进行排序(例如,该源模式可以按重要性从大到小来区分优先次序)。
在1734,确定是否还存在视频显现网络源,该该视频显现网络源上一个视频显现源模式将要被固定。如果存在另一将要固定的视频显现网络源,该处理前进到1736。否则,该处理前进到1738。
在1736,确定是否任何以前枚举的视频显现源模式已经被无效。如果是,该处理回到1712。如果不是,该处理回到1732。
在1738,枚举在所获得的视频显现网络配置中的至少一个视频显现网络目标(例如所有的目标)上的可利用的视频显现目标模式组。
在1742,作出是否任何枚举的视频显现目标模式遗漏了相应视频显现网络目标所希望的一个模式的确定。如果是,该处理前进到1744。否则,该处理前进到1752。
在1744,作出是否任何视频显现网络目标具有固定在其上的视频显现目标模式的确定。如果是,该处理前进到1748,其中一个固定的视频显现目标模式被解除固定,并且然后该处理回到1738。否则,该处理前进到1750。在1748解除固定的该视频显现目标模式可以根据视频显现网络目标重要性排序(例如该目标模式可以按重要性从大到小来区分优先次序)。
在1750,作出是否存在对于视频显现网络目标可利用的至少一个其它的视频显现目标模式的确定。如果是,该处理回到1752,其中一个视频显现目标模式固定在至少一个视频显现网络目标(例如对于所有的目标)上,并且然后该处理到1754。否则,该处理在1790终止。在1752固定的视频显现目标模式可以根据视频显现网络目标重要性排序(例如该目标模式可以按重要性从大到小来区分优先次序)。
在1754,确定是否还存在视频显现网络目标,在该视频显现网络目标上一个视频显现目标模式将要被固定。如果存在另一将要固定的视频显现网络目标,该处理前进到1756。否则,该处理前进到1780。
在1756,确定是否任何以前枚举的视频显现目标模式已经被无效。如果是,该处理回到1738。如果不是,该处理回到1752。
在1780,一个最后得到的起作用的视频显现网络配置组合被提交。
实施例23-第二示范性的横越具体的解空间的集中在起作用的配置上的例子
图18A-C示出横越可能的起作用的多个视频输出配置组合的图表的第二示范性具体方法1800的流程图。这样的方法可以被与一个服务器(例如视频驱动器1420)相互作用的一个客户(例如客户1410)使用。该实施例示出一个视频小端口,但是另一视频驱动器(例如视频驱动器1420)可被使用。
在1802,已经提供了一个初始视频显现网络拓扑。
在1804,已知该初始视频显现网络拓扑,对于一个视频显现网络配置(例如拓扑)查询一个视频小端口,该视频显现网络配置支持在至少一个视频显现网络目标(例如所有的目标)上的至少一个支持监视器的视频信号模式(例如所有的模式)。
在1806,作出由1804的查询规定的视频显现网络拓扑是否被支持的确定。如果该规定的视频显现网络拓扑被支持,然后该处理前进到1808。否则,该处理前进到1810。
在1808,作出当前视频显现网络拓扑是否是最希望的视频显现网络拓扑的确定。如果它是,接着该处理前进到1812。否则,该处理前进到1814。
在1810,作出是否存在至少一个其它的初始视频显现网络拓扑的确定。如果存在,接着该处理回到1804。否则,由于不集中在具有希望的搜索参数的起作用的配置组合,该处理在1890终止。
在1812,枚举在所获得的视频显现网络配置中的至少一个视频显现网络源(例如所有的源)上的可利用的视频显现源模式组。接着该处理前进到1822。
在1814,通过增加或者移除视频显现路径(例如多路径),该视频显现网络拓扑可被调整到一个新的有效的视频显现网络拓扑。接着该处理前进到1816,其中作出该新的有效的视频显现网络拓扑是否被支持的确定。如果是,然后该处理回到1808。否则,该处理前进到1818。
在1818,作出是否存在至少一个其它的希望的视频显现网络拓扑的确定,其中该视频显现网络拓扑可以通过经由有效的视频显现网络拓扑的增加改变来获得。如果是,该处理前进到1820。否则,该处理端在1890。
在1820,作出仅通过无效拓扑(例如该拓扑不能被进一步调整)另一希望的视频显现网络拓扑是否是可获得的确定。如果是,该处理回到1804。否则,该处理回到1814。
在1822,作出任何枚举的视频显现源模式是否遗漏了相应视频显现网络源所希望的一个模式的确定。如果是,该处理前进到1824。否则,该处理前进到1832。
在1824,作出任何视频显现网络源是否具有一个固定的视频显现源模式的确定。如果是,该处理前进到1828,其中一个固定的视频显现源模式被解除固定,并且然后该处理回到1812。否则,该处理前进到1830。在1828解除固定的该视频显现源模式可以根据视频显现网络源重要性进行排序(例如该源模式可以按重要性从大到小来区分优先次序)。
在1830,作出是否存在对于视频显现网络源可利用的至少一个其它视频显现源模式的确定。如果是,该处理回到1832,其中一个视频显现源模式固定在至少一个视频显现网络源(例如对于所有的源)上,并且然后该处理到1834。否则,该处理前进到1831。在1832固定的该视频显现源模式可以根据视频显现网络源重要性进行排序(例如,该源模式可以按重要性从大到小来区分优先次序)。
在1831,作出已知任何其它希望的视频显现网络拓扑、是否存在对于视频显现网络源可利用的至少一个其它视频显现源模式的确定。如果是,该处理回到1818。否则,该处理端在1890。
在1834,确定是否还存在视频显现网络源,在该视频显现网络源上一个视频显现源模式将要被固定。如果存在另一将要固定的视频显现网络源,该处理前进到1836。否则,该处理前进到1838。
在1836,确定是否任何以前枚举的视频显现源模式已经被无效。如果是,该处理回到1812。如果不是,该处理回到1832。
在1838,枚举在所获得的视频显现网络配置中的至少一个视频显现网络目标(例如所有的目标)上的可利用的视频显现目标模式组。
在1842,作出是否任何枚举的视频显现目标模式遗漏了相应视频显现网络目标所希望的一个模式的确定。如果是,该处理前进到1844。否则,该处理前进到1852。
在1844,作出是否任何视频显现网络目标具有固定在其上的视频显现目标模式的确定。如果是,该处理前进到1848,其中一个固定的视频显现目标模式被解除固定,并且然后该处理回到1838。否则,该处理前进到1850。在1848解除固定的该视频显现目标模式可以根据视频显现网络目标重要性排序(例如该目标模式可以按重要性从大到小来区分优先次序)。
在1850,作出已知当前的视频显现网络拓扑并且固定在视频显现网络源上的视频显现源模式、是否存在对于视频显现网络目标可利用的至少一个其它的视频显现目标模式的确定。如果是,该处理回到1852,其中一个视频显现目标模式固定在至少一个视频显现网络目标(例如对于所有的目标)上,并且然后该处理到1854。否则,该处理前进到1856。在1852固定的视频显现目标模式可以根据视频显现网络目标重要性排序(例如该目标模式可以按重要性从大到小来区分优先次序)。
在1854,确定是否还存在视频显现网络目标,在该视频显现网络目标上一个视频显现目标模式将要被固定。如果存在另一将要固定的视频显现网络目标,该处理前进到1868。否则,该处理前进到1880。
在1856,作出以下内容哪个是更重要的确定:当前的视频显现网络拓扑或者当前固定在视频显现网络源上的视频显现源模式。如果当前固定在视频显现网络源上的该视频显现源模式被认为是更重要的,该处理前进到1862。如果当前视频显现网络拓扑被认为是更重要的,该处理前进到1864。
在1862,确定是否存在至少一个其它的希望的视频显现网络拓扑。如果是,该处理回到1818。如果不是,该处理前进到1866。
在1864,作出已知当前视频显现网络拓扑、是否存在至少一个其它的希望的视频显现源模式的确定。如果是,该处理回到1828。否则,该处理前进到1862。
在1866,作出是否存在在至少一个视频显现网络源上可利用的至少一个其它的希望的视频显现源模式的确定。如果是,该处理前进到1864。否则,该处理在1890终止。
在1868,确定是否任何以前枚举的视频显现目标模式已经被无效。如果是,该处理回到1838。如果不是,该处理回到1852。
在1880,一个最后得到的起作用的视频显现网络配置组合被提交。
实施例24-获得目标配置的示范性的方法
图19示出考虑到目标(例如根据被监视器支持的视频模式所描述的)确定用于一个视频显现网络的拓扑的示范性方法1900的流程图。
在1902,该处理从一个初始拓扑开始。在1906,该初始拓扑被修改以便更好地满足该目标(例如通过产生更好地满足该目标的一个临时起作用的配置)。这样的修改可以考虑在视频显现网络的资源之间的相关性。
可能的目标可以与视频模式或者其它的配置选项有关。例如,一个目标可以是通过该可利用的视频输出编解码器将视频显现网络目标布置到视频显现网络中的视频显现网络源、以便最大化地支持在它的视频显现网络源上的图形视频显现网络源模式设置的最好的方法,假定在该视频显现网络目标上的视频模式设置必须支持在与它们连接的所有监视器上的较佳模式。或者,如果这样的一个目标不能被获得,该目标可以是通过该可利用的视频输出编解码器将视频显现网络目标布置到视频显现网络中的视频显现网络源、以便最大化地支持在它的视频显现网络源上的图形视频显现网络源模式设置的最好的方法,假定在该视频显现网络目标上的视频模式设置必须支持在与它们连接的监视器上的以规定的优先次序排序的较佳模式。或者,如果这样的目标不能被获得,该目标可以是通过该可利用的视频输出编解码器将视频显现网络目标布置到视频显现网络中的视频显现网络源、以便最大化地支持在它的视频显现网络源上的图形视频显现网络源模式设置的最好的方法,假定在该视频显现网络目标上的视频模式设置必须支持由与它们连接的监视器所支持的至少一个视频模式。
如果需要,第一目标可以被尝试。然后,如果第一目标不能实现,第二目标可以被尝试,诸如此类。一个目标有时被描述为一个“最佳”配置。
实施例25-示范性的附加目标
除上述的目标之外,其它的配置目标可能被期望并且通过在此描述的技术可被促进。例如,获得下列单独的项或者组合的项可能是有意义的:
1.最大化在再现目标上的特定分辨率
2.最大化在再现目标上的彩色分辨率
3.最大化在再现目标之一(例如对于医学成像应用、计算机辅助设计等等)上的空间和彩色分辨率。
4.匹配显示一个图像的监视器上的更新率以便避免视频流同步问题,该图像包含一个实时电视广播图像。这样的同步问题可以自我表现为失真、失落帧(例如假信号)或者上述两者。
5.通过以增强3D性能可接受的最低再现模式驱动图像来尽可能多地保存视频存储器带宽,假定一个或多个GPU争用相同的视频存储器总线。
因为这样的目标是在简单的视频驱动器的范围之外的,因此这样的目标可以通过在该视频驱动器外边(例如,在该操作系统的上层中,诸如在外壳、图像子系统、DX运行时间等等中)放置决策性能来实现。
由于可能的再现模式的绝对数量,一个驱动器不能简单地枚举它们。一个查询或者横越方法(例如,诸如在这里的该实施例中所描述的)可以用于实现配置目标。
还有其它目标可以如下分类:
1.在用于图像质量的最佳的模式中,一个人最关心以可能的最好程度显示图像。
2.在用于性能的最佳模式中,一个人最关心不使视频存储器总线超载(例如每个编解码器必须从视频存储器中读取,并且因此消耗视频存储器带宽)。
3.在用于能量消耗的最佳模式中,一个人可能想选择消耗最低能量的编解码器,即使关闭所有其它的编解码器,它不能在两个监视器中的任一个中驱动较佳的模式。
典型地,在任何配置中一个隐含的目标在于该视频输出支持由相应监视器所支持的至少一个模式。除非被性能或者能量管理考虑压倒,通常一个进一步的目标是视频输出尽力支持它们的各自监视器的较佳模式,其中该监视器的重要性被客户(例如操作系统)作为配置要求的一部分列入优先地位。
例如,在多个图像(例如复制图像)上提供同样的再现目标,该视频驱动器应该企图具有同样数量的以它们的较佳模式运行的监视器,当作不是这样即意味着要求的输出之一不能被驱动时,只共享编解码器。
例如,在包含三个视频输出的情况中,但是只有两个编解码器,当被要求支持所有的三个输出时共用一个编解码器是可接受的,即使至少一个监视可能没有以其较佳模式运行。然而,当被要求只支持两个输出时,如果通过不共用一个编解码器可以在两个监视器上获得较佳模式,那么一个编解码器不能被共用。
实施例26-与能量消耗有关的示范性目标
在一些情况中,可能希望指定关于能量消耗目标。例如,具有较小的能量消耗的配置对于节省能量情况可能是较佳的,并且当在全能量情况时,性能和/或图像质量可能是较佳的。在这里的任一实施例中,这样的目标可以被实现。
实施例27-示范性的装置驱动器接口
实施例45列出一组功能(例如,EnumerateAvailVidPNTargets、ConstrainNodesOnVidPNTargets等等)和它们的目的。这样的功能可以包括在视频装置驱动器(例如一个视频小端口)支持的装置驱动器接口中。该功能可以被客户使用以便采用各种算法(例如搜索算法)以增加的方式建立一个视频显现网络。
实施例28-用于配置管理的示范性功能
实施例45详述用于配置管理的一组功能。例如,一个功能(例如GetActiveVidPNTopology)识别一个视频显现网络配置(例如一个拓扑)。另一功能(例如CommitVidPNImp1)提交一个视频显现网络配置。另一功能(例如EnumCurrentlyAvailVidPNSourceModeSets)枚举已知希望的视频显现网络配置时可利用的视频显现源模式。另一功能(例如EnumCurrentlyAvailVidPNTargetModeSets)枚举已知一个希望的视频显现网络配置时可利用的视频显现目标模式。另一功能(例如PinModeOnVidPNSource)在一个视频显现网络源上固定一个视频显现源模式。另一功能(例如PinModeOnVidPNTarget)在一个视频显现网络目标上固定一个视频显现目标模式。另一功能(例如UnpinModeOnVidPNSource)在一个视频显现网络源上解除一个视频显现源模式的固定。另一功能(例如UnpinModeOnVidPNTarget)在一个视频显现网络目标上解除一个视频显现目标模式的固定。另一功能(例如CreateVidPNImp1)建立一个视频显现网络配置。该功能的任何组合可以作为编程接口(例如一个装置驱动器接口)的一部分实现。这样的一个接口可以提供对作为一项服务(例如用于客户程序)的功能的访问。
实施例29-示范性的调用得出配置
图20示出示范性的调用得出配置的方框图。这样的调用可以作为装置驱动器接口(DDI)的一部分实现。
系统2000包括在驱动器2002(例如视频小端口)和图形核心子系统2004之间通信。已知一个规定的视频显现网络配置EnumAvailVidPNTargets可被调用枚举由一个已知的显示卡所支持的可利用的视频显现网络目标。EnumAvailVidPNSources可被调用枚举由已知的显示卡所支持的可利用的视频显现网络源。这两个调用可作为系统初始化的一部分。可替代地,这两个调用可作为视频适配器到达事件(例如PCI表示或者底座式热插拔)的一部分。在一些情况中,一个无效视频显现网络配置形式可被支持,表示所有可利用的视频显现目标和源应该被报告(例如,当对于初始化是合适的)。
IsMonitorConnected可被用于确定哪个枚举的视频显现目标具有连接到它们的监视器。GetMonitorDescriptor可被调用每个连接的监视器以便获得每个监视器的描述符。ConstrainModesOnVidPNTargets可被调用根据从监视器描述符所获得的监视器性能在每个枚举的视频显现目标上设置视频模式约束条件。
在视频显现网络结构中,GetInitialVidPNImp1可被随意地调用以便获得由视频小端口推荐的视频显现网络临时配置。CreateVidPNImp1可被调用基于来自视频小端口的任选的推荐来建立一个视频显现网络临时配置。可替代地,CreateVidPNImp1可以建立一个视频显现网络临时配置,而不管来自小端口的任选的推荐。
EnumCurrentlyAvailVidPNSourceModeSets、PinModeOnVidPNSource和UnpinModeOnVidPNSource可被调用直到视频显现源模式固定在视频显现网络源上,作为建立一个部分-起作用的视频显现网络的一部分。如果将要固定的视频显现源模式已知是为视频显现网络源而工作,PinModeOnEachVidPNSource可被调用立刻在所有的视频显现网络源上固定视频显现源模式。
EnumCurrentlyAvailVidPNTargetModeSets、PinModeOnVidPNTarget  和UnpinModeOnVidPNTarget可被调用直到视频显现目标模式固定在视频显现网络目标上,作为实现一个起作用的视频显现网络的一部分。如果将要固定的视频显现目标模式已知是为视频显现网络目标而工作的,PinModeOnEachVidPNTarget可被调用立刻在所有的视频显现网络目标上固定视频显现目标模式。
为了提交一个视频显现网络临时配置,CommitVidPNImp1可被调用。在对于视频显现网络中的每个源设置了主表面链接之后,一个起作用的视频显现网络临时配置可被提交。可能需要作为在视频显现网络拓扑和视频显现源和目标(例如主表面链接)外边输入其它的OS拥有的资源的CommitVidPNImp1。
实施例30-视频输出和再现目标的示范性分离
一个视频再现装置驱动器暴露的接口(例如到一个操作系统,并且因此间接地到运行在该操作系统上的应用程序)不必将一个视频输出和一个再现目标的概念区分为两个分离的、独立的实体,其中在该视频输出上该视频再现装置正物理上驱动该显示的图像,并且该应用正在将它希望呈现的内容逻辑上再现到该再现目标。该再现目标可以隐含地和静态地与视频再现装置上的每个视频输出联系在一起。然而,这样的一个方法可以是限制的。
在本文中描述的任一实施例中,再现目标的一个明确的概念通过再现模式的概念可被支持。一个显示模式可有两种描述:一个视频模式,其是输出形式描述符(用于一个输出或目标,诸如在图1或图25中所示出的那些);以及一个再现模式,其是输入形式描述符(用于一个输入或源,诸如在图1或图25中所示出的那些),其中该显示模式是操作系统中的任何装置的基本操作形式描述符。这样的一个方法在具有多个视频输出的系统中特别有用。作为视频驱动器的接口(例如DDI)可以允许视频模式和再现模式的分开的规定。
因此,逻辑再现目标可被与物理视频输出相分离地动态管理。该目标可被映射到在运行时间选择的视频输出,需要时使它们从输出到输出地重定向,或者甚至同时将单个再现目标映射到多个输出。
实施例31-用于监视器达到/离开的示范性管理
在本文中描述的任何技术可适用于当系统正运行时将监视器加入到系统中或从系统移除的情况。例如,当监视器到达或离开系统时,事件(例如HPD事件)可被系统检测,并且一个配置可因此被选择。并且,可实现将视频流重定向到不同的输出(例如,用于复制图像、延伸的桌面管理等等)的变化。对于这样的动态配置改变的稳定的支持可通过在此描述的与物理视频输出相分离地管理逻辑再现目标来完成。
实施例32-技术的示范性综合利用
在本文中描述的任一实施例中,视频显示装置可以采取各种形式,例如,图21示出到一个具有多个视频显示装置的计算机系统中的示范性的技术综合利用。
图21是多个视频输出装置系统2100的示范性的高级结构的方框图。一个桌面2110、一个显示特性小程序2112和一个全屏图形应用2114与一个图形子系统2120通信。图形子系统2120驱动一个视频驱动器2130和另一个视频驱动器2132。两个视频驱动器(例如视频小端口)通过一个到视频适配器2150和2152的硬件抽象层(HAL)2140通信,视频适配器2150和2152发送输出的信号到多个视频输出装置的任何组合。这样的视频输出装置可以包括一个CRT监视器2160、一个平面监视器2162、一个数字投影机2164、一个LCD监视器2166、一对虚拟现实护目镜2168等等。除了示出的那些的组合外,其它组合也是可能的。
实施例33-集中到希望的配置的解空间的示范性横越
图22示出一个客户服务系统2200,其中一个视频配置基于优先次序确定。一个客户2202与一个服务器2204通信。客户2202包含说明优先化信息的优先次序2206。
这样的优先化信息可以包括一个或多个希望的拓扑的列表、用于相应源的希望的模式的列表、用于各个目标的希望的模式的列表等等,或者其中的一些组合。优先化信息还可以包括是否某个源模式是比拓扑选择更重要的。另外,希望的源模式和希望的目标模式可被列入优先位置(例如从重要性最大的到重要性最小的)。
这样的优先次序可以优先化列表的形式。然而,优先次序也可以通过并入逻辑实现(例如在客户2202中if-then表达式)。
图23示出用于基于诸如在上述图22中示出的系统中的希望的视频配置选项的优先化列表来确定视频配置的示范性方法2300。
在2302,用于至少第一资源的一个部分视频配置被提交。
在2304,与该部分视频配置共同起作用的配置选项的列表被接收。
在2306,作出在优先化列表中的一个希望的选项是否显示在与该部分视频配置共同起作用的配置选项的列表中的确定。
在2308,响应该希望的选项没有被显示的确定,对于第一资源重新提交一个修改的部分配置。实际上,优先次序之间的折中可能是可取的。
具体实例包含在本申请中(例如在图5和6的附件A)。
实施例34-集中到拓扑可改变的希望的配置上的解空间的示范性横越
图24示出横越可能的起作用的多个视频输出配置组合的图表的另一示范性方法2400的流程图。然而,该实施例包括在希望的起作用的视频显现网络临时配置的确定期间改变拓扑的可能性。
在2402,一个特定拓扑被选择。
在2404,一个视频显现源模式被选择并固定在视频显现源上。
在2406,确定是否任何视频显现目标模式是可利用的(例如借助于枚举)。如果是,该处理继续到2408。如果不是,该处理前进到2410。
在2408,一个视频显现目标模式被选择并且固定在视频显现目标上。接着该方法可以结束(例如在一个提交之后)。
在2410,确定具有以前选择的拓扑是否比具有选择的视频显现源模式更重要。如果答案是肯定的,那么在2412一个不同的视频显现源模式被选择并固定在视频显现源上,并且处理回到2406。否则,在2414选择一个不同的拓扑并且处理回到2404。
虽然该实施例示出源模式和拓扑之间的折中方案,其它的资源之间的折中方案也是可能的。此外,如在一些其它的实施例中所示出的,希望的选项可被列入优先位置。
在该实施例中执行的和在图24中说明的逻辑可改变为适应多个视频显现源和/或多个视频显现目标,类似于上面说明的和在图16中说明的。例如,在图24中的2410-2414执行的逻辑可插入在图16中的1608和1610之间和/或1616和1618之间。
在该实施例中,搜索从一个初始拓扑开始,如在图24中的2402所做的。为了拓扑中的视频显现路径,在一个视频显现目标模式可被固定在视频显现路径的视频显现网络目标上之前,一个视频显现源模式可固定在该视频显现路径的视频显现网络源上。例如,一个搜索可以从一个单独的源图像视频显现路径开始,在源和目标上都固定模式,并且接着通过将另一视频显现路径增加到拓扑来发展拓扑。可替代地,当只有视频显现源模式被固定时该拓扑可被改变。
实施例35-配置服务地示范性使用
配置服务的示范性执行可着手配置一个视频显现网络。该实施例假定一个视频显现网络在它的拓扑中具有三个源的视频显现并且下面为三个源中的每一个列出视频显现源模式组:
1.(1,{1,640×480),(2,800×600),(3,1024×768),(4,1280×1024)})
2.(2,{1,640×480),(2,800×600),(3,1024×768),(4,1280×1024),(5,1600×1200),(6,2000×1500)})
3.(3,{1,640×480),(2,800×600),(3,1024×768)})
假定客户对在每个视频显现网络源上得到最高可能的空间分辨率感兴趣,该第一视频显现网络源是最重要的,第二视频显现网络源是第二重要的,并且第三和最后的视频显现网络源是重要性最低的,应该着手在第一视频显现网络源上固定最高模式,其是(4,1280×1024)。
然而,通过这样做,客户使第二视频显现网络源上的模式(4,1280×1024)、(5,1600×1200)和(6,2000×1500)无效。由于客户仍然没有意识到这些,它将尽力并且将以前枚举的最高模式(例如(6,2000×1500))固定在第二视频显现网络源上,这将失败,这个失败是利用一个状态码来表示,该状态码表明规定的视频显现源模式已经被无效。
在这一点上,客户将重新枚举所有的视频显现网络源的可利用的视频显现源模式,获得下列三组:
1.(1,{1,640×480),(2,800×600),(3,1024×768),(4,1280×1024)})
2.(2,{1,640×480),(2,800×600),(3,1024×768)})
3.(3,{1,640×480),(2,800×600),(3,1024×768)})
客户接着将最高可利用的视频显现源模式固定在第二视频显现网络源上(例如(3,1024×768))。为了支持该增加的模式,然而,该显示卡可以不再支持第三视频显现网络源上的(2,800×600)和(3,1024×768)。
此外,没有意识到这一事实,客户将为那个视频显现源尽力固定以前枚举的最高模式(例如(3,1024×768))。努力失败了,客户将重新枚举所有的源的可利用的模式,得到:
1.(1,{1,640×480),(2,800×600),(3,1024×768),(4,1280×1024)})
2.(2,{1,640×480),(2,800×600),(3,1024×768)})
3.(3,{1,640×480)})
对于第三和最后的视频显现网络源只留下一个模式选择。
在这一点上,客户也可以接受该源模式分布并且着手固定目标模式以便得出一个起作用的视频显现网络,或者它可以决定640×480空间分辨率不够高并且退回去找到更适合的解决方案(例如,在第一视频显现网络源上不包含设置1280×1024空间分辨率的方案,或者可替代地,在它的拓扑中只有两个视频显现网络源的方案)。
下面标出的模式列表概括了整个处理,在每组中具有黑体和下划线的模式表示固定的模式,加单删除线的模式表示当在第一视频显现网络目标上的模式被固定时该模式无效,并且加双删除线的模式表示当在第二视频显现网络目标上的模式被固定时该模式无效:
1.(1,{1,640×480),(2,800×600),(3,1024×768),(4,1280×1024)})
2.(2,{1,640×480),(2,800×600),(3,1024×768)})
3.(3,{1,640×480)})
应注意,上述算法使用用于再现多模式集中的过分简单化的渴望的方法,并且它不采用退回。一个更复杂的搜索(例如深度第一的搜索)可被客户代替使用以便得到一个更适合的再现多模式。还应注意,上述算法假定通过集中处理固定一个希望的拓扑,诸如在图16中的示范性方法1600。
实施例36-示范性多监视器/多图像系统
图25是示范性多监视器/多图像系统2500的示意图,其可以使用下列形式描述。有时术语“VidPN”代替“video presenting network(视频显现网络)”使用,并且“video present(视频显现)”代替“video presenting(视频显现)”使用。而且,术语“implementation(实现)”有时指的是一个临时配置。系统2500可以在本文中描述的任何实施例的方式使用。
1.M是一组监视器2510m=(δM),其中:
a.监视器m是视频显现装置,其监控视频再现装置的输出,并且
b.δM∈{EDID v 1.0,EDID v 1.1,EDID v 1.2,EDID v 1.3,具有DIEXT的EDID v 1.3}是一个监视器描述符。
2.T是一个视频再现装置的一组视频显现目标2520t=(δT),其中:
a.δT∈{(格式[δT],HPD-感知[δT])}是视频显现目标描述符,其中
i.格式[δT]∈VC≡{DVI、HDMI、HDMI-2、HD-15、BNC、4-引脚S-视频、7-引脚S-视频、RF、RCA复合、3成分RCA、其它}是视频输出格式类型,
ii.HPD-感知[δT]∈HPD≡{可中断的、非破坏的轮询、破坏的轮询、无}是视频输出HPD-感知,其中视频输出具有:
1.可中断的HPD-感知,当且仅当视频小端口可异步地通知OS关于监视器到达/离开。
2.非破坏的轮询HPD-感知,当且仅当视频小端口可以只通过周期地轮询下面的h/w将监视器到达/离开报告到OS,而没有引起视觉失真。
3.破坏的轮询HPD-感知,当且仅当视频小端口只可以只通过不时地轮询优先地h/w将监视器到达/离开报告到OS,在每个轮询上引起视觉失真。
4.无HPD-感知,当且仅当视频小端口没有感知到监视器到达/离开并且因此不能向OS异步地通知或者同步地报告这样的事件。
b.编码∈(VE)VC是视频编码类型,其中:
i.VE≡{数字_YcbCr,数字_RGB,模拟_YPbPr,模拟_RGB,模拟_YC,模拟_复合,其它}是视频编码类型,并且视频输出连接器映射到各个视频输出编码,如在下面示出的表1中规定的(注意:DDC支持的出现暗示获得监视器描述符δM的可能性):
表1-视频输出连接器到输出编码的映射
  视频输出连接器类型   视频编码类型  DDC支持   DVI   数字_RGB或者  数字_YCbCr  是   HDMI   数字_RGB或者  数字_YCbCr  (+音频)  是   HDMI-2   数字_RGB或者  数字_YCbCr  (+音频)  是   HD-15   模拟_RGB  有时   BNC   模拟_RGB或者  模拟_YPbPr  否   7-引脚S-视频   模拟_YC  是   4-引脚S-视频   模拟_YC  否   RCA复合   模拟_复合  否   3成分RCA   模拟_YPbPr  否   RF   模拟_复合  否   其它   其它  未知
c.同步的:
是视频输出同步判
定,其中已知两个输出,确定它们是否彼此同步。
3.K是一组视频显现编解码器2530κ=(δK),其中:
a.δK是视频编解码器描述符。
4.∑是一组视频显现源2550σ=(δΣ),其中:
a.δ∑∈{线性,其它}是视频显现源描述符,并且
b.显现在监视器上的每个视频显现网络输入的内容被称为图像。
5.V是一组图像2560v=(δV),其中:
a.δV∈{(重要性[δV],方向[δV])}是图像描述符,其中:
i.重要性[δV]∈{初始的,第二的,其它}
ii.方向[δV]∈{左,右,中心,其它}
6.是一组32比特空间坐标。
7.Θ是一组显示模式θ=(wΘ,hΘ,rΘ,fΘ),其中:
a.wΘ∈S\{0}是显示模式宽度。
b.hΘ∈S\{0}是显示模式高度。
c.rΘ∈RΘ是显示模式帧速率,其中:
i.RΘ≡{a.b|a,b∈{1.0×FFFF}}是一组显示模式帧速率,单位是Hz。
d.fΘ∈FΘ是显示模式单元格式,(也就是监视器的有效彩色分辨率-是监视器技术的功能的物理参数),其中:
i.F∑≡{1比特,5比特,6比特,8比特,10比特,12比特,16比特,18比特,32比特,TBD}是一组显示模式彩色分辨率。
e.gΘ∈[1.0,+∞)∪{SD-601,HD-709}监视器传输功能(也就是监视器灰度系数),其是监视器技术的强度响应功能。
8.B是一组视频显现目标模式,
β=(AB,TB,Δ(ABTB),fB,vrB,hrB,crB,oB,cpB,gB,TB,YUV→RGB,bpoB,wpoB,pmB),也被称为显现目标模式,其中:
a.AB∈{(宽度[AB],高度[AB])}是视频显现目标模式有源区域,其中:
i.宽度[AB]是视频显现模式有源区域宽度。
ii.高度[AB]是视频显现模式有源区域高度。
b.TB∈{(宽度[TB],高度[TB])}是视频显现目标模式总区域,其中:
i.宽度[TB]是视频显现模式总区域宽度。
ii.高度[TB]是视频显现模式总区域高度。
c.Δ(ABTB)∈{偏移水平[AB,TB],偏移垂直[AB,TB])}是视频显现目标模式的有源区域位移,其中:
i.偏移水平[AB,TB]是视频显现模式的水平有源区域位移。
ii.偏移垂直[AB,TB]是视频显现模式的垂直有源区域位移。
d.fB∈FB=FB,模拟∪FB,数字是视频模式像素编码格式,其中:
i.FB,数字≡{Y10Cb10Cr10,Y8Cb8Cr8,sR10G10B10,sR8G8B8}是一组数字视频模式像素编码格式。
ii.FB,模拟≡{YPbPr,模拟_YC,模拟_复合,RGB}是一组模拟视频模式像素编码格式。
e.vrB∈VRB是垂直更新速率,也被称为Vsync速率,或者垂直回扫频率,其中:
i.VRB≡{a.b|a,b∈{1..0×FFFFFFFF}}是一组有理数垂直更新速率,单位是Hz,通常在范围50到200Hz中。
f.hrB∈HRB是水平更新速率,也被称为Hsync速率、行速率或者水平回扫频率,其中:
i.HRB≡{a.b|a,b∈{1..0×FFFFFFFF}}是一组分数水平更新速率,单位是Hz,通常在范围10到200KHz中。
g.crB∈CRB是像素时钟速率,其中:
i.CRB≡{a|a∈{1..0×FFFFFFFF}}是一组像素时钟速率,单位是Hz,通常在范围1到500MHz中。
h.oB∈OB是内容排序,其中:
i.OB≡{逐行的,隔行的上面场优先,隔行的下面场优先}是一组内容排序类型,其中对于逐行的内容排序场速率=Vsync速率,并且对于隔行的内容排序场速率=2×Vsync速率。
i.cpB∈CPB是彩色原色。(在(x,y)的三原色,其中x=X/(X+Y+Z)并且y=Y/(X+Y+Z),其是与一些专用的有关的)。
j.wprB∈CPB是白点参考(也就是参考白色)。
k.gB∈[1.0,+∞)∪{SD-601,HD-709}是传输功能的指数(也就是灰度系数)。
1.TBYUV→RGB是从Y’U’V’到R’G’B’的彩色空间转换矩阵。
m.是黑点偏移(也就是启动电压)。
n.是白点偏移。
o.是视频显现目标模式优先次序,其中模式优先借助于{0×01..0×ff}范围来表示,其中0×01表示最优先的并且0×ff表示优先权最小的模式或者不相干的模式优先。0×00是为未知的/未初始化的保留的。
某个视频模式通过一个工业广泛使用的标准化(实际的和形式的)来限定。这些模式可以包括下面在表2中列出的那些,以及下列由VESA通用定时公式(GTF)限定的连续的模式组:
βGTF≡βGTF,VR∪βGTF,HR∪βGTF,CR
其中:
βGTF,VR{(vrB,GTFVRBHRB(vrB,oB,wB,hB),GTFVRBCRB(vrB,oB,wB,hB))|
vrBVRB}
βGTF,HR{(GTFHRBVRB(hrB,oB,wB,hB),hrB,GTFHRBCRB(hrB,oB,wB,hB))|
hrBHRB}
βGTF,CR{(GTFCRBHRB(crB,oB,wB,hB),GTFCRBVRB(vrB,oB,wB,hB),crB)|
crBCRB}
表2-模式
  名称   宽度  (像素)   高度  (像素)   像素编码格式   Vsync  速率  (Hz)   Hsync速  率(Hz)   像素时钟速  率(Hz)  YUV->RGB 转换矩阵   内容排序   NTSC_M   720   525   YPbPr模似_YC  模拟_复合   60000/  1001   15734.27   3579545  601   隔行的   NTSC_J   720   525   相同   60000/  1001   15734.27   3579545  601   隔行的
  名称   宽度  (像素)   高度  (像素)   像素编码格式   Vsync  速率  (Hz)   Hsync速  率(Hz)   像素时钟速  率(Hz)  YUV->RGB 转换矩阵   内容排序   NTSC_443   720   525   相同   60000/  1001   15734.27   4433618.75  601   隔行的   PAL_B   720   625   YPbPr  模拟_YC  模拟_复合  RGB601_复合同步   50   15,625   4433618.75  601   隔行的   PAL_B1   720   625   相同   50   15,625   4433618.75  601   隔行的   PAL_G   720   625   相同   50   15,625   4433618.75  601   隔行的   PAL_H   720   625   相同   50   15,625   4433618.75  601   隔行的   PAL_I   720   625   相同   50   15,625   4433618.75  601   隔行的   PAL_D   720   525   相同   60000/  1001   15,734   3575611.49   601   隔行的   PAL_N   720   625   相同   50   15,625   4433618.75   601   隔行的   PAL_NC   720   625   相同   50   15,625   3582056.25   601   隔行的   SECAM_B   720   625   相同   50   15,625   601   隔行的   SECAM_D   720   625   相同   50   15,625   601   隔行的   SECAM_G   720   625   相同   50   15,625   601   隔行的   SECAM_H   720   625   相同   50   15,625   601   隔行的   SECAM_K   720   625   相同   50   15,625   601   隔行的   SECAM_K1   720   625   相同   50   15,625   601   隔行的   SECAM_L   720   625   相同   50   15,625   601   隔行的   SECAM_L1   720   625   相同   50   15,625   601   隔行的   EIA_861_1   720   480   YPbPr(NTSC定时)  Y8Cb8Cr8  Y10Cb10Cr10  (R10G10B10未来)   60000/  1001   601   隔行的
  名称   宽度  (像素)   高度  (像素)   像素编码格式   Vsync  速率  (Hz)   Hsync速  率(Hz)   像素时钟速  率(Hz)  YUV->RGB 转换矩阵   内容排序   EIA_861_2   640   480   相同   60000/  1001   601   逐行的   EIA_861_3   720   480   相同   60000/  1001   601   逐行的   EIA_861_4   1280   720   相同   60000/  1001   709   逐行的   EIA_861_5   1920   1080   相同   60000/  1001   709   隔行的   EIA_861_6   720   480   YPbPr  Y8Cb8Cr8   60   601   隔行的 Y10Cb10Cr1(R10G10B10未来)   EIA_861_7   640   480 相同   60   601   逐行的   EIA_861_8   720   480 相同   60   601   逐行的   EIA_861_9   1280   720 相同   60   709   逐行的   EIA_861_10   1920   1080 相同   60   709   隔行的   EIA_861A_1   720   576 YPbPr(PAL定时)sRGBY8Cb8Cr8Y10Cb10Cr10(sR10G10B10未来)   50   601   隔行的   EIA_861A_2   720   576 相同   50   601   逐行的   EIA_861A_3   1280   720 相同   50   709   逐行的   EIA_861A_4   1920   1080 相同   50   709   隔行的   EIA_861B_1   1920   1080 YPbPrsRGBY8Cb8Cr8Y10Cb10Cr10(sR10G10B10未来)   24000/  1001   709   逐行的
  名称   宽度  (像素)   高度  (像素)   像素编码格式   Vsync  速率  (Hz)   Hsync速  率(Hz)   像素时钟速  率(Hz)  YUV->RGB 转换矩阵   内容排序   EIA_861B_2   1920   1080 相同   24   709   逐行的   EIA_861B_3   1920   1080 相同   25   709   逐行的   EIA_861B_4   1920   1080 相同   30000/  1001   709   逐行的   EIA_861B_5   1920   1080 相同   30   709   逐行的   EIA_861B_6   1920   1080 相同   50   709   逐行的   EIA_861B_7   1920   1080 相同   60   709   逐行的   IBM_1   720   400 sRGB   70   N/A   逐行的   IBM_2   720   400   相同   88   N/A   逐行的   IBM_3   640   480   相同   60   N/A   逐行的   IBM_4   1024   768   相同   87   N/A   隔行的   APPLE_1   640   480   相同   67   N/A   逐行的   APPLE_2   832   624   相同   75   N/A   逐行的   APPLE_3   1152   870   相同   75   N/A   逐行的   VESA_1   640   480   相同   72   N/A   逐行的   VESA_2   640   480   相同   75   N/A   逐行的   VESA_3   800   600   相同   56   N/A   逐行的   VESA_4   800   600   相同   60   N/A   逐行的   VESA_5   800   600   相同   72   N/A   逐行的   VESA_6   800   600   相同   75   N/A   逐行的   VESA_7   1042   768   相同   60   N/A   逐行的   VESA_8   1042   768   相同   70   N/A   逐行的
  名称   宽度  (像素)   高度  (像素)   像素编码格式   Vsync  速率  (Hz)   Hsync速  率(Hz)   像素时钟速  率(Hz)  YUV->RGB 转换矩阵   内容排序   VESA_9   1042   768   相同   75   N/A   逐行的   VESA_10   1280   1024   相同   75   N/A   逐行的   VDMT_1   640   350   相同   85   37,900   31500000   N/A   逐行的   VDMT_2   640   400   相同   85   37,900   31500000   N/A   逐行的   VDMT_3   720   400   相同   85   37,900   35500000   N/A   逐行的   VDMT_4   640   480   相同   60   31.500   25175000   N/A   逐行的   VDMT_5   640   480   相同   72   37.900   31500000   N/A   逐行的   VDMT_6   640   480   相同   75   37.500   31500000   N/A   逐行的   VDMT_7   640   480   相同   85   43.300   36000000   N/A   逐行的   VDMT_8   800   600   相同   56   35,100   36000000   N/A   逐行的   VDMT_9   800   600   相同   60   37,900   40000000   N/A   逐行的   VDMT_10   800   600   相同   72   48,100   50000000   N/A   逐行的   VDMT_11   800   600   相同   75   46,900   49500000   N/A   逐行的   VDMT_12   800   600   相同   85   53,700   56250000   N/A   逐行的   VDMT_13   1024   768   相同   43   35,500   44900000   N/A   隔行的   VDMT_14   1024   768   相同   60   48,400   65000000   N/A   逐行的   VDMT_15   1024   768   相同   70   56,500   75000000   N/A   逐行的   VDMT_16   1024   768   相同   75   60,000   78750000   N/A   逐行的   VDMT_17   1024   768   相同   85   68,700   94500000   N/A   逐行的   VDMT_18   1152   864   相同   75   67,500   108000000   N/A   逐行的   VDMT_19   1280   960   相同   60   60,000   108000000   N/A   逐行的   VDMT_20   1280   960   相同   85   85,900   148500000   N/A   逐行的   VDMT_21   1280   1024   相同   60   64,000   108000000   N/A   逐行的
  名称   宽度  (像素)   高度  (像素)   像素编码格式   Vsync  速率  (Hz)   Hsync速  率(Hz)   像素时钟速  率(Hz)  YUV->RGB 转换矩阵   内容排序   VDMT_22   1280   1024   相同   75   80,000   135000000   N/A   逐行的   VDMT_23   1280   1024   相同   85   91,100   157500000   N/A   逐行的   VDMT_24   1600   1200   相同   60   75,000   162000000   N/A   逐行的   VDMT_25   1600   1200   相同   65   81,300   175500000   N/A   逐行的   VDMT_26   1600   1200   相同   70   87,500   189000000   N/A   逐行的   VDMT_27   1600   1200   相同   75   93,800   202500000   N/A   逐行的   VDMT_28   1600   1200   相同   85   106,300   229500000   N/A   逐行的   VDMT_29   1792   1344   相同   60   83,640   204750000   N/A   逐行的   VDMT_30   1792   1344   相同   75   106,270   261000000   N/A   逐行的   VDMT_31   1856   1392   相同   60   86,330   218250000   N/A   逐行的   VDMT_32   1856   1392   相同   75   112,500   288000000   N/A   逐行的   VDMT_33   1920   1440   相同   60   90,000   234000000   N/A   逐行的   VDMT_34   1920   1440   相同   75   112,500   297000000   N/A   逐行的
9.Γ是一组视频显现源模式,也被称为显现源模式,其中:
a.wΓ∈S\{0}是视频显现源模式宽度。
b.hГ∈S\{0}是视频显现源模式高度。
c.fГ∈FГ是视频显现源模式单元格式,其中:
i.FГ是一组视频显现源模式单元格式,其可被分为两种主要子类:
1.图形视频显现源模式单元格式,由最近的DirectX发行中的D3DFORMAT可枚举类型限定。
2.文本视频显现源模式单元格式,由TBD限定的。
d.是光栅化的图形滤波技术,其在再现期间使用,其中:
i.ψГ是一组光栅化的图形滤波技术,由最近DirectX发行中的D3DDDIMULTISAMPLE TYPE可枚举类型限定。
e.nΓ∈N是主表面链接长度(也就是主表面链接中的表面数量)。
f.是视频显现源模式优先次序,其中模式优先借助于{0×01..0×ff}范围表示,其中0×01表示最优先的并且0×ff表示优先权最小的模式或者不相干的模式优先。0×00是为未知的/未初始化的保留的。
10.ρMT∈TM是监视器连通性拓扑-也就是从监视器映射到它们所连接的视频显现目标。
11.ρTK∈KT是视频显现目标-到-编解码器拓扑-也就是从视频显现目标映射到驱动它们的视频显现编解码器-由在显示卡上的可编程交叉线限定。
12.ρKΣ∈∑K是视频显现编码器-到-源拓扑-也就是从视频显现编解码器映射到视频显现源,从该视频显现源该编解码器是流视觉内容。
13.ρT∑∈∑T是视频显现目标-到-源拓扑2540-也就是从视频显现源映射到视频显现目标,从视频显现源的下面的视频输出编解码器到视频显现目标的是流视觉内容,视频显现内容是流到视频显现目标的。
14.PTK∑≡{ρTK∑|(ρTK∑≡ρTKορK∑)∧支持的(ρTK)∧支持的(ρK∑)∧ρTK∑实现ρT∑}是一组支持的VidPN拓扑-也就是从一对包括一组视频显现目标和一组视频显现源的到用于这对的相应的支持的VidPN实施组,其中每个实施明确地规定其中视频显现源经过视频输出编解码器被布置到它们驱动的视频显现目标的方式。
被称为VidPN实施,其中:
a.是一组VidPN视频显现目标。
b.是一组VidPN视频显现源。
c.是VidPN拓扑。
16.ρ∑V∈V∑和ρV∑∈∑V在图像和下面的视频显现源之间是1∶1对应-也就是ρ∑V和ρV∑在∑和V之间是同形性。
17.是多-编解码器视频显现目标模式组矢量-也就是从视频输出编解码器映射到它们支持的视频显现目标模式组。
18.是多-目标视频显现目标模式组矢量-也就是从视频显现目标映射到它们支持的视频显现目标模式组。
19.是多-监视器视频监视器源模式组矢量-也就是从监视器映射到它们支持的视频监视器源模式组。
20.是多-源视频显现源模式组矢量-也就是从视频显现源映射到它们支持的视频显现源模式组。
21.是多-编解码器视频显现目标模式矢量-也就是从视频输出编解码器映射到视频显现目标模式,其中这些编解码器对与它们连接的视频显现目标的视频输出进行驱动。
22.是多-输出视频显现目标模式矢量-也就是从视频显现目标映射到视频显现目标模式,该视频显现目标模式的视频显现目标正被与它们连接的视频输出编解码器视频显现驱动。
23.是多-监视器视频显现目标模式矢量-也就是从监视器映射到视频显现目标模式,该视频显现目标模式被与它们连接的视频显现目标视频显现目标驱动。
24.是多-监视器显示模式矢量-从监视器映射到作为下面的视频显现目标模式在监视器的输入上被驱动的结果而在监视器上显示的显示模式。
25.是多-源视频显现源矢量-也就是从视频显现源映射到这些源设置的视频显现源模式。
26.一个VidPN实施被报告当且仅当已经在所有的它的视频显现源上成功地选择了视频显现源模式时是部分起作用的。
27.一个VidPN实施被报告当且仅当它是部分起作用的并且在所有的它的视频显现目标上已经成功地选择了视频显现目标模式时是起作用的。
实施例37-示范性的定义
假定涉及一组复杂的相关性,多个形式的定义可以用于一些实施。某一(图像,输出)对可以因子分解到视频显现源中,视频显现源可以显示输出到视频输出编解码器中(例如CRTC DAC,TMDS)和视频显现目标,视频显现目标可以显示视频输出到显示卡上(例如HD-15、DVI、S-视频)。
一个显示模式可以因子分解到一个视频显现源模式中,视频显现源模式可以借助于图形栈数据正提供将要显示给用户的再现内容来规定主表面格式,并且视频显现目标模式可以规定在各个视频输出上被驱动的视频信号格式。
多-输出显示卡的视频显现能力借助于视频显现网络(VidPN)的概念被模拟,视频显现网络借助于一个VidPN拓扑可以使一组视频显现源与一组视频显现目标联系起来。当且仅当视频显现源模式固定在每个它的视频显现源上时,一个VidPN可被认为是部分起作用的。当且仅当它是部分起作用的并且视频显现目标模式固定在每个它的视频显现目标上时,一个VidPN可被认为是起作用的。
在一个单独的视频显现源和一个单独的视频显现目标之间的关联可被称为一个视频显现路径。在一个单独的视频显现源和多个视频显现目标之间的关联可被称为一个视频显现多路径。
具有上述的适当的定义,在显示模式管理的环境中的视频小端口的工作可被描述为管理一个有效VidPN,该有效VidPN在它正驱动的各个显示卡上显示视频显现配置的状态,以及以在于增加建立起作用的每个均可被设置为有效的VidPN为目的的客户请求服务。
实施例38-示范性的多视频输出显示模式解决方案
改变依附于多输出显示卡的监视器上的显示模式可以不再遭受该领域的“单-输出操作”限制,其中视频小端口开发者必须在某个视频驱动器栈之间实施复杂的同步,该视频驱动器栈正驱动相同的下面的物理装置,并且上述改变可以被由一个单独视频驱动器栈服务的已知显示卡上的起作用的VidPN实施的明确的以交换为基础的提交代替。
多个输出视频显示模式解决方案可以取决于多个标准诸如:(a)硬件限制(例如由连接到各个视频显现目标的监视器支持的视频模式设置);(b)操作的模式考虑(例如由连接到各个视频显现目标的监视器推荐的特定视频模式);(c)性能考虑(例如通过视频输出编解码器减少视频存储器总线的连接而获得的再现性能改进);(d)能量管理考虑(例如通过禁止未利用的视频输出编解码器而获得的显示卡的能量消耗的减少,并且减小它的功率);(e)热损耗考虑(例如,通过在多个单元之间持续交换开关而获得的显示卡的操作的温度的降低,其中一个单元当另一单元操作时被给出一个机会冷却,并且反之亦然,因此从不会增加由某个希望的上边界之外的显示卡辐射的J/sec数量);以及(f)可用性考虑(例如,在一个用户的初始监视器上驱动监视器的较佳模式比在第二监视器上驱动它更重要,假定所有的监视器不能以较佳模式驱动,其中哪个监视器是初始的确定是用户特定的操作模式的功能)。例如,已知DVI LCD、S-视频HDTV以及HD-15CRT/3D眼镜,一个用户可能更喜欢在具有最好的透明度的DVI LCD上工作/读取/浏览,在具有最大有效像素区域的S-视频HDTV上看电影,并且在支持最高更新速率和最好的博弈经验的HD-15CRT/3D上玩游戏。
实施例39-示范性的解空间
一个包含所有可能的VidPN实施的解空间对于一个简单的穷举法枚举可能是难处理的,该解空间具有所有可能的在它的目标上可利用的视频显现目标模式设置和所有的各种分配可利用的视频显现源模式通过它的输入的方式,每个视频显现源模式的可利用性是将要在各个输出上驱动的视频模式的功能(基于例如在下面的视频编解码器中存在硬件缩放这样的因素)。一个用于T视频显现目标、K编解码器和∑视频显现源的通用情况的非穷举法可以类似于典型的三分裂的图表匹配问题,其通称为NPC(例如,不存在以多项式时间运行并且得到一个理想的或者全局最佳的解决方案的已知算法)。确定一个尽可能接近理想解决方案的合适的解决方案是可取的。
实施例40-示范性的复杂性
确定哪个配置是起作用的可能是一项复杂的工作。例如,对于一个已知的配置,需要考虑以下方面:
1.哪个视频输出编解码器可用于驱动哪个视频输出
2.哪个视频编解码器可用于将哪个再现目标的主表面转换成一个视频信号
3.通过视频输出的可能的视频模式设置分配是什么
4.每个视频编解码器可以驱动的可能的视频模式是什么
5.通过再现目标的可能的图形再现模式分配是什么
这些问题中的一些使得搜索复杂在于编解码器是稀少资源,并且通常存在编解码器少于输出,因此对于复制图像,只要有可能,通过多个输出共用一个编解码器是有利的。这样的一个方法中将同样的视频模式强制在两个也许不工作的监视器上的情况有下降趋势,如果监视器不具有两个都支持的公共的视频模式(例如一个CRT可以上到1280×1024并且一个LCD只可以支持1600×1200)。即使它们共用一个视频模式,这可能不是驱动监视器的理想的方式,因为该视频模式可能不是它们的较佳模式。例如,一个投影机支持640×480、800×600、1024×768(本地的)和1280×1024。该LCD支持640×480、800×600、1024×768、1280×1024和1400×1050(本地的)。在这两个装置之间共用一个编解码器只有一个驱动器可以在它的较佳视频模式被驱动。
或者,一个LCD可以支持1024×768、1280×1024、1600×1200(较佳的)。并且一个投影机可以支持640×480、800×600(较佳的)以及1024×768。共用装置两个监视器都不能在它的较佳模式被驱动。
另外,不是所有的编解码器都是相等的制造的。有时一个显示卡具有不同的编解码器,其中一个编解码器能够工作在更多的模式或者实现比其他模式更好的某些模式。当在某个编解码器上具有可利用的某种模式时这种情况可能变得更加复杂(例如,一个编解码器可以只支持16比特,并且另一编解码器可以只支持32比特模式)。
最后,当交叉线可用于重定编解码器到不同输出的路径,具有该视频输出的拓扑的编解码器的限制和不兼容性可导致某种编解码器被限制到某种输出子集(例如CRTC不能驱动DVI,并且TMDS不能驱动S-视频的HD-15)。
为了避免枚举所有可能的实施的穷举方法,一个集中方法可代替使用。
实施例41-将确定委托给视频驱动器的示范性优势
在此描述的任一实施例中,确定一个特定的临时配置是否对于视频适配器是起作用的可以由(例如委托给)装置驱动器来完成。一个可能的替代方案是构造一个可以通过一组视频适配器(例如所有已知的视频适配器)处理确定的通用情况的一般解决方法。然而,这样的一个解决方法需要用于处理大量情况的逻辑电路。
代替的,通过将确定委托给装置驱动器,该装置驱动器可以更加轻便并且不需要解决一般的情况。例如,该装置驱动器不必包含用于处理相应的视频适配器不能实现(例如在硬件中不存在)的情况。因此,该装置驱动器的尺寸可以被减小并且它的性能(例如速度)可以增加(例如与一般的解决方法相比)。
实施例42-在拓扑和源/目标之间的示范性比较
一个拓扑可被作为一个可配置的资源对待,其中选项(例如视频显现路径)可并行地配置。与那些其中只有单个选项(例如源/目标模式)可被立刻配置的视频显现源/目标相比。在一个已知的模式组中的模式可能相互排斥,然而显现路径不是必定相互排斥,但是可能是。
实施例43-示范性方法
两个可能的方法包括一个基于查询的方法和一个基于横越的方法。一个基于查询的方法可以包含查询一个用于满足OS提供的一组要求的解决方法的显示器微端口。一个基于横越的方法可以包含通过增加地建立一个起作用的VidPN实施来穿过解空间,该起作用的VidPN实施具有分别对于它的目标和源而选择的希望的视频显现目标和源模式。确定一个VidPN的接近最佳的实施可以留给视频小端口来完成。
可替代地,一个OS可以为视频小端口提供:(1)对于具有连接到它的一个监视器的每个VidPN目标所需要的视频显现目标模式组(例如一个显示卡不能暴露依附的监视器不支持的视频信号模式),符合DDI方的模式可以在视频显现目标模式枚举期间被OS确认;以及(2)基于一个提供的优先化方案支持监视器的较佳的监视器源模式的视频显现目标模式组方针,其中通过该方针显示器微端口可以找到一个VidPN实施,在该实施中一个较佳的监视器源模式首先在一个更可取的监视器上被支持,该方针由于该较佳的监视器源模式在连接到该系统的每个监视器上被支持因而是理想的解决方法。
查找在VidPN源上被支持的图形视频显现源模式的接近最佳的分配可以留给图像子系统的客户(例如外壳)来完成,其中通过在规定的操作状态下API报告显示卡的性能,一个驱动器仅仅暴露横越各个视频显现源模式组分配解空间的性能。可以采用象渴望的一样简单的或者象以图表为基础的搜索一样复杂的方法。
实施例44-示范性的计算环境
图26和下列讨论企图提供一个可实现所公开的技术的示范性计算环境的简短的、概括的说明。虽然不需要,所公开的技术将在可由一个个人计算机(PC)执行的计算机可执行的指令的一般环境诸如程序模块中描述。通常地,程序模块包括执行特定任务或实现特定抽象数据类型的例行程序、程序、目标、元件、数据结构等等。此外,所公开的技术可以利用其它的计算机系统配置来实施,其它的计算机系统配置包括手持装置、多处理器系统、基于微处理器的或者可编程的消费者电子设备、网络PC、微型计算机、大型机计算机等等。所公开的技术也可能在分布式的计算环境中实践,其中通过经一个通信网络连接的远程处理装置执行任务。在一个分布式的计算环境中,程序模块可以设置在本地和远程存储器存储装置中。
参照图26,一个用于实现所公开的技术的示范性系统包括一个以传统的PC2600的形式的通用的计算装置,其包括一个处理单元2602、一个系统存储器2604以及一个将包括系统存储器2604耦合到处理单元2602的各种系统部件的系统总线2606。该系统总线2606可以是以下几种总线结构中的任一种:存储器总线或存储器控制器、外围总线以及使用各种总线结构中任一种的本地总线。该系统存储器2604包括只读存储器(ROM)2608和随机存取存储器(RAM)2610。一个基本输入/输出系统(BIOS)2612包含帮忙信息在PC2600中的元件之间传输的基本常规程序,被存储在ROM2608中。
该PC 2600还包括一个用于从硬盘(未示出)读和写到硬盘的硬盘驱动器2614、一个用于从可移动磁盘2617读和写到该磁盘的磁盘驱动器2616以及一个用于从可移动光盘2619(诸如CD-ROM或其它的光介质)读并写到该光盘的光盘驱动器2618。该硬盘驱动器2614、磁盘驱动器2616和光盘驱动器2618分别通过硬盘驱动器接口2620、磁盘驱动器接口2622和光驱动器接口2624连接到系统总线2606。该驱动器和它们的相关的计算机可读介质提供用于PC2600的计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。可以存储PC可存取的数据的其它类型的计算机可读介质,诸如磁带、闪存卡、数字视频盘、CD、DVD、RAM、ROM等等也可用在该示范性操作环境中。
多个程序模块可存储在硬盘、磁盘2617、光盘2619、ROM 2608或者RAM2610上,其包括一个操作系统2630、一个或多个应用程序2632、其它程序模块2634以及程序数据2636。一个用户可以通过输入装置(未示出)诸如键盘2640和指示装置2642(诸如一个鼠标)输入命令和信息到PC 2600中。其它输入装置(未示出)可以包括一个数字相机、麦克风、操纵杆、游戏垫、卫星反射器、扫描仪等等。这些和其它的输入装置总是通过一个串行端口接口2644连接到处理单元2602,串行端口接口2644耦合到系统总线2606,但是也可以通过其它接口诸如并行端口、游戏端口或者通用串行总线(USB)被连接。一个监视器2646或者其它类型的显示装置也通过一个接口诸如视频适配器2648连接到系统总线2606。可包括其它外围输出装置诸如扬声器和打印机(未示出)。
该PC 2600可以在一个使用逻辑连接到一个或多个远程计算机诸如远程计算机2650的网络环境中操作。该远程计算机2650可以是另一个PC、一个服务器、一个路由器、一个网络PC或者一个同等装置或者其它的公共网络节点,并且通常包括上述的与PC 2600有关的许多或所有元件,虽然在图26中只示出一个存储器存储装置2652。在图26中描述的逻辑连接包括一个局域网(LAN)2654和一个广域网(WAN)2656。这样的网络环境在办公室、企业范围的计算机网络、企业内部互联网和因特网中是普遍现象。
当用于LAN网络环境中时,PC 2600通过一个网络接口2658连接到LAN2654。当用于WAN网络环境中时,PC 2600通常包括一个调制解调器2660或者其它的用于通过WAN 2656诸如因特网建立通信的装置。该调制解调器2660经过串行端口接口2644连接到系统总线2606,该调制解调器可以是内置的或外置的。在一个网络环境中,与个人计算机2600有关的描述的程序模块或其部分可以存储在远程存储器存储装置中。该示出的网络连接是示范性的,并且可以使用在计算机之间建立通信链接的其它装置。
实施例45-示范性的说明
下面是用于实现一个支持在此描述的各种技术的视频显现网络的示范性说明。在该实施例中,一个视频显现网络有时称为一个“视频显现网络”或“VidPN”。一个用于视频显现网络的特定的配置有时称为一个“VidPN实施”。
所描述的功能可被组成编程接口,诸如API或DDI。这样的一个接口可以通过一个用于通过客户诸如一个操作系统存取的装置驱动器来实现。
表3-功能EnumAvailVidPNTargets


表4-功能ConstrainModesOnVidPNTargets


表5-功能EnumAvailVidPNSources



表6-功能CreateVidPNImp1


表7-功能GetActiveVidPNImp1


表8-功能GetActiveVidPNTopology

表9-功能DisposeOfVidPNImp1

表10-功能CommitVidPNImp1


表11-功能AddVideoPresentPathToVidPNTopology


表12-功能RemovePresentTargetFromVidPNTopology

表13-功能RemovePresentSourceFromVidPNTopology

表14-功能EnumCurrentlyAvailVidPNTargetModeSets


表15-功能PinModeOnVidPNTarget


表16-功能UnpinModeOnVidPNTarget


表17-功能PinModeOnEachVidPNTarget


表18-功能EnumCurrentlyAvailVidPNSourceModeSets



表19-功能PinModeOnVidPNSource


表20-功能UnpinModeOnVidPNSource


表21-功能PinModeOnEachVidPNSource


表22-功能EnumCurrentlyAvailFilteringTechniqueSets


表23-功能PinFilteringTechniqueOnVidPNSource



表24-功能UnpinFilteringTechniqueOnVidPNSource


表25-功能PinFilteringTechniqueOnEachVidPNSource


表26-功能Filtering_Techniques_Set


表27-功能Filtering_Technique
  名称 Filtering_Technique   目的 滤波技术描述符。   定义 Typedef enum_FILTERING_TECHNIQUE{TBD}VIDEO_MODE,*PVIDEO_MODE;   注释 滤波技术规定在把被再现的帧转换成视频模式场时利用何种滤波算法GPU和/或视频出编解码器来处理视频显现源的主表面。
表28-功能Vdeo_Present_Target

表29-功能Video_Output_Technology
  名称   Video_Output_Technology   目的   视频输出技术描述符。   定义   Typedef enum_VIDEO_OUTPUT_TECHNOLOGY  {  VOT_Uninitialized  =0,  VOT_HD15           =1,  VOT_DVI            =2,  VOT_HDMI           =3,  VOT_HDMI2          =4,  VOT_SVideo_4pin    =5,  VOT_SVideo_7pin    =6,  VOT_RCA_composite  =7,  VOT_RCA_3component =8,  VOT_BNC            =9,  VOT_RF             =10,  VOT_other          =255  }  VIDEO_OUTPUT_TECHNOLOGY,*PVIDEO_OUTPUT_TECHNOLOGY;   注释   视频输出技术被用来在监视器的描述符无效时确定由监视器支持的视频模式的硬编码列表。滤波技术是一个视频输出编  解码器输入特征。YUV->RGB转换是一个视频输出编解码器输出特征。IHV的默认推荐是:SD->601,HD->709。  这可能是错的,因此你希望能够替换它。
表30-功能Video_Output_HPD_Awareness
  名称   Video_Output_HPD_Awareness   目的   视频输出HPD感知描述符。   定义   Typedef enum_VIDEO_OUTPUT_HPD_AWARENESS  {  VOHPD_Uninitialized          =0,  VOHPD_None                   =1  VOHPD_DestructivelyPolled    =2,  VOHPD_NonDestructivelyPolled =3,  VOHPD_Interrupt ible         =4  }  VIDEO_OUTPUT_HPD_AWARENESS,*PVIDEO_OUTPUT_HPD_AWARENESS;   注释   视频输出HPD感知被用来表示由显示卡在其视频输出上感测的监视器的连通性的等级。视频输出具有:  4.可中断的HPD感知当且仅当显示器微端口可以异步地通知OS关于监视器的到达/离开。  5.非破坏地轮询HPD感知当且仅当显示器微端口可以仅通过周期地轮询下面的的h/w而不引起视觉失真来向OS报  告监视器的到达/离开。  6.破坏地轮询HPD感知当且仅当显示器微端口可以仅通过偶尔地轮询下面的h/w而不在每一个轮询上引起视觉失真  来向OS报告监视器的到达/离开。  7.无HPD感知当且仅当显示器微端口不感知到监视器的到达/离开,并因此不能异步地通知OS或者同步地向OS  报告发生了这样的事件。
表31-功能VIdeo_Present_Source

表32-功能Video_Present_Source_Content_Layout
  名称   Video_Present_Source_Content_Layout   目的   视频显现源内容的布局格式。   定义   Typedef enum_VIDEO_PRESENT_SOURCE_CONTENT_LAYOUT  {  VPSCL_Linear =1,  VPSCL_Other  =2, }VIDEO_PRESENT_SOURCE_CONTETENT_LAYOUT,*PVIDEO_PRESENT_SOURCE_CONTENT_LAYOUT;   注释 视频显现源的布局格式被用来确定如何将图像的内容布置在相应主表面中。
表33-功能Video_Present_Path
  名称   Video_Present_Path   目的   VidPN显现目标到源映射。
  名称   Video_Present_Path   定义   Typedefstruct_VIDEO_PRESENT_PATH  {  PVIDEO_PRESENT_TARGET pVIdPT;  PVIDEO_PRESENT_SOURCE pVidPS;  }  VIDEO_PRESENT_PATH,*PVIDEO_PRESENT_PATH;   注释   这个类型被用于描述一个从单一视频显现目标至VidPN中单一视频显现源的映射。
表34-功能VidPN_Topology

表35-功能VidPN_Impl
  名称   VIDPN_IMPL   目的   VidPN实施执行。   定义   Typedef ULONG_PTRVIDPN_IMPL,*PVIDPN_IMPL   注释   这种类型被用来描述针对一个特殊VidPN通过显示器微端口返回的VidPN实施的执行。
表36-功能Video_Present_Target_Mode_Set

表37-功能Video_Present_Target_Mode



表38-功能Video_Signal_Standard
  名称   VIDEO_SIGNAL_STANDARD   目的   视频模式标准描述符,列举Windows明确支持的标准。   定义   typedefenum_VIDEO_SIGNAL_STANDARD  {    NTSC_M,NTSC_J,NTSC_443,    PAL_B,PAL_B1,PAL_G,PAL_H,PAL_I,PAL_D,PAL_N,PAL_NC,    SECAM_B,SECAM_D,SECAM_G ,SECAM_H,SECAM_K,SECAM_K1,SECAM_L,SECAM_L1,    EIA_861_1,EIA_861_2,EIA_861_3,EIA_861_4,EIA_861_5,    EIA_861_6,EIA_861_7,EIA_861_8,EIA_8619,EIA_861_10,    EIA_861A_1,EIA_861A_2,EIA_861A_3,EIA_861A_4,    EIA_861B_1,EIA_861B_2,EIA_861B_3,EIA_861B_4,EIA_861B_5,    EIA_861B_6,EIA_861B_7,    IBM_1,IBM_2,IBM_3,IBM_4,     APPLE_1,APPLE_2,APPLE_3,    VESA_1,VESA_2,VESA_3,VESA_4,VESA_5,VESA_6,VESA_7,VESA_8,VESA_9,    VESA_10,VDMT_1,VDMT_2,VDMT_3,VDMT_4,VDMT_5,VDMT_6,VDMT_7,VDMT_8,    VDMT_9,VDMT_10,VDMT_11,VDMT_12,VDMT_13,VDMT_14,VDMT_15,VDMT_16,    VDMT_17,VDMT_18,VDMT_19,VDMT_20,VDMT_21,VDMT_22,VDMT_23,VDMT_24,    VDMT_25,VDMT_26,VDMT_27,VDMT_28,VDMT_29,VDMT_30,VDMT_31,VDMT_32,    VDMT_33,VDMT_34,    GTF,    other  }  VIDEO_SIGNAL_STANDARD,*PVIDEO_SIGNAL_STANDARD;
  名称   VIDEO_SIGNAL_STANDARD   注释   当适当时(即没有其他时),这个enum将被用来简化视频模式比较。下表列出了这些模式的一些基本参数。  Name       Width    Height   Vsync    Hsync rate    Pixel clock    Content  NTSC_M     720      525      59.94    15,734.27     3,579,545      Interlaced  NTSC_J     720      525      59.94    15,734.27     3,579,545      Interlaced  NTSC_443   720      525      59.94    15,734.27     4,433,618.75   Interlaced  PAL_B      720      625      50       15,625        4,433,618.75   Interlaced  PAL_B1     720      625      50       15,625        4,433,618.75   Interlaced  PAL_G      720      625      50       15,625        4,433,618.75   Interlaced  PAL_H      720      625      50       15,625        4,433,618.75   Interlaced  PAL_I      720      625      50       15,625        4,433,618.75   Interlaced  PAL_D      720      525      59.94    15,734        3,575,611.49   Interlaced  PAL_N      720      625      50       15,625        4,433,618.75   Interlaced  PAL_NC     720      625      50       15,625        3,582,056.25   Interlaced  SECAM_B    720      625      50       15,625                       Interlaced  SECAM_D    720      625      50       15,625                       Interlaced  SECAM_G    720      625      50       15,625                       Interlaced  SECAM_H    720      625      50       15,625                       Interlaced  SECAM_K    720      625      50       15,625                       Interlaced  SECAM_K1   720      625      50       15,625                       Interlaced  SECAM_L    720      625      50       15,625                       Interlaced  SECAM_L1   720      625      50       15,625                       Interlaced  EIA_861_1  720      480      59.94                                 Interlaced  EIA_861_2  720      480      60                                    Interlaced  EIA_861_3  640      480      59.94                                 Progressive  EIA_861_4  640      480      60                                    Progressive  EIA_861_5  720      480      59.94                                 Progressive  EIA_861_6  720      480      60                                    Progressive  EIA_861_7  1280     720      59.94                                 Progressive  EIA_861_8  1280     720      60                                    Progressive  EIA_861_9  1920     1080     59.94                                 Interlaced  EIA_861_10 1920     1080     60                                    Interlaced  EIA_861A_1 72057    650                                            Interlaced  EIA_861A_2 72057    650                                            Progressive  EIA_861A_3 1280     720      50                                    Progressive  EIA_861A_4 1920     1080     50                                    Interlaced  EIA_861B_1 1920     1080     23.96                                 Progressive
  名称   VIDEO_SIGNAL_STANDARD   EIA_861B_1 1920   1080    23.96                       Progressive  EIA_861B_2 1920   1080    24                          Progressive  EIA_861B_3 1920   1080    25                          Progressive  EIA_861B_4 1920   1080    29.97                       Progressive  EIA_861B_5 1920   1080    30                          Progressive  EIA_861B_6 1920   1080    50                          Progressive  EIA_861B_7 1920   1080    60                          Progressive  IBM_1      720    400     70                          Progressive  IBM_2      720    400     88                          Progressive  IBM_3      640    480     60                          Progressive  IBM_4      1024   768     87                          Interlaced  APPLE_1    640    480     67                          Progressive  APPLE_2    832    624     75                          Progressive  APPLE_3    1152   870     75                          Progressive  VESA_1     640    480     72                          Progressive  VESA_2     640    480     75                          Progressive  VESA_3     800    600     56                          Progressive  VESA_4     800    600     60                          Progressive  VESA_5     800    600     72                          Progressive  VESA_6     800    600     75                          Progressive  VESA_7     1024   768     60                          Progressive  VESA_8     1024   768     70                          Progressive  VESA_9     1024   768     75                          Progressive  VESA_10    1280   1024    75                          Progressive  VDMT_1     640    350     85   37,900   31,500,000    Progressive  VDMT_2     640    400     85   37,900   31,500,000    Progressive  VDMT_3     720    400     85   37,900   35,500,000    Progressive  VDMT_4     640    480     60   31,500   25,175,000    Progressive  VDMT_5     640    480     72   37,900   31,500,000    Progressive  VDMT_6     640    480     75   37,500   31,500,000    Progressive  VDMT_7     640    480     85   43,300   36,000,000    Progressive  VDMT_8     800    600     55   35,100   36,000,000    Progressive  VDMT_9     800    600     60   37,900   40,000,000    Progressive  VDMT_10    800    600     72   48,100   50,000,000    Progressive  VDMT_11    800    600     75   46,900   49,500,000    Progressive  VDMT_12    800    600     85   53,700   56,250,000    Progressive  VDMT_13    1024   768     43   35,500   44,900,000    Interlaced  VDMT_14    1024   758     60   48,400   65,000,000    Progressive  VDMT_15    1024   768     70   56,500   75,000,000    Progressive  VDMT_16    1024   768     75   60,000   78,750,000    Progressive  VDMT_17    1024   768     85   66,700   94,500,000    Progressive  VDMT_18    1152   864     75   67,500   108,000,000   Progressive  VDMT_19    1280   960     60   60,000   108,000,000   Progressive  VDMT_20    1280   960     85   85,900   148,500,000   Progressive  VDMT_21    1280   1024    60   64,000   108,000,000   Progressive  VDMT_22    1280   1024    75   80,000   135,000,000   Progressive  VDMT_23    1280   1024    85   91,100   157,500,000   Progressive  VDMT_24    1600   1200    60   75,000   162,000,000   Progressive  VDMT_25    1600   1200    65   81,300   175,500,000   Progressive  VDMT_26    1600   1200    70   87,500   189,000,000   Progressive  VDMT_27    1600   1200    75   93,800   202,500,000   Progressive  VDMT_28    1600   1200    85   106,300  229,500,000   Progressive  VDMT_29    1792   1344    60   83,640   204,750,000   Progressive  VDMT_30    1792   1344    75   106,270  261,000,000   Progressive
  VDMT_31    1856   1392    60   86,330   218,250,000   Progressive  VDMT_32    1856   1392    75   112,500  288,000,000   Progressive  VDMT_33    1920   1440    60   90,000   234,000,000   Progressive  VDMT_34    1920   1440    75   112,500  297,000,000   Progressive
表39-功能Video_Signal_Scanline_Ordering

表40-功能Fractional_Frequency


表41-功能Video_Present_Source_Mode_Set

表42-功能Video_Present_Source_Mode

表43-功能Video_Present_Source_Mode_Type
  名称   VIDEO_PRESENT_SOURCE_MODE_TYPE   目的   视频显现源模式枚举类型描述符。   定义 typedefenum_VIDEO_PRESENT_SOURCE_MODE_TYPE{RMT_Uninitialized=0,RMT_Graphics  =1,RMT_Text    =2,}VIDEO_PRESENT_SOURCE_MODE_TYPE,*PVIDEO_PRESENT_SOURCE_MODE_TYPE;   注释  这个类型被用于规定视频显现源模式是图形还是文本视频显现源模式(见更详细的 VIDEO_PRESENT_SOURCE_MODE)。
表44-功能Graphics_Rendering_Format

表45-功能Pixel_Format

  大部分意味着不能简单地描述出来的结构布局,因而将再次测试每一个格式以便其被该应用支  持。  iii.并且位屏蔽对浮点像素格式不起作用。
表46-功能Color_Access_Mode
  名称   COLOR_ACCESS_MODE   目的   颜色访问模式描述符。   定义   typedef enum_COLOR_ACCESS_MODE  {  CAM_Uninitialized    =0,  CAM_Direct           =1,  CAM_PresetPalette    =2,  CAM_SettablePalette  =3  }  COLOR_ACCESS_MODE,*PCOLOR_ACCESS_MODE;   注释   利用Direct通过直接存储在主表面中的颜色表现视频显现源模式。  利用PresetPalette通过存储在主表面中的颜色索引以及存储在显示卡专用的调色板中的实际颜  色值表现视频显现源模式,这必须从显示器微端口被查询。  利用SettablePalette通过存储在主表面中的颜色索引以及存储在可设置调色板中的实际颜色值来  表现视频显现源模式,其中通过将该调色板规定给显示器微端口而可将该调色板动态地设置在  显示卡上。
表47-功能Color_Basis
  名称   COLOR_BASIS   目的   颜色要素的描述符,相对于这些颜色要素扩展像素的颜色或相反地基于这些颜色要素合成颜色值。   定义   typedef enum_COLOR_BASIS  {  CB_Uninitialized  =0,  CB_Intensity      =1,   CB_sRGB     =2,  CB_scRGB    =3,  CB_YCbCr    =4,  CB_YPbPr    =5,  }  COLOR_BASIS,     *PCOLOR_BASIS;
  名称   COLOR_BASIS   注释   图形行业中通常使用的颜色要素是RGB,其具有要素(红、绿和蓝)以及YPbPr和YCbCr,YPbPr  和YCbCr具有要素(1,蓝-1,红-1)*亮度(红,绿,蓝)的按比例变化的变形。  三色激励线性RGB非常适合于实时再现,这是因为大部分滤波算法使用了三色值来估计由于与环  境的交互作用而导致的光谱变换,而采用三色值来估计主要是由于被觉察的光级与光谱亮度之间  存在一个线性的关系。理想地,视频内容的处理(例如所有的处理)(即缩放、滤波等)应该在线  性RGB空间中执行。  Y’PbPr空间利用接近于伽马2.2曲线(即x^.45)的反转的非线性曲线存储数据。这使得在人眼  更敏感的暗色亮度中有更多的精度将被存储。  sRGB(更准确地说是sR’G’B’)存储与伽马曲线相关的光亮度。  scRGB存储线性值,并需要更高的精度,以便表现相同的感知的类似信号。  基于YPbPr和YCbCr的光亮度更适合于持续的预再现内容,例如视频流。这是由于人的视觉系统  对光子亮度的小差异比对频率(即可感知的颜色)更敏感,并因而基于有限动态范围上的颜色扩  展的光亮度相对于人眼来说比基于相同范围内的颜色扩展的三色产生更好的可感知的图像质量  (例如,非线性Y8Cb8Cr8看上去稍微比R8G8B8好,并且与R9G9B9具有可比性)。  利用Intensity来再现单色模式。灰度级成像被大量地应用于医学成像中。  *注意:撇号Y’PbPr用来提醒你正利用非线性数据工作。
表48-功能Text_Rendering_Format
  名称   TEXT_RENDERING_FORMAT   目的   文本视频显现源模式格式。   定义   typedef TBD TEXT_RENDERING_FORMAT;   注释   文本视频显现源模式仅被支持用于向后兼容。
表49-功能Filtering_Technique
  名称   FILTERING_TECHNIQUE   目的   滤波技术枚举类型。   定义   typedef      D3DDDIMULTISAMPLE_TYPE    FILTERING_TECHNIQUE,  *PFILTERING_TECHNIQUE;   注释   这种类型被用于规定哪一类型的滤波技术被用来在视频显现源上重现(例如,2×2/4×4多取  样/超级取样等)。
实例46-监视器的示例性相对重要性
在这里的任一实例中,可以要求操作多个监视器(例如视频微端口)的视频驱动器提供一个推荐功能配置。在这种情况中,监视器的相对重要性可以被规定。例如,监视器可以被排序(例如最重要到最不重要)。然后,驱动器可以根据所规定的相对重要性提供一个配置。
实例47-示例性无状态实施
在此描述的某些技术是在利用一种方法的情况下描述的,在这种方法中视频驱动器保持临时配置状态(例如其被固定和去固定)。然而,也可以采用无状态方法。在这种方法中,视频驱动器不需要跟踪状态(例如临时配置的状态)并且可以制造得更轻和更简单。如果需要,客户软件可以在所需配置的确定过程中跟踪一个状态。
在这样一种方法中,编程接口(例如,DDI)可以被用于传递与临时配置的状态相关的信息。例如,数据结构可以用于容纳配置的细节并通过该接口传递。
实例48-示例性无状态驱动器接口
下面是一个示例性内核模式驱动器接口(例如一个DDI),包括一个用于实施一个视频显现网络的无状态视频表现网络管理微端口接口,其中该视频显现网络支持在此描述的各种技术。在这个实例中,一个视频显现网络有时被称为一个“视频显现网络”或“VidPN”。用于视频显现网络的一个具体配置有时被称为一个“VidPN实施”。并且,在这个实例中,使用了措辞“微端口”,但是在此描述的技术可以被应用到任何显示适配器或视频驱动器。
一个示例性内核模式驱动器可以是一个视频微端口的一部分。每一个物理GPU可以作为其自己的适配器来处理,其中该适配器可以用下面取回的HANDLE hAdapter来表示。如果单个GPU具有多个输出(例如头),它仍然可以被当作单个适配器来处理。
一个微端口的HwVidQueryInterface功能可以利用下面的QUERY_INTERFACE结构调用,以便取回驱动器的进入点:
QUERY_INTERFACE queryinterface;
      queryinterface.InterfaceType          =GUID_DEVINTERFACE_D3DDDI;
      queryinterface.Size                   =sizeof(D3DKMDDI_INTERFACE);
      queryinterface.Version                =D3DDDI_INTERFACE_VERSION;
      queryinterface.Interface              =&pD3DKMDDIInterface;
      queryinterface.InterfaceSpecificData  =&pD3DKMDDIInterfaceSpecificData;
如果接口被成功取回,那么这个HwVidQueryInterface调用返回NO_ERROR,否则它将返回适当的错误代码。驱动器的进入点可以在下面的D3DKMDDI_INTERFACE结构中返回。查询该接口可以隐含地引用它。因此,如果在该接口已被查询之后驱动器的初始化失败,那么可以在驱动器未找到显式引用的情况下调用接口去引用功能。
typedef struct_D3DKMDDI_INTERFACE
{
  USHORT    Size;
  USHORT    Version;
  HANDLE    hAdapter;
  VOID*     pInterfaceReference;
  VOID*     pInterfaceDereference;
  //Exemplary adapter methods
  PFND3DKMDDI_QUERYADAPTERINFO    pfnQueryAdapterInfo;
  PFND3DKMDDI_CREATEDEVICE        pfnCreateDevice;
PFND3DKMDDI_CREATEALLOCATION     pfnCreateAllocation;
PFND3DKMDDI_DESTROYALLOCATION    pfnDestroyAllocation;
PFND3DKMDDI_ACQUIREAPERTURE      pfnAcquireAperture;
PFND3DKMDDI_RELEASEAPERTURE      pfnReleaseAperture;
PFND3DKMDDI_MAPAPERTURESEGMENT   pfnMapApertureSegment;
PFND3DKMDDI_UNMAPAPERTURESEGMENT pfnUnmapApertureSegment;
PFND3DKMDDI_PATCH                pfnPatch;
PFND3DKMDDI_SUBMITCOMMAND        pfnSubmitCommand;
PFND3DKMDDI_PREEMPTCOMMAND       pfnPreemptCommand;
PFND3DKMDDI_SETPOINTERSHAPE      pfnSetPointerShape;
PFND3DKMDDI_SETPOINTERPOSITION   pfnSetPointerPosition;
PFND3DKMDDI_BUILDPAGINGBUFFER    pfnBuildPagingBuffer;
PFND3DKMDDI_ESCAPE               pfnEscape;
PFND3DKMDDI_QUERYCURRENTFENCE    pfnQueryCurrentFence;
PFND3DKMDDI_SETMODE              pfnSetMode;
PFND3DKMDDISETOUTPUTSTATE        pfnSetOutputState;
//示例性适配器VidPN管理方法
PFND3DKMDDI_ENUMVIDEOPRESENTSOURCESET    pfnEnumVidepPresentSourceSet;
PFND3DKMDDI_ENUMVIDEOPRESENTTARGETSET    pfnEnumVideoPresentTargetSet;
PFND3DKMDDI_ISSUPPORTEDVIDPN             pfnIsSupportedVidPN;
PFND3DKMDDI_ENUMCOFUNCVIDPNSOURCEIDSET   pfnEnumCofuncVidPNSourceIDSet;
PFND3DKMDDI_ENUMCOFUNCVIDPNTARGETIDSET   pfnEnumCofuncVidPNTargetIDSet;
PFND3DKMDDI_ENUMVIDPNCOFUNCMODALITY      pfnEnumVidPNCofuncModality;
PFND3DKMDDI_RECOMMENDFUNCTIONALVIDPN     pfnRecommendFunctionalVidPN;
//示例性装置方法
PFND3DKMDDI_DESTROYDEVICE                pfnDestroyDevice;
PFND3DKMDDI_OPENALLOCATION               pfnOpenAllocation;
PFND3DKMDDI_CLOSEALLOCATION              pfnCloseAllocation;
PFND3DKMDDI_RENDER                       pfnRender;
PFND3DKMDDI_PRESENT            pfnPresnt;
D3DKMDDI_INTERFACE;
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_QUERYADAPTERINFO)(HANDLE hAdapter,CONSTD3DKMDDIARG_QUERYADAPTERINFO*);
typcdcf NTSTATUS(APIENTRY*PFND3DKMDDI_CREATEDEVICE)(HANDLE hAdapter,D3DKMDDIARG_CREATEDEVICE*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_CREATEALLOCATION)(HANDLE hAdapter,D3DKMDDIARG_CREATEALLOCATION*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_DESTROYALLOCATION)(HANDLE hAdapter,CONSTD3DKMDDIARG_DESTROYALLOCATION*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ACQUIREAPERTURE)(HANDLE hAdapter,D3DKMDDIARG_ACQUIREAPERTURE*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_RELEASEAPERTLURE)(HANDLE hAdapter,CONSTD3DKMDDIARG_RELEASEAPERTURE*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_MAPAPERTURESEGMENT)(HANDLE hAdapter,CONSTD3DKMDDIARG_MAPAPERTURESEGMENT*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_UNMAPAPERTURESEGMENT)(HANDLE hAdapter,CONSTD3DKMDDIARG_UNMAPAPERTURESEGMENT*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_PATCH)(HANDLE hAdapter,CONST D3DKMDDIARG_PATCH*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_SUBMITCOMMAND)(HANDLE hAdapter,CONSTD3DKMDDIARG_SUBMITCOMMAND*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_PREEMPTCOMMAND)(HANDLE hAdapter,CONSTD3DKMDDIARG_PREEMPTCOMMAND*);
typedefNTSTATUS(APIENTRY*PFND3DKMDDI_SETPOINTERSHAPE)(HANDLE hAdapter,CONSTD3DKMDDIARG_SETPOINTERSHAPE*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_SETPOINTERPOSITION)(HANDLE hAdapter,CONSTD3DKMDDIARG_SETPOINTERPOSITION*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_BUILDPAGINGBUFFER)(VOID*,D3DKMDDIARG_BUILDPAGINGBUFFER*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ESCAPE)(HANDLE hAdapter,D3DKMDDIARG_ESCAPE*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_QUERYCURRENTFENCE)(HANDLE hAdapter,ULARGE_INTEGER*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_SETMODE)(HANDLE hAdapter,D3DKMDDIARG_SETMODE*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_SETOUTPUTSTATE)(HANDLE_hAdapter,D3DKMDDIARG_SETOUTPUTSTATE*);
//示例性VidPN管理方法
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ENUMVIDEOPRESENTSOURCESET)(HANDLE hAdapter,D3DKMDDIARG_ENUMVIDEOPRESENTSOURCESET*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ENUMVIDEOPRESENTTARGETSET)(HANDLE hAdapter,D3DKMDDIARG_ENUMVIDEOPRESENTTARGETSET*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ISSUPPORTEDVIDPN)(HANDLE hAdapter,D3DKMDDIARG_ISSUPPORTEDVIDPN*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ENUMCOFUNCVIDPNSOURCEIDSET)(HANDLE hAdapter,D3DKMDDIARG_ENUMCOFUNCVIDPNSOURCEIDSET*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_ENUMCOFUNCVIDPNTARGETIDSET)(HANDLE hAdapter,D3DKMDDIARG_ENUMCOFUNCVIDPNTARGETIDSET*);
ttpedef NTSTATUS(APIENTRY*PFND3DKMDDI_ENUMVIDPNCOFUNCMODALITY)(HANDLE hAdapter,D3DKMDDIARG_ENUMVIDPNCOFUNCMODALITY*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_RECOMMENDFUNCTIONALVIDPN)(HANDLE hAdapter,D3DKMDDIARG_RECOMMENDFUNCTIONALVIDPN*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_DESTROYDEVICE)(HANDLE hDevice);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_OPENALLOCATION)(HANDLE hDevice,CONSTD3DKMDDIARG_OPENALLOCATION*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_CLOSEALLOCATION)(HANDLE hDevice,CONSTD3DKMDDIARG_CLOSEALLOCATION*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_RENDER)(HANDLE hDevice,D3DKMDDIARG_RENDER*);
typedef NTSTATUS(APIENTRY*PFND3DKMDDI_PRESENT)(HANDLE hDevice,D3DKMDDIARG_PRESENT*);
在D3DKMDDI_INTERFACE结构中被返回的hAdapter可以作为pInterfaceReference以及pInterfaceDereference的上下文来传递。并且其还可以以适配器起作用的hAdaper参数在接口中传递。
tydef struct D3DKMIDDI_INTERFACESPECIFICDATA
{
HANDLE    hAdapter;
//示例性D3DKMDDI接口回调功能
PFND3DKMDDI_GETHANDLEDATACB             pfnGetHandleDataCb;
PFND3DKMDDI_GETHANDLEPARENTCB           pfnGetHandleParentCb;
PFND3DKMDDI_ENUMHANDLECHILDRENCB        pfnEnumHandleChildrenCb;
PFND3DKMDDI_NOTIFY_DMAINTERRUPTCB       pfnNotifyDmaInterruptCb;
PFND3DKMDDI_NOTIFY_DMADPCCB             pfnNotifyDmaDpcCb;
PFND3DKMDDI_ALLOCSYSMEMFOROUTPARAMCB    pfnAllocSysMemForOutParamCb;
PFND3DKMDDI_FREESYSMEMFOROUTPARAMCB     pfnFreeSysMemForOutParamCb;
}D3DKMDDI_INTERFACESPECIFICDATA;
typedef HANDLE(APIENTRY CALLBACK*PFND3DKMDDI_GETHANDLEPARENTCB)(HANDLE hDevice,D3DKMT_HANDLE);
typcdef VOID*(APIENTRY CALLBACK*PFND3DKMDDI_GETHANDLEDATACB)(HANDLEhDevice,CONSTD3DKMDDIARGCB_GETHANDLEDATA*);
typedef HANDLE(APIENTRY CALLBACK*PFND3DKMDDI_ENUMHANDLECHILDRENCB)(HANDLE hDevice,CONST D3DKMDDIARGCB_ENUMHANDLECHILDREN*);
typedef NTSTATUS(APIENTRY CALLBACK*PFND3DKMDDI_NOTIFY_DMAINTERRUPTCB)(HANDLE hAdapter,CONST D3DKMDDIARG_NOTIFY_DMAINTERRUPT_DATA*);
typedefNTSTATUS(APIENTRY CALLBACK*PFND3DKMDDI_NOTIFY_DMADPCCB)(HANDLE hAdapter,CONSTD3DKMDDIARG_NOTIFY_DMADPC_DATA*);
typedef VOID*(APIENTRY CALLBACK*PFND3DKMDDI_ALLOCSYSMEMFOROUTPARAMCB)(IN POOL_TYPE,IN SIZE_T);
typedef VOID(APIENTRY CALLBACK*PFND3DKMDDI_FREESYSMEMFOROUTPARAMCB)(VOID*);
接口特定数据可以包含指示器以便在驱动器可以调用的运行时间中回调功能。hAdaper可以是运行时间的适配器处理,并且可以被传递给请求一个适配器处理的回调。
除上述接口外,也可以使用下面传统的IOCTL:
IOCTL_VIDEO_RESET_DEVICE
IOCTL_VIDEO_SET_COLOR_REGISTERS
IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES
IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES
IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES
IOCTL_VIDEO_QUERY_AVAIL_MODES
表50-功能EnumVideoPresentSourceSet
 typedefNTSTATUS      (APIENTRY*PFND3DKMDDI_ENUMVIDEOPRESENTSOURCESET)      (IN HANDLE                                hAdapter,      OUT D3DKMDDIARG_ENUMVIDEOPRESENTSOURCESET*pEnumVideoPresentSourceSetArg);  typedestruct_D3DKMDDIARG_ENUMVIDEOPRESENTSOURCESET  {   OUT D3DKMDDI_VIDEO_PRESENT_SOURCE_SET*pVideoPresentSourceSet;  }  D3DKMDDIARG_ENUMVIDEOPRESENTSOURCESET;
EnumVideoPresentSourceSet可以通过VidPN管理器被系统中每一个显示适配器调用,其中VidPN管理器正驱动相应显示适配器的后再现视频表象能力,以便获得一个规定显示适配器具有的视频显现源的列表。
微端口可以经过INTERFACESPECIFICDATA接口,利用通过操作系统提供给它的AllocSysMemForOutParamCb回调在系统存储器中分配一个足够大的缓存器,以便包含用于规定显示适配器的被请求的视频显现源组。所分配的尺寸应为(D3DKMDDI_VIDEO_PRESENT_SOURCE_SET)的尺寸+(D3DKMDDI_VIDEO_PRESENT_SOURCE)的尺寸*(视频显现源的#-1)。
一旦用于输出参数的存储器已分配,那么微端口可以根据下列的定义对其进行填充:
typedef struct_D3DKMDDI_VIDEO_PRESENT_SOURCE_SET
{
  SIZE_T                        NumOfVideoPresentSources;
  D3DKMDDI_VIDEO_PRESENT_SOURCE VideoPresentSources[1];
}
D3DKMDDI_VIDEO_PRESENT_SOURCE_SET;
其中:
●NumOfVideoPresentSources-在VideoPresentSources中列出的视频显现源的数量。
●VideoPresentSources-在该组中的视频显现源描述符的阵列的地址。在NumOfVideoPresentSources规定元素的实际数量。
视频显现源描述符被定义为如下:
typedef struct_D3DKMDDI_VIDEO_PRESENT_SOURCE
{
  D3DKMDDI_VIDEO_PRESENT_SOURCE_ID    VideoPresentSourceID;
  DWORD                               dwReserved;
}
D3DKMDDI_VIDEO_PRESENT_SOURCE;
其中:
●VideoPresentSourceID-用来通过微端口以及操作系统引用相应的视频显现源的唯一的ID。
●dwReserved-在这里起作用的其它视频显现源描述符特性。视频显现源ID被定义为:
typedef UINT D3DKMDDI_VIDEO_PRESENT_SOURCE_ID;
在从这个功能成功返回的基础上,操作系统可以取得以输出参数形式返回的数据的使用期的所有权,并且在完成时可以释放被它的支持分配所占用的存储器。
返回代码
STATUS_SUCCESS表示驱动器成功地执行调用。
表51-功能EnumVideoPresentTargetSet
  typedef NTSTATUS      (APIENTRY*PFND3DKMDDI_ENUMVIDEOPRESENTTARGETSET)      (IN HANDLE                                hAdapter,      OUT D3DKMDDIARG_ENUMVIDEOPRESENTTARGETSET*pEnumVideoPresentTargetSetArg);  typedef struct_D3DKMDDIARG_ENUMVIDEOPRESENTTARGETSET  {    OUT D3DKMDDI_VIDEO_PRESENT_TARGET_SET*pVideoPresentTargetSet;  }  D3DKMDDIARG_ENUMVIDEOPRESENTTARGETSET;
可以通过VidPN管理器为系统中每一个显示适配器调用EnumVideoPresentTargetSet,管理器正驱动相应显示适配器的后再现视频显现能力以便获得规定显示适配器所具有的视频显现目标列表。
微端口可以经过INTERFACESPECIFICDATA接口,利用通过操作系统提供给它的AllocSysMemForOutParamCb回调在系统存储器中分配一个足够大的缓存器,以便包含用于被规定的显示适配器的所请求的视频显现源组。所分配的尺寸应为(D3DKMDDI_VIDEO_PRESENT_TARGET_SET)的尺寸+(D3DKMDDI_VIDEO_PRESENT_TARGET)的尺寸*(视频显现目标的#-1)。
一旦用于输出参数的存储器已分配,微端口就可以基于下面的定义对其进行填充:
typedef struct_D3DKMDDI_VIDEO_PRESENT_TARGET_SET
{
  SIZE_T                        NumOfVideoPresen tTargets;
  D3DKMDDI_VIDEO_PRESENT_SOURCE VideoPresentTargets[1];
}
D3DKMDDI_VIDEO_PRESENT_TARGET_SET;
其中:
●NumOfVideoPresentTargets-在VideoPresentSources中列举的视频显现目标的数量。
●VideoPresentSources-在该组中的视频显现目标描述符的阵列的地址。在NumOfVideoPresentTargets中规定元素的实际数量。
视频显现目标描述符被定义为如下:
typedef struct_D3DKMDDI_VIDEO_PRESENT_TARGET
{
  D3DKMDDI_VIDEO_PRESENT_TARGET_ID          VideoPresentTargetID;
  D3DKMDDI_VIDEO_OUTPUT_TECHNOLOGY          VideoOutputTechnology;
  D3DKMDDI_VIDEO_OUTPUT_HPD_AWARENESS       VideoOutputHPDAwareness;
  D3DKMDDI_MONITOR_ORIENTATION_AWARENESS    MonitorOrientationAwareness;
}
D3DKMDDI_VIDEO_PRESENT_TARGET;
其中:
●VideoPresentTargetID-用来通过微端口以及操作系统引用相应的视频显现目标的唯一的ID。
●VideoOutputTechnology-视频输出技术的类型。
●VideoOutputHPDAwareness-视频输出的HPD的感知类型。
●MonitorOrientationAwareness-监视器定位感知。
视频显现目标ID被定义为:
typedefUINT D3DKMDDI_VIDEO_PRESENT_TARGET_ID;
视频输出技术类型描述符可以被定义为:
typedef enum D3DKMDDI_VIDEO_OUTPUT_TECHNOLOGY
{
  D3DKMDDI_VOT_UNINITIALIZED    =0,
  D3DKMDDI_VOT_HD15             =1,
  D3DKMDDI_VOT_DVI              =2,
  D3DKMDDI_VOT_HDMI             =3,
  D3DKMDDI_VOT_HDMI2            =4,
  D3DKMDDI_VOT_SVIDEO_4PIN      =5,
  D3DKMDDI_VOT_SVIDEO_7PIN      =6,
  D3DKMDDI_VOT_RCA_COMPOSITE    =7,
  D3DKMDDI_VOT_RCA_3COMPONENT   =8,
  D3DKMDDI_VOT_BNC              =9,
  D3DKMDDI_VOT_RF               =10,
  D3DKMDDI_VOT_OTHER            =255
}
D3DKMDDI_VIDEO_OUTPUT_TECHNOLOGY;
视频输出HPD感知描述符类型可以被定义为:
typedef enum_D3DKMDDI_VIDEO_OUTPUT_HPD_AWARENESS
{
  D3DKMDDI_VOHPDA_UNINITIALIZED             =0,
  D3DKMDDI_VOHPDA_NONE                      =1,
  D3DKMDDI_VOHPDA_DESTRUCTIVELYPOLLED       =2,
  D3DKMDDI_VOHPDA_NONDESTRUCTIVELYPOLLED    =3,
  D3DKMDDI_VOHPDA_INTERRUPTIBLE             =4
}
D3DKMDDI_VIDEO_OUTPUT_HPD_AWARENESS;
视频输出HPD感知可以被用来表示由显示适配器在监视器的视频输出上感应的监视器连通性的等级,并可利用如下四种类型:
1.可中断的HPD-当并且仅当微端口可以异步地将监视器的到达/离开通知操作系统时感知。
2.非破坏性轮询HPD-当并且仅当微端口不能异步地将监视器的到达/离开通知操作系统时感知,但是操作系统可以在不引起可视失真的情况下周期地轮询监视器的存在。
3.破坏性轮询HPD-当并且仅当微端口不能异步地将监视器的到达/离开通知操作系统时感知,但是操作系统可以偶发性地轮询监视器的存在,在每一个轮询上引起可视失真。
4.无HPD-当并且仅当微端口通过中断或轮询感知不到监视器到达/离开时感知。
监视器定位感知可以被定义为:
typedef enum_D3DKMDDI_MONITOR_ORIENTATION_AWARENESS
{
  D3DKMDDI_MOA_UNINITIALIZED    =0,
  D3DKMDDI_MOA_NONE             =1,
  D3DKMDDI_MPA_POLLED           =2,
  D3DKMDDI_MOA_INTERRUPTIBLE    =3
}
D3DKMDDI_MONITOR_ORIENTATION_AWARENESS;
在从这个功能成功返回的基础上,操作系统可以取得以输出参数的形式返回的数据的使用期的所有权,并且在完成时可以释放被它的支持分配所占用的存储器。
返回代码
STATUS_SUCCESS表示驱动器成功执行调用。
表52-功能IsSupportedVidPN
  typedefNTSTATUS      (APIENTRY*PFND3DKMDDI_ISSUPPORTEDVIDPN)      (IN HANDLE                          hAdapter,      IN OUT D3DKMDDIARG_ISSUPPORTEDVIDPN*pIsSupportedVidPNArg);  typedef struct_D3DKMDDIARG_ISSUPPORTEDVIDPN  {    IN OUT D3DKMDDI_VIDPN*     pDesiredVidPN;     OUT BOOLEAN*              pbIsVidPNSupported;  }  D3DKMDDIARG_ISSUPPORTEDVIDPN;
IsSupportedVidPN可以允许操作系统查询微端口是否所提供的VidPN配置被支持(例如可以被扩展到功能性VidPN)。第一个参数(argument)hAdapter可以规定显示适配器,在该适配器上VidPN支持正被讨论。实际的VidPN可以被规定在第二参数的第一字段上,pIsSupportedVidPN->pDesiredVidPN,其中VidPN描述符可以被定义为:
typedefstruct_D3DKMDDI_VIDPN
{
 D3DKMDDI_VIDPN_TOPOLOGY    VidPNTopology;
 DWORD                      dwReserved;
}
D3DKMDDI_VIDPN;
VidPN拓扑描述符可以被定义为:
tyedef struct_D3DKMDDI_VIDPN_TOPOLOGY
{
 D3DKMDDI_VIDPN_PRESENT_PATH_SET VidPNPresentPathSet;
}
D3DKMDDI_VIDPN_TOPOLOGY;
VidPNPresentPathSet可以表示构成VidPN的拓扑的视频显现路径组,其中
typcdcfstruct_D3DKMDDI_VIDPN_PRESENT_PATH_SET
}
  SIZE_T                         NumOfVidPNPresentPaths;
  D3DKMDDI_VIDPN_PRESENT_PATH    VidPNPresentPaths[1];
}
D3DKMDDI_VIDPN_PRESENT_PATH_SET;
具有:
1.NumOfVidPNPresentPaths包含在VidPNPresentPaths中的视频显现路径的数量,并且
2.VidPNPresentPaths包含构成VidPNP的拓扑的视频显现路径的阵列。
VidPNP显现路径描述符可以被定义为:
typedef struct_D3DKMDDI_VIDPN_PRESENT_PATH
{
  D3DKMDDI_VIDPN_SOURCE                      VidPNSource;
  D3DKMDDI_VIDPN_TARGET                      VidPNTarget;
  D3DKMDDI_VIDPN_PRESENT_PATH_TRANSFORMATION VidPNPresentPathTransformation;
}
D3DKMDDI_VIDPN_PRESENT_PATH;
D3DKMDDI_VIDPN_PRESENT_PATH是视频显现路径描述符,其可以被用于显现VidPN拓扑中从单个视频显现目标至单个视频显现源的映射,其中:
●VidPNSource是视频显现路径的源描述符。
●VidPNTarget是视频显现路径的目标描述符。
●VidPNPresentPathTransformation是视频显现路径的内容转换描述符。
其中VidPN源描述符可以被定义为:
typedef struct_D3DKMDDI_VIDPN_SOURCE
{
  D3DKMDDI_VIDEO_PRESENT_SOURCE_ID    VidPNSourceID;
  SIZE_T                              PinnedModeIndex;
  D3DKMDDI_VIDPN_SOURCE_MODESET*      pCofuncVidPNSourceModeSet;
}
D3DKMDDI_VIDPN_SOURCE;
其中:
●VidPNSourceID是用于通过微端口和操作系统引用相应的视频显现源的唯一的IS。这个值来自EnumVideoPresentSourceSet调用。
●PinnedModeIndex是视频显现源模式索引,其被固定在给定的当前VidPN配置的这个视频显现源上的可利用的共同作用模式组中,或者当没有模式被固定到这个源上时,其被固定到D3DKMDDI_NO_PINNED_MODE。
●pCofuncVidPNSourceModeSet是与当前(部分或临时)的VidPN共同作用的VidPN源模式,这个源是其中一员。
VidPN源模式组描述符可以被定义为:
typedef struct_D3DKMDDI_VIDPN_SOURCE_MODESET
{
  SIZET                         NumOfVidPNSourceModes;
  D3DKMDDI_VIDPN_SOURCE_MODE    VidPNSourceModes[1];
}
D3DKMDDI_VIDPN_SOURCE_MODESET;
其中:
●NumOfVidPNSourceModes规定列举在VidPNSourceModes中的视频显现源模式的数量。
●VidPNSourceModes包含组中的视频显现源模式的阵列。
VidPN源模式描述符可以被定义为:
  typedef struct_D3DKMDDI_VIDPN_SOURCE_MODE
  {
    D3DKMDDI_VIDPN_SOURCE_MODE_TYPE Type;
  union
  {
    D3DKMDDI_GRAPHICS_RENDERING_FORMAT grfxFormat;
    D3DKMDDI_TEXT_RENDERING_FORMAT     textFormat;
  };
}
D3DKMDDI_VIDPN_SOURCE_MODE;
其中Type包含VidPN源模式类型描述符,被定义为:
typedef enum_D3DKMDDI_VIDPN_SOURCE_MODE_TYPE
{
  D3DKMDDI_RMT_UNINITIALIZED  =0,
  D3DKMDDI_RMT_GRAPHICS       =1,
  D3DKMDDI_RMT_TEXT           =2
}
D3DKMDDI_VIDPN_SOURCE_MODE_TYPE;
如果Type等于D3DKMDDI_RMT_GRAPHICS,那么源模式描述符包含一个图形再现格式描述符grfxFormat,其被定义为:
typedef struct_D3DKMDDI_GRAPHICS_RENDERING_FORMAT
{
  SIZE                       sizePrimSurf;
  SIZE                       sizeVisible;
  DWORD                      dwStride;
  D3DKMDDI_PIXEL_FORMAT      PixelFormat;
  D3DKMDDI_COLOR_ACCESS_MODE PixelValueAccessMode;
}
D3DKMDDI_GRAPHICS_RENDERING_FORMAT;
其中,
●sizePrimSurf规定这个VidPN源模式要求的主表面的尺寸。
●sizeVisible规定用来固定包括缩放模式的模式的主表面的可视部分的尺寸。
●dwStride规定一个扫描行的开始和下一扫描行之间的字节数量。
●PixelFormat规定像素的格式。
●PixelValueAccessMode为像素值信息规定访问模式。
否则,如果Type等于D3DKMDDI_RMT_TEXT,那么源模式描述符包含一个文本再现格式描述符textFormat,其被定义为:
typedef enum_D3DKMDDI_TEXT_RENDERING_FORMAT
{
  D3DKMDDI_TRF_UNINITIALIZED=0
}
D3DKMDDI_TEXT_RENDERING_FORMAT;
另外,VidPN目标描述符可以被定义为:
typedef struct_D3DKMDDI_VIDPN_TARGET
{
  D3DKMDDI_VIDEO_PRESENT_TARGET_ID    VidPNTargetID;
  SIZE_T                              PinnedModeIndex;
  D3DKMDDI_VIDPN_TARGET_MODESET*      pCofuncVidPNTargetModeSet;
}
D3DKMDDI_VIDPN_TARGET;
其中:
●VidPNTargetID是用来通过微端口和操作系统引用相应视频显现目标的唯一的ID。这个值来自EnumVideoPresentTargetSet调用。
●PinnedModeIndex是视频显现目标模式索引,其被固定在给定的当前VidPN配置的这个视频显现目标上可利用的共同作用模式组中,或者当没有模式被固定到这个目标上时,其被固定到D3DKMDDI_NO_PINNED_MODE。
●pCofuncVidPNSourceModeSet是与当前(部分)的VidPN共同作用的VidPN目标模式,这个目标是其中一员。
VidPN目标模式组描述符可以被定义为:
typcdcf struct_D3DKMDDI_VIDPN_TARGET_MODESET
{
  SIZE_T                      NumOfVidPNTargetModes;
  D3DKMDDI_VIDPN_TARGET_MODE  VidPNTargetModes[1];
}
D3DKMDDI_VIDPN_TARGET_MODESET;
其中:
●NumOfVidPNTargetModes规定列举在VidPNTargetModes中的视频显现目标模式的数量。
●VidPNTargetModes包含组中的视频显现目标模式的阵列。
其中,VidPN目标模式描述符可以被定义为如表53所示:
表53-VidPN目标模式描述符
typedef struct_D3DKMDDI_VIDPN_TARGET_MODE{  D3DKMDDI_VIDEO_SIGNAL_STANDARD          vidStandard;  SIZE                                    sizeTotal;  SIZE                                    sizeActive;  SIZE                                    sizeActiveOffset;  SIZE                                    sizeTLDeltaVi sibleFromActive;  SIZE                                    sizeBRDeltaVisibleFromActive;  D3DKMDDI_FRACTIONAL_FREQUENCY           frqVSync;  D3DKMDDI_FRACTIONAL_FREQUENCY           frqHSync;  SIZE_T                                  sztPixelRate;  D3DKMDDI_VIDEO_SIGNAL_SCANLINE_ORDERING ScanLineOrdering;  D3DKMDDI_GTFCOMPLIANCE                  IsGTFCompliant;  D3DKMDDI_MODE_PREFERENCE                ModePreference;}
  D3DKMDDI_VIDPN_TARGET_MODE;  typedef enum_D3DKMDDI_VIDEO_SIGNAL_STANDARD  {                                     //WxH{i|p}@(VR/HR/CR)   D3DKMDDI_VMS_UNINITIALIZED =0,   D3DKMDDI_VMS_GTF           =1,   D3DKMDDI_VMS_NTSC_M        =2,//720x525i@(59.94[Hz]/15,734.27[Hz]/3,579,545[Hz])   D3DKMDDI_VMS_NTSC_J        =3,//720x525i@(59.94[Hz]/15,734.27[Hz]/3,579,545[Hz])   D3DKMDDI_VMS_NTSC_443      =4,//720x525i@(59.94[Hz]/15,734.27[Hz]/4,433,618.75[Hz])   D3DKMDDI_VMS_PAL_B         =5,//720x625i@(50[Hz]/15,625[Hz]/4,433,618.75[Hz])   D3DKMDDI_VMS_PAL_B1        =6,//720x625i@(50[Hz]/15,625[Hz]/4,433,618.75[Hz])   D3DKMDDI_VMS_PAL_G         =7,//720x625i@(50[Hz]/15,625[Hz]/4,433,618.75[Hz])   D3DKMDDI_VMS_PAL_H         =8,//720x625i@(50[Hz]/15,625[Hz]/4,433,618.75[Hz])   D3DKMDDI_VMS_PAL_I         =9,//720x625i@(50[Hz]/15,625[Hz]/4,433,618.75[Hz])   D3DKMDDI_VMS_PAL_D         =10,//720x525i@(59.94[Hz]/15,734[Hz]/3,575,611.49[Hz])   D3DKMDDI_VMS_PAL_N         =11,//720x625i@(50[Hz]/15,625[Hz]/4,433,61875[Hz])   D3DKMDDI_VMS_PAL_NC        =12,//720x625i@(50[Hz]/15,625[Hz]/3,582,056.25[Hz])   D3DKMDDI_VMS_SECAM_B       =13,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_D       =14,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_G       =15,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_H       =16,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_K       =17,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_K1      =18,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_L       =19,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_SECAM_L1      =20,//720x625i@(50[Hz]/15,625[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_1     =21,//720x480i@(59.94[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_2     =22,//720x480i@(60[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_3     =23,//640x480p@(59.94[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_4     =24,//640x480p@(60[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_5     =25,//720x480p@(59.94[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_6     =26,//720x480p@(60[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_7     =27,//1280x720p@(59.94[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_8     =28,//1280x720p@(60[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_9     =29,//1920x1080i@(59.94[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861_10    =30,//1920x1080i@(60[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861A_1    =31,//720x576i@(50[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861A_2    =32,//720x576p@(50[Hz]/[Hz]/[Hz])   D3DKMDDI_VMS_EIA_861A_3    =33,//1280x720p@(50[Hz]/[Hz]/[Hz])
  D3DKMDDI_VMS_EIA_861A_4 =34,//1920x1080i@(50[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_1 =35,//1920x1080p@(23.960[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_2 =36,//1920x1080p@(24[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_3 =37,//1920x1080p@(25[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_4 =38,//1920x1080p@(29.970[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_5 =39,//1920x1080p@(30[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_6 =40,//1920x1080p@(50[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_EIA_861B_7 =41,//1920x1080p@(60[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_IBM_1      =42,//720x400p@(70[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_IBM_2      =43,//720x400p@(88[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_IBM_3      =44,//640x480p@(60[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_IBM_4      =45,//1024x768i@(87[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_APPLE_1    =46,//640x480p@(67[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_APPLE_2    =47,//832x624p@(75[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_APPLE_3    =48,//1152x870p@(75[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_1     =49,//640x480p@(72[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_2     =50,//640x480p@(75[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_3     =51,//800x600p@(56[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_4     =52,//800x600p@(60[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_5     =53,//800x600p@(72[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_6     =54,//800x600p@(75[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_7     =55,//1024x768p@(60[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_8     =56,//1024x768p@(70[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_9     =57,//1024x768p@(75[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VESA_10    =58,//1280x1024p@(75[Hz]/[Hz]/[Hz])  D3DKMDDI_VMS_VDMT_1     =59,//640x350p@(85[Hz]/37,900[Hz]/31,500,000[Hz])  D3DKMDDI_VMS_VDMT_2     =60,//640x400p@(85[Hz]/37,900[Hz]/31,500,000[Hz])  D3DKMDDI_VMS_VDMT_3     =61,//720x400p@(85[Hz]/37,900[Hz]/35,500,000[Hz])  D3DKMDDI_VMS_VDMT_4     =62,//640x480p@(60[Hz]/31,500[Hz]/25,175,000[Hz])  D3DKMDDI_VMS_VDMT_5     =63,//640x480p@(72[Hz]/37,900[Hz]/31,500,000[Hz])  D3DKMDDI_VMS_VDMT_6     =64,//640x480p@(75[Hz]/37,500[Hz]/31,500,000[Hz])  D3DKMDDI_VMS_VDMT_7     =65,//640x480p@(85[Hz]/43,300[Hz]/36,000,000[Hz])  D3DKMDDI_VMS_VDMT_8     =66,//800x600p@(56[Hz]/35,100[Hz]/36,000,000[Hz])  D3DKMDDI_VMS_VDMT_9     =67,//800x600p@(60.317[Hz]/37,879[Hz]/40,000,000[Hz])  D3DKMDDI_VMS_VDMT_10    =68,//800x600p@(72[Hz]/48,100[Hz]/50,000,000[Hz])  D3DKMDDI_VMS_VDMT_11    =69,//800x600p@(75[Hz]/46,900[Hz]/49,500,000[Hz])  D3DKMDDI_VMS_VDMT_12    =70,//800x600p@(85[Hz]/53,700[Hz]/56,250,000[Hz])  D3DKMDDI_VMS_VDMT_13    =71,//1024x768i@(43[Hz]/35,500[Hz]/44,900,000[Hz])  D3DKMDDI_VMS_VDMT_14    =72,//1024x768p@(60.004[Hz]/48,363[Hz]/65,000,000[Hz])
   D3DKMDDI_VMS VDMT_15  =73,//1024x768p@(70[Hz]/56,500[Hz]/75,000,000[Hz])   D3DKMDDI_VMS_VDMT_16  =74,//1024x768p@(75[Hz]/60,000[Hz]/78,750,000[Hz])   D3DKMDDI_VMS_VDMT_17  =75,//1024x768p@(85[Hz]/68,700[Hz]/94,500,000[Hz])   D3DKMDDI_VMS_VDMT_18  =76,//1152x864p@(75[Hz]/67,500[Hz]/108,000,000[Hz])   D3DKMDDI_VMS_VDMT_19  =77,//1280x960p@(60[Hz]/60,000[Hz]/108,000,000[Hz])   D3DKMDDI_VMS_VDMT_20  =78,//1280x960p@(85[Hz]/85,900[Hz]/148,500,000[Hz])   D3DKMDDI_VMS_VDMT_21  =79,//1280x1024p@(60[Hz]/64,000[Hz]/108,000,000[Hz])   D3DKMDDI_VMS_VDMT_22  =80,//1280x1024p@(75[Hz]/80,000[Hz]/135,000,000[Hz])   D3DKMDDI_VMS_VDMT_23  =81,//1280x1024p@(85[Hz]/91,100[Hz]/157,500,000[Hz])   D3DKMDDI_VMS_VDMT_24  =82,//1600x1200p@(60[Hz]/75,000[Hz]/162,000,000[Hz])   D3DKMDDI_VMS VDMT_25  =83,//1600x1200P@(65[Hz]/81,300[Hz]/175,500,000[Hz])   D3DKMDDI_VMS_VDMT_26  =84,//1600x1200p@(70[Hz]/87,500[Hz]/189,000,000[Hz])   D3DKMDDI_VMS_VDMT_27  =85,//1600x1200p@(75[Hz]/93,800[Hz]/202,500,000[Hz])   D3DKMDDI_VMS_VDMT_28  =86,//1600x1200p@(85[Hz]/106,300[Hz]/229,500,000[Hz])   D3DKMDDI_VMS_VDMT_29  =87,//1792x1344p@(60[Hz]/83,640[Hz]/204,750,000[Hz])   D3DKMDDI_VMS_VDMT_30  =88,//1792x1344p@(75[Hz]/106,270[Hz]/261,750,000[Hz])   D3DKMDDI_VMS_VDMT_31  =89,//1856x1392p@(60[Hz]/86,330[Hz]/218,250,000[Hz])   D3DKMDDI_VMS VDMT_32  =90,//1856x1392p@(75[Hz]/112,500[Hz]/288,000,000[Hz])   D3DKMDDI_VMS VDMT_33  =91,//1920x1440p@(60[Hz]/90,000[Hz]/234,000,000[Hz])   D3DKMDDI_VMS_VDMT_34  =92,//1920x1440p@(75[Hz]/112,500[Hz]/297,000,000[Hz])   D3DKMDDI_VMS_OTHER    =255  }  D3DKMDDI_VIDEO_SIGNAL_STANDARD;  typedef enum_D3DKMDDI_GTFCOMPLIANCE  {   D3DKMDDI_GTF_UNINITIALIZED   =0,   D3DKMDDI_GTF_COMPLIANT       =1,   D3DKMDDI_GTF_NOTCOMPLIANT    =2  }  D3DKMDDI_GTFCOMPLIANCE;  typedef enum_D3DKMDDI_MODE_PREFERENCE  {   D3DKMDDI_MP_UNINITIALIZED   =0,   D3DKMDDI_MP_PREFERRED       =1,   D3DKMDDI_MP_NOTPREFERRED    =2  }  D3DKMDDI_MODE_PREFERENCE;
其中:
●vidStandard规定视频模式标准,通过这个标准限定这个模式(如果需要)。
●sizeTotal规定像素中视频信号的尺寸(例如HTotal和VTotal)。
●sizeActive规定在有源像素中显现图形的尺寸(例如HActive和VActive)。
●sizeActiveOffset规定有源像素相对于全部像素的位置。
●sizeTLDeltaVisibleFromActive从视频信号的有源像素右下角规定可视像素的左上角监视器屏幕的增量(delta)。
●sizeBRDeltaVisibleFromActive从视频信号的有源像素右下角规定可视像素的右下角监视器屏幕的增量。
●frqVSync规定这个模式的垂直刷新频率(以Hz为单位)。
●frqHSync规定这个模式的水平刷新频率(以KHz为单位)。
●sztPixelRate规定这个模式的像素时钟速率。
●ScanLineOrdering规定这个模式的扫描行排序(例如逐行、隔行)。
●IsGTFCompliant规定这个模式的VSync、HSync以及时钟速率是否遵守由VESA广义的定时公式强加的约束。
●ModePreference通过连接到相应的视频输出的监视器规定这个模式是否是优选的。
视频信号标准enumT可以被用来在合适时简化视频模式比较。
分频描述符可以被定义为:
typedef struct_D3DKMDDI FRACTIONAL_FREQUENCY
{
SIZE_TNumerator;
SIZE_T sztDenominator;
}
D3DKMDDI FRACTIONAL_FREQUENCY;
其中:
●Numerator规定分频分子。
●Denominator规定分频分母。
垂直频率可以以Hz为单位存储,并且水平频率可以以KHz为单位存储。这个编码格式的动态范围,假定10^-7分辨率(在32比特系统)是{0..(2^32-1)/10^7},其译为垂直频率是{0..428.4967296}[Hz],译为水平频率是{0..428.4967296}[K Hz]。这个子微秒精度范围将可以被接受,即使用于在专业视频应用中(对于视频信号同步误差在一微秒中将意味着一个具有10^7/(60*60*24)=115.741天的周期的时间漂移)。
视频信号扫描行排序描述符可以被定义为:
typedef enum_D3DKMDDI_VIDEO_SIGNAL_SCANLINE_ORDERING
{
 D3DKMDDI_VSSLO_UNINITIALIZED               =0,
 D3DKMDDI_VSSLO_PROGRESSIVE                 =1,
 D3DKMDDI_VSSLO_INTERLACED UPPERFIELDFIRST  =2,
 D3DKMDDI_VSSLO_INTERLACED_LOWERFIELDFIRST  =3,
 D3DKMDDI_VSSLO_OTHER                       =255
}
D3DKMDDI_VIDEO_SIGNAL SCANLINE_ORDERING;
并且可以被用来规定每一个字段是否包含一个帧的全部内容或者仅包含它的一半(例如,奇/偶行可交替地)。利用一个enum明确规定这个特征既可以使客户不用必须包含基于模式的查找表,并还可以延伸到未在D3DKMDDI_VIDEO_SIGNAL_STANDARD enum中列举的将来的标准模式。
存储用于可视/有源像素映射的增量而不是可视像素的尺寸和偏移,这具有理想/默认状态为零的增加的好处。
VidPN显现路径转换描述符可以被定义为:
typedef enum_D3DKMDDI_VIDPN_PRESENT_PATH_TRANSFORMATION
{
 D3DKMDDI_VPPT_IDENTITY  =1,
 D3DKMDDI_VPPT_CENTERED  =2
}
D3DKMDDI_VIDPN_PRESENT_PATH_TRANSFORMATION;
其中:
●D3DKMDDI_VPPT_IDENTITY表示按现状呈现的源内容。注意,这个转换当且仅当视频显现源和目标模式的空间分辨率匹配时才有效。
●D3DKMDDI_VPPT_CENTERED表示未按比例呈现的源内容,相对于目标模式的空间分辨率来聚集。
一个规定VidPN应至少规定一个有效的拓扑,但是还可以具有用分别地固定的模式配置的一些或全部的它的目标/源。
返回代码
STATUS_SUCCESS表示驱动器成功执行调用。
STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY表示规定的VidPN拓扑是无效的。
表54-功能EnumCofuncVidPNSourceIDSet
  typedefNTSTATUS      (APIENTRY*PFND3DKMDDI_ENUMCOFUNCVIDPNSOURCEIDSET)      (IN HANDLE                                    hAdapter,      IN OUT D3DKMDDIARG_ENUMCOFUNCVIDPNSOURCEIDSET*  pEnumCofuncVidPNSourceIDSetArg);  typedefstnuct_D3DKMDDIARG_ENUMCOFUNCVIDPNSOURCEIDSET  {    IN D3DKMDDI_VIDPN*                       pConstrainingVidPN;    OUT D3DKMDDI_VIDEO_PRESENT_SOURCE_ID_SET*pCofuncVidPNSourceIDSet;  }  D3DKMDDIARG_ENUMCOFUNCVIDPNSOURCEIDSET;
EnumCofuncVidPNSourceIDSet枚举一个与规定VidPN实施共同作用的VidPN源ID组。VidPN源当且仅当其可以通过至少一个视频显现路径被加入到它的拓扑,而不表现出VidPN无效或不被支持时,可以与给定VidPN实施共同作用。微端口可以分配一个足够大的缓存器,以便通过pEnumCofuncVidPNSourceIDSetArg利用D3DKMDDI_INTERFACESPECIFICDATA.pfnAllocSysMemForOutParamCb容纳整个枚举结果。分配的尺寸应为(D3DKMDDI_VIDEO_PRESENT_SOURCE_ID_SET)的尺寸+(D3DKMDDIVIDEO_PRESENT_SOURCE_ID)的尺寸*(共同作用的视频显现源的#-1)。
一旦用于输出参数的存储器已分配,微端口可以基于下列的定义对其进行填充:
typedef struct_D3DKMDDI_VIDEO_PRESENT_SOURCE_ID_SET
{
 SIZE_T                              NumOfVidPNSourceIDs;
 D3DKMDDI_VIDEO_PRESENT_SOURCE_ID    VideoPresentSourceIDs[1];
}
D3DKMDDI_VIDEO_PRESENT_SOURCE_ID_SET;
●NumOfVidPNSourceIDs规定列举在VideoPresentSourceIDs中的视频显现源的ID的数量。
●VideoPresentSourceIDs表示该组中视频显现源的ID阵列。
在从这个功能成功返回的基础上,操作系统可以取得以输出参数的形式返回的数据的使用期的所有权,并且在完成时可以释放被它的支持分配所占用的存储器。
返回代码
STATUS_SUCCESS表示驱动器成功地执行调用。
STATUS_GRAPH_ICSINVAILID_VIDPN_TOPOLOGY表示被规定的VidPN拓扑是无效的。STATUS_NO_MEMORY表示微端口不能分配一个适合所请求的枚举的缓冲器。
表55-功能EnumCofuncVidPNTargetIDSet
  typedcf NTSTATUS      (APIENTRY*PFND3DKMDDI_ENUMCOFUNCVIDPNTARGETIDSET)      (IN    HANDLE                            hAdapter,      IN OUT D3DKMDDIARG_ENUMCOFUNCVIDPNTARGETIDSET*  pEnumCofuncVidPNTargetIDSetArg);  typedef struct_D3DKMDDIARG_ENUMCOFUNCVIDPNSOURCEIDSET  {    IN D3DKMDDI_VIDPN*                       pConstrainingVidPN;    OUT D3DKMDDI_VIDEO_PRESENT_TARGET_ID_SET*pCofuncVidPNTargetIDSet;  }  D3DKMDDIARG_ENUMCOFUNCVIDPNTARGETIDSET;
EnumCofuncVidPNTargetIDSet枚举一组与规定VidPN实施共同作用的VidPN目标ID。VidPN目标当且仅当其可以通过至少一个视频显现路径被加入到它的拓扑,而不表现出VidPN无效或不被支持时,可以与给定VidPN实施共同作用。微端口可以分配一个足够大的缓存器,以便通过pEnumCofuncVidPNTargetIDSetArg利用D3DKMDDI_INTERFACESPECIFICDATA.pfnAllocSysMemForOutParamCb容纳整个枚举结果。分配的尺寸应为(D3DKMDDI_VIDEO_PRESENT_TARGET_ID_SET)的尺寸+(D3DKMDDIVIDEO_PRESENT_TARGET_ID)的尺寸*(共同作用的视频显现目标的#-1)。
一旦用于输入参数的存储器已分配,微端口可以基于下列的定义对其进行填充:
typedef struct_D3DKMDDI_VIDEO_PRESENT_TARGET_ID_SET
{
 SIZE_TNumOfVidP                     NTargetIDs;
 D3DKMDDI_VIDEO_PRESENT_TARGET_ID    VideoPresentTargetIDs[1];
}
D3DKMDDI_VIDEO_PRESENT_TARGET_ID_SET;
其中:
●NumOfVidPNTargetIDs规定列举在VideoPresentTargetIDs中的视频显现目标的ID的数量。
●VideoPresentSourceIDs表示该组中视频显现目标的ID阵列。
在从这个功能成功返回的基础上,操作系统可以取得以输出参数的形式返回的数据的使用期的所有权,并且在完成时可以释放被它的支持分配所占用的存储器。
返回代码
STATUS_SUCCESS表示驱动器成功地执行调用。
STATUS_GRAPHICS_INVAILID_VIDPN_TOPOLOGY表示被规定的VidPN拓扑是无效的。
STATUS_NO_MEMORY表示微端口不能分配一个适合所请求的枚举的缓冲器。
表56-功能EnumVidPNCofuncModality
  typedef NTSTATUS      (APIENTRY*PFND3DKMDDI_ENUMVIDPNCOFUNCMODALITY)      (IN HANDLE                             hAdapter,      IN OUT D3DKMDDIARG_ENUMVIDPNCOFUNCMODALITY*pEnumVidPNCofuncModalityArg);  typedefstruct_D3DKMDDIARG_ENUMVIDPNCOFUNCMODALITY  {    IN D3DKMDDI_VIDPN*                  pConstrainingVidPN;    OUT D3DKMDDI_VIDPN_PRESENT PATH_SET*pVidPNPresentPathSetWithCofuncModeSets;  }  D3DKMDDIARG_ENUMVIDPNCOFUNCMODALITY;
EnumVidPNCofuncModality使得操作系统在规定VidPN中的每一个视频显现路径上枚举共同作用的视频显现和目标模式组,其中:
●PConstrainingVidPN是相对于其VidPN目标和源上的共同作用的模式组正被搜索的VidPN。
●pVidPNPresentPathSetWithCofuncModeSets是VidPN显现路径组,其中每一个源/目标被与约束的VidPN共同作用的模式组填充。如果约束的VidPN的任何源/目标具有固定到它们上的模式,那么它们的索引将在结果组中的相应VidPN源/目标描述符中被正确地更新。
微端口应该填充:
pVidPresentPath->VideoPresentSource.pCofuncVidPNSourceModeSet->VidPNSourceModes[1..n]以及
pVidPresentPath->VideoPresentTarget.pCofuncVidPNTargetModeSet->VidPNTargetModes[1..m]其中
D3DKMDDI_VIDPN_PRESENT_PATH*pVidPresentPath=(*o_ppVidPNPresentPathSetWithCofuncModeSets)->arr_idPresentPaths[1..k];
在从这个功能成功返回的基础上,操作系统可以取得以输出参数的形式返回的数据的使用期的所有权,并且在完成时可以释放被它的支持分配所占用的存储器。
返回代码
STATUS_UCCESS表示驱动器成功地执行调用。
STATUS_NO_MEMORY表示微端口不能分配一个适合所请求的枚举的缓冲器。
表57-功能RecommendFunctionalVidPN
  typedef_TSTATUS  (APIENTRY*PFND3DKMDDI_RECOMMENDFUNCTIONALVIDPN)  (IN HANDLE                                  hAdapter,  IN OUT D3DKMDDIARG_RECOMMENDFUNCTIONALVIDPN*pRecommendFunctionalVidPNArg);  typedef struct_D3DKMDDIARG_RECOMMENDFUNCTIONALVIDPN  {  IN UINT                             NumberOfMonitors;  IN D3DKMDDI_VIDEO_PRESENT_TARGET_ID*pVidPNTargetPrioritizationVector;  OUT D3DKMDDI_VIDPN*                 pRecommendedFunctionalVidPN;  }  D3DKMDDIARG_RECOMMENDFUNCTIONALVIDPN;
假定h/w的当前状态,RecommendFunctionalVidPN使得操作系统查询由微端口推荐的VidPN。它可以被操作系统在其遇到没有规定用户优选项(例如最后使用形态)的配置时使用。作为这个请求的一部分,操作系统向微端口规定VidPN目标ID矢量pVidPNTargetPrioritizationVector,矢量按最重要优先来排序,其表示连接到它们上的监视器的相对重要性。微端口将按顺序地分配充足的存储器填充起作用的VidPN、填充相应的字段并将它的地址分配给pRecommendedFunctionalVidPN,其中起作用的VidPN希望推荐给操作系统以用于h/w的当前状态。在从这个功能成功返回的基础上,操作系统可以取得以输出参数的形式返回的数据的使用期的所有权,并且在完成时可以释放被它的支持分配所占用的存储器。
返回代码
STATUS_SUCCESS表示驱动器成功地执行调用。
STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN表示微端口不具有推荐给显示适配器当前配置的VidPN。
STATUS_NO_MEMORY表示微端口不能分配一个适合所请求的枚举的缓冲器。
实例49-示例性视频再现装置驱动器的装置特定部分
在此所述的任何技术都可以在一个视频再现装置驱动器的装置特定部分中实施。驱动器的可再次使用的部分可以经过视频再现装置驱动器共享。
例如,在操作系统中执行的实施中,视频端口可以作为驱动器的可再次使用的部分,并且视频微端口可以作为视频再现装置驱动器的装置特定部分。
示例性优势
多监视器显示模式管理是一个复杂的问题,其涉及视频再现/呈现装置(例如显示卡也被称为图形适配器)以及视频监视装置(例如监视器)的性能。导致显示模式管理复杂的主要问题是图形显示装置对象(例如GDI对象)的性能之间的固有的相关性,其中每一个代表一个映射在单个多输出显示卡上的单独(视图,输出)映射,这是传统显示模式管理结构不能很好地处理的。
这些相关性主要由如下方面产生:(1)系统中视频输出编解码器具有的视频输出端比编解码器能驱动的输出端多而可能出现争用;(2)用大量的方法来满足一个在给定显示卡中建立任何给定的多输出视频呈现配置的请求,很大程度上是由于:(a)显示卡中视频输出编解码器的性能的差异;(b)显示卡的通过利用交叉线来利用具有各种视频输出的视频输出编解码器的能力,该交叉线可以将任何视频输出编解码器布置到任何兼容的视频输出端;(c)在视频输出编解码器是缺乏的资源时(例如小于将要被驱动的视频输出的数量时),显示卡为多视频输出共享视频输出编解码器的能力;(d)在不允许对视频流中的一个进行窜改的情况下或在视频流上需要覆盖的第二信号为模拟格式,并且仅为了加入一个数字覆盖而对其解码然后再调制是浪费的情况下,显示卡将多视频输出编解码器或单个多输入视频输出编解码器用于单个视频输出(例如覆盖)的能力;(3)由于利用视频输出编解码器而产生的视频存储器总线带宽的争用,其中,每一个编解码器负责在相应的视频输出接口上将与主表面(或多个表面)有关的内容转换成视频信号,这基本上减小了对视频存储器的定期读取;或者(4)由于主表面需要支持给定的视频显现路径(例如从被再现的数字内容到物理视频接口输出的逻辑路径)而引起的视频存储器容量的争用。
因而,上述的多个可利用的显示模式组(视图,输出)对之间的相关性比仅基于一个(视图,输出)对的复杂。特别地,选择视图上使用一个给定的主表面格式可以影响哪个视频信号可在相应输出上显示。并且,当考虑到单个视图被显示在多个输出上的情况时,可利用的视频信号组基于如何利用视频输出编解码器和利用哪一个视频输出编解码器实现最终的呈现配置来变化。最后,当考虑到在单个视频卡上应用多个视图(每一个可能被送到多个输出)的情况时,可利用的视频信号基于各种视图和输出之间的关系变化。即,显示卡在其输出端上可以驱动的视频信号是要求呈现的主表面的类型以及它们被呈现(例如,呈现到那些输出端)应采取的形式的功能。
此外,设计时可以不考虑现代显示卡的缩放能力,其能对给定主表面内容增加或减小取样来得到不同的空间分辨率,以便被相应的视频输出驱动。同样,可对多输出显示卡作出的两个主要提取是:(1)包括显示卡和监视器的多功能显示装置提取的简化视图,被以统一的“显示模式”描述符形态表现,该视图中包含两种不同的物理装置的状态;以及(2)单个输出模式枚举至多输出的扩展,这个扩展可以通过对独立的视频驱动器栈以及相应图形装置进行每个(视图,输出)复制一个来获得。这些提取不足以正确地驱动这样的装置,并且可以用下述的代替:(1)视图和输出的区别形态描述符;(2)每个显示卡一个视频驱动器栈,视频驱动器管理一个暴露一个有平衡能力的DDI的视频微端口,该DDI使得一个客户固定这些其需要的模式,并且重新枚举一个已更新的可利用的模式组,最后以一系列的反复(例如图形搜索)会聚在一个功能性解决方案上;以及(3)增加一个实施,以便支持显示模式相关性,最后可利用的模式组无效,并且模式改变失败。
替换实施例
任何实例中的技术可以与任一个或更多个其他实施中显现的技术组合。考虑到也可以应用本发明原理的许多可能的实施例,应认识到:所示实施例是本发明的示例,并且不应作为本发明范围的限制。相反,本发明的范围包括下面权利要求所覆盖的范围。因此,我们要求在这些权利要求的范围和精神内的所有的发明作为我们的发明。
相关申请数据
本申请要求在2004年4月30日申请的美国临时申请第60/567053号申请案、在2004年8月24日申请的美国实用新型申请第10/925662号申请案、在2004年8月24日申请的美国实用新型申请第10/925445号申请案、在2004年8月24日申请的美国实用新型申请第10/925837号申请案以及在2004年8月24日申请的美国实用新型申请第10/925859号申请案的优先权,所有这些在先申请以参照的方式并入本文中。