详细描述
示例性操作环境
图1示出了可在其上实现本发明的合适的计算系统环境100的示例。计算系统环境100只是合适的计算环境的一个示例,并不旨在对本发明的使用范围或功能提出任何限制。也不应该把计算环境100解释为对示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。
本发明可用众多其它通用或专用计算系统环境或配置来操作。适合在本发明中使用的公知的计算系统、环境和/或配置的示例包括,但不限于:个人计算机、服务器计算机、手持或膝上型设备、图形输入板设备、无头服务器、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子产品、网络PC、小型机、大型机、包含上述系统或设备中的任一个的分布式计算机环境等。
本发明可在诸如程序模块等由计算机执行的计算机可执行指令的通用语境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。本发明也可以在分布式计算环境中实现,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和/或远程计算机存储介质中。
参考图1,用于实现本发明的一个示例性系统包括计算机110形式的通用计算设备。计算机110的组件可以包括,但不限于,处理单元120、系统存储器130和将包括系统存储器在内的各种系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、扩展的ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也被称为Mezzanine总线)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能够被计算机110访问的任何可用介质,且包括易失性和非易失性介质、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术;CD-ROM、数字多功能盘(DVD)或其它光盘存储;磁带盒、磁带、磁盘存储或其它磁性存储设备;或能用于存储所需信息且可以由计算机110访问的任何其它介质。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例,而非限制,通信介质包括诸如有线网络或直接线连接的有线介质,以及诸如声学、RF、红外线和其它无线介质的无线介质。上述中任一个的组合也应包括在计算机可读介质的范围之内。
系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,诸如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包含有助于诸如启动时在计算机110中元件之间传递信息的基本例程,它通常被存储在ROM 131中。RAM 132通常包含处理单元120可以立即访问和/或目前正在操作的数据和/或程序模块。作为示例,而非限制,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器141,从可移动、非易失性磁盘152中读取或向其写入的磁盘驱动器151,以及从诸如CD ROM或其它光学介质等可移动、非易失性光盘156中读取或向其写入的光盘驱动器155。可以在示例性操作环境下使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器141通常由诸如接口140等不可移动存储器接口连接至系统总线121,磁盘驱动器151和光盘驱动器155通常由诸如接口150等可移动存储器接口连接至系统总线121。
以上描述和在图1中示出的驱动器及其相关联的计算机存储介质为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同或不同。操作系统144、应用程序145、其它程序模块146和程序数据147在这里被给定了不同的标号是为了说明至少它们是不同的副本。用户可以通过输入设备,诸如图形输入板或电子数字化仪164、麦克风163、键盘162和定点设备161(通常指鼠标、跟踪球或触摸垫)向计算机110输入命令和信息。图1中未示出的其它输入设备可以包括操纵杆、游戏垫、圆盘式卫星天线、扫描仪、或包括含有生物测定传感器、环境传感器、位置传感器或其它类型的传感器的设备在内的其它设备。这些和其它输入设备通常由耦合至系统总线的用户输入接口160连接至处理单元120,但也可以由其它接口或总线结构,诸如并行端口、游戏端口或通用串行总线(USB)连接。监视器191或其它类型的显示设备也经由接口,诸如视频接口190连接至系统总线121。监视器191也可与经由触摸屏接口192连接至系统总线121的触摸屏面板等集成。注意到,监视器和/或触摸屏面板可物理耦合至其中包括计算设备110的外壳,诸如在图形输入板类型个人计算机中那样。此外,诸如计算设备110的计算机也可包括其它外围输出设备,诸如扬声器194和打印机195,它们可以通过输出外围接口193等连接。
计算机110可使用至一个或多个远程计算机,诸如远程计算机180的逻辑连接在网络化环境下操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,且通常包括上文相对于计算机110描述的许多或所有元件,尽管在图1中只示出存储器存储设备181。图1中所示逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其它网络。这样的连网环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。当在LAN连网环境中使用时,计算机110通过网络接口或适配器170连接至LAN 171。当在WAN连网环境中使用时,计算机110通常包括调制解调器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器172可以是内置或外置的,它可以通过用户输入接口160或其它合适的机制连接至系统总线121。在网络化环境中,相对于计算机110描述的程序模块或其部分可以存储在远程存储器存储设备中。作为示例,而非限制,图1示出了远程应用程序185驻留在存储器设备181上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。
数字图像的可扩展编解码器体系结构
本发明一般针对一种用于提供数字图像的可扩展编解码器体系结构的系统和方法。该系统和方法可有利地允许安装和发现可枚举其用于对数字图像执行成像操作的能力的新成像组件。通过在安装期间注册成像组件信息,可发现适当的成像组件以便执行所请求的成像操作而不必实例化该成像组件。如可见到的,该系统和方法可灵活地支持数字图像的新图像格式和新像素格式的添加,且还可将新像素图像格式自动转换成可由安装在计算机系统上的成像组件识别的像素图像格式。如可以理解的,此处所述的各个框图、流程图和情形仅是示例,且存在本发明可应用的众多其它情形。
转向附图的图2,它示出了一般表示数字图像的可扩展编解码器体系结构的一个实施例中的各系统组件的示例性体系结构。本领域的技术人员可以理解,在附图中所示的框内实现的功能可被实现为单独的组件,或者若干或所有框的功能可在单个组件内实现。作为示例,编解码器仲裁器208可在与编解码器管理器206分开的组件中实现。
图2中所示的可执行软件202可请求要对图像文件执行的任何数目的操作,包括从图像文件中解码图像数据和将图像数据编码成图像文件。可执行软件202可操作上耦合至成像应用程序编程接口(API)204以便请求从图像文件中解码图像以及请求将图像编码成图像文件。成像API又可操作上耦合至编解码器管理器206,后者发现并枚举计算机系统中所注册的可用编解码器,并实例化所选编解码器以便对图像文件执行所请求的操作。
编解码器管理器206可包括操作上耦合的成像组件,诸如编解码器仲裁器208、一个或多个像素格式转换器210、以及一个或多个编解码器212。编解码器管理器206、编解码器仲裁器208、像素格式转换器210、和编解码器212各自可以是任何可执行软件代码,包括内核组件、应用程序或应用组件、链接库组件、对象等。可能存在诸如编解码器212等为计算机系统所支持的每一图像文件类型设置的编解码器。例如,可能有用于GIF、JPEG、PNG、TIFF和其它图像文件格式的编解码器。每一编解码器可包括用于对图像编码的编码器214和用于对图像解码的解码器218。编码器214例如可包括用于将像素写入诸如图像文件242等图像文件的图像块中的块写入器216。解码器218可包括用于从诸如图像文件242等图像文件中解码图像块的块读取器220。图像文件242也可包括可描述一个或多个图像数据块246中所编码的图像的元数据块244。
诸如编解码器212等成像组件可使用诸如注册表224等注册表在计算机系统中安装并注册。注册表224可以是文件、可执行对象、数据库或其它持久数据结构。注册表224可包括用于计算机系统中所注册的编解码器的编解码器信息234、和用于计算机系统中所注册的像素格式转换器的像素格式转换器信息226以及其它系统信息。注册这样的成像组件可提供选择适当的成像组件以便执行所请求的成像操作而无需首先对其进行实例化的一种方式。在一个实施例中,编解码器可在注册表中写入关于自身的信息。编解码器信息234可包括例如,编解码器名236、可用于唯一地标识编解码器的全局唯一标识符(GUID)238、以及其它属性240,诸如编解码器作者姓名、对该编解码器的描述、制造商名、图像格式等。例如,可能存在如由参考标号260、262、264所示的用于图2中所示的每一编解码器212的编解码器信息。在各个实施例中,也可通过提供诸如编码器名、编码器标识符、和编码器的其它属性等信息来在注册表224中注册编码器;且类似地,可通过提供诸如解码器名、解码器标识符、和解码器的其它属性等信息来在注册表224中注册解码器。
在运行时,可使用注册表中的信息来找到这样一种编解码器,它可在无需首先实例化该编解码器的情况下对图像文件解码。在一实施例中,在编解码器为它可解码的图像所注册的的模式与图像文件之间进行比较。编解码器可提供任何类型的模式以便在与图像文件进行比较时使用,包括掩码。在一个实施例中,可在编解码器所注册的模式与图像文件中的首部信息之间进行比较。
模式匹配可导致发现计算机系统中所注册的可提供用于特定图像文件的各种操作的若干不同的编解码器。编解码器仲裁器208然后可提供用于在可各自被实例化且可各自枚举它可对特定图像文件执行的操作的若干编解码器之中选择一编解码器来执行所请求的操作的功能。在一实施例中,解码器例如可通过指示属性和/或它可对图像执行的操作来枚举其能力。这些属性和操作可包括,解码器是否由对该图像编码的编码器的同一厂商提供、解码器是否可对图像文件中的所有图像解码、解码器是否可对图像文件中的某些图像解码、解码器是否可枚举图像文件中的元数据、以及解码器是否可对图像文件中的缩略图解码。在各个实施例中,编解码器仲裁器208可对解码器可执行的每一操作分配权重,然后选择其表示所分配权重的总和的得分最高的编解码器。
可处理一图像类型的每一编解码器可支持该图像类型的众多像素格式。然而,如果不存在计算机系统中所注册的可对特定图像的一像素格式解码的任何编解码器,则可找到可对该类型图像的一不同像素格式解码的编解码器,且可使用像素格式转换器来将图像中的该像素格式转换成计算机系统中所注册的解码器可解码的像素格式。从而,编解码器管理器206可包括一个或多个操作上耦合的像素格式转换器210。这些像素格式转换器210中的每一个也可在计算机系统中注册。注册表224可包括用于所注册的每一像素格式转换器的像素格式转换器信息226。例如,可能存在如由参考标号248、250、252所示的用于图2中所示的每一像素格式转换器210的像素格式信息。在一个实施例中,注册表中每一像素格式转换器的信息可包括转换器名228、可用于唯一标识转换器的GUID 230、以及可各自表示诸如由对图2中所示的每一像素格式222的引用254、256和258所示的各个像素格式的标识符的像素格式GUID 232的列表。在各个其它实施例中,可与每一像素格式转换器的信息一起包括其它属性,包括厂商名、像素格式转换器的可执行代码的标识符等。
本领域的技术人员可以理解图2中所示的可扩展编解码器体系结构仅是用于实现本发明的一个示例性实施例,且可使用其它计算系统配置来实现本发明。例如,可提供应用程序的解码器而不提供编码器,它可对图像文件中的图像解码但不将信息编码成图像文件。作为另一示例,为了便于对编解码器创建的任何图像像素格式解码和编码,可由每一编解码器提供像素格式转换器来在该编解码器的像素格式和诸如32位PARGB或128位PABGR等一个或多个规范格式之间来回转换。
图3呈现了一般表示在可扩展编解码器体系结构的一个实施例中用于对图像文件执行成像操作而采取的示例性步骤的流程图。本领域的技术人员可以理解一种实现可选择以不同的顺序来执行这些步骤或可为效率或灵活性起见选择仅执行这些步骤中的某一些,而同时达到相同的效果且不背离本发明的范围。在步骤302处,可安装编解码器组件。在各个实施例中,可在计算机系统上安装编解码器、解码器和/或编码器。如此处所使用的,编解码器组件可以指的是编解码器、解码器或编码器。作为安装的一部分,编解码器组件可安装一个或多个像素格式转换器,包括用于在该编解码器组件的像素格式与诸如32位PARGB或128位PABGR等常见像素格式之间来回转换的像素格式转换器。
接着,在步骤304中,编解码器组件可在注册表中注册。在一个实施例中,编解码器组件可对自身进行注册来作为安装的一部分。在注册期间,编解码器组件可提供关于自身的信息,包括它可对其执行操作的任何图像格式和像素格式。编解码器组件信息可包括例如,编解码器组件名、用于唯一标识该编解码器组件的标识符、以及诸如编解码器组件的作者姓名、对该编解码器组件的描述、制造商名、图像格式等的其它属性。在各个实施例中,编解码器组件也可提供可用于标识它对其执行操作的图像文件的一个或多个模式。例如,编解码器组件可注册可与图像文件首部中的信息进行比较的一个或多个模式。在一个实施例中,可在编解码器组件所注册的模式与图像文件中的首部信息之间进行比较。
在步骤306处,可接收对图像文件执行成像操作的请求。该请求可用于编解码器组件所支持的任何成像操作,诸如对图像编码或对图像解码。接着,在步骤308处,可发现可对图像文件执行所请求的成像操作的编解码器组件。在各个实施例中,编解码器组件所注册的信息可用于发现计算机系统中所注册的可对图像文件执行所请求的成像操作的编解码器组件。例如,编解码器组件所注册的一个或多个模式可与图像文件进行匹配来标识是否存在编解码器组件可对图像文件执行的任何操作。这样的操作可包括,对图像文件中的一些图像解码、对图像文件中的图像编码、枚举图像文件中的元数据、对图像文件中的元数据编码、对图像文件中的缩略图解码等。如此处所使用的,成像操作指的是成像组件提供的包括操纵描述数字图像的元数据在内的用于操纵数字图像的任何操作。
然后可在步骤310中从所标识的可对图像文件执行操作的编解码器组件中选择一编解码器组件。在一个实施例中,可请求使用来自注册表的信息发现的编解码器组件枚举各自可对图像文件执行的操作。然后,可基于每一编解码器组件可对图像文件执行的操作的类型来选择编解码器组件。图4可更详细地表示一个这样的实施例中所采取的步骤。在另一实施例中,可向诸如应用程序等可执行码提供所标识的可对图像文件执行操作的编解码器组件的列表,且可执行码可选择要用于对图像文件执行操作的编解码器组件。
然后,在步骤312处,可确定编解码器组件是否需要像素格式转换来对图像文件执行成像操作。如果步骤310处所选的编解码器组件支持该图像文件的像素格式,则编解码器组件可对图像文件执行所请求的操作而无需像素格式转换。然而,可能不存在计算机系统中所注册的可使用图像文件的像素格式来执行成像操作的编解码器组件,而可在步骤310处选择可对该类型的图像的不同像素格式执行所请求的成像操作的编解码器组件。在这种情况中,可在步骤312处确定编解码器组件需要像素格式转换来对图像文件执行成像操作,且在步骤314处可执行像素格式转换。在一个实施例中,可使用像素格式转换器来将图像中的像素格式转换成步骤310处所选的编解码器组件所支持的像素格式以便对图像文件执行所请求的成像操作。图5可更详细地表示一个这样的实施例中所采取的步骤。
如果在步骤312处确定编解码器组件不需要像素格式转换来对图像文件执行成像操作,则在步骤316处编解码器组件可对图像文件执行成像操作。当在步骤318处编解码器组件对图像文件执行了成像操作之后,可结束处理。
在各个实施例中,应用程序可使用应用程序接口来安装和发现诸如编解码器等成像组件以便选择来对图像文件执行成像操作。这可允许应用程序使用可扩展元数据体系结构而不必公布(make public)诸如编解码器组件等成像组件。而且,当应用程序退出时,成像组件可被卸载,使得成像组件不能供另一应用程序使用。
图4是一般表示在一个实施例中用于选择编解码器组件来对图像文件执行成像操作所采取的示例性步骤的流程图。在步骤402处,可实例化在图3中的步骤308处通过使用来自注册表的信息标识的编解码器组件。在步骤404处,如果在成像操作请求中指示了优选编解码器厂商,则然后可实例化优选编解码器厂商所提供的编解码器组件。在步骤406处,可请求每一编解码器组件可对图像文件执行的属性和/或操作的枚举。在一个实施例中,编解码器组件可调用接口来枚举编解码器组件可执行的操作。
在步骤408处,可对每一编解码器组件所枚举的它可对图像文件执行的每一操作分配权重。在一个实施例中,诸如解码器等编解码器组件可响应,它可对一个帧解码、或者它可对元数据解码、或者它可对缩略图解码等。这些操作中的每一个将被分配一权重。例如,可对能够对图像文件中的所有图像解码分配权重8;可对能够对图像文件中的某些图像解码分配权重4;可对能够对缩略图图像解码分配权重2;以及可对能够对元数据解码分配权重1。
在对每一编解码器组件所枚举的它可对图像文件执行的每一操作分配了权重之后,在步骤410处可选择具有分配给所枚举的可对图像文件执行的操作的权重的最大总和的编解码器组件。在选择了编解码器组件之后,可结束处理。
图5呈现了一般表示一个实施例中用于执行像素格式转换所采取的示例性步骤。例如,可执行像素格式转换来将图像中的像素格式转换成诸如图3中步骤310处所选的可对该类型图像的不同像素格式执行所请求的成像操作的编解码器等编解码器组件所支持的像素格式。在步骤502处,可对一列像素格式转换器列表搜索可执行从数字图像的像素格式到另一像素格式的转换的一个或多个像素格式转换器。在一个实施例中,注册表可包括关于安装在计算机系统中的每一像素格式转换器的信息,包括与该像素格式转换器一起注册的该转换器可转换的像素格式列表。对像素格式转换器可转换成的每一像素格式,也可生成可从该像素格式转换成另一像素格式的像素格式转换器列表。在一个实施例中,可能存在一个或多个规范像素格式,每一成像组件可对其安装用于在这些规范像素格式与成像组件所支持的像素格式之间转换的一个或多个像素格式转换器。这可提供从源像素格式转换成一个或多个中间像素格式然后再转换成目标像素格式的一种方式。
在步骤504处,可选择用于将数字图像的像素格式转换成成像组件所支持的像素格式的一个或多个像素格式转换器的组合。在一个实施例中,如果存在计算机系统中安装并注册的将图像中的像素格式转换成成像组件所支持的像素格式的单个像素格式转换器,则可使用这一单个像素格式转换器。否则,可使用若干像素格式转换器将图像中的像素格式转换成一个或多个中间像素格式,之后中间像素格式可被转换成成像组件所支持的像素格式。图6可更详细地呈现一个这样的实施例中所采取的步骤。
一旦选择了用于执行转换的一个或多个像素格式转换器的组合,在步骤506处可使用被选择来将数字图像的像素格式转换成成像组件所支持的像素格式的该一个或多个像素格式转换器的组合来执行一个或多个像素格式转换。在执行了像素转换之后,可结束处理。
图6呈现了一般表示在一个实施例中用于选择一个或多个像素格式转换器以便执行像素格式转换所采取的示例性步骤的流程图。在步骤602处,可确定在一像素格式转换器列表中是否存在可将数字图像的像素格式转换成成像组件所支持的像素格式的像素格式转换器。如果是,则可在步骤608处选择该像素格式转换器以便执行像素格式转换。如果否,则可在步骤604处确定在该像素格式转换器列表中是否存在可将数字图像的像素格式转换成中间像素格式的像素格式转换器,以及在该像素格式转换器列表中是否存在可将图像从该中间像素格式转换成成像组件所支持的像素格式的另一像素格式转换器。如果是,则可在步骤608处选择这两个像素格式转换器以便执行像素格式转换。
如果否,则可在步骤606处确定是否存在可被选择以便首先将数字图像的像素格式转换成中间像素格式然后再转换成常见像素格式的两个像素转换器,以及是否可能存在可被选择以便从该常见像素格式转换成成像组件所支持的像素格式的第三像素格式转换器。如果是,则可在步骤608处选择这三个像素格式转换器以便执行像素格式转换。在一个实施例中,每一成像组件可安装一个或多个像素格式转换器以便在规范像素格式与成像组件所支持的像素格式之间转换。这可允许将图像格式转换成常见像素格式然后再从该常见像素格式转换成成像组件所支持的像素格式。当选择中间规范格式时,可首先选择具有最高保真度的规范格式。例如,在一个实施例中,枚举转换器可支持的规范格式的列表可指示位深度的保真度,诸如128位。以此方式,该系统和方法可支持所引入的新图像格式可用的最高保真度。
如从前述详细描述可见到的,本发明提供一种用于数字图像的可扩展编解码器体系结构的改进的系统和方法。该系统和方法可有利地允许安装并发现可枚举其对数字图像执行成像操作的能力的新成像组件。该系统和方法可因此灵活地支持数字图像的新图像格式和新像素格式的添加。所提供的框架也可无缝地支持使用图像格式和对现有格式的扩展的第三方实现的应用。而且,该系统和方法可自动将新像素图像格式转换成可由安装在计算机系统上的成像组件识别的像素图像格式。如现在所理解的,该系统和方法因此提供当代计算中所需的显著优点和好处。
尽管本发明易于作出各种修改和替换构造,但其某些示出的实施例在附图中示出并在以上详细描述。然而,应理解不旨在将本发明限于所公开的特定形式,而是相反,旨在覆盖落入本发明的精神和范围内的所有修改、替换构造和等效方案。