图像处理设备、方法和存储有程序的存储介质的制作方法

文档序号:6559576阅读:147来源:国知局
专利名称:图像处理设备、方法和存储有程序的存储介质的制作方法
技术领域
本发明涉及一种图像处理装置、方法以及存储程序的存储介质,具体地,本发明涉及一种配有图像处理部的图像处理装置,所述图像处理部被构造为包括从多种类型的图像处理模块中选择的一个或更多个图像处理模块,并且本发明涉及一种可被应用于所述图像处理装置的图像处理方法,并涉及一种存储用于使计算机用作图像处理装置的图像处理程序的存储介质。
背景技术
在图像处理装置、桌面印刷(DTP)系统、打印系统等上对输入的图像数据执行各种类型的图像处理,诸如放大/缩小、旋转、仿射变换(affine transformation)、色彩转换、滤波处理、图像合成等。在这样的装置和系统中,当输入的图像数据或内容的属性、过程、参数等固定时,图像处理由设计为专用于该图像处理的硬件来执行。但是,当属性变化多样时或者当输入具有不同的色彩空间或不同的每像素比特数的各种图像数据作为输入的图像数据时,需要灵活地改变图像处理的结构。为了满足这种需求,存在一些这样的技术,在这些技术中,多个可编程处理模块以管线(pipeline)形式或有向无环图(DAG)形式连接。
但是,存在着以下问题。在各图像处理模块,根据图像处理的类型和内容,存在容易处理的单位(例如,像素为单位、一行为单位、多行为单位、一整幅图像为单位等)。为了将各图像处理模块以任意顺序进行组合并且彼此合作执行处理,所有图像处理模块的输出的单位必须一致,或者说,必须构建各图像处理模块。因此,图像处理模块的结构变得复杂。此外,由于各图像处理模块与其它图像处理模块协同工作,所以除了对输入的图像数据实际执行图像处理的部分外,各图像处理模块还需要控制从与该模块自身相连接的其它图像处理模块接收图像数据和向所述其它图像处理模块发送图像数据的处理的部分。因此,各图像处理模块的结构变得更加复杂。
而且,各缓冲存储器被构建为保持与其前后连接的图像处理模块的处理内容相对应的区域,并且仅仅用于保持处理的中间进展。因此,当给定的图像处理模块被改变时,需要根据该图像处理模块的处理内容以及位于缓冲存储器之前和之后的图像处理模块的处理内容等来改变性能。

发明内容
为了实现上述目的,本发明提供了一种图像处理设备,其包括图像处理部;以及存储器管理部,该图像处理部具有(A)一个或更多个图像处理模块,每一个图像处理模块都具有(1)图像处理引擎,其以预先设定的单位处理数据量为单位对图像数据进行预定的图像处理;以及(2)控制部,其以所述图像处理引擎以所述单位处理数据量为单位进行处理所需的数据量单位,来输入从其自身模块的前级获取的图像数据,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级,所述一个或更多个图像处理模块是从多种类型的图像处理模块中选择的,在该多种类型的图像处理模块中由所述图像处理引擎执行的图像处理的类型或内容彼此不同;以及(B)一个或更多个缓冲器模块,所述图像处理部由以管线形式或有向无环图形式连接的多个单独模块构成,从而所述缓冲器模块连接在被选择的各个图像处理模块的前级和后级中的至少一个上,并且所述缓冲器模块具有用于存储图像数据的缓冲器,以及缓冲器控制部,其中该缓冲器控制部在其自身模块的前级连接有图像处理模块的情况下执行下述的处理,即,将从所述前级图像处理模块输出的图像数据写入所述缓冲器上的存储区域中,该存储区域能够存储由所述前级图像处理模块对其自身模块预先设置的或者在每一次输出图像数据时通知的写入数据量的数据,而在其自身模块的后级连接有图像处理模块的情况下执行下述的处理,即,使得所述后级图像处理模块以由所述后级图像处理模块对其自身模块预先设定的或者在每一次请求图像数据时指定的读取数据量为单位来读取存储在所述缓冲器中的图像数据,并且所述存储器管理部(a)可以通过多种类型的管理方法来执行存储器管理处理,其中根据在构造所述图像处理部时或者在对作为处理对象的图像数据进行处理时来自各个模块的请求,所述存储器管理部从设置在所述图像处理设备处的存储器中保留要分配给各个模块的存储器,并将所保留的存储器分配给各个模块,并且在删除所述各个模块时,释放分配给所述各个模块的存储器,以及(b)通过所述多种类型的管理方法当中的从外部指示的管理方法来执行存储器管理处理。
与本发明相关的图像处理模块具有图像处理引擎和控制部。该图像处理引擎以预先设定的单位处理数据量为单位对图像数据进行预定的图像处理。该控制部以所述图像处理引擎以所述单位处理数据量为单位进行处理所需的数据量单位,来输入从其自身模块的前级获取的图像数据,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级。在本发明中,准备了多种类型的图像处理模块,在该多种类型的图像处理模块中由所述图像处理引擎执行的图像处理的类型或内容彼此不同。在构造所述图像处理部时,从所述多种类型的图像处理模块当中选择一个或更多个图像处理模块。注意,为构造所述图像处理部而选择的图像处理模块可以是分别不同的图像处理模块,或者可以被选择为使得这些图像处理模块的部分或整体彼此重叠。
与本发明相关的缓冲器模块具有用于存储图像数据的缓冲器,以及缓冲器控制部。在其自身模块的前级连接有图像处理模块的情况下,该缓冲器控制部使得将从所述前级的图像处理模块输出的图像数据写入所述缓冲器上的存储区域中,该存储区域能够存储对其自身模块预先设定的或者在每一次输出图像数据时通知的写入数据量的数据。此外,在其自身模块的后级连接有图像处理模块的情况下,该缓冲器控制部执行下述的处理,即,使得所述后级图像处理模块以对其自身模块预先设定的或者在每一次请求图像数据时指定的读取数据量为单位来读取存储在所述缓冲器中的图像数据。
上述单位处理数据量、写入数据量和读取数据量可以是图像的一行,或者可以是包括图像的多行、整个图像、图像的一个像素等在内的任意字节数中的任意一个。此外,由所述图像处理模块写入所述缓冲器模块的缓冲器的图像数据可以是未压缩的图像数据,或者可以是经过某种编码方法进行了编码并进行了压缩的图像数据。所述单位处理数据量和单位写入数据量可以相同或者可以不同。此外,使得图像数据被写入到缓冲器上的存储区域的处理的示例是将该存储区域的地址等通知给其自身模块的前级图像处理模块的处理。此外,使得从缓冲器读取图像数据的处理可以通过将其中存储有作为读取对象的图像数据的存储区域(该存储区域可以是所述后级图像处理模块不能对所存储的内容进行改变的存储区域,或者可以是所述后级图像处理模块可以对所存储的内容进行改变的存储区域)的地址通知给其自身模块的后级图像处理模块来执行,或者可以通过将作为读取对象的数据复制到从该后级图像处理模块通知的地址的存储区域来执行。
在本发明中,所述图像处理部由以管线形式或有向无环图形式连接的多个单独模块构成,从而具有用于存储图像数据的缓冲器的缓冲器模块连接在被选择的各个图像处理模块的前级和后级中的至少一个上。与本发明相关的处理管理部通过在所述图像处理部的各个图像处理模块处使得重复进行下述的处理来使所述图像处理部对作为处理对象的整个图像进行处理将从其自身模块的前级获取的图像数据输入给所述图像处理引擎,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级。
这样,在本发明中,连接在缓冲器模块的前级的图像处理模块可以对将图像数据写入后级缓冲器模块的缓冲器时的写入数据量进行任意设定。连接在缓冲器模块的后级的图像处理模块可以对从后级缓冲器模块的缓冲器读取图像数据时的读取数据量进行任意设定。因此,缓冲器模块的前级的图像处理模块无需使图像数据的输出单位与固定确定的基准值一致。此外,缓冲器模块的后级图像处理模块也无需使图像数据的获取单位与该基准值一致。因此,可以根据各个图像处理模块的图像处理引擎所执行的图像处理的类型等对该图像处理引擎处的单位处理数据量进行优化,并且可以实现各个图像处理模块的图像处理引擎所执行的图像处理的优化(提高速度、改善图像质量等)。
此外,图像数据在多个图像处理模块(其间插设有缓冲器模块)之间的接收和传送可以通过缓冲器模块的缓冲器来执行。因此,在图像处理模块之间接收和传送图像数据时,无需进行复杂的控制,例如在二者之间进行通信以及对定时进行调整等。此外,处理管理部可以通过使得重复进行下述的处理来使所述图像处理部的各个图像处理模块对作为处理对象的整个图像进行处理将从其自身模块的前级获取的图像数据输入给所述图像处理引擎,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级。因此,根据本发明,可以组合任意图像处理模块,并执行所期望的图像处理,而不会导致各个图像处理模块的结构变得复杂。
此外,与本发明相关的存储器管理部(a)可以通过多种类型的管理方法来执行存储器管理处理,其中,根据在构造所述图像处理部时或者在对作为处理对象的图像数据进行处理时来自各个模块的请求,所述存储器管理部从设置在所述图像处理设备处的存储器中保留要分配给各个模块的存储器,并将所保留的存储器分配给各个模块,并且在删除所述各个模块时,释放分配给所述各个模块的存储器,以及(b)通过所述多种类型的管理方法当中的从外部指示的管理方法来执行存储器管理处理。这样,可以根据设备环境(例如,设置在图像处理设备处的存储器的大小等)来切换存储器管理方法,从而可以改善与本发明相关的图像处理设备的适用性。


将基于以下附图而详细描述本发明的实施例,在附图中图1是示出了与实施例相关的计算机(图像处理装置)的示例性结构的框图;图2A是示出了由资源管理部执行的初始化处理的内容的流程图;图2B是示出了由资源管理部执行的、第三管理方法中对内存保留请求的处理的内容的流程图;图2C是示出了由资源管理部执行的、第三管理方法中对内存释放请求的处理的内容的流程图;图2D是示出了由资源管理部执行的对资源保留请求的处理的内容的流程图;图2E是示出了由资源管理部执行的对资源释放请求的处理的内容的流程图;图3是解释应用程序的处理的序列图;图4A是示出了由模块生成部执行的模块生成处理的内容的流程图,图4B是解释工作流管理部的表的示意图;图5A至5C是示出了图像处理部的结构示例的框图;图6是示出了由缓冲器模块的缓冲器控制部执行的缓冲器控制处理的内容的流程图;图7是示出了由缓冲器模块的缓冲器控制部执行的请求接收中断处理的内容的流程图;图8是示出了由缓冲器模块的缓冲器控制部执行的数据写入处理的内容的流程图;图9A至9C是解释在作为写入对象的图像数据跨越多个用于存储的单位缓冲区的情况下的处理的示意图;图10是示出了由缓冲器模块的缓冲器控制部执行的数据读取处理的内容的流程图;图11A至11C是解释在作为读取对象的图像数据跨越多个用于存储的单位缓冲区的情况下的处理的示意图;图12是示出了由图像处理模块的控制部执行的图像处理模块初始化处理的内容的流程图;图13是示出了由图像处理模块的控制部执行的图像处理模块控制处理的内容的流程图;图14是示出了由图像处理模块的控制部执行的自身模块删除处理的内容的流程图;图15A是示出了图像处理模块的示意性结构以及在图像处理模块处执行的处理的框图,并且图15B是示出了缓冲器模块的示意性结构以及在缓冲器模块处执行的处理的框图;图16A至16D是示出了由处理管理部执行的块单位控制处理的内容的流程图;图17A至17D是示出了由处理管理部执行的整幅图像控制处理的内容的流程图;图18是解释块单位处理和整幅图像处理的流程的示意图;图19是示出了由处理管理部执行的错误发生中断处理的内容的流程图;和图20是解释在缓冲器模块直接从前面的图像处理模块请求图像数据的情况下的块单位处理的流程的示意图。
具体实施例方式
在下文中,将参照附图详细描述本发明的实施例的示例。图1示出了作为图像处理装置的计算机10。可将该计算机10并入到必须在其内部执行图像处理的任意图像处理装置,诸如复印机、打印机、传真机、具有前述设备的功能的多功能设备、扫描仪、照片打印机等。此外,计算机10可以是独立的计算机,诸如个人计算机(PC)等。此外,计算机10可以是并入到便携式装置(诸如PDA(个人数字助理)、蜂窝电话等)中的计算机。
计算机10具有CPU 12、内存14、显示器16、操作部18、存储器20、图像数据供应部22和图像输出部24,它们通过总线26连接到一起。在将计算机10并入到如上述的那些图像处理装置的情况下,计算机10可包括分别设置在该图像处理装置上的由LCD等构成的显示面板、数字键等(作为显示器16和操作部18)。此外,如果计算机10是独立的计算机,则显示器16可以是显示器,操作部18可以是键盘、鼠标等,它们连接到计算机。而且,硬盘驱动器(HDD)适合作为存储器20,但是代替地,可使用其他的非易失性存储介质,诸如闪存等。
图像数据供应部22提供作为处理对象的图像数据。例如,可将用于读取记录在记录材料(诸如纸或照相胶卷等)上的图像并输出图像数据的图像读取部、或通过通信线路从外部接收图像数据的接收部、或存储图像数据的图像存储部(内存14或存储器20)等用作图像数据供应部22。此外,图像输出部24输出经过了图像处理的图像数据或由这样的图像数据表示的图像。例如,可将用于将由图像数据表示的图像记录到记录材料(诸如纸或感光材料等)上的图像记录部、或者将由图像数据表示的图像显示到显示器等上的显示部、或者将图像数据写到记录介质的写入装置、或者通过通信线路发送图像数据的发送部用作图像输出部24。此外,图像输出部24可以是仅存储经过了图像处理的图像数据的图像存储部(内存14或存储器20)。
如图1所示,存储器20存储由CPU 12执行的各种程序操作系统30的程序,其控制对资源(诸如内存14等)的管理、对CPU 12执行程序的管理、计算机10和外部之间的通信等;图像处理程序组34,其使计算机10用作本发明涉及的图像处理装置;和各种类型的应用(application)32的程序(在图1中示为“应用程序组32”),其使得由CPU 12执行前述图像处理程序组实现的图像处理装置执行期望的图像处理。
出于减轻开发可被用于各种类型的图像处理装置和便携式装置、PC等中的图像处理程序的开发负担的目的,图像处理程序组34是这样的程序,将其开发为能够在前述各种类型的图像处理装置和诸如便携式装置、PC等的各种装置(平台)中通用。图像处理程序组34对应于本发明涉及的图像处理程序。由图像处理程序组34实现的图像处理装置构建执行图像处理的图像处理部,并且基于来自应用32的指令由所述图像处理部(将在后面描述细节)执行图像处理。图像处理程序组34为应用32提供用于指示图像处理部的构建的接口,该接口还用于指示由所构建的图像处理部执行图像处理。因此,当在内部执行图像处理的任意装置是新开发的装置时,仅开发应用32就可获得执行图像处理的程序。通过使用所述接口,应用32使图像处理程序组34执行该装置所需的图像处理。由于不再需要新开发实际执行图像处理的程序,所以可减轻开发负担。
如上所述,由图像处理程序组34实现的图像处理装置构建执行由应用32指示的图像处理的图像处理部,并且由构建的图像处理部执行图像处理。因此,即使在例如作为图像处理的对象的图像数据的色彩空间或每像素比特数不固定或者内容、过程、参数由于应用32指示重建图像处理部而不固定的情况下,也可根据处理的图像数据等灵活地改变由图像处理装置(图像处理部)执行的图像处理。
在下文中将描述图像处理程序组34。如图1所示,图像处理程序组34被宽泛地分为模块库36、对应于构建部的处理构建部42的程序、以及处理管理部46的程序。处理构建部42基于来自应用的指令构建图像处理部50。如图5所示,图像处理部50由一个或更多个图像处理模块38和缓冲器模块40构成。它们以管线形式或有向无环图(DAG)形式连接在一起。图像处理模块38执行图像处理。缓冲器模块40存储图像数据,缓冲器模块40布置在各图像处理模块38的前一级和后一级中的至少一级。
构成图像处理部50的各图像处理模块自身是由CPU 12执行的第一程序或由CPU 12执行的第二程序,所述第一程序用于使CPU 12执行预定的图像处理,所述第二程序用于指示执行针对未在图1中示出的外部图像处理装置(例如专用图像处理卡等)的处理。图像处理模块38的分别执行不同的图像处理(例如,输入处理、滤波处理(filter processing)、色彩转换处理、放大/缩小处理、斜交角检测处理、图像旋转处理、图像合成处理、输出处理等)的多种程序分别登记在模块库36中。在下文中,为了简化解释,将给出构成图像处理部50的各单独的图像处理模块自身为前述第一程序的情况的描述。
如图15A所示,各图像处理模块38由图像处理引擎38A和控制部38B构成。图像处理引擎38A每预定单位处理数据量地对图像数据执行图像处理。控制部38B执行与位于该图像处理模块38的前一级和后一级的模块的图像数据的输入和输出,并控制图像处理引擎38A。根据图像处理引擎38A执行的图像处理的类型等,从任意数量的字节(诸如图像的一行、图像的多行、图像的一个像素、一幅图像(整幅图像)等)中预先选择并设置各图像处理模块38的单位处理数据量。例如,在执行色彩转换处理和滤色处理的图像处理模块38中,单位处理数据量是一个像素。在执行放大/缩小处理的图像处理模块38中,单位处理数据量是图像的一行或图像的多行。在执行图像旋转处理的图像处理模块38中,单位处理数据量是图像的一整幅图像。在执行图像压缩/解压缩处理的图像处理模块38中,单位处理数据量是N个字节,其取决于执行环境。
在其中图像处理的类型相同但是所执行的图像处理的内容不同的图像处理模块38也被登记在模块库36中。(在图1中,这些类型的图像处理模块被标示为“模块1”和“模块2”)。例如,对于执行放大/缩小处理的图像处理模块38,存在多个图像处理模块38,诸如通过将每隔一个像素去掉而将输入的图像数据缩小50%的执行缩小处理的图像处理模块38以及按照为输入的图像数据指定的放大/缩小率执行放大/缩小处理的图像处理模块38等。此外,例如,对于执行色彩转换处理的图像处理模块38,存在将RGB色彩空间转换成CMY色彩空间的图像处理模块38、以相反方式进行转换的图像处理模块38和执行另一色彩空间转换(诸如L*a*b*空间等)的图像处理模块38等。
为了输入所需的图像数据量以在图像处理引擎38处执行处理,控制部38B从其自身模块(当前模块)的前一模块(例如缓冲器模块40)以单位读取数据量为单位获取图像数据,并将从图像处理引擎38A输出的图像数据以单位写入数据量为单位输出到后一模块(例如缓冲器模块40)。
如果在图像处理引擎38A中不执行涉及数据量增加或减少的图像处理(诸如压缩等),则单位写入数据量等于单位处理数据量。或者,控制部38B执行将由图像处理引擎38A进行的图像处理的结果输出到其自身模块的外部的处理(例如,如果图像处理引擎38A执行图像分析处理(诸如斜交角检测处理等),则可输出图像分析处理的结果(诸如检测斜交角的结果等)取代图像数据)。在其中图像处理引擎38A所执行的图像处理的类型和内容相同但是前述单位处理数据量或单位读取数据量或单位写入数据量不同的图像处理模块38也登记在模块库36中。例如,虽然先前提到执行图像旋转处理的图像处理模块38的单位处理数据量是一整幅图像,但是在模块库36中也可包括执行相同的图像旋转处理而其单位处理数据量为图像的一行或图像的多行的图像处理模块38。
在模块库36中登记的各图像处理模块38的程序由对应于图像处理引擎38A的程序和对应于控制部38B的程序构成。对应于控制部38B的程序被制成部件(part)。不管在图像处理引擎38A执行的图像处理的类型和内容如何,在多个单独的图像处理模块38之中,对于单位读取数据量和单位写入数据量相同的图像处理模块38,对应于控制部38B的程序是通用的(相同的程序被用作对应于控制部38B的程序)。这样,减少了开发图像处理模块38的程序的开发负担。
在多个图像处理模块38之中,存在这样的图像处理模块,输入的图像的属性未知,单位读取数据量和单位写入数据量不固定,并且获得了输入图像数据的属性,通过执行将获得的属性带入预定的算术运算公式的算术运算,而固定单位读取数据量和单位写入数据量。
对于此类型的图像处理模块38,满足使用相同的算术运算公式推导单位读取数据量和单位写入数据量的图像处理模块38通用对应于控制部38B的程序。
此外,图像处理程序组34可以实现在如上所述的各种类型的装置中。在图像处理程序组34之中,登记在模块库36中的图像处理模块38的数量和类型等当然可根据其中实现有图像处理程序组34的装置所要求的图像处理而适当添加、删除、替换等。
如图15B所示,构成图像处理部50的各缓冲器模块40由缓冲器40A和缓冲器控制部40B构成。缓冲器40A由内存区构成,该内存区通过操作系统30从计算机10设置的内存14中保留(reserve)。缓冲器控制部40B执行与位于该缓冲器模块40的前一级和后一级的模块的图像数据的输入和输出,并且对缓冲器40A进行管理。各缓冲器模块40的缓冲器控制部40B自身也是由CPU 12执行的程序,缓冲器控制部40B的程序也登记在模块库36中(在图1中,缓冲器控制部40B的程序被标示为“缓冲器模块”)。
构建由应用32指示的图像处理部50的处理构建部42由如图1所示的多种类型的模块生成部44构成。该多种类型的模块生成部44对应于彼此不同的图像处理,并且通过由应用32启动而执行从图像处理模块38和缓冲器模块40中生成用于实现对应的图像处理的模块组的处理。
图1示出了与登记在模块库36中的单独的图像处理模块38执行的图像处理的类型相对应的模块生成部44,作为模块生成部44的示例。对应于单独的模块生成部44的图像处理可以是由多种类型的图像处理模块38实现的图像处理(例如,由斜交角检测处理和图像旋转处理构成的偏斜校正处理)。在所需的图像处理是组合了多种类型的图像处理的处理的情况下,应用32顺序启动对应于所述多种类型的图像处理的某一种的模块生成部44。这样,执行所需图像处理的图像处理部50由应用32顺序启动的模块生成部44构建。
如图1所示,处理管理部46包括工作流管理部46A,其控制图像处理部50对图像处理的执行;资源管理部46B,其管理计算机10的内存14和资源的使用;和错误管理部46C,其管理图像处理部50处出现的错误。图像处理部50工作而并行地执行图像处理,同时以小于一整幅图像的数据量为单位将图像数据发送到后一级(这被称为块单位处理)。此外,部50这样工作,在前一图像处理模块38完成了对一整幅图像的图像数据的图像处理后,后一图像处理模块38才执行对该一整幅图像的图像数据的图像处理(这被称为整幅图像处理)。作为工作流管理部46A的程序,存在使图像处理部50执行块单位处理的程序,以及使图像处理部50执行整幅图像处理的程序。
接下来将描述本实施例的操作。当打开计算机10的电源时,资源管理部46B启动,资源管理部46B如图2A所示执行初始化处理。
在本实施例中,有三种类型的管理方法作为资源管理部46B管理内存的方法,可选择和设置由这些管理方法中的哪个来执行内存管理。第一个是第一管理方法,每次有来自图像处理部50的单独模块的请求时,该方法通过操作系统30从内存14中保留分配给作为请求源的模块的内存区。第二个是第二管理方法,该方法通过操作系统30预先从内存14中保留给定大小的内存区,当有来自单独模块的请求时将预先保留的所述内存区的部分区域分配给作为请求源的模块。第三个是第三管理方法,该方法通过操作系统30预先从内存14中保留给定大小的内存区,当有来自单独模块的请求时,如果请求的内存区的大小小于阈值,则将预先保留的所述内存区的部分区域分配给作为请求源的模块,如果请求的内存区的大小大于或等于阈值,则通过操作系统保留分配给作为请求源的模块的内存区。应该注意,本发明不限于此,也可以使用其它的内存管理方法。
例如,如下地选择这些管理方法。第一管理方法尤其适合于这些情况诸如该方法被没有内存限制等的应用程序使用或者期望抑制由于复杂的内存管理而引起的程序大小的增加等。此外,第二管理方法适合于这种情况根据本发明执行图像处理的整个应用可使用的内存量有限,并且需要在此范围内工作。另一方面,第三管理方法适合于这种情况必须使保留和释放存储器所需的处理时间为高速,这是因为在保留和释放短期内存区时使用操作系统30的内存保留/释放功能会增加开销。
在图2A所示的初始化处理的步骤100中,判断选择并设定的内存管理方法是否是第二管理方法或第三管理方法。在将图像处理程序组34实现到计算机10之中时可选择并设定内存管理方法。或者,资源管理部46B可获得计算机10的系统环境(例如,内存14的大小、或其中实现有图像处理程序组34的装置的类型等),可基于获得的系统环境自动选择并设置内存管理方法。如果内存管理方法是第一管理方法,则前述判断结果是否定的,初始化处理结束。但是如果该判断结果是肯定的,则程序继续运行到步骤102,在步骤102,通过操作系统30从设置在计算机10上的内存14中保留预定大小的内存区(连续的区域),程序结束。同样可根据系统环境等选择并设置前述的预定大小。
这里,如果内存管理方法是第一管理方法,则响应于其后生成的内存保留请求,保留通过操作系统30请求的内存区,类似地,响应于内存释放请求,通过操作系统释放该内存区。由于这些处理与通常的程序中使用的处理类似,所以省略对其的解释。
如果内存管理方法是第二管理方法,则响应于其后生成的内存保留请求,从在先前步骤102中预先保留的内存区中状态为“未使用”的未使用区中搜索并保留对应于该请求的大小的内存区。将保留的内存区的状态改成“已使用”,并将保留的内存区传递给请求源。对于内存释放请求,被请求释放的内存区被并入预先保留的内存区的未使用区,执行处理将并入的内存区的状态从“已使用”改为“未使用”。例如,通过表或链表等,可管理表示内存区的状态是未使用还是已使用的信息。
接下来,将描述第三管理方法。当生成了内存保留请求时,资源管理部46B执行如图2B所示的针对内存保留请求的处理。在对内存保留请求的处理中,在步骤104中,判断请求的大小是否小于或等于预先设置的阈值。如果请求的大小不小于也不等于该阈值,则在步骤106中,以与第一管理方法相同的方式,通过操作系统30保留请求的大小的内存区,在步骤108中,将保留的内存区的头地址登记在资源管理部46B的表中。可使用另一方式(诸如列表或关联数组等)代替表。如果在步骤104中判断出请求的大小小于或等于阈值,则以与第二管理方法相同的方式,从在先前的步骤102中预先保留的内存区的未使用区中保留请求的大小的内存区(步骤110),将保留区的状态改为“已使用”(步骤112)。然后,在步骤114中,保留的内存区被传递给请求源。
此外,在第三管理方法中,当生成了内存释放请求时,资源管理部46B执行如图2C所示的对内存释放请求的处理。在对内存释放请求的处理中,在步骤116中,判断在前述表中是否登记有被请求释放的内存区的头地址。如果步骤116中的判断结果是肯定的,则被请求释放的内存区是通过操作系统30保留的内存区。因此,在步骤118中,通过操作系统30释放被请求释放的内存区,在下一步骤120中,从前述表中删除所请求释放的内存区的头地址。此外,如果步骤116中的判断结果是否定的,则请求释放的内存区是从在先前的步骤102中预先保留的内存区中保留的内存区。因此,在步骤122中将被请求释放的内存区并入先前保留的内存区的未使用区,并在步骤124中将并入的内存区的状态改为“未使用”。在这些处理之后,在步骤126中,通知给请求源释放了所请求的内存区,针对内存释放请求的处理结束。
接下来,将给出向资源管理部46B请求内存之外的资源(例如特定文件等)的保留/释放的情况的解释。当输入了资源保留请求时,资源管理部46B执行图2D示出的针对资源保留请求的处理。在针对资源保留请求的处理中,在步骤130中,通过操作系统30保留被请求保留的资源。在下一步骤132中,将保留的资源的地址登记在资源管理部46B的表中,与识别作为请求源的模块的信息相对应。在步骤134中,将保留的资源传递给请求源,处理结束。此外,当输入资源释放请求时,资源管理部46B执行图2E示出的针对资源释放请求的处理。在针对资源释放请求的处理中,在步骤136中,读取与识别作为请求源的模块的信息相对应地登记在资源管理部46B的表中的信息(保留的资源的地址)。在下一步骤138中,通过操作系统30释放由读取的信息表示的所有资源。此外,在步骤140中,这样更新表,即,从表中删除与释放的资源相对应的信息。在下一步骤142中,通知请求源释放了资源,处理结束。
这样,在内存之外的资源的保留/释放中,在保留时,将保留的资源登记在表中,在释放时,将登记在表中的资源(根据来自相同请求源的请求而保留的资源)全部释放。因此,与其中资源释放请求源指定要释放的资源的方法相比,可确定地释放资源。在这些内存和资源保留/释放处理中,存在这样的情况在处理过程中,存在由资源不足等引起的处理失败。在这种情况下,需要诸如通知错误管理部46C等的处理。但是,为了简化解释,这里将省略对这种错误处理的描述。
另一方面,当在具有图像处理程序组34的装置处出现实现图像处理的情形时,特定的应用32检测该情形,并且由该应用32执行图3中示出的处理。有一些实现图像处理的情形的示例,其中,由用作图像数据供应部22的图像读取部读取图像,用户指示执行这样的作业由用作图像输出部24的图像记录部将图像记录为记录材料上的图像、或者将图像显示为用作图像输出部24的显示部上的图像、或者由用作图像输出部24的写入装置将图像数据写到记录介质上、或者由用作图像输出部24的发送/接收部发送图像数据、或者将图像数据存储在用作图像输出部24的图像存储部,或者是这样的情况,用户指示执行这样的作业对于由用作图像数据供应部22的接收部接收的图像数据或者存储在用作图像数据供应部22的图像存储部中的图像数据,执行前述的记录在记录材料上、显示在显示部上、写到记录介质中、发送、存储在图像存储部中的任何一个。此外,需要执行图像处理的情形不限于上述的那些,例如,其可以是在应用32可执行的处理的名字等根据用户的指示以列表的形式显示在显示器16上的状态下,用户选择了作为执行对象的处理的情况等。
当该情形出现时,必须如上所述地执行某些类型的图像处理。应用32首先识别提供要处理的图像数据的图像数据供应部22的类型(参照图3的步骤150)。当识别出的类型是缓冲区(内存14的部分区域)时(即,在图3的步骤152的判断结果为肯定的情况下),生成包括被标示为图像数据供应部22的缓冲区的缓冲器模块40(同样可参照图3的步骤154)。由缓冲器控制部40B执行后面将描述的缓冲器模块40的新生成。通过生成执行缓冲器模块40的缓冲器控制部40B程序的进程、线程或对象,生成缓冲器控制部40B。通过生成用作缓冲器40A的、由生成的缓冲器控制部40B保留的内存区,生成所述新生成。但是,是通过设置参数(所述参数使(缓冲器控制部40B)将指定的缓冲区识别为已被保留的缓冲器40A)并执行生成缓冲器控制部40B的处理,来实现步骤154中的缓冲器模块40的生成的。在这里生成的缓冲器模块40起图像数据供应部22的作用。
接下来,以与上述方式相同的方式,应用32识别图像输出部24(其用作被执行了图像处理的图像数据的输出目的地)的类型(参照图3的步骤156)。如果识别出的类型是缓冲区(内存14的部分区域)(即,如果图3的步骤158的判断结果是肯定的),则以与上述方式相同的方式生成缓冲器模块40,该缓冲器模块40包括被指定为图像输出部24的缓冲区(参照图3的步骤160)。在这里生成的缓冲器模块40起图像输出部24的作用。此外,应用32识别要执行的图像处理的内容,将要执行的图像处理分为与单独的模块生成部44相对应的等级的图像处理的组合,并判断为了实现要执行的图像处理所需的图像处理的类型以及单独的图像处理的执行顺序(参照图3的步骤162)。例如通过将前述类型的图像处理和单独的图像处理的执行顺序预先登记为与作业(可由用户指示其执行)的类型对应的信息,并由应用32读出与已指示了其执行的作业的类型相对应的信息,来实现所述判断。
然后,基于以上判断的图像处理的类型和执行的顺序,应用32启动对应于执行顺序中的第一个图像处理的模块生成部44(即,生成执行模块生成部44的程序的进程、线程或对象)。其后(参照图3的步骤164),应用32通知已启动的模块生成部44以下信息作为该模块生成部44生成模块组所需的信息输入模块识别信息,用于识别将图像数据输入到该模块组的输入模块;输出模块信息,用于识别该模块组将图像数据输出至的输出模块;输入图像属性信息,表示被输入到该模块组的输入图像数据的属性;和要执行的图像处理的参数,并且应用32指示生成相应的模块组(参照图3的步骤166)。
对于位于执行顺序的第一位的模块组,图像数据供应部22是前述输入模块。对于位于执行顺序的第二位或其后的模块组,前一级模块组的最后一个模块(通常是缓冲器模块40)是输入模块。此外,在位于执行顺序的最后一位的模块组,图像输出部24是前述输出模块,因此,图像输出部24被指定为输出模块。在其它的模块组,输出模块不固定。因此,当应用32未进行指定并且需要该指定时,由模块生成部44生成并设置输出模块。此外,例如可以将输入图像属性和图像处理的参数预先登记为与可由用户指定执行的作业的类型相对应的信息,并且应用32通过读出与已指示其执行的作业的类型相对应的信息。或者可由用户指定输入图像的属性和图像处理的参数。
另一方面,当应用32启动了模块生成部44时,模块生成部44执行图4A中示出的模块生成处理(参照图3中的步骤168)。在该模块生成处理中,在步骤200中,在模块生成部44判断是否有接下来要生成的图像处理模块38。如果判断结果是否定的,则模块生成处理结束。如果存在要生成的图像处理模块38,则在步骤202中,模块生成部44获得表示输入图像数据的属性的输入图像属性信息。在下一步骤204中,模块生成部44还考虑到在步骤202中获得的信息表示的输入图像数据的属性,判断是否有必要生成在前面的步骤200中已判断为要生成的图像处理模块38。
具体地,例如,对应于正在执行模块生成处理的模块生成部44是生成用于执行色彩转换处理的模块组的模块生成部。应用32根据图像处理的参数将CMY色彩空间指定为输出图像数据的色彩空间。当基于在步骤202中获得的输入图像属性信息,输入图像数据是RGB色彩空间数据时,需要生成将RGB色彩空间转换为CMY色彩空间的图像处理模块38作为执行色彩空间处理的图像处理模块38。但是,当输入图像数据是CMY色彩空间时,针对该色彩空间,输入图像数据的属性和输出图像数据的属性匹配,因此可判断出不需要生成执行色彩空间转换处理的图像处理模块38。如果判断出不必生成图像处理模块38,则程序返回到步骤200。
当在所生成的图像处理模块38的前一级存在缓冲器模块40时,通过从图像处理模块38获得输出图像数据的属性,可实现获得输入图像数据的属性的处理。这里,所述图像处理模块38是自将图像数据写到该缓冲器模块40的图像处理模块38的更前面的图像处理模块38。
在下一步骤206中,判断在生成的图像处理模块38的后一级是否需要缓冲器模块40。在该图像处理模块38的后一级是输出模块(图像输出部24)的情况下(例如,参照在图5A至图5C中示出的图像处理部50的最后一级的图像处理模块38的情况),或者在所述图像处理模块是对图像数据执行诸如分析之类的图像处理并将其结果输出到另一图像处理模块38的模块的情况下(例如,图5B中示出的图像处理部50中执行斜交角检测处理的图像处理模块38的情况),所述判断结果是否定的,程序继续前进到步骤210而不生成缓冲器模块40。在上述情况之外的情况下,所述判断结果是肯定的,程序前进到步骤208,在步骤208,通过启动缓冲器控制部40B(即,生成执行缓冲器控制部40B的程序的进程、线程或对象),生成连接在图像处理模块38的后一级的缓冲器模块40。当模块生成部44(或者前述应用32)启动了缓冲器控制部40B时,执行图6所示的缓冲器控制处理。后面将描述该缓冲器控制处理。
在下一步骤210中,根据前级和后级的模块(例如这两个模块都是缓冲器模块40)的信息、处理参数和输入图像数据的属性生成图像处理模块38。
当在步骤206中判断出不需要后面的缓冲器模块40时,不向图像处理模块38提供后面的缓冲器模块40的信息。此外,在处理内容固定并且不需要特殊图像处理参数的情况下(例如50%的缩小处理的情况),不提供处理参数。
在模块生成处理(步骤210)中,从登记在模块库36中的多个候选模块中选择图像处理模块38,匹配在步骤202中获得的输入图像数据的属性和要在图像处理模块38中执行的处理参数。例如,当模块生成部44生成执行色彩转换处理的模块组时,应用32基于处理参数将CMY色彩空间指定为输出图像数据的色彩空间。此外,在此情况下,当输入图像数据是RGB色彩空间的数据时,图像处理模块38将RGB色彩空间转换为CMY色彩空间。如上所述,从登记在模块库36中并且执行各种类型的色彩空间处理的多种类型的图像处理模块38之中选择适合于所述处理的图像处理模块38。
此外,如果图像处理模块是执行放大/缩小处理的图像处理模块38并且指定的放大/缩小率不是50%,则选择按为输入的图像数据指定的放大/缩小率执行放大/缩小处理的图像处理模块38。如果指定的放大/缩小率为50%,则选择专门按50%的放大/缩小率执行放大/缩小处理的图像处理模块38,即,通过将每隔一个像素去掉而执行将输入的图像数据缩小50%的缩小处理的图像处理模块38。图像处理模块38的选择不限于以上描述。例如,可在模块库36中登记图像处理引擎38A进行的图像处理中的单位处理数据量不同的多个图像处理模块38,并根据诸如可分配给图像处理部50的内存区的大小之类的操作环境,选择适当的单位处理数据量的图像处理模块38(例如,前述大小越小,就选择越小的单位处理数据量的图像处理模块38等)。或者由应用32或用户选择图像处理模块38。
在下一步骤212中,将后面的缓冲器模块40的ID和生成的图像处理模块38的ID的组通知工作流管理部46A。这些ID是可用于唯一地区分这些单独的模块的信息。例如,该ID可以是按生成这些单独的模块的顺序应用的数字,或者可以是缓冲器模块40和图像处理模块38的对象在内存中的地址等。通知给工作流管理部46A的信息例如以如图4B所示的表的形式或者以列表的形式或者以关联数组的形式等保存在工作流管理部46A内,并且在后面的处理中使用。在下文中,将按照以表的形成保存所述信息的情况继续解释。
在如前所述的没有后面的缓冲器模块40的图像处理模块38的情况下,根据例如下面的方法执行处理。在生成的图像处理模块38是管线的终点或者有向无环图的终点之一的情况下(诸如执行图5A中的输出处理的图像处理模块38的情况),将该图像处理模块38作为模块生成部44的输出,返回给作为调用源的应用32。
此外,在执行诸如图5B中的斜交角检测处理的图像处理模块38的情况下,在该情况下,在该生成的图像处理模块38处的图像处理的结果在另一图像处理模块(执行图5B中的图像旋转处理的图像处理模块38)中使用,模块生成部44指示重复执行处理,直到关于该图像处理模块38的处理完成,并且模块生成部44获得处理结果。
当步骤212的处理结束时,控制返回步骤200,模块生成部44判断是否有接下来要生成的图像处理模块。单独的模块生成部44生成执行相应的给定图像处理的模块组。因此,通过针对各单独的模块生成部44预先登记并读出以何种连接关系生成何种图像处理模块相关的信息,或者通过在操纵模块生成部44的程序中对此进行描述,可实现所述判断。例如,在模块生成部44生成执行由多种类型的图像处理模块38实现的图像处理(例如倾斜校正处理,其由执行斜交角检测处理的图像处理模块38和执行图像旋转处理的图像处理模块38实现)的模块组的情况下,生成包含两个或更多个图像处理模块38的模块组。
当被指示生成模块组的模块生成部44向应用32通知完成了如上所述的模块组的生成时,应用32基于图3的步骤162中的判断结果,判断为了实现要求的图像处理,是否还需要生成执行其它图像处理的模块组。如果图像处理要求将多种类型的图像处理组合,则应用32启动对应于单独的图像处理的其它模块生成部44,并顺序执行给出模块组生成所需信息的通知的处理(同样可参照图3的步骤170和172)。然后,由于被顺序启动的模块生成部44顺序执行(参照图3的步骤174)上述模块生成处理(图4),所以按照图5A至图5C中示出的示例构造执行所要求的图像处理的图像处理部50。
根据本实施例,当执行特定图像处理的频率较高等时,即使在生成执行该特定图像处理的图像处理部50之后,应用32也不指示用于生成执行该特定图像处理的图像处理部50的多个模块生成部44结束处理,并将它们保持为进程、线程或对象。每次出现执行该特定图像处理的需要时,通过顺序指示保持为进程、线程或对象的模块生成部44生成模块组,可重新生成执行特定图像处理的图像处理部50。这样,每次出现执行特定图像处理的需要时,不需要用于分别启动相应的模块生成部44的处理,并且可缩短重新生成执行特定图像处理的图像处理部50所需的时间。
当被模块生成部44启动时,图像处理模块38的控制部38B(见图15A)执行图12示出的图像处理模块初始化处理。在该图像处理模块初始化处理中,首先在步骤250中,由于模块生成部44执行模块生成处理(图4)的步骤210的处理,所以控制部38B存储从模块生成部44提供的其自身模块的前一级和后一级的模块的信息。此外,在下一步骤252中,基于其自身模块的图像处理引擎38A执行的图像处理的类型和内容等,控制部38B识别其自身模块使用的内存的大小以及其自身模块使用的其它资源。其自身模块使用的内存主要是为了图像处理引擎38A执行图像处理所需要的内存。但是,在前面的模块是图像数据供应部22的情况下或者在后面的模块时图像输出部24的情况下,可能需要用作缓冲器的内存,该内存用于在从前一级和后一级模块接收数据或者向前一级和后一级模块发送数据时暂时存储图像数据。此外,在处理参数中包括表之类的信息的情况下,可能需要存储其的内存区。然后,在步骤254中,将在步骤252中识别的大小通知资源管理部46B,请求资源管理部46B保留该通知的大小的内存区。
在图2中示出的资源管理处理(资源管理部46B)中,当图像处理模块38和缓冲器模块40请求保留内存区时,在选择并设置的内存管理方法是例如第一管理方法的情况下,通过操作系统30从内存14中保留由作为内存保留请求源的模块通知的大小的内存区(连续区域)。然后,通过将保留的内存区的头地址通知给作为内存保留请求源的模块,将保留的内存区传递给作为内存保留请求源的模块。此外,如果内存管理方法是第二管理方法,则从预先保留的内存区的未使用区中保留通知的大小的内存区(连续区域),并且将保留的内存区改为“已使用”,将保留的内存区传递给内存保留请求源。而且,如果选择并设置的内存管理方法是第三管理方法,则通过执行上述针对内存保留请求的处理(见图2B),执行对通知的大小的内存区的保留和传递。
在图12显示的图像处理模块初始化处理(图像处理模块38的控制部38B)中,当通过上述处理经由资源管理部46B保留了所需的内存区时,在下一步骤256中,基于前面的步骤252的处理结果,判断其自身模块(的图像处理引擎38A)是否需要内存之外的资源。如果判断结果是否定的,则程序继续进行到步骤262而不执行任何处理。如果判断结果是肯定的,则程序继续进行到步骤258,在步骤258,将其自身模块所需的内存之外的资源的类型等通知给资源管理部46B,并且请求资源管理部46B保留通知的其它资源,资源管理部46B对它们进行保留。
接下来,在步骤262中,控制部38B判断其自身模块的前面的模块,如果不存在其自身模块的前面的模块,则程序继续前进到步骤272。如果前面的模块不同于缓冲器模块40,例如是图像数据供应部22和特定文件等,则按需要在步骤270中执行其初始化处理,并且程序进行到步骤272。此外,在存在其自身模块的前面的模块并且该前面的模块是缓冲器模块40的情况下,程序从步骤262进行到步骤264,并且对从前面的缓冲器模块40读取一次图像数据而获得的图像数据的数据量(即,单位读取数据量)进行识别。如果其自身模块的前面的缓冲器模块40的数量为一,存在一单位读取数据量。但是,在诸如前面的缓冲器模块40为多个时并且图像处理引擎38A通过使用从该多个缓冲器模块40的每一个获得的图像数据来执行图像处理的情况下,诸如在图5C所示的图像处理部50中执行图像合成处理的图像处理模块38的情况下,根据其自身模块的图像处理引擎38A执行的图像处理的类型和内容、前面的缓冲器模块40的数量等,确定与各前面的缓冲器模块40相对应的单位读取数据量。
在步骤266中,通过将在步骤264中识别的单位读取数据量通知单个前面的缓冲器模块40,设置了针对该缓冲器模块40的单位读取数据量(还参照图15A的(1))。在下一步骤268中,判断是否在其自身模块的所有前面的缓冲器模块40处设置了单位读取数据量。如果其自身模块的前面的缓冲器模块40的数量是一,则该判断结果是肯定的,并且程序前进到步骤272。如果前面的缓冲器模块40的数量是多于一个,则在步骤268的判断结果是否定的,并且程序返回到步骤266,重复步骤266和268直到步骤268的判断结果变成肯定的。这样,为所有前面的缓冲器模块40分别设置了单位读取数据量。
在步骤272中,控制部38B判断其自身模块的后面的模块。在其自身模块的后面的模块不同于缓冲器模块40,例如是图像输出部24或特定文件等的情况下,按需要在步骤278中执行其初始化处理,并且程序继续进行到步骤280。例如,如果后面的模块是由图像记录部、显示部、写入部或发送部的任何一个构成的图像输出部24,则执行针对该图像输出部24的处理作为前述初始化处理。这里,所述处理通知以与单位写入数据量相对应的数据量为单位输出了图像数据。此外,如果后面的模块是缓冲器模块40,则在步骤274中识别写入一次图像数据的数据量(即,单位写入数据量)。在步骤276中,在后面的缓冲器模块中设置该单位写入数据量(还参照图15A的(2)),其后,程序继续进行到步骤280。在步骤280中,通知模块生成部44该图像处理模块初始化处理已完成,并且图像处理模块初始化处理结束。
另一方面,当模块生成部44或应用32启动构成图像处理部50的单独的缓冲器模块40的缓冲器控制部40B(见图15B)时,缓冲器控制部40B执行图6所示的缓冲器控制处理。在该缓冲器控制处理中,当模块生成部44或应用32启动缓冲器控制部40B并且已指示生成缓冲器模块40时,在步骤356中,等待的请求的数目被初始化为0。在下一步骤358中,判断其自身模块的前面的图像处理模块38是否通知了单位写入数据量或者其自身模块的后面的图像处理模块38是否已通知了单位读取数据量。如果判断结果是否定的,则程序继续进行到步骤362,在步骤362中,判断与其自身模块相连的所有图像处理模块38是否都已通知了单位写入数据量或单位读取数据量。如果判断结果是否定的,则程序返回步骤358,重复步骤358和362,直到步骤358或362的判断结果是肯定的。
当与其自身模块相连的特定的图像处理模块38通知了单位写入数据量或单位读取数据量时,步骤358中的判断结果是肯定的,程序进行到步骤360,在步骤360中,存储所通知的单位写入数据量或单位读取数据量。其后,程序返回到步骤358。因此,每次由于与其自身模块相连的单独的图像处理模块38的控制部38B执行图像模块初始化处理(图12)的步骤266或步骤276的处理而从单独的图像处理模块38通知了单位写入数据量或单位读取数据量时,都存储所通知的单位写入数据量或单位读取数据量,并且在缓冲器模块40设置通知的单位写入数据量或单位读取数据量(还参照图15B的(1)和(2))。
当与其自身模块相连的所有图像处理模块38都通知了图像写入数据量或图像读取数据量并且分别设置了所通知的单位写入数据量和单位读取数据量时,步骤362中的判断结果是肯定的,程序继续进行到步骤364。在步骤364中,基于与其自身模块相连的单独的图像处理模块38分别设置的单位写入数据量和单位读取数据量,缓冲器控制部40B确定作为其自身模块的缓冲器40A的管理单位的单位缓冲区的大小,并存储所确定的单位缓冲区的大小。在其自身模块处设置的单位写入数据量和单位读取数据量的最大值适合于单位缓冲区的大小。但是,可将单位写入数据量设置为单位缓冲区的大小,或者可将单位读取数据量(在多个图像处理模块连接在其自身模块的后一级的情况下,为由单独的图像处理模块38分别设置的单位读取数据量的最大值)设置为单位缓冲区的大小。或者,可设置单位写入数据量和单位读取数据量(的最大值)的最小公倍数。或者,如果该最小公倍数小于预定值,则可设置该最小公倍数,否则如果该最小公倍数大于或等于预定值,则可将另一值(例如,前述单位写入数据量和单位读取数据量的最大值、或者单位写入数据量、或者单位读取数据量(的最大值)中的任何一个)设置为单位缓冲区的大小。
在下一步骤366中,缓冲器控制部40B判断是否已提供了用作其自身模块的缓冲器40A的内存区。如果其自身模块是由模块生成部44生成的,则该判断结果是否定的,并且在步骤368中将缓冲器标志设置为0。其后,程序继续进行到步骤374。此外,如果其自身模块是由应用32生成的并且是起图像数据供应部22和图像输出部24的作用的缓冲器模块40,则用作其自身模块的缓冲器40A的内存区已经存在。因此,步骤366的判断结果是肯定的,并且程序继续进行到步骤370。在步骤370中,将在先前的步骤364中确定的单位缓冲区的大小改变为建立的内存区的大小,该建立的内存区被用作其自身模块的缓冲器40A。此外,在下一步骤372中,将缓冲器标志设置为1,其后,程序继续进行到步骤374。
在步骤374中,缓冲器控制部40B生成与其自身模块的单独的后面的图像处理模块38相对应的各个有效数据指针,并初始化各生成的有效数据指针。有效数据指针分别指示由前面的图像处理模块写入其自身模块的缓冲器40A中的图像数据之中没有被相应的后面的图像处理模块38读取的图像数据(有效数据)的头位置(下一读取起始位置)和结束位置。在步骤374的初始化处理中,通常设置特定信息,该特定信息意味着有效数据不存在。如果其自身模块是由应用32生成的并且是起图像提供部22的作用的缓冲器模块40,则存在这样的情况作为图像处理的对象的图像数据已被写入用作其自身模块的缓冲器40A的内存区中。在这种情况下,将该图像数据的头位置和结束位置分别设置为与单独的后面的图像处理模块38相对应的有效数据指针。
如上所述,缓冲器模块40的初始化处理完成,在下一步骤376中,通知工作流管理部46A初始化处理完成。此外,在步骤378中,判断是否设置了大于0的值,作为针对在先前的步骤356中为其执行了初始设置的等待请求的数目。如果判断结果是否定的,则程序继续进行到步骤380。判断是否已从连接在其自身模块的前一级或后一级的图像处理模块38接收到删除通知,该删除通知给出要执行删除图像处理模块38的处理的通知。如果该判断结果也是否定的,则程序返回到步骤378,重复步骤378和步骤380,直到任一判断为肯定的。
另一方面,当由于由模块生成部44进行的上述模块生成处理(见图4)而完成了执行所需的图像处理的图像处理部50的构建时,应用32判断图像处理的执行形式是块单位处理还是整幅图像处理。然后,通过启动执行与判断出的执行形式相对应的工作流管理部46A的程序的进程、线程或对象,应用32指示工作流管理部46A执行图像处理部50的图像处理(还参照图3的步骤176)。
根据图像处理的执行形式启动不同的程序。当图像处理的执行形式是块单位处理时,处理管理部46的工作流管理部46A执行图16所示的块单位控制处理。此外,当图像处理的执行形式是整幅图像处理时,46A执行图17所示的整幅图像处理。块单位处理和整幅图像控制处理分别对应于图3的步骤178中示出的图像处理部控制处理。在块单位处理或整幅图像控制处理中,由于工作流管理部46A将处理请求输入到构成图像处理部50的图像处理模块38之中的预定的图像处理模块38,所以以块单位或整幅图像的执行形式执行图像处理部50的图像处理。
在下文中,在描述图像处理部50的整体操作之前,将按顺序描述在由单独的缓冲器模块40的缓冲器控制部40B执行的初始化处理完成之后的处理、和由单独的图像处理模块38的控制部38B执行的图像处理模块控制处理。
在本实施例中,在图像处理模块38将图像数据写到后面的缓冲器模块40的情况下,从图像处理模块38将写入请求输入到缓冲器模块40。在图像处理模块38从前面的缓冲器模块40读取图像数据的情况下,从图像处理模块38将读请求输入到缓冲器模块40。因此,当从其自身模块的前面的图像处理模块38输入写入请求时,或者当从其自身模块的后面的图像处理模块38输入数据请求时,由于出现中断,所以缓冲器模块40的缓冲器控制部40B执行图7所示的请求接收中断处理。应该注意到,在下文中,给出了以出现中断为前提的描述,但是,也可像通常的程序那样,处理因方法或函数的调用而开始。在此情况下,可使用为各请求执行处理的结构,而请求不像后面的描述那样在队列中排队。
在请求接收中断处理中,首先,在步骤400中,在队列的尾部登记识别将写入请求或数据请求输入到其自身模块的请求源的请求源识别信息和表示请求的类型(写入或读取)的请求类型信息作为请求信息。在分配给单独的缓冲器模块40的内存上分别形成这些队列。此外,在下一步骤402中,将等待请求的数量加一,请求接收中断处理结束。由于该请求接收中断处理,每次从特定缓冲器模块40的前一级或后一级的图像处理模块将写入请求或读请求输入到该特定缓冲器模块40时,在对应于该特定缓冲器模块40的队列中顺序登记与输入的写入请求或读请求相对应的请求信息,并且等待请求的数量被逐个增加。
当由于执行上述请求接收中断处理而使等待请求的数量变成大于或等于1的值时,缓冲器控制处理(图6)的步骤378的判断结果是肯定的,程序继续进行到步骤382,在步骤382中,从队列头取出请求信息。在下一步骤384中,基于在步骤382中取出的请求信息中包括的请求类型信息,判断与取出的请求信息相对应的请求的类型(写入或读取),程序根据该判断的结果而分支。如果请求类型是写入请求,则程序从步骤384继续进行到步骤386,执行图8所示的数据写入处理。
在数据写入处理中,首先,在步骤410,判断缓冲器标志是否设置为1,即,其自身模块(当前模块)是否是由应用32生成的缓冲器模块40。如果该判断结果是肯定的,则因为已经保留了用作缓冲器40A的内存区,所以程序继续进行到步骤422而不执行任何处理。如果步骤410中的判断结果是否定的,即,如果其自身模块是由模块生成部44生成的缓冲器模块40,则程序进行到步骤412。在步骤412中,判断在构成其自身模块的缓冲器40A的单位缓冲区中是否存在具有空闲空间区域的单位缓冲区(图像数据没有写至其末端的单位缓冲区)。
在由模块生成部44生成的缓冲区40,最初并没有保留用作缓冲器40A的内存区(单位缓冲区),而是每次内存区出现不足时作为单位保留单位缓冲区。因此,当将写入请求第一次输入到缓冲器模块40时,用作缓冲器40A的内存区(单位缓冲区)并不存在,因而该判断结果将是否定的。此外,在通过后面将描述的处理保留了用作缓冲器40A的单位缓冲区之后,在将图像数据写到单位缓冲区时该单位缓冲区刚好变满的情况下,前述判断结果同样将是否定的。
如果步骤412中的判断结果是否定的,则程序继续进行到步骤414。在步骤414中,基于从队列取出的请求信息中包括的请求源识别信息来识别作为写入请求源的图像处理模块38,并且识别由作为写入请求源的图像处理模块38设置的单位写入数据量,其后,判断该所识别的单位写入数据量是否大于在先前的步骤364(图6)中确定的单位缓冲区的大小。在采用在其自身模块设置的单位写入数据量和单位读取数据量的最大值的情况下,或者采用在其自身模块设置的单位写入数据量的情况下,该判断将总是否定的,程序继续进行到步骤420。在步骤420中,将要保留的内存区的大小(单位缓冲区的大小)通知给资源管理部46B,向资源管理部46B请求保留用作其自身模块的缓冲器40A的内存区(在存储图像数据时使用的单位缓冲区)。这样,由于先前描述的由资源管理部46B执行的步骤104至步骤114(见图2B)的处理,保留了单位缓冲区。
此外,在构成其自身模块的缓冲器40A的单位缓冲区之中存在具有空闲空间区域的单位缓冲区的情况下,步骤412中的判断结果是肯定的,程序继续进行到步骤416。在步骤416中,以与上述步骤414相同的方式,识别由作为写入请求源的图像处理模块38设置的单位写入数据量,其后,判断在该具有空闲空间区域的单位缓冲区中的空闲空间区域的大小是否大于或等于所识别出的单位写入数据量。如果该判断结果是肯定的,则不需要新保留用作其自身模块的缓冲器40A的单位缓冲区,因此,程序继续进行到步骤422而不执行任何操作。
如果单位缓冲区的大小是单位写入数据量的整数倍,则每次从其自身模块的前面的图像处理模块38输入写入请求时,如上所述,步骤412、414的判断结果都是否定的或者步骤412、416的判断结果都是肯定的,并且仅按需要保留用作缓冲器40A的单位缓冲区。
另一方面,在单位缓冲区的大小不是单位写入数据量的整数倍的情况下,通过重复地将单位写入数据量的图像数据写到缓冲器40A(单位缓冲区),如还在图9A中作为示例示出的状态出现,在该状态中,具有空闲空间区域的单位缓冲区的空闲空间区域的大小小于单位写入数据量(步骤416的判断结果是否定的)。此外,在本实施例中,还可采用在其自身模块设置的单位读取数据量(或者其最大值)作为单位缓冲区的大小。但是,如果其大小小于单位写入数据量(即,如果步骤414的判断结果是肯定的),则当输入写入请求时总是出现前述状态。
如上所述,在具有空闲空间区域的单位缓冲区中的空闲空间区域的大小小于单位写入数据量的情况下,写入了单位写入数据量的图像数据的区域跨越多个单位缓冲区。但是,在本实施例中,因为以单位缓冲区为单位来保留用作缓冲器40A的内存区,所以不可能确保在不同时间保留的单位缓冲区是在实际内存区(内存14)上连续的区域。因此,在写入了图像数据的区域跨越多个单位缓冲区的情况下,即,在步骤416的判断结果是否定的或者步骤414的判断结果是肯定的的情况下,程序继续进行到步骤418。在步骤418中,将单位写入数据量通知给资源管理部46B作为要保留的内存区的大小,并向资源管理部46B请求保留用于写入的内存区(用于写入的缓冲区参照图9B)。然后,当保留了用于写入的缓冲区时,在下一步骤420中,执行对用作缓冲器40A的单位缓冲区的保留。
在步骤422中,如果具有空闲空间区域的单位缓冲区中的空闲空间区域的大小大于或等于单位写入数据量,则使该空闲空间区域成为写入区。另一方面,如果具有空闲空间区域的单位缓冲区中的空闲空间区域的大小小于单位写入数据量,则使新保留的用于写入的缓冲区成为写入区,将该写入区的头地址通知给作为写入请求源的图像处理模块38,并要求该图像处理模块38从通知的头地址起按顺序写入作为写入的对象的图像数据。这样,作为写入请求源的图像处理模块38将图像数据写到已通知了其头地址的写入区(单位缓冲区或用于写入的缓冲区)(见图9B)。如上所述,如果写入了图像数据的区域跨越多个单位缓冲区,则分开保留用于写入的缓冲区。因此,不管写入了图像数据的区域是否跨越多个单位缓冲区,仅仅通过如上所述给出写入区的头地址的通知就可实现写入区向作为写入请求源的图像处理模块38的通知,并且与图像处理模块38的接口将会简单。
在下一步骤424中,判断前面的图像处理模块38是否完成了图像数据向写入区的写入,重复步骤424直到判断结果是肯定的。当前面的图像处理模块38给出了写入完成通知时,步骤424的判断结果是肯定的,并且程序继续进行到步骤426。在步骤426中,判断上述写入处理中的写入区是否是在先前的步骤416中保留的用于写入的缓冲区。如果该判断结果是否定的,则程序进行到步骤432而不执行任何处理。如果步骤426的判断结果是肯定的,则程序进行到步骤428。在步骤428中,如图9C中作为示例所示出的,复制写入了用于写入的缓冲区的图像数据,状态为所述图像数据在具有空闲空间区域的单位缓冲区和在先前的步骤422中保留的新的单位缓冲区之间进行划分。此外,在步骤430中,将在先前的步骤418中作为用于写入的缓冲区而保留的内存区的头地址通知给资源管理部46B,并且请求资源管理部46B释放该内存区。
这里,给出对这样的实施例的解释,在该实施例中,当需要时保留用于写入的缓冲区,当不再需要时立刻释放该用于写入的缓冲区。但是,在用于存储的单位缓冲区的大小不是单位写入数据量的整数倍时,用于写入的缓冲区是绝对必要的。因此,可以使用这样的结构,其中,在初始化时保留该结构,在删除缓冲器模块40时释放该结构。
当图像处理模块38和缓冲器模块40请求释放内存区时,资源管理部46B执行与选择设置的内存管理方法相对应的释放存储器的处理。例如,如果内存管理方法是第三管理方法,则执行图2C的针对内存释放请求的处理,并执行内存区的释放。
在数据写入处理(图8)中,当步骤426中的判断结果为否定的时候,或者当在步骤430中请求释放存储器之后资源管理部46B给出了释放完成通知时,程序继续进行到步骤432。在步骤432中,在与其自身模块的单独的后面的图像处理模块38相对应的有效数据指针之中,分别更新表示有效数据的末端位置的指针(参照图9C)。通过将由指针指示的有效数据的末端位置向后移动对应于单位写入数据量的量来实现指针的更新。在由其自身模块的前面的图像处理模块38此次写入的图像数据是与作为处理对象的图像数据的末端相对应的数据的情况下,当由前面的图像处理模块38进行的写入处理完成时,给出整个处理结束通知,该通知表示作为处理对象的图像数据已结束,并且从前面的图像处理模块38输入写入的图像数据的大小。
因此,在当写入处理完成时从前面的图像处理模块38输入整个处理结束通知的情况下,通过将有效数据的末端位置向后移动与同时通知的大小相对应的量来执行指针更新。
在下一步骤434中,基于在完成写入处理时是否输入了整个处理结束通知,判断作为处理对象的图像数据到缓冲器40A的写入是否完成。如果该判断结果是否定的,则程序继续进行到步骤438而不执行任何处理。但是,如果该判断是肯定的,则程序进行到步骤436,在步骤436中,将数据最终位置信息(其表示这是作为处理对象的图像数据的末端)添加到在步骤432中更新的指针(在与其自身模块的单独的后面的图像处理模块38相对应的有效指针之中,该指针示出了有效数据的末端位置)。其后,程序进行到步骤438。然后,在步骤438中,将等待请求的数量减1,数据写入处理结束,程序返回到缓冲器控制处理(图6)的步骤378。
在缓冲器控制处理(图6)中,在与步骤382中取出的请求信息相对应的请求类型是读取的情况下,程序从步骤384进行到步骤388,执行图10所示的数据读取处理。在数据读取处理中,首先,在步骤450中,基于从队列取出的请求信息中包括的请求源识别信息,识别作为读取请求源的图像处理模块38,并识别由作为读取请求源的图像处理模块38设置的单位读取数据量。基于与作为读取请求源的图像处理模块38相对应的有效数据指针,识别与作为读取请求源的图像处理模块38相对应的有效数据在缓冲器40A上的头位置和末端位置。
在下一步骤452中,基于在步骤450中识别的有效数据的头位置和末端位置,判断与作为读取请求源的图像处理模块38相对应的有效数据(可由作为读取请求源的图像处理模块38读取的图像数据)是否大于或等于单位读取数据量。
如果该判断结果是否定的,则程序继续进行到步骤454,在步骤454中,判断有效数据的末端是否是作为处理对象的图像数据的末端,其中,有效数据存储在缓冲器40A中,并且可被作为读取请求源的图像处理模块38读取。
步骤452或步骤454中的判断结果是肯定的,在此情况下程序进行到步骤456。这样的情况的一个示例是与作为读取请求源的图像处理模块38相对应的有效数据存储在缓冲器40A中,所述有效数据的量大于或等于单位读取数据量。这样的情况的另一示例是虽然存储在缓冲器40A中并与作为读取请求源的图像处理模块38相对应的有效数据小于单位读取数据量,但是该有效数据的末端是作为处理对象的图像数据的末端。在步骤456中,基于在先前的步骤450中识别的有效数据的头位置,识别单位缓冲区(该单位缓冲区存储有效数据的头部的图像数据)。此外,通过判断识别出的单位缓冲区中存储的有效数据的数据量是否大于或等于在步骤450中识别的单位读取数据量,来判断作为此次读取对象的有效数据是否跨越多个单位缓冲区。
如果步骤456的判断结果是否定的,则程序进行到步骤462而不执行任何处理。这里,如图11A所示,例如,在存储有效数据的头部图像数据的单位缓冲区中存储的有效数据的数据量小于单位读取数据量并且作为此次读取对象的有效数据跨越多个单位缓冲区的情况不限于作为此次读取对象的有效数据被存储在实际存储器(内存14)上连续的区域中。因此,如果步骤456中的判断结果是肯定的,则程序继续进行到步骤460,在步骤460中,将与作为读取请求源的图像处理模块38相对应的单位读取数据量通知给资源管理部46B作为要保留的内存区的大小,并且向资源管理部46B请求保留在读取中使用的内存区(用于读取的缓冲区,见图11B)。当保留了用于读取的缓冲区时,在下一步骤460中,将作为读取对象并且存储在多个单位缓冲区上的有效数据复制到在步骤458中保留的用于读取的缓冲区(还参照图11B)。
在步骤462中,如果将作为读取对象的有效数据存储在单个单位缓冲区中,则使得该单位缓冲区之中的存储有作为读取对象的有效数据的区域成为读取区域。另一方面,如果作为读取对象有效数据存储在多个单位缓冲区上,则将用于读取的缓冲区用作读取区,将该读取区的头地址通知给作为读取请求源的图像处理模块38,并且要求该图像处理模块38从通知的头地址起按顺序读取图像数据。这样,作为读取请求源的图像处理模块38执行从已通知了其头地址的读取区(单位缓冲区或用于读取的缓冲区)读取图像数据(还见图11C)。在作为读取对象的有效数据是与作为处理对象的图像数据的末端相对应的数据的情况下(即,在作为读取对象的有效数据的末端位置与由有效数据指针所指示的有效数据的末端位置重合的情况下(所述有效数据指针与作为读取请求源的图像处理模块38相对应,并且数据最终位置信息被加到该指针)),还将作为读取对象的有效数据的大小以及这是作为处理对象的图像数据的末端这一事实通知给作为读取请求源的图像处理模块38。
如上所述,在作为读取对象的有效数据被存储为跨越多个单位缓冲区的情况下,将作为读取对象的有效数据复制到分开保留的用于读取的缓冲区。因此,不管作为读取对象的有效数据是否存储在多个单位缓冲区上,仅仅通过如上所述地给出读取区域的头地址的通知就可实现读取区域向作为读取请求源的图像处理模块38的通知,并且与图像处理模块38的接口将会简单。在其自身模块是由应用32生成的缓冲器模块40的情况下,用作缓冲器40A的内存区(单位缓冲区的集合)是连续区域。因此,以下是可能的在执行步骤456的判断之前,判断缓冲器标识是否为1,如果判断结果是肯定的,则不管作为读取对象的有效数据是否存储在多个单位缓冲区上,程序都继续进行到步骤462。
在下一步骤464中,判断作为读取请求源的图像处理模块38是否完成了图像数据从读取区中的读取,重复步骤464直到该判断结果成为肯定的。当作为读取请求源的图像处理模块38通知了读取完成时,步骤464的判断结果是肯定的,程序进行到步骤466,在步骤466中,判断上述读取处理中的读取区是否是在先前的步骤458中保留的用于读取的缓冲区。如果该判断结果是否定的,则程序继续进行到步骤470而不执行任何处理。如果步骤466中的判断是肯定的,则程序继续进行到步骤468,在步骤468中,将在先前的步骤458中作为用于读取的缓冲区保留的内存区的大小和头地址通知给资源管理部46B,并向资源管理部46B请求释放该内存区。同样,对于用于读取的缓冲区,与用于写入的缓冲区方式相同,如果用于存储的单位缓冲区的大小不是单位读取数据量的整数倍,则用于读取的缓冲区是绝对必要的。因此,可以使用这样的结构,其中,在初始化时保留该结构,在删除缓冲器模块40时释放该结构。
在下一步骤470中,在与作为读取请求源的图像处理模块38相对应的有效数据指针之中,更新指示有效数据的头位置的指针(还参照图11C)。通过将由指针指示的有效数据的头位置向后移动对应于单位读取数据量的量可实现指针的更新。如果作为此次读取对象的有效数据是与作为处理对象的图像数据的末端相对应的数据,则通过将有效数据的头位置向后移动与作为此次读取对象的有效数据的大小(所述大小也被通知给作为读取请求源的图像处理模块38)相对应的量来执行指针更新。
在步骤472中,分别参照对应于单独的后面的图像处理模块38的有效数据指针,判断由于步骤470的指针更新,在构成缓冲器40A的单位缓冲区之中是否出现了各自的后面的图像处理模块38已全部完成了对其存储的图像数据的读取的单位缓冲区,即,是否出现了其中没有存储有效数据的单位缓冲区。如果该判断结果是否定的,则程序进行到步骤478而不执行任何处理。如果该判断结果是肯定的,则程序进行到步骤474,在步骤474中,判断缓冲器标志是否为1。如果其自身模块是由模块生成部44生成的缓冲器模块40,则判断结果是否定的并且程序进行到步骤476,在步骤476中,向资源管理部46B请求释放其中没有存储有效数据的单位缓冲区。
如果其自身模块是由应用32生成的缓冲器模块40,则步骤474中的判断结果是肯定的,并且程序继续进行到步骤478而不执行任何处理。因此,如果将由用户指定的缓冲区(内存区)用作缓冲器40A,则存储该缓冲区不释放。然后,在步骤478中,将等待请求的数量减1,数据读取处理结束,程序返回到缓冲器控制处理(图6)的步骤378。
另一方面,在存储在缓冲器40A中并且可被作为读取请求源的图像处理模块38读取的有效数据的数据量小于单位读取数据量,并且可读取的有效数据的末端不是作为处理对象的图像数据的末端的情况下(即,在图15B的(4)中检测到没有可读的有效数据的情况下),步骤452和454的判断结果都是否定的,程序继续进行到步骤480。在步骤480中,将请求新的图像数据的数据请求输出到工作流管理部46A(还见图15B中的(5))。在此情况下,工作流管理部46A将处理请求输入到其自身模块的前面的图像处理模块38。此外,在步骤482中,将在先前的步骤382(见图6)中从队列中取出的请求信息再次登记在原始队列的末端,并且数据读取处理结束。
如图6所示,当数据读取处理结束时,程序返回到步骤378。在此情况下,如果在队列中没有登记其它的请求信息,则在队列的末端再次登记的请求信息被从队列中立即再次取出,并且再次执行图10的数据读取处理。如果在队列中登记有其它请求信息,则取出该其它请求信息并执行与其对应的处理,其后,从队列中再次取出在队列的末端再次登记的请求信息并且再次执行图10的数据读取处理。因此,在输入了来自后面的图像处理模块38的读取请求但是可由作为读取请求源的图像处理模块38读取的有效数据的数据量小于单位读取数据量并且可读取的有效数据的末端不是作为处理对象的图像数据的末端的情况下,存储相应的请求信息,重复地执行数据读取处理,直到可读取的有效数据的数据量变得大于或等于单位读取数据量或者可读取的有效数据的末端就是作为处理对象的图像数据的末端(即,直到步骤452或步骤454的判断结果成为肯定的)。
尽管将在后面描述其细节,但是当从缓冲器模块40输入了数据请求时,工作流管理部46A将处理请求输入到作为数据请求源的缓冲器模块40的前面的图像处理模块38(还参照图15B中的(6))。由于由该处理请求的输入触发、并在前面的图像处理模块38的控制部38B执行的处理,所以当前面的图像处理模块38变得能够将图像数据写到缓冲器模块40时,由于从前面的图像处理模块38输入了写入请求,所以执行上述数据写入操作(图8),并且从前面的图像处理模块38将图像数据写到缓冲器模块40的缓冲器40A(还参照图15B的(7)、(8))。这样,后面的图像处理模块38执行图像数据从缓冲器40A中的读取(还参照图15B的(9))。
如上所述,在与本实施例相关的缓冲器控制处理中,每次从前面的图像处理模块38输入写入请求或者从后面的图像处理模块38输入读取请求时,将输入的请求登记在队列中作为请求信息,并从队列中逐个取出请求信息进行处理。因此,即使诸如在执行数据写入处理期间输入了读取请求或者在执行数据读取处理期间输入了写入请求的情况下,执行停止对应于输入的请求的处理的执行的独占控制,直到正在执行的处理完成并且出现了可执行对应于输入的请求的处理的状态为止。这样,即使计算机10的CPU 12并行地执行与构成图像处理部50的单独的模块相对应的进程或线程,仍可避免由于将多个请求同时或者基本上同时输入到单个缓冲器模块40而出现的问题。因此,计算机10的CPU 12可以并行执行对应于单独的模块的进程或线程。当然,可将缓冲器模块实现为通常的程序或对象。
接下来,将给出对图像处理模块控制处理(图13)的描述,每次从工作流管理部46A将处理请求输入到构成图像处理部50的单独的图像处理模块38时,单独的图像处理模块38的各个控制部38B执行该图像处理模块控制处理。在图像处理模块控制处理中,首先,在步骤284中,在存在其自身模块的前面的模块(缓冲器模块40、或者图像数据供应部22、图像处理模块38等)的情况下,从该前面的模块请求数据(图像数据或者诸如分析之类的图像处理的处理结果)。在下一步骤286中,判断是否可从前面的模块获得数据。如果判断结果是否定的,则在步骤288中,判断是否已给出整个处理结束的通知。如果步骤288的判断结果是否定的,则程序返回到步骤286,重复步骤286和288,直到可以从前面的模块获得数据。如果步骤286中的判断结果是肯定的,则在步骤290中,执行数据获取处理,该处理从前面的模块获取数据。
这里,当其自身模块的前面的模块是缓冲器模块40时,如果存在这样的状态可读取的有效数据存储在缓冲器模块40的缓冲器40A中,该有效数据的量大于或等于单位读取数据量;或者可读取的该有效数据的末端与作为处理对象的图像数据的末端重合,则当在先前的步骤284中请求数据(读取请求)时,立即从该缓冲器模块40通知读取区的头地址,并且请求读取数据(见图10的步骤462)。如果这些状态都不存在,则缓冲器模块40的前面的图像处理模块38将图像数据写到该缓冲器模块40的缓冲器40A时,状态改变到前述状态,其后,从缓冲器模块40通知读取区的头地址,并且请求读取数据(见图10的步骤462)。这样,步骤286的判断结果是肯定的,程序进行到步骤290。在步骤290中,执行数据获取处理,该处理从前面的缓冲器模块40已通知了其头地址的读取区中读取单位读取数据量(或比之少的数据量)的图像数据(参照图15A中的(3))。
此外,如果其自身模块的前面的模块是图像数据供应部22,则当在先前的步骤284中输出数据请求时,立即从前一级的图像数据供应部22发出通知存在可获得图像数据的状态。这样,步骤286的判断结果是肯定的,程序继续进行到步骤290,在步骤290中,执行图像数据获取处理,该处理从前一级的图像数据供应部22中获得单位读取数据量的图像数据。此外,如果其自身模块的前面的模块是图像处理模块38,则在先前的步骤284中输出数据请求(处理请求)时,如果存在前面的图像处理模块38可执行图像处理的状态,则由于输入了写入请求,所以给出了存在可获得数据(图像处理的结果)的状态的通知。因此,步骤286的判断结果是肯定的,程序进行到步骤290。由于前面的图像处理模块38给出了其中要写入数据的缓冲区的地址的通知并请求写入,所以执行数据获取处理,该数据获取处理将从前面的图像处理模块38输出的数据写到该缓冲区。
在下一步骤292中,控制部38B判断在其自身模块的前一级是否连接有多个模块。如果判断结果是否定的,则程序继续进行到步骤296而不执行任何处理。如果判断结果是肯定的,则程序继续进行到步骤294,在步骤294中,判断是否已从所有前面的模块获得了数据。如果步骤294中的判断结果是否定的,则程序返回到步骤284,重复步骤284至步骤294,直到步骤294的判断结果成为肯定的。当收集到从前面的模块获得的所有数据时,步骤292的判断结果是否定的,或者步骤294的判断结果是肯定的,程序继续进行到步骤296。
接下来,在步骤296中,控制部38B向其自身模块的后面的模块请求用于数据输出的区域。在步骤298中,重复进行判断直到可获得数据输出区(即,直到通知了数据输出区的头地址)。应该注意,如果后面的模块是缓冲器模块40,则通过将写入请求输出到该缓冲器模块40来形成前述的对用于数据输出的区域的请求。当可获得数据输出区(如果后面的模块是缓冲器模块40,则为从该缓冲器模块40通知了其头地址的写入区)时(参照图15A中的(4)),在下一步骤300中,将由先前的数据获取处理获得的数据以及从后面的模块获得的数据输出区(的头地址)输入到图像处理引擎38A。对输入的数据执行预定的图像处理(见图15A的(5)),将处理后的数据写到数据输出区(见图15A的(6))。当完成了单位读取数据量的数据到图像处理引擎38A的输入并且将从图像处理引擎38A输出的数据都写到数据输出区时,在下一步骤302中,将输出已完成通知给后面的模块。
由于上述步骤284至步骤302,完成了在图像处理模块38处对单位处理数据量的数据的处理(即,单位处理)。存在这样的情况在从工作流管理部46A输入到图像处理模块38的处理请求中,由工作流管理部46A指定单位处理的执行次数。因此,在步骤304中,判断单位处理的执行次数是否已达到由输入的处理请求指示的执行次数。如果指示的单位处理的执行次数是一次,则该判断结果无条件地是肯定的。但是,如果指示的单位处理的执行次数大于或等于2,则程序返回到步骤284,重复步骤284至步骤304直到步骤304的判断结果成为肯定的。当步骤304的判断结果是肯定的时候,程序进行到步骤306。在步骤306中,通过将处理完成通知输出到工作流管理部46A,控制部38B通知工作流管理部46A对应于输入的处理请求的处理已完成,并且图像处理模块控制处理结束。
此外,当由于每次从工作流管理部46A输入处理请求时重复上述处理从而执行处理直到作为处理对象的图像数据的末端时,由于从前面的模块给出了作为处理对象的图像数据的末端的通知,所以步骤288的判断结果成为肯定的,程序继续进行到步骤308。在步骤308中,控制部38B将整个处理完成通知输出到工作流管理部46A和后面的模块,该通知意味着作为处理对象的图像数据的处理完成。在下一步骤310中,执行自身模块删除处理(后面会描述),图像处理模块控制处理结束。
应该注意,执行图像分析处理(诸如斜交角检测处理等)的图像处理引擎38A通常被构造为图像处理结果不是以单位读取数据量为单位进行输出,而是在作为处理对象的所有图像数据都已输入之后才输出图像处理结果。在具有这样的图像处理引擎38A的图像处理模块38的控制部38B中,不执行图像处理模块控制处理(图13)的步骤296和298并且不执行步骤300中的数据向后面的模块的输出,当由于作为处理对象的图像数据被处理直到末端从而步骤288中的判断结果为肯定时,将从图像处理引擎38A输出的数据(图像处理结果)输出到其自身模块的外部(工作流管理部46A和应用32)。然后,如果存在需要上述图像处理结果的另一图像处理模块38(例如,基于斜交角检测处理的结果执行图像旋转处理的图像处理模块38等),则从工作流管理部46A或应用32将前述图像处理结果输入到该图像处理模块38。
另一方面,在将块单位处理指定为图像处理的执行形式的情况下,当由应用32启动工作流管理部46A时,执行图16A所示的块单位控制处理1。同样如上所述,在从工作流管理部46A将处理请求输入到图像处理部50的单独的图像处理模块38的过程中,可指定单位处理的执行次数。在块单位控制处理1的步骤500中,对于各单独的图像处理模块38,设置了在一次处理请求中指定的单位处理的执行次数。可以确定每一次处理请求的单位处理的执行次数,从而例如使在作为处理对象的所有图像数据被处理的时间期间输入到单独的图像处理模块38的处理请求的次数平均,或者可以根据其他标准来确定。然后,在下一步骤502中,将处理请求输入到图像处理部50的最后一级的图像处理模块38(还参照图18的(1)),块单位控制处理1结束。
这里,在图18示出的图像处理部50中,当从工作流管理部46A将处理请求输入到最后一级的图像处理模块384时,图像处理模块384的控制部38B将读取请求输入到前面的缓冲器模块403(参照图18的(2))。此时,在缓冲器模块403的缓冲器40A中没有存储可由图像处理模块384读取的有效数据(图像数据)。因此,缓冲器模块403的缓冲器控制部40B将数据请求输入到工作流管理部46A(参照图18的(3))。
在图像处理的执行形式是块单位处理的情况下,每次从缓冲器模块40输入数据请求时,执行图16B示出的块单位控制处理2。在该块单位控制处理2中,在步骤504中,基于在图4B所示的表中登记的信息,识别作为数据请求的输入源的缓冲器模块40(这里是图像处理模块403)的前面的图像处理模块38(这里是图像处理模块383),并将处理请求输入到识别出的前面的图像处理模块38(参照图18的(4)),处理结束。
当输入了处理请求时,图像处理模块383的控制部38B将读取请求输入到前面的缓冲器模块402(参照图18的(5))。因为在缓冲器模块402的缓冲器40A中也没有存储可读取的图像数据,所以缓冲器模块402的缓冲器控制部40B将数据请求输入到工作流管理部46A(参照图18的(6))。此外,当从缓冲器模块402输入了数据请求时,工作流管理部46A再次执行上述块单位控制处理2,并从而将处理请求输入到前面的图像处理模块382(参照图18的(7))。图像处理模块382的控制部38B将读取请求输入到前面的缓冲器模块401(参照图18的(8))。此外,因为在缓冲器模块401的缓冲器40A中也没有存储可读取的图像数据,所以缓冲器模块401的缓冲器控制部40B也将数据请求输入到工作流管理部46A(参照图18的(9))。此外,当从缓冲器模块401输入了数据请求时,工作流管理部46A再次执行上述块单位控制处理2,并从而将处理请求输入到前面的图像处理模块381(参照图18的(10))。
这里,图像处理模块381的前面的模块是图像数据供应部22。因此,通过将数据请求输入到图像数据供应部22,图像处理模块381的控制部38B从图像数据供应部22获得单位读取数据量的图像数据(参照图18的(11))。将由图像处理引擎38A对获得的图像数据执行图像处理获得的图像数据写到后面的缓冲器模块401的缓冲器40A(参照图18的(12))。应该注意,当图像处理模块381的控制部38B完成了将图像数据写到后面的缓冲器模块401的缓冲器40A时,控制部38B将处理完成通知输入到工作流管理部46A。
在图像处理的执行形式是块单位处理的情况下,每次从图像处理模块38输入了处理完成通知时,工作流管理部46A都执行图16C示出的块单位控制处理3。在该块单位控制处理3中,在步骤506中,判断处理完成通知源是否是图像处理部50的最后一级的图像处理模块38。如果在此情况下判断结果是否定的,则处理结束而不执行任何处理(对于从图像处理模块382、383输入处理完成通知的情况也是这样)。
此外,当写入可被后面的图像处理模块382读取并且其量大于或等于单位读取数据量的有效数据时,缓冲器模块401的缓冲器控制部40B请求图像处理模块382进行读取。
与此相伴,图像处理模块382的控制部38B从缓冲器模块401的缓冲器40A中读取单位读取数据量的图像数据(参照图18的(13)),图像处理引擎38A对获得的图像数据执行图像处理。将以此方式获得的图像数据写到后面的缓冲器模块402的缓冲器40A(参照图18的(14))。当写入可被后面的图像处理模块383读取并且其量大于或等于单位读取数据量的有效数据时,缓冲器模块402的缓冲器控制部40B请求图像处理模块383读取。图像处理模块383的控制部38B从缓冲器模块402的缓冲器40A中读取单位读取数据量的图像数据(参照图18的(15)),图像处理引擎38A对获得的图像数据执行图像处理。将以此方式获得的图像数据写到后面的缓冲器模块403的缓冲器40A(参照图18的(16))。
此外,当写入可被后面的图像处理模块384读取并且其量大于或等于单位读取数据量的有效数据时,缓冲器模块403的缓冲器控制部40B请求图像处理模块384读取。与此相伴,图像处理模块384的控制部38B从缓冲器模块403的缓冲器40A中读取单位读取数据量的图像数据(参照图18的(17)),图像处理引擎38A对获得的图像数据执行图像处理。将以此方式获得的图像数据输出到作为后面的模块的图像输出部24(参照图18的(18))。此外,当图像处理模块384的控制部38B完成了图像数据向图像输出部24的写入时,控制部38B将处理完成通知输入到工作流管理部46A(参照图18的(19))。在此情况下,前述块单位控制处理3的步骤506中的判断结果是肯定的,程序进行到步骤508,在步骤508中,再次将处理请求输入到作为最后一级图像处理模块38的图像处理模块384,其后处理结束。
由于再次输入到作为最后一级的图像处理模块384的处理请求,上述处理序列被再次重复,并且以块单位的执行形式对作为处理对象的图像数据连续地执行图像处理。当从图像数据供应部22提供的图像数据到达其末端时,由前面的图像处理模块38连续地执行整个处理结束通知从单独的图像处理模块38到工作流管理部46A的输入。
在图像处理的执行形式是块单位处理的情况下,每次从图像处理模块38输入了整个处理结束通知时,工作流管理部46A都执行图16D示出的块单位控制处理4。在该块单位控制处理4中,在步骤510中,判断作为整个处理结束通知的输入源的图像处理模块38是否是最后一级的图像处理模块38。如果该判断结果是否定的,则处理结束而不执行任何处理。在由于将所有的图像数据(所述所有的图像数据是通过对作为处理对象的图像数据执行必要的图像处理而获得的)输出到图像输出部24从而从最后一级的图像处理模块38输入了整个处理结束通知的情况下,步骤510的判断结果是肯定的,程序继续进行到步骤512。在步骤512中,通知应用32图像处理完成(还参照图3的步骤180),块单位控制处理结束。然后,已被通知了图像处理完成的应用32通知用户图像处理已完成(还参照图3的步骤182)。
这样,在块单位处理中,将输入到最后一级的图像处理模块38的处理请求回传到前面的图像处理模块38。当处理请求到达最前级的图像处理模块38时,执行一系列图像处理,流程为在最前级的图像处理模块38执行图像处理,将数据写到后面的缓冲器模块40,并且如果写入的数据足够,则处理继续进行到后面的模块。
在将整幅图像处理指定为图像处理的执行形式的情况下,当由应用32启动工作流管理部46A时,执行图17A示出的整幅图像控制处理1。在整幅图像控制处理1中,以与上述块单位控制处理1(图16A)相同的方式,针对各单独的图像处理模块38,设置由一次处理请求指定的单位处理的执行次数(步骤540)。在下一步骤542中,将处理请求输入到图像处理部50中最后一级的图像处理模块38(参照图18的(1)),并且处理结束。此外,在图像处理的执行形式是整幅图像处理的情况下,每次从缓冲器模块40输入数据请求时,工作流管理部46A执行图17B示出的整幅图像控制处理2。在整幅图像控制处理2中,以与上述块单位控制处理2(图16B)相同的方式,在步骤544中,基于在图4B所示的表中登记的信息,识别作为数据请求的输入源的缓冲器模块40的前面的图像处理模块38,将处理请求输入到识别出的前面的图像处理模块38,处理结束。
这样,即使图像处理的执行形式是整幅图像处理,当由应用32启动时工作流管理部46A执行的处理以及每次从缓冲器模块40输入数据请求时工作流管理部46A执行的处理,都与当图像处理的执行形式是块单位处理时的处理相同。因此,同样在整幅图像处理中,在从工作流管理部46A将处理请求输入到图像处理部50的最后一级的图像处理模块38之后,如图18的(2)至(10)所述,从处理请求所输入至的图像处理模块38将数据请求输入到前面的缓冲器模块40,并随着数据请求从该数据请求所输入至的缓冲器模块40输入到工作流管理部46A,从该工作流管理部46A将处理请求输出到该缓冲器模块40的前面的图像处理模块,从图像处理部50的最后一级的图像处理模块38这样连续进行到在图像处理部50的最前级的图像处理模块38。
此外,当从工作流管理部46A输入了处理请求时,图像处理部50的最前级的图像处理模块381从图像数据供应部22获得单位读取数据量的图像数据(参照图18的(11))。图像处理模块381将通过图像处理引擎38A对获得的图像数据执行图像处理而获得的图像数据写到后面的缓冲器模块401的缓冲器40A(参照图18的(12)),并将处理完成通知输入到工作流管理部46A。在图像处理的执行形式是整幅图像处理的情况下,每次从图像处理模块38输入了处理完成通知时,工作流管理部46A执行图17C示出的整幅图像控制处理3。在整幅图像控制处理3中,在步骤546中,将处理请求再次输入到作为处理完成通知源的图像处理模块38,处理结束。这样,在整幅图像控制处理中,在将处理完成通知输入到工作流管理部46A的特定的图像处理模块38完成对作为处理对象的图像数据的图像处理之前的时间段期间,每次从该特定的图像处理模块38输入处理完成通知时,仅仅将处理请求重复地输入到该特定的图像处理模块38。
当图像处理模块381完成了作为处理对象的图像数据的图像处理时,将作为处理对象并且已经在图像处理模块381经过了图像处理的所有图像数据存储在缓冲器模块401的缓冲器40A中,从图像处理模块381将整个处理结束通知输入到工作流管理部46A。在图像处理的执行形式是整幅图像处理的情况下,每次从图像处理模块38输入了整个处理结束通知时,工作流管理部46A执行图17D示出的整幅图像控制处理4。在该整幅图像控制处理4中,在步骤548中,判断整个处理结束通知的源是否是图像处理部50的最后一级的图像处理模块38。如果判断结果是否定的,则程序继续进行到步骤550,在步骤550中,基于在图4B所示的表中登记的信息,识别在作为整个处理结束通知的源的图像处理模块38之后的下一图像处理模块38,将处理请求输入到该识别出的下一图像处理模块38,处理结束。
这样,在整幅图像控制处理中,将输入到最后一级的图像处理模块38的处理请求回传到前面的图像处理模块38,并且在该处理请求到达最前级的图像处理模块38之后,仅将处理请求重复地输入最前级的图像处理模块38。当在该图像处理模块38处对作为处理对象的所有图像数据的图像处理完成时,在下一图像处理模块38处执行对作为处理对象的所有图像数据的图像处理。由于该处理按照后面的图像处理模块38的顺序进行,所以执行了一系列图像处理操作。然后,当由于将所有的图像数据(所述所有的图像数据是通过对作为处理对象的图像数据执行需要的图像处理而获得的)输出到图像输出部24从而从最后一级的图像处理模块38输入整个处理结束通知时,整幅图像控制处理4的步骤548的判断结果是肯定的,程序继续进行到步骤552。在步骤552中,通知应用32图像处理完成(还参照图3的步骤180),整幅图像控制处理结束。然后,已被通知图像处理完成的应用32通知用户图像处理完成(还参照图3的步骤182)。
在图17示出的整幅图像控制处理中,在从图像处理模块输入了整个处理结束通知时切换处理请求被重复地输入至的图像处理模块38。但是,本发明不限于此。可使用这样的结构在从其他图像处理模块38输入了处理结束通知时切换处理请求被重复地输入至的图像处理模块38。
此外,在以上描述中,由工作流管理部46A来执行处理请求向最后一级的图像处理模块38的输入。但是本发明不限于此,工作流管理部46A可拥有位于管线的最后一级或者位于有向无环图的多个终点上的模块并且执行处理请求,或者应用32可拥有这些模块并执行处理请求。或者,如上述图5B中的示例所示,在模块生成部44的内部,在将执行斜交角检测处理的图像处理模块和执行图像旋转处理的图像处理模块组合从而构成倾斜校正处理模块的情况下,在生成图像旋转处理模块时需要斜交角信息作为处理参数。因此,在倾斜校正模块生成部的内部,可采用这样的方法将处理请求重复地施加到斜交角检测处理模块,处理整幅图像,将作为处理结果而获得的斜交角信息提供给图像旋转处理模块作为处理参数。
接下来,将给出删除图像处理模块38的描述,在已完成对作为处理对象的图像数据进行的图像处理之后执行该删除。在图像处理模块控制处理(图13)的步骤308中,单独的图像处理模块38的控制部38B将整个处理结束通知输出到工作流管理部46A以及后面的模块,其后,在步骤310中,执行自身模块删除处理。
如图14所示,在自身模块删除处理中,首先,在步骤320中,控制部35B请求资源管理部46B释放在先前的步骤254(图12)中保留的内存区。这样,由于在资源管理部46B处执行的对内存释放请求的处理(图2C),所以释放了该内存区。在下一步骤322中,判断是否存在其自身模块通过资源管理部46B而保留的、内存之外的资源。如果判断结果是否定的,则程序继续进行到步骤326而不执行任何处理。如果判断结果是肯定的,则程序继续进行到步骤324。在步骤324中,控制部38B将其自身模块的标识信息通知给资源管理部46B,并请求释放其自身模块保留的、内存之外的资源。这样,由于资源管理部46B执行的对资源释放请求的处理(图2E),所以释放了该资源。
在自身模块删除处理(图14)中,如果步骤322中的判断结果是否定的,则程序进行到步骤326,或者如果在步骤324中向资源管理部46B请求释放内存之外的资源之后,从资源管理部46B给出了资源释放完成的通知,则程序继续进行到步骤326。在步骤326中,控制部38B将删除通知(用于给出要执行删除其自身模块的处理的通知)输入到其自身模块的前面的模块、其自身模块的后面的模块以及工作流管理部46A。然后,在步骤328中,执行删除其自身模块的处理,图14的自身模块删除处理(即,图13的步骤310)结束。应该注意,可以通过结束对应于其自身模块的进程或线程或者删除该对象来实现其自身模块的删除。
在由缓冲器模块40的缓冲器控制部40B执行的缓冲器控制处理(图6)中,当从其自身模块的前一级或后一级的图像处理模块38输入了删除通知时,步骤380中的判断结果是肯定的,程序继续进行到步骤390。在步骤390中,在存储了作为删除通知的输入源的模块之后,判断是否从其自身模块的前一级和后一级的所有模块输入了删除通知。如果判断结果是否定的,则程序返回到步骤378,同样如上所述重复步骤378和380。此外,当从其自身模块的前一级和后一级的所有模块输入了删除通知时,步骤390中的判断结果是肯定的,程序进行到步骤392。在步骤392中,由于将删除通知输入到了工作流管理部46A,所以给出了要执行删除其自身模块的处理的通知。然后,在下一步骤394中,执行删除其自身模块的处理,缓冲器控制处理(图6)结束。
最后,将描述在图像处理部50执行图像处理时发生错误的情况下的处理。当在图像处理部50执行图像处理的同时发生错误时,处理管理部46的错误管理部46C执行由于中断而引起的图19中示出的错误发生中断处理。在该错误发生中断处理中,首先,在步骤570中,获得错误信息,诸如发生错误的类型以及发生地点等。在本实施例中,存储器20存储装置环境信息,该装置环境信息表示其中包含有计算机10的装置的类型和结构等,图像处理程序组34实现在所述计算机10中。在下一步骤572中,从存储器20等获得该装置环境信息,确定与由获得的装置环境信息表示的装置环境相对应的错误通知方法。
例如,如果计算机10是诸如PC之类的独立的计算机,则提供可一次显示各种信息的显示器作为显示器16。因此,可选择诸如通过弹出式窗口等将在步骤570中获得的错误信息的所有内容显示在显示器16上这样的错误通知方法作为所述错误通知方法。此外,例如,如果其中并入了计算机10的装置是诸如复印机、打印机、传真机、多功能装置、扫描仪、照片打印机之类的装置,则可在显示器16上一次显示的信息的量是有限的,但是可提供蜂鸣器等。从而,可以选择这种通知方法通过鸣响蜂鸣器,给出发生了错误的通知,并且在步骤570获得的错误信息之中,只将错误的类型显示在显示器16上,等等。然后,在步骤574中,通过在步骤572中确定的错误通知方法给出发生错误的通知,错误发生中断处理结束。
这样,在与本实施例相关的错误发生中断处理中,从多种类型的错误通知方法之中选择与装置环境相对应的错误通知方法,通过该选择的错误通知方法给出发生了错误的通知。因此,通过在各种结构的计算机10中实现与本发明相关的图像处理程序组34,可应用本发明,提高了本发明的适用性。此外,无需根据其中实现有图像处理程序组34的计算机10的结构(即,根据其是独立的计算机还是在各种类型的装置中的任一装置中实现的计算机等)而执行设置改变操作,诸如在错误发生之类时切换处理。因此,减轻了用于实现的操作的负担。
这里,虽然以中断处理为前提解释了错误处理,但是错误处理不限于中断处理。例如,可使用以下结构当错误发生时,该模块将错误信息和通知给错误管理部46C,并且返回状态码,该状态码表示对于其后的处理指令不能执行处理。接收到该信息的处理管理部46将该信息返回给应用32。应用32从处理管理部46的错误管理部46C接收到错误信息,并且基于该错误信息,应用32自己执行诸如显示或蜂鸣之类的处理。
以上已给出对示例的描述,在该示例中,是从后面的图像处理模块38将读取请求输入到缓冲器模块40的。在可被作为读取请求源的图像处理模块38读取的有效数据的数据量小于单位读取数据量并且可读取的有效数据的末端不是作为处理对象的图像数据的末端的情况下,从缓冲器模块40重复地将数据请求输入到工作流管理部46A,直到可读取的有效数据的数据量大于或等于单位读取数据量或者检测到可读取的有效数据的末端就是作为处理对象的图像数据的末端为止。但是,本发明不限于此。在上述情况下,缓冲器模块40可仅将数据请求输入到工作流管理部46A一次,并且当可读取的有效数据的数据量变得大于或等于单位读取数据量时,或者当检测到可读取的有效数据的末端就是作为处理对象的图像数据的末端时,缓冲器模块40可将积累完成通知输入到工作流管理部46A。因而,在从缓冲器模块40输入了数据请求后直到输入了积累完成通知为止的时间段期间,工作流管理部46A可将处理请求重复地输入到该缓冲器模块40的前面的图像处理模块38。
此外,以上作为示例描述了一个实施例,在该实施例中,在从后面的图像处理模块38输入了读取请求并且没有将可被作为读取请求源的图像处理模块38读取的有效数据存储在其自身模块的缓冲器40A中的情况下,缓冲器控制部40B将数据请求输入到工作流管理部46A。但是,本发明不限于此,在上述情况下,缓冲控制部40B可直接将数据请求输入到前面的图像处理模块38。在该实施例中,在图像处理的执行形式是块单位处理的情况下的处理序列在图20中示出。从图20中还可清楚看出,在该实施例中,工作流管理部46A将处理请求仅仅输入到图像处理部50中最后一级的图像处理模块38就足够了,因而,在工作流管理部46A的处理是简单的。
此外,上面描述了一个实施例作为块单位的图像处理的示例,在该实施例中,首先,工作流管理部46A将处理请求输入到最后一级的图像处理模块38,并且该处理请求作为数据请求或处理请求被依次传送到前面的模块。但是,本发明不限于此。还可将处理请求或数据请求从前面的模块连续地传送到后面的模块,并且执行以块为单位的图像处理。例如,这可如下实现。将缓冲器模块40的缓冲器控制部40B构成为每次其自身模块的前面的图像处理模块38将图像数据写到缓冲器40A时,如果可被后面的图像处理模块38读取的有效数据的数据量小于单位读取数据量并且可读取的有效数据的末端不是作为处理对象的图像数据的末端,则缓冲器控制部40B将数据请求输入到工作流管理部46A。另一方面,当可读取的有效数据的数据量大于或等于单位读取数据量时,或者当检测到可读取的有效数据的末端是作为处理对象的图像数据的末端时,缓冲器控制部40B将积累完成通知输入到工作流管理部46A。而且,将工作流管理部46A构成为在将处理请求输入到图像处理部50的最后一级的图像处理模块38之后,每次从任意缓冲器模块40输入数据请求时,工作流管理部46A将处理请求输入到作为数据请求源的缓冲器模块40的前面的图像处理模块38。每次从任意缓冲器模块40输入了积累完成通知时,工作流管理部46A将处理请求输入到该缓冲器模块40的后面的图像处理模块38。此外,在上文中,可将来自缓冲器模块40的数据请求作为处理请求直接输入到该缓冲器模块40的前面的图像处理模块38,并且可将来自缓冲器模块40的积累完成通知作为处理请求直接输入到该缓冲器模块40的后面的图像处理模块38。
而且,上面描述了一个实施例,在该实施例中,对于缓冲器模块40,由前面的图像处理模块38预先设置单位写入数据量,并且由后面的图像处理模块38预先设置单位读取数据量。但是,本发明不限于此。每次将数据写到缓冲器模块40或者从缓冲器模块40读取数据时,可由图像处理模块38通知写入或者读取的数据量。
在以上结构中,每次将写入请求或读取请求输入到缓冲器模块40时,将输入的请求作为请求信息登记在队列中,从队列中逐个取出请求信息并进行处理。这样,实现了独占控制,其中,在输入写入请求时,如果正在执行从缓冲器40A中读取数据,则在该数据读取完成之后,执行对应于该写入请求的数据写入处理,并且在输入读取请求时,如果正在执行向缓冲器40A写入数据,则在数据写入完成之后,执行对应于该读取请求的数据读取处理。但是,本发明不限于此。例如,可执行将单位缓冲区作为单位的独占控制。即,在输入写入请求时,如果正在针对缓冲器40A内的、该写入请求中的写入对象的单位缓冲区执行对数据的读取,则在该数据读取完成之后,执行对应于该写入请求的数据写入处理。此外,在输入读取请求时,如果正在针对缓冲器40A内的、该读取请求中的读取对象的单位缓冲区执行数据写入,则在该数据写入完成之后,执行对应于该读取请求的数据读取处理。通过例如在各单独的单位缓冲区提供队列并执行独占控制等可实现将单位缓冲区作为单独的独占控制。
此外,上面描述了一个示例,其中,在其程序被登记在模块库36中的单独的图像处理模块38之中,对应于单位读取数据量和单位写入数据量相同的图像处理模块38的控制部38B的程序是通用的。但是,本发明不限于此。例如,可将对应于控制部38B的程序分为对应于第一控制部的程序,该第一控制部从前面的模块获得图像数据并将其输入到图像处理引擎38A;对应于第二控制部的程序,该第二控制部将从图像处理引擎38A输出的数据输出到后面的模块;以及对应于公共控制部的程序,该公共控制部执行不依赖于单位读取数据量、单位处理数据量或单位写入数据量的控制(例如,与工作流管理部46A进行通信等)。在所有的图像处理模块,对应于公共控制部的程序可通用。单位读取数据量相同的图像处理模块38可通用对应于第一控制部的程序。单位写入数据量相同的图像处理模块38可通用对应于第二控制部的程序。
因为构成图像处理部50的单独的模块的实例是程序,所以图像处理部50的图像处理实际上是通过CPU 12实现的。这里,可使用以下系统(所谓的轮叫(round robin)系统)将与构成图像处理部50的单独的图像处理模块38相对应的程序作为进程、线程或对象登记在队列中,所述进程、线程或对象是CPU 12的执行对象。每次CPU 12从该队列中取出登记在该队列中并且对应于特定的图像处理模块的程序时,判断是否可从该特定的图像处理模块38的前面的模块获得单位处理数据量的图像数据。仅在判断出可获得单位处理数据量的图像数据的情况下,从该特定的图像处理模块38的前面的模块获得单位处理数据量的图像数据。对所获得的单位处理数据量的图像数据执行预定的图像处理(与特定的图像处理模块38的图像处理引擎38A相对应的处理)。执行将经过了预定的图像处理的图像数据或预定的图像处理的处理结果输出到其自身模块的后面的模块的处理。其后,如果没有完成对作为处理对象的整幅图像的处理,则将取出的对应于特定的图像处理模块的程序作为执行对象的进程、线程或对象再次登记在该队列中。由于CPU 12重复这些单位图像处理,所以图像处理部50处理作为处理对象的整幅图像。
权利要求
1.一种图像处理设备,其包括图像处理部;以及存储器管理部,所述图像处理部具有(A)一个或更多个图像处理模块,每一个图像处理模块都具有(1)图像处理引擎,其以预先设定的单位处理数据量为单位对图像数据进行预定的图像处理;以及(2)控制部,其以所述图像处理引擎以所述单位处理数据量为单位进行处理所需的数据量单位,来输入从其自身模块的前级获取的图像数据,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级,所述一个或更多个图像处理模块是从多种类型的图像处理模块中选择的,在该多种类型的图像处理模块中由所述图像处理引擎执行的图像处理的类型或内容彼此不同;以及(B)一个或更多个缓冲器模块,所述图像处理部由以管线形式或有向无环图形式连接的多个单独模块构成,从而所述缓冲器模块连接在被选择的各个图像处理模块的前级和后级中的至少一个上,并且所述缓冲器模块具有用于存储图像数据的缓冲器,以及缓冲器控制部,其中,所述缓冲器控制部在其自身模块的前级连接有图像处理模块的情况下执行下述的处理,即,使得将从所述前级的图像处理模块输出的图像数据写入所述缓冲器上的存储区域中,该存储区域能够存储由所述前级的图像处理模块对其自身模块预先设定的或者在每一次输出图像数据时通知的写入数据量的数据,以及在其自身模块的后级连接有图像处理模块的情况下执行下述的处理,即,使得所述后级的图像处理模块以由所述后级的图像处理模块对其自身模块预先设定的或者在每一次请求图像数据时指定的读取数据量为单位来读取存储在所述缓冲器中的图像数据,并且所述存储器管理部(a)可以通过多种类型的管理方法来执行存储器管理处理,其中,根据在构造所述图像处理部时或者在对作为处理对象的图像数据进行处理时来自各个模块的请求,所述存储器管理部从设置在所述图像处理设备处的存储器中保留要分配给所述各个模块的存储器,并将所保留的存储器分配给所述各个模块,并且在删除所述各个模块时,释放分配给所述各个模块的存储器,以及(b)通过所述多种类型的管理方法当中的从外部指示的管理方法来执行所述存储器管理处理。
2.根据权利要求1所述的图像处理设备,其中,所述单位处理数据量是根据操作环境或者所述图像处理引擎所执行的所述预定图像处理的类型而预先设定的。
3.根据权利要求1所述的图像处理设备,其中,所述多种类型的管理方法是以下管理方法当中的多种管理方法第一管理方法,其中每当存在来自单独模块的请求时,通过操作系统从设置在所述图像处理设备处的存储器中保留要分配给作为请求源的模块的存储器;第二管理方法,其中通过所述操作系统从设置在所述图像处理设备处的存储器中预先保留给定大小的存储器,并且当存在来自单独模块的请求时,从预先保留的所述存储器中保留要分配给作为请求源的模块的存储器;以及第三管理方法,其中通过所述操作系统从设置在所述图像处理设备处的存储器中预先保留给定大小的存储器,并且当存在来自单独模块的请求时,如果所请求的存储器的大小小于一阈值,则通过所述操作系统从设置在所述图像处理设备处的存储器中保留要分配给作为请求源的模块的存储器,而如果所请求的存储器的大小大于或等于该阈值,则从预先保留的所述存储器中保留要分配给作为请求源的模块的存储器。
4.根据权利要求1所述的图像处理设备,还包括处理管理部,该处理管理部在所述图像处理部的各个图像处理模块处,将从其自身模块的前级获取的图像数据输入给所述图像处理引擎;通过使得重复进行将由所述图像处理引擎进行了预定图像处理的图像数据或者该预定图像处理的处理结果输出给其自身模块的后级的单位处理,来使所述图像处理部对作为处理对象的整个图像进行处理;并且当处理完成时,删除所述各个图像处理模块并通过所述存储器管理部释放分配给所述各个图像处理模块的存储器。
5.根据权利要求4所述的图像处理设备,其中,在被指示执行整个图像处理时,所述处理管理部按照从所述图像处理部的最上游图像处理模块开始的顺序,执行下述的处理,即,使得特定的图像处理模块重复所述单位处理,直到从所述特定的图像处理模块输出了与作为处理对象的所述整个图像相对应的图像数据为止。
6.根据权利要求4所述的图像处理设备,其中,在由于完成了对作为处理对象的所有图像数据的图像处理而删除与其自身模块相连的所有图像处理模块的情况下,所述缓冲器模块的所述缓冲器控制部执行下述的处理,即,删除其自身模块,以及使得通过所述存储器管理部来释放分配给其自身模块的存储器。
7.根据权利要求4所述的图像处理设备,其中,根据在构造所述图像处理部时或者在对作为处理对象的图像数据进行处理时来自各个模块的请求,所述处理管理部从设置在所述图像处理设备处的存储器以外的资源中保留要分配给所述各个模块的资源,并将所保留的资源分配给所述各个模块,将分配给所述各个模块的资源登记在表中,并且当处理完成时,删除所述各个图像处理模块,并释放登记在所述表中的所有资源。
8.根据权利要求1所述的图像处理设备,还包括错误通知部,该错误通知部在所述图像处理设备处出现错误的情况下,可以执行错误通知处理,该错误通知处理通过多种类型的通知方法向外部通知出现了错误,并通过从所述多种类型的通知方法中选择的通知方法来执行所述错误通知处理。
9.根据权利要求1所述的图像处理设备,还包括构造部,其根据作为处理对象的图像的属性和指定要执行的图像处理的类型的处理参数来构造所述图像处理部。
10.一种图像处理方法,其通过具有图像处理部的图像处理设备来执行图像处理,该图像处理部具有(A)一个或更多个图像处理模块,每一个图像处理模块都具有(1)图像处理引擎,其以预先设定的单位处理数据量为单位对图像数据进行预定的图像处理;以及(2)控制部,其以所述图像处理引擎以所述单位处理数据量为单位进行处理所需的数据量单位,来输入从其自身模块的前级获取的图像数据,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级,所述一个或更多个图像处理模块是从多种类型的图像处理模块中选择的,在该多种类型的图像处理模块中由所述图像处理引擎执行的图像处理的类型或内容彼此不同;以及(B)一个或更多个缓冲器模块,所述图像处理部由以管线形式或有向无环图形式连接的多个单独模块构成,从而所述缓冲器模块连接在被选择的各个图像处理模块的前级和后级中的至少一个上,所述缓冲器模块具有用于存储图像数据的缓冲器,以及缓冲器控制部,所述方法包括以下步骤所述缓冲器控制部在其自身模块的前级连接有图像处理模块的情况下执行下述的处理,即,使得将从所述前级的图像处理模块输出的图像数据写入所述缓冲器上的存储区域中,该存储区域能够存储由所述前级的图像处理模块对其自身模块预先设定的或者在每一次输出图像数据时通知的写入数据量的数据;所述缓冲器控制部在其自身模块的后级连接有图像处理模块的情况下执行下述的处理,即,使得所述后级的图像处理模块以由所述后级的图像处理模块对其自身模块预先设定的或者在每一次请求图像数据时指定的读取数据量为单位来读取存储在所述缓冲器中的图像数据;以及预先使得所述缓冲器控制部能够通过多种类型的管理方法来执行存储器管理处理,其中,根据在构造所述图像处理部时或者在对作为处理对象的图像数据进行处理时来自各个模块的请求,所述缓冲器控制部从设置在所述图像处理设备处的存储器中保留要分配给所述各个模块的存储器,并将所保留的存储器分配给各个模块,并且在删除所述各个模块时,释放分配给所述各个模块的存储器,并且所述缓冲器控制部通过所述多种类型的管理方法当中的从外部指示的管理方法来执行所述存储器管理处理。
11.一种计算机可读存储介质,其存储有用于使得计算机用作具有图像处理部的图像处理设备的图像处理程序,该图像处理部具有(A)一个或更多个图像处理模块,每一个图像处理模块都具有(1)图像处理引擎,其以预先设定的单位处理数据量为单位对图像数据进行预定的图像处理;以及(2)控制部,其以所述图像处理引擎以所述单位处理数据量为单位进行处理所需的数据量单位,来输入从其自身模块的前级获取的图像数据,并将由所述图像处理引擎进行了预定图像处理的图像数据,或者该预定图像处理的处理结果输出给其自身模块的后级,所述一个或更多个图像处理模块是从多种类型的图像处理模块中选择的,在该多种类型的图像处理模块中由所述图像处理引擎执行的图像处理的类型或内容彼此不同;以及(B)一个或更多个缓冲器模块,所述图像处理部由以管线形式或有向无环图形式连接的多个单独模块构成,从而所述缓冲器模块连接在被选择的各个图像处理模块的前级和后级中的至少一个上,并且所述缓冲器模块具有用于存储图像数据的缓冲器,以及缓冲器控制部,其中,所述缓冲器控制部在其自身模块的前级连接有图像处理模块的情况下执行下述的处理,即,使得将从所述前级的图像处理模块输出的图像数据写入所述缓冲器上的存储区域中,该存储区域能够存储由所述前级的图像处理模块对其自身模块预先设定的或者在每一次输出图像数据时通知的写入数据量的数据,以及在其自身模块的后级连接有图像处理模块的情况下执行下述的处理,即,使得所述后级的图像处理模块以由所述后级的图像处理模块对其自身模块预先设定的或者在每一次请求图像数据时指定的读取数据量为单位来读取存储在所述缓冲器中的图像数据,并且所述图像处理设备还包括存储器管理部,该存储器管理部(a)可以通过多种类型的管理方法来执行存储器管理处理,其中,根据在构造所述图像处理部时或者对作为处理对象的图像数据进行处理时来自各个模块的请求,所述存储器管理部从设置在所述图像处理设备处的存储器中保留要分配给各个模块的存储器,并将所保留的存储器分配给所述各个模块,并且在删除所述各个模块时,释放分配给所述各个模块的存储器,以及(b)通过所述多种类型的管理方法当中的从外部指示的管理方法来执行所述存储器管理处理。
全文摘要
一种图像处理设备,其包括图像处理部和存储器管理部。该图像处理部具有(A)一个或更多个图像处理模块,每一个图像处理模块都具有图像处理引擎和控制部;以及(B)一个或更多个缓冲器模块。该存储器管理部(a)可以通过多种类型的管理方法来执行存储器管理处理,其中,根据来自各个模块的请求,该存储器管理部从设置在图像处理设备处的存储器中保留要分配给各个模块的存储器,并将所保留的存储器分配给各个模块,并且在删除所述各个模块时,释放分配给所述各个模块的存储器,以及(b)通过所述多种类型的管理方法当中的从外部指示的管理方法来执行所述存储器管理处理。
文档编号G06T1/20GK1873690SQ20061009245
公开日2006年12月6日 申请日期2006年6月1日 优先权日2005年6月3日
发明者长尾隆, 关范顕, 熊泽幸夫, 金子康彦, 金子顺一 申请人:富士施乐株式会社, 富士胶片株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1