优化HD-DVD定时标记的执行
背景
高清晰度数字多功能盘(HD-DVD)介质和相关播放器正变得越来越流行并被广泛使用。随着越来越多制造商进入这一市场,竞争加剧,从而往往驱动价格下降。在该定价环境中,在HD-DVD播放器中运行的软件通常在相对便宜的消费硬件上运行。
将HD-DVD内容和样式标记转换成供显示的有形形式在计算上是昂贵的。通常,对于可接受的用户体验而言,HD-DVD标记的呈现速率的合理目标是大约每秒24帧。用于转换和呈现HD-DVD标记的常规技术由于在低成本消费硬件上执行计算上昂贵的任务而在试图达到该呈现速率目标时可能面临困难。
概述
此处描述了用于优化高清晰度数字多功能盘(HD-DVD)定时标记的执行的系统、方法和/或技术(“工具”)。这些工具可接收从HD-DVD盘中读取的定时标记,并使用此处所描述的各优化策略中的一个或多个来优化对该定时标记的处理。
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识所要求保护的主题的关键或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。例如,术语“工具”可以指上述上下文和通篇文档所准许的系统、方法、计算机可读指令、和/或技术。
附图简述
结合以下附图描述了涉及优化HD-DVD定时标记的执行的工具。贯穿本公开和各附图,使用相同的标号来引用相同的组件和特征。附图标记的第一位指示其中引入该附图标记的附图。
图1是用于优化HD-DVD定时标记的执行的操作环境的框图。
图2是呈现引擎和定时标记的其他方面的框图。
图3是X路径(XPATH)表达式管理器和用于优化对定时标记的处理的策略的各方面的框图。
图4是用于处理定时标记的数据和过程流的框图。
图5是图4所示的数据和过程流的其他方面的框图。
图6是与涉及预解析和预计算特定X路径表达式的优化策略相关的组件和过程流的框图。
图7是涉及优化事件驱动表达式的组件和流的框图。
图8是用于优化对事件相关表达式的处理的过程流的框图。
图9是使用有限状态机的优化技术的框图。
图10是涉及使用共享存储池来优化对定时标记的处理的组件和流的框图。
图11是涉及使用调度程序来减少定时树遍历的优化技术的框图。
详细描述
概览
下文描述了能够执行和/或支持多个技术和过程的工具。以下讨论描述了工具可优化HD-DVD定时标记的执行的示例性方式。该讨论还描述了这些工具可执行的其它技术和/或过程。
图1示出了用于优化HD-DVD定时标记的执行的操作环境100。操作环境100可使得一个或多个用户102能够回放一个或多个HD-DVD盘104。这些HD-DVD盘104可包括一个或多个机器可读软件组件。这些组件可包括例如,一个或多个标记文件106。标记文件106可被实现为声明性的基于XML的语言,并可包括不同的词汇或标记组件。
标记文件的示例可包含至少内容标记108、样式标记110和定时标记112。内容标记108被包含在给定标记文档的主体<body>部分中,并描述标记中所定义的对象或元素的总体布局结构。以下呈现的表1示出了HD-DVD内容标记元素的树。
表1
可包括描述内容标记部分108中所包括的元素在被呈现给用户时如何显现的XML词汇。换言之,内容标记部分可指定向用户呈现什么元素;样式标记部分可指定如何向用户呈现这些元素。
定时标记112是描述可如何随时间并经由与用户的交互来修改内容的词汇。此处所描述的HD-DVD定时标记是工业标准SMIL语言,但添加了使该SMIL语言能够被包括在标记文档的<body>部分之外的扩展。例如,此处所描述的定时标记添加了SMIL中未定义的、被称为“线索(cue)”的特殊定时容器,其定义了标记文档中向其施加动画特性的元素。
内容标记部分、样式标记部分和定时标记部分可以用声明性编程语言来实现。然而,脚本部分113可以用随着时间的推移造成样式标记中的非确定性改变的命令式编程词汇来实现。
作为整体而言,内容标记108、样式标记110和定时标记112定义文档对象模型(DOM)115。DOM 115可使用XML词汇实现为树状数据结构。DOM可包括多个单独的标记元素,在图2的117处概括地标示。上文中的表1描绘了多组合法的父-子元素组合,从而提供了DOM状态115的具体示例。
图1在117a和117n处示出了标记元素的两个示例。然而,DOM的实现可包括任意数量的元素204,并且DOM树可以采用任何合适的形式。脚本113可以是以非确定性地改变DOM的命令式编程语言。
HD-DVD包括交互层,其特别定义了HD-DVD高级应用程序可与用户和音频/视频回放系统交互的方式。这一交互层的示例可从微软公司根据商标HDiTM获得。HDiTM交互层被编码为定义为高级应用程序内容的数据格式的集合。这些格式提供对内容的声明性描述并可从XML导出。
操作环境100可使得用户102能够将HD-DVD盘104插入HD-DVD播放器114以供回放,如虚线116所表示的。HD-DVD播放器114可以是包括在118处标示的一个或多个处理器的基于计算机的系统。这些处理器118还可被分类或表征为具有给定类型或体系结构,但可具有或不具有相同的类型或体系结构。在可能的实现中,处理器可包括一个或多个交互式命令处理器(ICP)。
HD-DVD播放器还可包括在120处概括地标示的机器可读或计算机可读存储介质的一个或多个实例。计算机可读介质120可包含指令,该指令在由处理器118执行时执行此处被描述为由HD-DVD播放器中的任一组件来执行的工具或相关功能中的任一个。处理器可访问和/或执行嵌入或编码在计算机可读介质上的指令,和/或可访问存储在计算机可读介质中的数据。
更详细地转向计算机可读介质120,其可包括HD-DVD呈现引擎122的一个或多个实例。HD-DVD呈现引擎122可包括例如,一个或多个软件模块,该软件模块在被加载到处理器中并执行时,使得HD-DVD播放器从HD-DVD盘104加载包括定时标记106在内的标记和其他元素。呈现引擎122可格式化从HD-DVD盘读取的标记并将其映射到适于向用户显示的呈现内容。图1在124处概括地标示该呈现内容。
如图1所示,HD-DVD播放器114可提供用户界面126,用户102可通过该用户界面来与该HD-DVD播放器交互。用户界面126可包括由HD-DVD播放器提供的硬件,或可包括由例如该HD-DVD播放器所连接或耦合到的电视机或显示屏的另一设备提供的硬件。一般而言,用户界面126可表示适用于使用户能够与HD-DVD播放器交互的任何硬件和/或软件组件。图1在128处概括地表示用户102和HD-DVD播放器108之间的交互。
呈现内容124可包括菜单、提示或由呈现引擎122生成以便引起来自用户的响应或输入的其他项目。该响应或输入可包括例如,口头或语言命令、通过设备(例如,与用户界面126和/或HD-DVD播放器114相关联的遥控器)输入的命令、通过由HD-DVD播放器提供的按钮输入的命令或任何其他合适的形式。
返回到计算机可读介质120,它可包括定时优化引擎130,其与呈现引擎122协作以优化对定时标记112的处理。如此处贯穿本文所描述的,定时优化引擎130可采用一个或多个策略来使得呈现引擎122能够以足够的帧率来向用户呈现来自HD-DVD的内容以提供可接受的用户体验。
在参考图1描述了操作环境100后,讨论现在继续对呈现引擎122和定时标记112的更详细描述,该描述现在参考图2来呈现。
图2示出了呈现引擎122和定时标记112的其他方面200。为了方便而非限制,先前描述的某些元素被带入图2并由相同的附图标记来标示。
呈现引擎122可以按在202处概括地标示的帧呈现速率来操作。该帧率202可由HD-DVD 104的制作者来设置。更具体而言,该制作者可指定标记中的目标帧率。例如,制作者可在被称为“播放列表”的文件中声明所需帧率。在另一示例中,制作者可声明每一定时区段的基础上的时钟因子(clockdivisor)。然而,HD-DVD规约不保证将在处理定时标记时达到这些目标帧率。制作者可声明目标帧率为每区段60帧,但与系统在其上运行的硬件平台耦合的HD-DVD软件的实现细节确定是否可达到目标帧率。因此,此处所描述的用于处理定时标记的优化可增大达到目标帧率的可能性。
呈现引擎116可接收在204处概括地标示的定时时钟脉冲或计时单元(tick),其管制或同步对从HD-DVD读取的标记的处理、格式化和呈现。HD-DVD播放器108可使用任何合适的技术来生成计时单元204,只要所生成的计时单元遵守HD-DVD定时模型即可。
更详细地转向如从HD-DVD盘104读取的定时标记106,该标记可定义定时容器206的一个或多个实例。图2提供了定时容器的两个示例,其在206a和206n处标示。然而,注意,定时标记106的实例可定义任意数量的定时容器206。
定时容器206可采用不同的类型或形式。在图2所示的示例中,定时容器可包括顺序定时容器208,简称为<seq>。该定时容器可包括并行定时容器210,简称为<par>。这些定时容器可包括线索定时容器212,简称为<cue>。
<par>和<seq>时间容器可包含子定时容器的一个或多个实例(即,<seq>208a、<par>210a和<cue>212a)。<par>和<seq>定时容器控制何时及如何评估其相应的子定时容器。<par>定时容器的子定时容器是并行处理的,而<seq>定时容器的子定时容器是顺序处理的。<cue>不包含其他时间容器,但可包含与标记内容相关的一个或多个特性214,或可包含可发信号通知给监听程序218的零个或多个事件216。监听程序218可被实现为由HD-DVD应用程序的制作者来编写的JavaScript代码。
<cue>定时容器212a可包含特定事件216。更具体而言,这些定时容器可包含一个或多个属性,这些属性定义定时容器何时变为活动或非活动,以及向什么特定节点施加特定动画动作。动画动作的示例包括<动画>、<设置>和<事件>。图2示出了定时相关属性的三个示例,这三个示例被标示为开始时间属性220、结束时间属性222和持续时间属性224。
更详细地转向这些属性,开始时间属性220可指定特定时间间隔何时开始,而结束时间属性222可指定特定时间间隔何时结束。持续时间属性224可从开始时间属性220和结束时间属性222导出,或可被单独指定为属性220和222的替换属性。
回想以上讨论,定时容器可以是<par>、<seq>或<cue>。定时容器包括定义容器何时是活动或非活动的属性(例如,开始、结束、持续时间属性)。<cue>还可包括定义DOM中向其施加给定动画动作的节点的“选择”属性。属性‘开始’、‘结束’和‘选择’可使用时间表达式。时间表达式可包括限定时间间隔或X路径表达式(例如,“id(‘我的按钮’)[状态:focused()=true()]”)。
更详细地转向持续时间属性,该定时容器在某些情况下可按照特定时间偏移来指定该持续时间属性。在这些情况下,由这些特定时间偏移来定义的间隔可被认为是“限定”间隔,如在图2中的226处所表示的。限定间隔的示例可包括指定的持续时间,诸如10秒、20毫秒等。
用户交互以及对DOM的其他改变可影响时间间隔的持续时间。例如,任何定时容器的“结束”属性可被定义为X路径表达式。X路径表达式可向DOM查询对由于用户输入或制作者在脚本(例如,113)中作出的改变而改变的一个或多个特性的特定改变。进而,这些改变可能影响时间容器的持续时间。在这些情况下,由这些特定时间偏移来定义的间隔可被认为是“非限定”间隔,如在图2中的228处所表示的。在某些实现中,定时容器可按照XML路径表达式(即,X路径表达式)来指定这些非限定间隔。图2提供了X路径表达式的两个示例,这两个示例在230a和230n(概括地称为230)处标示。然而,定时容器的实现可包括任何合适数量的X路径表达式230。
以下是定时标记的示例:
<par选择=“id(‘我的按钮’)”开始=“0s”持续时间=“2s”>
<seq>
<cue持续时间=“1s”>
<设置 样式:背景色=“红色”/>
<事件 名称=“我的事件”/>
</cue>
<cue持续时间=“1s”>
<动画 样式:x=“0px;100px”/>
<设置 样式:背景色=“蓝色”/>
</cue>
</seq>
</par>
以上示例定义了单个并行时间容器(例如,210),其持续时间是2秒的限定间隔,并且其相关内容节点集是具有标识符id=‘我的按钮’的元素。该并行时间容器包含单个顺序时间容器(例如,208),其从其父并行容器继承2秒的持续时间。
该并行时间容器包含两个线索定时容器。第一个线索时间容器执行1秒钟并将标记元素‘我的按钮’的背景色设置为红色。由该第一线索设置的背景色是可具有呈现值的特性(例如,214)的示例。该第一个线索还在该第一线索变为活动时激发(fire)命名为“我的事件”的事件(例如,216)。
第二个线索在第一个线索完成后被激活,因为该第一和第二线索的父容器是一seq定时容器。第二个线索执行一秒钟。在第二个线索活动时,它将标记元素‘我的按钮’的x位置从0动画至100像素,并且还将标记元素‘我的按钮’的背景色设置为蓝色。当这些线索变为非活动时,还原背景色的原始特性值。
在定时容器的某些实现中,一个X路径表达式可被嵌套在另一个X路径表达式中。在其他实现中,如由X路径表达式定义的两个或多个间隔可以按父-子关系排列。在某些这样的情况下,定时间隔可以是“保留的”,这意味着子间隔在其最后一组父间隔或其他先辈间隔的持续时间内保留计算出的其最后一个特性值集。
在参考图2更详细地描述了呈现引擎和定时标记后,讨论现在继续对X路径表达式和用于优化对定时标记的处理的策略的描述,该描述现在参考图3来呈现。
图3示出了X路径表达式管理器和用于优化对定时标记的处理的策略的各方面300的框图。为了方便而非限制,先前描述的某些元素被带入图3并由相同的附图标记来标示。
在呈现引擎122响应于计时单元204来处理从HD-DVD 104读取的元素时,它可能遇到定时标记112中的一个或多个X路径表达式218a。当呈现引擎定位了该标记中的X路径表达式时,该呈现引擎将这些X路径表达式转发到X路径表达式管理器组件302以供处理和评估。图3在218b处标示如被转发到X路径表达式管理器的X路径表达式。
另外,X路径表达式管理器可接收表示在处理定时标记112时发生的样式和状态改变的数据。图3在303处标示这些样式和状态改变。当时间间隔变为活动时,它包含在该间隔活动时将要施加的一个或多个动画动作的列表以及将向其施加这些动画动作的特定目标节点集。动画动作包括例如,<设置>、<动画>、<事件>和<链接>。出于描述容易而非限制可能的实现的目的呈现以下示例:
<定时 时钟=″应用程序″>
<par>
<cue选择=″id(′div2′)″开始=″id(′动画1′)[状态:actioned()=′true′]″持
续时间=″5s″>
<动画 计算模式=″线性″样式:x=″200px;300px;400px;500px;600px;
500px;400px;300px;200px″/>
<设置 样式:背景色=″蓝色″/>
<事件 名称=″我的事件″/>
</cue>
</par>
</定时>
<body 样式:字体=″IYOPON.TTF″>
<div id=″div2″样式:位置=″绝对″样式:x=″200px″样式:y=″200px″样
式:宽度=″50px″样式:高度=″50px″样式:背景色=″暗红色″>
</div>
<div id=″按钮″>
<输入 id=″动画1″样式:宽度=″400px″样式:高度=″50px″总体:值=″
线性″样式:背景色=″橄榄色″/>
</div>
</body>
以上示例示出了示例标记文件的定时部分和主体部分两者。定时部分包括两个定时容器:<par>和<cue>。<par>是未定义的,但包含<cue>,其动画由“选择”属性来关联的节点集。“选择”属性被定义为恒定的X路径表达式=id(‘div2’),其意指id=div2的元素。该<cue>的‘开始’属性被定义为非限定的X路径表达式,并意味着该<cue>在id=‘动画1’的元素的已作用(actioned)状态变为真时变成活动的。一旦满足该条件,时间间隔(在这种情况下是<cue>)变成活动的,并且该时间间隔施加其包含的动画动作。在该示例中,动画动作包括:
1)<动画>:在间隔持续时间内在一值范围上将样式:x位置内插到目标节点集(在这种情况下是‘div2’);
2)<设置>:对目标节点集‘div2’将值‘蓝色’施加到样式:背景色特性;
3)<事件>:只在间隔是活动的时刻对目标节点集‘div2’激发名称为‘我的事件’的事件。脚本中由制作者定义的监听程序功能(例如,218)可接收该通知,并且可在接收到该通知后调用脚本中的任何数量的操作。
X路径表达式管理器组件可包括一个或多个软件模块,其包含用于评估X路径表达式的指令。另外,X路径表达式管理器302可将X路径表达式218转发到优化引擎130,以确定是否可优化对X路径表达式218的处理。图3在218c处标示如被转发到优化引擎的X路径表达式。
在某些情况下,优化引擎能够使用此处所描述的一个或多个策略来优化对X路径表达式的处理。在这些情况下,优化引擎可返回从优化的对X路径表达式的评估所得的结果304。图3示出了其中优化引擎向或通过X路径表达式管理器302返回这些结果304。
在某些情况下,X路径表达式218可能无法使用此处所描述的策略中的任一个来便于优化处理。在这些情况下,X路径表达式管理器302自身可评估这些X路径表达式并将值306返回给呈现引擎。值306表示未被优化的评估的结果。
优化引擎124可包括实现用于优化对定时标记106的处理的一个或多个策略的软件模块。图3以框形式来标示这些策略,并在稍后进一步描绘这些策略的细节。
如框308所示,一个策略可包括预解析和预计算在从HD-DVD读取的标记中定义的至少某些X路径表达式。如框310所示的策略可包括优化对取决于焦点状态的表达式的处理。框312所示的策略可包括通过使用有限状态机来优化处理。框314所示的策略可包括通过识别和评估互补表达式来优化对定时容器的处理。框316所示的策略可包括通过使用共享存储池来存储定时相关数据结构来优化对定时容器的处理。框318所示的策略可包括通过使用调度程序来优化处理。
虽然将在以下更详细地描述这些各种策略308-318,但要注意,此处的描述的实现可在适当时包括这些策略中的一个、某一些或全部作为组合。同样,这些策略可在单独的软件模块中实现或可被集成到一个或多个共用模块中。因此,注意,图3只是出于描述和参考容易而非限制这些可能的实现的目的而用单独的框来示出这些策略。
优化引擎130可与X路径评估引擎320协作以重新评估未使用优化策略308-318中的任一个来优化的任何X路径表达式。X路径评估引擎320可以顺应作为W3C X路径2.0的衍生物的HD-DVD X路径句法。X路径表达式管理器302可直接调用X路径评估引擎320来重新评估给定X路径表达式。图3中的虚线218d表示该调用并且提供X路径表达式作为对X路径评估引擎320的输入。进而,X路径评估引擎320可生成评估结果322并将这些结果提供给优化引擎。
在参考图3描述了X路径表达式管理器和用于优化对定时标记的处理的若干策略之后,讨论现在继续对用于处理定时标记的数据和过程流的描述,该描述现在参考图4来呈现。
图4示出了用于处理定时标记的数据和过程流400。出于方便而非限制,先前描述的一些元素被带入图4并由相同的参考标号来标示。另外,图4出于描述容易而非限制的目的示出了如由特定组件执行的数据和过程流400的某些方面。
框402表示响应于接收到时钟脉冲或计时单元(例如,204)来生成时钟元组。时钟元组可包含标题时钟、页面时钟和应用时钟值。在计时单元发生时,框402生成相应的时钟元组。这些时钟元组被同步到相同的时钟基准。如图4所示,处理器(例如,ICP 112)可执行框402。在某些实现中,处理器机载的振荡器或类似的定时元件可执行框402。在其他实现中,振荡器或定时元件可以在处理器的外部。
框404表示响应于时钟脉冲来创建并发送准时(on-tick)消息。该准时消息向图4所示的其余过程元素提供指示时钟脉冲已经发生的通知机制。
框406表示将框402中所创建的时钟元组发送到例如呈现引擎(例如,116)。图4在408处标示如发送到呈现引擎的时钟元组。时钟元组408可包括在410处标示的准时消息。准时消息410可包括例如,当前页面时钟值412、标题时钟值414和应用时钟值416中的一个或多个。
在呈现引擎处,框418表示接收时钟元组408。框420表示针对输入时钟元组中所表示的计时单元来执行时间分解。在执行框420中,呈现引擎可查询诸如文档对象模型(DOM)422等数据结构。DOM 422可包含例如,如被编码到HD-DVD盘(例如,104)并从其读取的内容标记、样式标记、脚本以及定时标记106。DOM可使用XML词汇实现为树状数据结构。
DOM 422可存储在计时单元204发生时变得与处理相关的一个或多个X路径表达式(例如,218)。DOM可响应于来自呈现引擎的查询来提供这些X路径表达式218,如图4中连接框422和420的虚线所示。
框424表示响应于时钟元组来更新活动动画列表。更具体而言,框424可包括更新对于新时钟元组的活动间隔列表。为了减小整体处理开销,可高速缓存先前的结果,并且在活动间隔列表中只反映由该新时钟元组引起的改变。在定时间隔变为活动时,将其添加到活动间隔列表;相反,当定时间隔变为非活动时,将其从活动间隔列表中移除。
活动间隔列表指示哪些间隔是活动的。换言之,框424可包括确定X路径表达式中所指定的哪些定时间隔在给定计时单元变成活动。在给定时刻是活动的定时间隔被称为“活动间隔”。
框426表示执行动画处理,这可包括评估活动间隔并计算活动间隔的新呈现值。可对这些间隔的值进行分层,从而使得各层可以按各种方式组合或遮蔽。术语“呈现值”指的是对于给定时刻的净值或有效值。呈现值在给定间隔期间对于用户变得有形,但其他值可以与该间隔相关联、在分层中隐藏和/或组合以构成该总呈现值。框426可包括基于如在428处概括地标示的夹层(sandwich)模型来计算这些新呈现值。夹层模型可指定对于给定计时单元的呈现值,并且可指定与DOM中的布局部分中相关节点相关联的动态特性。
框430表示执行对从框426得到的呈现值的格式化和布局操作。框430可包括使用可扩展样式表语言(XSL)来指定格式化和布局。
在参考图4描述了用于处理定时标记的数据和过程流之后,讨论现在继续对与这些数据和过程流的某些方面相关的其他细节的描述,该描述现在参考图5来呈现。
图5示出了图4所示的数据和过程流的其他方面500。出于方便而非限制,先前描述的一些元素被带入图5并由相同的参考标号来标示。
如图5所示,DOM 422可包括多个单独的标记元素,它们在图5中在502处概括地标示。图5在502a、502b和502n处示出了标记元素的三个示例。然而,DOM的实现可包括任意数量的元素502,并且DOM树可以采用任何合适的形式。这些标记元素可定义对屏幕上向用户呈现的事物的场景描述。
如图4所述,框424表示生成活动动画列表,这可包括多个定时容器。框424可包括按开始时间属性(例如,图2中的208)来对活动动画列表中的定时容器进行排序,如框504所示。框424还可包括对活动动画列表中的定时容器按词汇进行排序,如框506所示。
对定时间隔的排序或定序可使用适当的数据结构来“原地”完成。通过使用此处所描述的技术,所有活动定时间隔都无需在每一个时钟计时单元上重排序或重定序。例如,数据结构可跟踪被添加活动间隔列表的最后一个时间和定时间隔。这些数据结构可包含驱动过程400和500以默认将最近的定时间隔添加到活动间隔列表的末尾的统计证据。只在例外情况下,这些过程可进一步回顾活动间隔列表以定位新定时间隔的适当的插入点。通常,该适当的插入点在最近添加的间隔附近。然而,定位该插入点可基于先前对HD-DVD定时标记的主体的统计分析。
转向框426,该框还可表示处理活动动画列表中所包括的活动间隔,如框508所示。框426还可包括为当前计时单元计算新呈现值,如框510所示。框426可包括生成标记专用事件,如框512所示。最后,框428可包括还原任何非活动定时间隔,如框514所示。
通过使用此处所示的工具和技术,过程400和500可优化对X路径表达式的处理。如此处所描述的优化对X路径表达式的处理可实现更快的帧率并在与HD-DVD内容交互时可提供更好的用户或观众体验。
在参考图5描述了这些数据和过程流的其他方面之后,讨论现在继续对优化策略的更详细的描述,该描述从图6开始。
图6示出了与涉及预解析和预计算特定X路径表达式的优化策略相关的组件和过程流600。出于方便而非限制,先前描述的一些元素被带入图6并由相同的参考标号来标示。
如图6所示,优化引擎(例如,124)可包括适用于预解析和预计算特定X路径表达式的软件组件。图3在图3中的308处标示这些软件组件的示例,并且框308被带入图6。优化引擎可与X路径表达式管理器(例如,302)协作。
图6示出了用于通过预解析和预计算来优化对X路径表达式的处理的过程流600。框602表示解析如由X路径表达式管理器接收到的输入X路径表达式。图6在218处带入X路径表达式的示例。
框604表示标识出现在输入X路径表达式218内的一个或多个中间X路径表达式。图6在606a和606n处标示这些中间表达式的示例。然而,任何数量的中间表达式606可出现在给定X路径表达式218中。
框608表示高速缓存中间表达式606,并使其与DOM树中的相应元素或节点相关联。DOM树422和相关节点502被带入图6。高速缓存610可存储DOM树和相关节点。
框612表示计算整个X路径表达式的结果,如与计算可构成该整个X路径表达式的中间表达式的结果相区别。如以上更详细地、简要描述的,在某些时钟计时单元上,中间X路径表达式中没有一个可改变值,所以整个X路径表达式的值保持不变。
框614表示高速缓存整个X路径表达式的值。在整个X路径表达式的值在给定计时单元后保持不变的情况下,然后可从高速缓存中取得该整个X路径表达式的先前的值。
注意,框602-608可与框612-614并行地执行。以此方式,可将整个X路径表达式解析成中间表达式(例如,606a和606n),并且计算和高速缓存各个中间表达式的值。同时,可计算和高速缓存整个X路径表达式的值,如框616所示。
框628表示接收计时单元或其他定时事件。响应于该计时单元,框620表示评估如存储在高速缓存中的经预解析和预计算的中间表达式(例如,606)。框620还可包括评估如存储在高速缓存中的经预计算的整个表达式(例如,616)。框622表示返回从框620中所执行的评估中得到的值。之后,过程流600可返回到框618以等待下一计时单元。
在图6所示的技术中,中间表达式将每一个X路径轴完全分解成正则形式,其可包括对节点集的二进制表示、二进制运算符列表以及对判定过滤器的二进制表示。可完全分解除了判定过滤器之外的所有正则形式,这意味着中间表达式已被完全解析,轴节点集引用表示该轴中的DOM节点的列表的引用数据结构,以及判定过滤器已将原始串数据从其声明性形式转换成可高效地评估而无需重新解释的较简单的二进制形式。
高速缓存这些表达式可以用不同机制来完成,包括将对所解析的表达式的引用存储在封装时间间隔节点的数据结构/对象上。X路径表达式可在加载时或在连续的准时/布局操作之前的任何时刻被解析、预计算和转换成二进制正则形式。注意,该操作对给定DOM只执行一次,并且只在DOM改变时重新执行。一旦解析并至少部分地分解了X路径表达式(在某些情况下完全分解),表达式管理器就可基于也已被简化的判定过滤器来评估该表达式。
考虑以下示例:
<cue开始=“//按钮[样式:backgroundColor()=‘红色’]”持续时间=“500ms”...>
X路径表达式‘//按钮[样式:backgroundColor()=‘红色’]’旨在查询XMLDOM中元素名称是“按钮”的所有元素,并返回该集合中样式:背景色特性的当前计算值等于值‘红色’的任何元素。
在典型的环境中,可首先解析该表达式,然后在此之后进行评估。该解析阶段将原始串转换成一个或多个权标系列,并将其存储在描述该原始串表达式的更简单且高效的形式的引用数据结构中。通常,可使用递归下降解析算法来解析该表达式。然而,可使用其他解析算法和方法。
可在解析阶段期间执行的一个过程是轴分解(axis resolution)。轴分解指的是创建零个或多个判定过滤器将对其操作的一个或多个节点集的过程。在每一个时间间隔解析其非限定X路径表达式时,该间隔维持对所解析的且部分分解的表达式的引用。通常,该引用消除了再次执行该解析的任何需求,除非底层DOM改变(这在HD-DVD应用程序中一般不常见)。
一旦该解析阶段已完成,就在进行表达式评估的第二个阶段使用更简单且更高效的二进制数据结构。表达式评估是对较简单的数据结构执行的并涉及仅基于零个或多个判定过滤器来分解和产生结果。判定过滤器也以二进制正则形式来表示,由此减少了与表达式评估相关的处理开销。
在图6所示的方案下,该费时且处理密集型的解析X路径表达式的任务只执行一次,并且部分地(在某些情况下完全)分解中间表达式。这些优化可显著地减少与处理和评估X路径表达式相关联的处理开销。
在参考图6描述了涉及预计算表达式的优化策略之后,讨论现在继续对涉及事件驱动表达式的优化策略的更详细描述。
更详细地转向涉及事件驱动表达式的优化策略,图3在310示出了可由优化引擎124来提供的涉及事件驱动表达式的优化策略。这些优化策略可包括将非限定表达式分成可由事件发生来驱动或取决于事件的发生的表达式,如与其底层值可通过轮询来确定的表达式相区别。例如,定时容器(例如,par,seq和cue)可使用HD-DVD状态命名空间来定义其相应间隔何时变成活动或非活动。交互式状态(例如,状态:前台、状态:聚焦、状态:指针、状态:起作用、状态:值和状态:启用)可主要按用户经由控制器发起的事件来驱动。这些事件驱动的事件可通过处理定时标记来在带外处理。这些事件或状态转换可用于触发事件驱动机制,其可消除或减少每一计时单元执行的表达式评估的数量。
HD-DVD规约为控制器事件或“姿势”如何传播到呈现引擎定义模型。这些事件可通过“计时单元”处理来带外发送,并且可影响标记DOM的“状态”命名空间。从夹层模型的观点来看,HD-DVD规约与“样式”命名空间不同地定义“状态”命名空间,这表现在对“状态”的改变立即改变DOM中的底层属性。
因为状态值通过计时单元和布局处理来在带外处理,所以处理姿势事件的过程可与管理随后在准时处理期间处理的动画列表的数据结构相关。当状态值被改变时,它可被直接链接到正等待分解该状态改变的X路径表达式。
考虑以下包含开始X路径表达式的线索:
<cue开始=“id(‘我的按钮1’)[状态:focused()=1]”...>
该线索声明它应在状态:聚焦属性对于其唯一的名称是‘我的按钮1’的元素被设置为“一”时开始。呈现引擎中的姿势处理逻辑可管理用户输入并且随后进行状态管理。姿势处理逻辑可具有允许其在不评估X路径表达式的情况下分解X路径表达式的预定知识,而不是连续向X路径引擎轮询该表达式何时变为真,由此避免了评估X路径表达式的开销。
在描述了涉及优化事件驱动表达式的预处理之后,讨论现在继续对可在发生事件时执行的处理的描述,该描述参考图7来呈现。
图7示出了涉及优化事件驱动表达式的组件和流700。为了方便而非限制,先前描述的某些元素被带入图7并由相同的附图标记来标示。
如此处所使用的术语“事件”可以指对从用户输入中得到的样式和状态的改变,以及对从动画和/或脚本中得到的样式和状态的改变。更具体而言,X路径表达式管理器(例如,302)建立与呈现引擎(例如,122)的关系,在该关系下,X路径表达式管理器接受如上所述的对从制作者定义的脚本代码、用户输入或动画中得到的状态和样式特性的改变。换言之,脚本代码可修改零个或多个特性值(状态和样式两者),用户输入可改变任何交互式元素的状态,而动画(即,对定时元素的处理)可导致对元素的状态和样式的改变。X路径表达式管理器接受这些输入,并相应地管理和更新其X路径表达式的内部高速缓存。
如上所述,用户(例如,102)可向HD-DVD播放器提供输入(例如,图1中的108)。例如,用户可输入命令,或响应由呈现引擎(例如,116)显示的提示或菜单。图7在702处概括地标示这一用户输入,并且可包括语言命令、经由遥控设备或HD-DVD播放器上的按钮来输入的命令等。呈现引擎可包括接收并处理用户输入702的姿势处理逻辑704或与其协作。
姿势处理逻辑704可识别响应于用户输入702来发生的特定事件,并且可向高速缓存706查询对应于这些事件的标识符。图7在708处提供了这些标识符的示例。图7在710处标示这些查询。进而,高速缓存706可返回匹配输入事件标识符708的任何字段。如果输入事件标识符匹配高速缓存中的任何字段或记录,则该高速缓存可返回与匹配字段或记录相关联的任何经评估的表达式712。表达式712包括其值可响应于由用户输入712引起的事件而改变的那些表达式。
转向呈现引擎,当计时单元204发生时,呈现引擎116可响应于这些计时单元来从DOM 422处接收X路径表达式218。呈现引擎116可将X路径表达式218与从高速缓存706返回的任何事件驱动或事件相关表达式712进行比较。该比较标识其评估独立于由用户输入702引起的事件的X路径表达式,以及标识其表达式可由于这些事件而改变的X路径表达式。前者可被称为事件无关表达式,并且在218a处标示。后者可被称为事件驱动或事件相关表达式,并且在218b处标示。
现在转向事件无关表达式218a,这些表达式的值或评估不会由于用户事件而改变。因此,如果这些表达式的先前的值先前已被高速缓存(例如,在高速缓存714中),则这些先前值将保持不变、最新和正确。因此,呈现引擎116可将这些事件无关表达式218a转发到在302a处标示的X路径表达式管理器的实例。X路径表达式管理器302a可从高速缓存714中取得这些事件无关表达式的先前的值。X路径表达式管理器302a然后可将这些经评估的表达式(在716处标示)的值转发到呈现引擎以供使用。
现在转向事件相关X路径表达式218b,这些表达式可由于用户输入702而改变值或评估。在这些情况下,呈现引擎116可将任何事件相关表达式218b转发到在302b处标示的X路径表达式管理器的实例,其重新评估事件相关表达式218b,并如在718所标示地返回这些经重新评估的表达式的更新值。
图7只是出于说明和参考容易而非限制可能的实现的目的示出了X路径表达式管理器的不同实例。更具体而言,在某些实现中,单个X路径表达式管理器302可处理事件无关表达式218a和事件相关表达式218b两者。
图8示出了用于优化对事件相关或事件驱动表达式的处理的过程流800。图8以流程图的形式示出了结合图7示出和描述的处理。为了方便而非限制,先前描述的某些元素被带入图8并由相同的附图标记来表示。
另外,为了描述容易而非限制,图8将某些处理元素排成对应于呈现引擎(例如,116)和优化引擎(例如,124)的列。优化引擎可包括涉及优化对事件驱动表达式的处理(例如,310)的软件组件。
框802表示从用户接收输入。图7在102示出了用户的示例,并在802提供了从用户接收到的输入的示例。
框804表示由在框802中接收到的用户输入引起的任何状态改变或事件。框804可包括标识可对应于预定义的事件标识符(例如,图7中的708)的任何事件。这些预定义的事件标识符可允许标识其值可由于这些事件而改变的任何X路径表达式。
框806表示标识事件驱动或事件相关表达式。框806可包括向高速缓存查询与其值可在发生一个或多个底层事件的情况下改变的对应的X路径表达式相关的事件标识符。图7在706提供了这一高速缓存的示例,以及事件标识符708和事件相关表达式712。
框808表示接收已发生计时单元或其他定时输入的指示。图7和此处的其他附图在204示出了计时单元的示例。
框810表示响应于在框808中接收到的计时单元来接收一个或多个X路径表达式。图7和其他附图在218示出了X路径表达式的示例,并且框810可包括从DOM(例如,图7中的422)接收这些X路径表达式。
注意,框802-806中所表示的处理可以与框808和810中所表示的处理并行地进行。以此方式,过程流800可在处理传入用户事件的同时也处理输入定时计时单元。
框812表示评估在框810中接收到的X路径表达式是否取决于由在框802接收到的用户输入引起的任何事件。如果X路径表达式是事件驱动或事件相关的,则这些表达式的值可由于与在框802中接收到的用户输入相关的事件而改变。因此,过程流800可取是分支814至框816,其表示请求鉴于用户事件的发生来重新评估任何事件驱动X路径表达式。框816可包括请求X路径表达式管理器(例如,302)重新评估表达式。图8在818表示该请求。
转向X路径表达式管理器302,框820表示接收评估X路径表达式的请求。框820可包括接收重新评估事件相关或事件驱动的X路径表达式的请求。
框822表示响应于请求818来评估一个或多个X路径表达式。框822可包括响应于发生一个或多个事件来重新评估一个或多个事件驱动的X路径表达式。
框824表示发送由框822中重新评估表达式产生的值。换言之,框824表示更新表达式的值以解决表达式所依赖的任何事件的发生。图8在826表示这些重新评估表达式的结果。
框828表示接收框824中重新评估表达式的结果。在图8所示的示例中,呈现引擎可执行框828。
返回到评估框812,如果输入X路径表达式不依赖于用户事件,则过程流800可取否分支830至框832,其表示取得表达式的先前的值。例如,框832可包括取得如存储在高速缓存(例如,714)中的先前评估表达式的结果。以此方式,过程流800对于其值不依赖于底层用户事件的发生的任何X路径表达式可避免框816-828中所表示的处理。
在描述了图8中用于优化对事件驱动表达式的处理的过程流800之后,讨论继续对使用有限状态机的优化技术的描述,该描述现在参考图9来呈现。
图9示出了使用有限状态机的优化技术900。出于方便而非限制,先前描述的一些元素被带入到图9中并由相同的参考标号来表示。
图9在312概括地提供了对与涉及有限状态机的优化技术相关的处理的进一步描述。优化引擎124可提供这些优化技术。
如此处所使用的有限状态机提供了一种机制,其可被嵌入动画引擎以高效地处理各种定时间隔及其相关先辈。基本状态是非活动、活动和挂起。给定定时间隔中的中间状态变量可包括可重启、不确定和已分解。状态变量还可包括任何指定的开始、结束和持续时间属性(如果适用的话)。图2在220、222和224处示出了这些属性的示例。
采用该动画引擎中的状态机机制允许高效地处理特定时间表中的时间间隔,因为该机制便于跳过定时间隔的完整子树。如此处所使用的术语“时间表”可以指全都被同步到相同的时基的定时元素的容器。另外,如果给定父时间间隔变为非活动,则其所有子时间间隔变为非活动和可重启的。状态机还可跟踪给定时间间隔的可重启状态。
如图9所示,框902表示接收至少一个计时单元、定时脉冲或其他时钟相关事件的指示。框904表示评估给定X路径表达式中的父定时容器是否是活动的。如果不是,则框906表示省略对父定时容器的任何子定时容器的处理。否则,如果该父定时容器是活动的,则框908表示选择供处理的父定时容器的子定时容器。
框910表示评估子定时容器中所指定的任何起始条件是否为真。如果为是,则框912表示评估该子定时容器中所指定的任何表达式。否则,框914表示评估父定时容器是否还具有要评估的更多子定时容器。如果为是,则框916表示选择供处理的下一子定时容器。之后,过程900返回到之前的框910以对该下一子定时容器重复该过程。
从框914,如果父定时容器没有更多子定时容器,则框918表示评估是否还有更多父定时容器仍要被评估。如果为是,则框920表示选择供处理的下一父定时容器。之后,过程900返回到之前的框904以对该下一父定时容器重复该过程。
在框918,如果没有更多父定时容器,则过程900可到达结束状态922。
上述过程900可被实现为执行在此处示出和描述的功能的一个或多个有限状态机。
在图3中的314处概括地表示的其他优化技术识别互补表达式以避免评估重复的表达式,并改为聚焦于评估唯一的X路径表达式。“互补”表达式按照布尔逻辑来定义。例如,如果表达式“A”为真,则指向表达式“not A(非A)”的所有情况都为假。
HD-DVD内容制作者可对给定“隐藏”输入元素使用状态:值以控制定时容器的行为。但在不同的时间容器的上下文中,当多次使用同一表达式时,只有一个对表达式的评估可能就足够。可更新对该表达式的其他引用以反映该一个评估的状态。
类似地,也可跳过与这些表达式互补(即,使用相反的布尔运算符)的表达式,因为仅一个评估就足以确定任何后续互补表达式为真还是为假。考虑以下线索:
<cue开始=“id(‘我的按钮1’)[状态:value()=‘HELLO’]”...>
<cue开始=“id(‘我的按钮’)[样式:value()!=‘HELLO’]”...>
<cue开始=“id(‘我的按钮’)[样式:value()=‘WORLD’]”...>
假设定时引擎评估第一个线索,并确定其是活动的(或为真)。在这种情况下,该定时引擎可跳过评估第二个线索,因为该第二个线索将会是该第一个线索评估的相反结果。同样,该定时引擎可跳过评估第三个线索,因为如果第一个线索为真,则该第三个线索不能也为真。
该优化可使用可在加载时间期间修改以链接相关和互补表达式的引用数据结构来实现。这些引用数据结构还可在准时处理期间访问,因此它们可在完成评估时更新对该表达式的分解。
图10示出了涉及使用共享存储池来优化对定时标记的处理的组件和流1000。出于方便而非限制,先前描述的一些元素被带入到图10中并由相同的参考标号来表示。
图10提供了关于在图3中的框316处概括地表示的涉及使用共享存储器的优化技术的更多细节。优化引擎(例如124)可实现这些优化技术316。
高速缓存1002可被实现为共享存储池1004。共享存储池可存储封装关于高效地遍历DOM定时树(例如,在422,具有定时节点502)的信息的多个小型的固定大小的引用数据结构(例如,在1006a和1006n)。
该数据结构允许多个排序链接,并允许基于节点的状态来跳过各定时节点组。图10在1008a(将结构1006a链接到节点502a)和1008n(将结构1008n链接到节点502n)处示出了这些链接的示例。
共享存储池1004便于快速遍历DOM树,因为对于支持一级数据高速缓存的CPU而言可容易地本地高速缓存存储内容(memory)。数据结构1006的引用特性支持基于节点状态来在标记定时中跳过多个节点的能力。另外,该数据结构提供了使用索引递增或指针添加操作来快速遍历整个DOM树的能力。结合这些技术,相关共享存储池可用于帮助X路径表达式的关系、对索引进行排序以及查找便于对定时和X路径相关数据结构的快速且空间高效的查找的关键字(key)。
在描述了涉及使用图10中的共享存储池的优化技术之后,讨论继续对涉及使用调度程序的优化技术的描述,该描述现在参考图11来呈现。
图11示出了涉及使用调度程序1102来避免执行完整的定时树遍历的优化技术。调度程序1102将定时节点502从定时标记106放到工作队列1104中。更具体而言,调度程序1102只放置可适于在任何给定计时单元评估的那些定时节点。工作队列中由调度程序处理的每一个项目或定时节点都可包含对定时间隔(例如,1106a和1106n)及其相关子定时间隔(例如,1108a和1108n)的引用。
工作队列可按开始时间来定序并且然后在其稍后显现在标记DOM中时按词汇来定序。该定序增加了只有将要评估和处理的定时间隔会被放置在工作队列中的可能性,由此消除了任何多余的定时树处理。另外,该机制还可允许对可能在带外发生的操作(例如,姿势处理)的更好的串行化。该方法可结合以上存储池方法来使用以允许对工作项及相关数据的更好的高速缓存局部性。
结论
虽然以上描述在对HD-DVD定时标记的经优化处理的上下文中呈现,但要注意,此处所描述的工具和技术可适用于处理其他类型的媒体,或处理除了此处所描述的类型之外的类型的标记。
虽然已经用结构特征和/或方法动作指定的语言描述了该系统和方法,但是应该理解在所附权利要求中定义的该系统和方法不必限于所述的特定特征或动作。相反地,指定特征和动作作为实现所声明的系统和方法的示例性形式而公开。
此外,考虑到此处描述和示出的某些数据和过程流程图,注意,其中描绘的过程和子过程可以按除所示次序之外的次序来执行而不背离本文的精神和范围。同样,虽然已结合此处的特定组件描述了这些数据和过程流,但要注意,这些数据和过程流可用其他组件来执行而不背离本文的精神和范围。