(57)【要約】【課題】複数のバッファ領域への記憶領域の割り当てが容易な画像読取装置、及び記憶領域割り当て方法を提供する。【解決手段】原稿を読み取って画像データを生成する読取手段と、前記読取手段から出力される画像データを順次処理する１つ以上の処理手段と、前記処理手段から出力される画像データを送信する送信手段と、前記読取手段、１つ以上の前記処理手段、及び前記送信手段の間で画像データを受け渡すための複数のバッファ領域が割り当てられる記憶手段と、各前記バッファ領域の使用状況を取得する取得手段と、前記取得手段で取得された使用状況に基づいて、少なくとも２つの前記バッファ領域の間で記憶領域の割り当てを変更する変更手段と、を備える。【選択図】図１１
2010016646.tif 000002
【特許請求の範囲】
【請求項１】
原稿を読み取って画像データを生成する読取手段と、
前記読取手段から出力される画像データを順次処理する１つ以上の処理手段と、
前記処理手段から出力される画像データを送信する送信手段と、
前記読取手段、１つ以上の前記処理手段、及び前記送信手段の間で画像データを受け渡すための複数のバッファ領域が割り当てられる記憶手段と、
各前記バッファ領域の使用状況を取得する取得手段と、
前記取得手段で取得された使用状況に基づいて、少なくとも２つの前記バッファ領域の間で記憶領域の割り当てを変更する変更手段と、
を備える画像読取装置。
【請求項２】
前記取得手段は、前記原稿の所定範囲を読み取って当該所定範囲分の画像データを送信するまでの間の各前記バッファ領域の使用状況を取得し、
前記変更手段は、前記取得手段で使用状況が取得されると当該取得された使用状況に基づいて２つ以上の前記バッファ領域の間で記憶領域の割り当てを変更する請求項１に記載の画像読取装置。
【請求項３】
前記取得手段は、前記原稿の互いに離間した複数の所定範囲について当該所定範囲を読み取って当該所定範囲分の画像データを送信するまでの間の各前記バッファ領域の使用状況をそれぞれ取得し、
前記変更手段は、前記取得手段で使用状況が取得される毎に当該取得された使用状況に基づいて２つ以上の前記バッファ領域の間で記憶領域の割り当てを変更する請求項２に記載の画像読取装置。
【請求項４】
画像データが前回と同じ送信先に前回と同じ前記送信手段で送信される場合、前記取得手段は使用状況の取得を行わず、前記変更手段は記憶領域の割り当てを変更しない請求項１乃至請求項３のいずれか一項に記載の画像読取装置。
【請求項５】
前記取得手段は、前記使用状況としてバッファ領域を使い切るバッファフルが発生した順番を取得し、
前記変更手段は、バッファフルが発生した順番が相対的に遅い前記バッファ領域への記憶領域の割り当てを減らし、バッファフルが発生した順番が相対的に早い前記バッファ領域への記憶領域の割り当てを増やす請求項１乃至請求項４のいずれか一項に記載の画像読取装置。
【請求項６】
前記取得手段は、前記使用状況としてバッファ領域を使い切るバッファフルが発生した回数を前記バッファ領域毎に取得し、
前記変更手段は、バッファフルになった回数が相対的に少ない前記バッファ領域への記憶領域の割り当てを減らし、バッファフルになった回数が相対的に多い前記バッファ領域への記憶領域の割り当てを増やす請求項１乃至請求項４のいずれか一項に記載の画像読取装置。
【請求項７】
前記取得手段は、前記使用状況としてバッファ領域を使い切るバッファフルの継続時間を前記バッファ領域毎に取得し、
前記変更手段は、バッファフルの継続時間が相対的に短い前記バッファ領域への記憶領域の割り当てを減らし、バッファフルの継続時間が相対的に長い前記バッファ領域への記憶領域の割り当てを増やす請求項１乃至請求項４のいずれか一項に記載の画像読取装置。
【請求項８】
前記取得手段は、前記使用状況として各前記バッファ領域の最小空き容量を更に取得し、
前記変更手段は、バッファ領域を使い切るバッファフルが発生しなかった前記バッファ領域への記憶領域の割り当てを減らす場合、当該バッファ領域の最小空き容量分を減らし、その分だけ他の前記バッファ領域への記憶領域の割り当てを増やす請求項５乃至請求項７のいずれか一項に記載の画像読取装置。
【請求項９】
前記変更手段は、前記読取手段から出力される画像データを記憶する前記バッファ領域への記憶領域の割り当てを優先的に増やす請求項１乃至請求項８のいずれか一項に記載の画像読取装置。
【請求項１０】
原稿を読み取って画像データを生成する読取手段と、
前記読取手段から出力される画像データを順次処理する１つ以上の処理手段と、
前記処理手段から出力される画像データを送信する送信手段と、
前記読取手段、１つ以上の前記処理手段、及び前記送信手段の間で画像データを受け渡すための複数のバッファ領域が割り当てられる記憶手段とを備える画像読み取り装置の各前記バッファ領域に記憶領域を割り当てる記憶領域割り当て方法であって、
各前記バッファ領域の使用状況を取得する取得段階と、
前記取得段階で取得された使用状況に基づいて、少なくとも２つの前記バッファ領域の間で記憶領域の割り当てを変更する変更段階と、
を含む記憶領域割り当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像読取装置、及び記憶領域割り当て方法に関する。
【背景技術】
【０００２】
従来、上位の処理部から受け取った印刷データを記憶手段にバッファリングして下位の処理部に受け渡すバッファリング機構を備え、当該記憶手段のうちバッファリングに使用できる容量の上限値をユーザが設定できる印刷装置が知られている（例えば特許文献１参照）。
【０００３】
【特許文献１】特開２００２−１１９０６公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、複数の手段毎に異なるバッファ領域に画像データを記憶させる画像読取装置の場合は、ユーザがそれら複数のバッファ領域に記憶領域を適切に割り当てることは容易ではない。
本発明は上記のような事情に基づいて完成されたものであって、複数のバッファ領域への記憶領域の割り当てが容易な画像読取装置、及び記憶領域割り当て方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
第１の発明は、画像読取装置であって、原稿を読み取って画像データを生成する読取手段と、前記読取手段から出力される画像データを順次処理する１つ以上の処理手段と、前記処理手段から出力される画像データを送信する送信手段と、前記読取手段、１つ以上の前記処理手段、及び前記送信手段の間で画像データを受け渡すための複数のバッファ領域が割り当てられる記憶手段と、各前記バッファ領域の使用状況を取得する取得手段と、前記取得手段で取得された使用状況に基づいて、少なくとも２つの前記バッファ領域の間で記憶領域の割り当てを変更する変更手段と、を備える。
この発明によると、変更手段が各バッファ領域の使用状況に基づいて少なくとも２つのバッファ領域の間で記憶領域の割り当てを変更するので、ユーザは自ら割り当てを変更する作業を行う必要がない。
よってこの発明によると、複数のバッファ領域への記憶領域の割り当てが容易である。
【０００６】
第２の発明は、第１の発明の画像読取装置であって、前記取得手段は、前記原稿の所定範囲を読み取って画像データを送信するまでの間の各前記バッファ領域の使用状況を取得し、前記変更手段は、前記取得手段で使用状況が取得されると当該取得された使用状況に基づいて２つ以上の前記バッファ領域の間で記憶領域の割り当てを変更する。
この発明によると、複数のバッファ領域の間で適切に記憶領域の割り当てが変更された状態で原稿の所定範囲以降の範囲の読み取りを実行でき、所定範囲以降の範囲を読み取る際のパフォーマンスを好適に向上できる。
【０００７】
第３の発明は、第２の発明の画像読取装置であって、前記取得手段は、前記原稿の互いに離間した複数の所定範囲について当該所定範囲を読み取って画像データを送信するまでの間の各前記バッファ領域の使用状況をそれぞれ取得し、前記変更手段は、前記取得手段で使用状況が取得される毎に当該取得された使用状況に基づいて２つ以上の前記バッファ領域の間で記憶領域の割り当てを変更する。
この発明によると、１つの原稿を読み取っている間に原稿内容の変化に応じてよりきめ細かく記憶領域の割り当てを変更できるので、より適切に変更できる。
【０００８】
第４の発明は、第１〜第３のいずれかの発明の画像読取装置であって、画像データが前回と同じ送信先に前回と同じ前記送信手段で送信される場合、前記取得手段は使用状況の取得を行わず、前記変更手段は記憶領域の割り当てを変更しない。
一般に送信手段の送信能力はバッファ領域の使用状況に大きく影響する。逆にいうと、送信能力が前回と同じであれば、送信手段以外の処理手段による影響はあるものの、画像読取装置は概ね前回と同程度のパフォーマンスを維持できる可能性がある。
ところで、送信能力は送信手段にのみ依存するのではなく、送信先の機器の受信能力にも依存する。したがって、送信先及び送信手段が前回と同じである場合は、前回と概ね同程度の処理能力を維持できるものとして使用状況の取得や割り当ての変更を省略することにより、効率よく処理を実行できる。
【０００９】
第５の発明は、第１〜第４のいずれかの発明の画像読取装置であって、前記取得手段は、前記使用状況としてバッファ領域を使い切るバッファフルが発生した順番を取得し、前記変更手段は、バッファフルが発生した順番が相対的に遅い前記バッファ領域への記憶領域の割り当てを減らし、バッファフルが発生した順番が相対的に早い前記バッファ領域への記憶領域の割り当てを増やす。
バッファフルが発生した順番が相対的に早いバッファ領域は今後もバッファフルが発生する可能性が高いバッファ領域であり、逆にバッファフルが発生した順番が相対的に遅いバッファ領域は今後もバッファフルが発生する可能性が低いバッファ領域であるといえる。したがって、バッファフルが発生した順番が相対的に遅いバッファ領域への記憶領域の割り当てを減らしてバッファフルが発生した順番が相対的に早いバッファ領域への記憶領域の割り当てを増やすことにより、バッファフルが発生する可能性を低減でき、パフォーマンスを好適に向上できる。
【００１０】
第６の発明は、第１〜第４のいずれかの発明の画像読取装置であって、前記取得手段は、前記使用状況としてバッファ領域を使い切るバッファフルが発生した回数を前記バッファ領域毎に取得し、前記変更手段は、バッファフルになった回数が相対的に少ない前記バッファ領域への記憶領域の割り当てを減らし、バッファフルになった回数が相対的に多い前記バッファ領域への記憶領域の割り当てを増やす。
バッファフルになった回数が相対的に多いバッファ領域は今後もバッファフルが発生する可能性が高いバッファ領域であり、逆にバッファフルになった回数が相対的に少ないバッファ領域は今後もバッファフルが発生する可能性が低いバッファ領域であるといえる。したがって、バッファフルになった回数が相対的に少ないバッファ領域への記憶領域の割り当てを減らし、バッファフルになった回数が相対的に多いバッファ領域への記憶領域の割り当てを増やすことにより、バッファフルが発生する可能性を低減でき、パフォーマンスを好適に向上できる。
【００１１】
第７の発明は、第１〜第４のいずれかの発明の画像読取装置であって、前記取得手段は、前記使用状況としてバッファ領域を使い切るバッファフルの継続時間を前記バッファ領域毎に取得し、前記変更手段は、バッファフルの継続時間が相対的に短い前記バッファ領域への記憶領域の割り当てを減らし、バッファフルの継続時間が相対的に長い前記バッファ領域への記憶領域の割り当てを増やす。
バッファフルの継続時間が相対的に長いバッファ領域は今後もバッファフルが発生する可能性が高いバッファ領域であり、逆にバッファフルの継続時間が相対的に短いバッファ領域は今後もバッファフルが発生する可能性が低いバッファ領域であるといえる。したがって、バッファフルの継続時間が相対的に短いバッファ領域への記憶領域の割り当てを減らしてバッファフルの継続時間が相対的に長いバッファ領域への記憶領域の割り当てを増やすことにより、バッファフルが発生する可能性を低減でき、パフォーマンスを好適に向上できる。
【００１２】
第８の発明は、第５〜第７のいずれかの発明の画像読取装置であって、前記取得手段は、前記使用状況として各前記バッファ領域の最小空き容量を更に取得し、前記変更手段は、バッファ領域を使い切るバッファフルが発生しなかった前記バッファ領域への記憶領域の割り当てを減らす場合、当該バッファ領域の最小空き容量分を減らし、その分だけ他の前記バッファ領域への記憶領域の割り当てを増やす請求項５乃至請求項７のいずれか一項に記載の画像読取装置。
この発明によると、減らされる側のバッファ領域について記憶領域を減らし過ぎてしまうことを低減でき、記憶領域をより適切に割り当てることができる。
【００１３】
第９の発明は、第１〜第８のいずれかの発明の画像読取装置であって、前記変更手段は、前記読取手段から出力される画像データを記憶する前記バッファ領域への記憶領域の割り当てを優先的に増やす。
読取手段から出力される画像データを記憶するバッファ領域がバッファフルになると読み取りが途中で中断することにより画像品質が低下する可能性がある。読取手段から出力される画像データを記憶するバッファ領域への記憶領域の割り当てを優先的に増やすと、そうした画像品質の低下を低減できる。
【００１４】
第１０の発明は、原稿を読み取って画像データを生成する読取手段と、前記読取手段から出力される画像データを順次処理する１つ以上の処理手段と、前記処理手段から出力される画像データを送信する送信手段と、前記読取手段、１つ以上の前記処理手段、及び前記送信手段の間で画像データを受け渡すための複数のバッファ領域が割り当てられる記憶手段とを備える画像読み取り装置の各前記バッファ領域に記憶領域を割り当てる記憶領域割り当て方法であって、各前記バッファ領域の使用状況を取得する取得段階と、前記取得手段で取得された使用状況に基づいて、少なくとも２つの前記バッファ領域の間で記憶領域の割り当てを変更する変更段階と、を含む。
【発明の効果】
【００１５】
本発明によれば、複数のバッファ領域への記憶領域の割り当てが容易である。
【発明を実施するための最良の形態】
【００１６】
＜実施形態１＞
本発明の実施形態１を図１ないし図１１によって説明する。
（１−１）複合機の構成
図１は、スキャナ機能、プリンタ機能、コピー機能、ファクシミリ機能等を有する複合機１（画像読取装置の一例）の模式図である。複合機１は、スキャナ部１１、プリンタ部１２、操作部１３、インタフェース部１４、制御部１５などを備えている。
【００１７】
スキャナ部１１は、所謂フラットベッド方式のイメージスキャナであって、原稿が載置される透明な板状の第１原稿台１６、原稿カバー１７、第２原稿台２２上の原稿を読取位置Ｒに搬送するＡＤＦ（Auto Document Feeder）１９、第１原稿台１６上に載置されている原稿Ｍを検知する第１の原稿検知センサ１８、第２原稿台２２上に載置されている原稿Ｎを検知する第２の原稿検知センサ２０、第１原稿台１６上の原稿Ｍ又はＡＤＦ１９によって読取位置Ｒに搬送されてきた原稿Ｎを読み取って画像データを生成する読取部２１などで構成されている。
【００１８】
ＡＤＦ１９は、原稿Ｎが載置される第２原稿台２２、図示しない複数のローラ、これら複数のローラを回転駆動する図示しない駆動モータなどで構成されており、第２原稿台２２に載置されている原稿Ｎを１枚ずつ分離して読取位置Ｒに搬送する。原稿Ｎは読取位置Ｒ上を搬送されている間に読取部２１によって読み取られ、原稿カバー１７の上に排出される。
【００１９】
第１の原稿検知センサ１８は、例えば第１原稿台１６の下方に設けられた光電センサである。光電センサには原稿Ｍ又は原稿カバー１７のいずれかで反射した光が入射し、制御部１５は光電センサから出力されるセンサ出力に基づいて第１原稿台１６上の原稿Ｍの有無を判定する。
第２の原稿検知センサ２０は、例えば検知位置Ｄまで挿し込まれるように第２原稿台２２上に原稿Ｎが載置されるとオンになり、検知位置Ｄに原稿Ｎが無いとオフになるスイッチである。制御部１５は第２の原稿検知センサ２０から出力されるセンサ出力に基づいて第２原稿台２２上の原稿Ｎの有無を判定する。
【００２０】
読取部２１は、ＣＩＳ（密着型イメージセンサ）やＣＣＤなどのイメージセンサ２３（読取手段の一例）、原稿を照射する図示しない光源、原稿で反射された反射光をイメージセンサ２３に入射させる光学系２４、イメージセンサ２３や光源などが搭載されるキャリッジ２５、図２に示すイメージセンサ制御回路２６（読取手段の一例）、図２に示す画像処理回路２７（処理手段の一例）などで構成されている。
【００２１】
プリンタ部１２は、紙などの被記録媒体を搬送する搬送機構などを有し、レーザー方式やインクジェット方式などを用いて、スキャナ部１１で生成された画像データや後述のインタフェース部１４で受信した画像データ等に基づいて画像を印刷する。
操作部１３は、操作者が各種の設定や動作の指示を行うための操作ボタンや液晶ディスプレイなどの表示装置などで構成されている。
【００２２】
インタフェース部１４は、図２に示すように、ＵＳＢケーブルを介してパーソナルコンピュータ（ＰＣ）に接続するためのＵＳＢインタフェース３７（送信手段の一例）、及びＬＡＮなどの電気通信回線を介してＰＣやネットワークサーバなどの外部の機器と通信するためのネットワークインタフェース３８（送信手段の一例）を有している。また、インタフェース部１４には公衆電話回線を介して画像をファクシミリ通信するためのモデムなどのインタフェースも設けられている。なお、図示しないが、インタフェース部１４は、パラレルケーブルを介してＰＣに接続するためのパラレルインタフェース、ＵＳＢメモリやメモリカード等の外部記憶装置を接続するためのインタフェースを有していてもよい。
【００２３】
制御部１５は、図２に示すＣＰＵ２８（読取手段、処理手段、送信手段、記憶手段、取得手段、及び変更手段の一例）、ＲＯＭ（図示せず）、ＲＡＭ３０（記憶手段の一例）などで構成されており、ＲＯＭに記憶されている各種のプログラムを実行することにより複合機１の各部を制御する。
【００２４】
（１−２）データ転送の概略
図２は、複合機１が原稿を読み取って外部の機器に送信するまでの画像データの流れを示すブロック図である。図示するように本実施形態ではＲＡＭ３０に４つのバッファ領域（ラインバッファ３２、画像処理後バッファ３３、圧縮バッファ３４、Ｉ／Ｆ転送バッファ３５）が割り当てられる。画像データは、原稿を読み取って外部の機器に送信するまでの間にイメージセンサ制御回路２６、画像処理回路２７、ＣＰＵ２８、及びインタフェース部１４の間でこれら４つのバッファ領域（以下、単に「バッファ」という）を介して受け渡される。本実施形態ではこれらのバッファはいずれもリングバッファとして用いられる。
【００２５】
また、図示するようにＲＡＭ３０には各バッファについて全容量、空き容量、バッファフルが発生しているか否かなどを管理するための各種の変数やフラグが記憶されるバッファ容量管理記憶領域３１、及び各バッファの使用状況を記憶するためのパフォーマンス測定結果記憶領域３６も割り当てられる。
【００２６】
（１−２−１）イメージセンサ制御回路からラインバッファへのＤＭＡ転送
イメージセンサ２３は１ライン分の原稿を読み取ると、当該１ライン分の原稿を表す画像信号を図示しないＡ／Ｄ変換回路に出力する。Ａ／Ｄ変換回路に出力された画像信号はＡ／Ｄ変換回路でＡ／Ｄ変換され、１ライン分の画像データとしてイメージセンサ制御回路２６に出力される。
【００２７】
イメージセンサ制御回路２６に出力された１ライン分の画像データはイメージセンサ制御回路２６によってシェーディング補正やγ補正などの所定の処理が施され、ＤＭＡ（Direct Memory Access）調停・ＳＤＲＡＭコントローラ２９（以下、単に「ＤＭＡコントローラ」という）によってラインバッファ３２にＤＭＡ転送される。
【００２８】
このＤＭＡ転送はイメージセンサ制御回路２６による制御の元で実行される。イメージセンサ制御回路２６は１ライン分の画像データに所定の処理を施すと、その画像データを直ちにラインバッファ３２にＤＭＡ転送させる。つまり、イメージセンサ制御回路２６はラインバッファ３２の空き容量を確認することなくＤＭＡ転送を実行させる。したがって仮にラインバッファ３２がバッファフルであった場合、ラインバッファ３２に記憶されている画像データ（ラインバッファデータ）が上書きされてしまうことになる。これを避けるため、本実施形態ではＣＰＵ２８がラインバッファ３２の空き容量を監視し、ラインバッファ３２に空き容量がない場合はイメージセンサ制御回路２６を制御して原稿の読み取りを中断させる。原稿の読み取りが中断するとイメージセンサ２３からの画像信号の出力が停止し、ラインバッファデータの上書きが防止される。
【００２９】
ラインバッファ３２に記憶されている有効なラインバッファデータのライン数は、画像処理回路２７によってカウントされる。図示するように画像処理回路２７には「ラインバッファ有効ライン数カウンタ」が設けられており、イメージセンサ制御回路２６からラインバッファ３２に１ライン分の画像データがＤＭＡ転送されると、画像処理回路２７は「ラインバッファ有効ライン数カウンタ」に１を加算する。
【００３０】
（１−２−２）ラインバッファから画像処理回路へのＤＭＡ転送
ラインバッファ３２に記憶されているラインバッファデータは、画像処理回路２７にＤＭＡ転送される。
このＤＭＡ転送は画像処理回路２７による制御の元で実行される。画像処理回路２７は「ラインバッファ有効ライン数カウンタ」が所定の値に達すると、すなわちラインバッファ３２に記憶されているラインバッファデータのライン数が所定のライン数に達すると、ＤＭＡコントローラ２９を制御して当該所定のライン数分のラインバッファデータを画像処理回路２７にＤＭＡ転送させる。ＤＭＡ転送後、画像処理回路２７は「ラインバッファ有効ライン数カウンタ」からＤＭＡ転送したライン数分の値を減じる。
【００３１】
（１−２−３）画像処理回路から画像処理後バッファへのＤＭＡ転送
ラインバッファ３２から画像処理回路２７にＤＭＡ転送された画像データは画像処理回路２７によって色空間変換や先鋭化処理などの各種の画像処理が施される。画像処理が施された後の画像データ（画像処理後データ）は、画像処理後バッファ３３にＤＭＡ転送される。
【００３２】
このＤＭＡ転送は前述した「イメージセンサ制御回路からラインバッファへのＤＭＡ転送」や「ラインバッファから画像処理回路へのＤＭＡ転送」の場合とは異なり、ＣＰＵ２８による制御の元で実行される。具体的には、先ずＣＰＵ２８は画像処理後バッファ３３の空き容量に基づいて、画像処理回路２７から画像処理後バッファ３３にＤＭＡ転送する画像処理後データのライン数である「画像処理後ＤＭＡ転送ライン数」を設定する。次に、ＣＰＵ２８はＤＭＡコントローラ２９に画像処理回路２７から画像処理後バッファ３３へのＤＭＡ転送（画像処理後ＤＭＡ転送）を指示する。以降の説明ではＤＭＡコントローラ２９に画像処理後ＤＭＡ転送を指示することを「画像処理後ＤＭＡ転送を起動する」というものとする。
【００３３】
図示するように画像処理回路２７には画像処理後ＤＭＡ転送が起動中であるか否かを示す「画像処理後ＤＭＡ転送中フラグ」が設けられている。ＣＰＵ２８は画像処理後ＤＭＡ転送を起動すると「画像処理後ＤＭＡ転送中フラグ」にＯＮをセットする。
【００３４】
画像処理後ＤＭＡ転送を起動すると、画像処理回路２７内において転送可能な画像処理後データを随時転送する。転送した画像処理後データのライン数が「画像処理後ＤＭＡ転送ライン数」に達した時点で、画像処理回路２７はそのＤＭＡ転送を終了させ、「画像処理後ＤＭＡ転送中フラグ」にＯＦＦをセットする。
【００３５】
（１−２−４）画像処理後バッファから圧縮バッファへの転送
画像処理後バッファ３３に記憶されている画像処理後データはＣＰＵ２８によって読み出され、ＪＰＥＧ圧縮などの所定の圧縮処理が施されて圧縮バッファ３４に書き込まれる。すなわち、画像処理後バッファ３３からＣＰＵ２８への読み込み、及びＣＰＵ２８から圧縮バッファ３４への書き込みはＤＭＡコントローラ２９ではなくＣＰＵ２８によって実行される。
【００３６】
（１−２−５）圧縮バッファからＩ／Ｆ転送バッファへの転送
圧縮バッファ３４に記憶されている圧縮後の画像処理後データ（圧縮データ）はＣＰＵ２８によって読み出され、インタフェースに応じた形式のＩ／Ｆ転送データに変換されてＩ／Ｆ転送バッファ３５に書き込まれる。すなわち、圧縮バッファ３４からＣＰＵ２８への読み込み、及びＣＰＵ２８からＩ／Ｆ転送バッファ３５への書き込みは、ＤＭＡコントローラ２９ではなくＣＰＵ２８によって実行される。
【００３７】
（１−２−６）Ｉ／Ｆ転送バッファからインタフェースへのＤＭＡ転送
Ｉ／Ｆ転送バッファ３５に記憶されているＩ／Ｆ転送データは、ＵＳＢインタフェース３７やネットワークインタフェース３８（以下、単に「インタフェース」という）にＤＭＡ転送される。
【００３８】
このＤＭＡ転送はＣＰＵ２８による制御の元で実行される。具体的には、ＣＰＵ２８はＩ／Ｆ転送バッファ３５に書き込んだＩ／Ｆ転送データのデータ量を「Ｉ／Ｆ転送ＤＭＡ転送容量」に設定し、ＤＭＡコントローラにＤＭＡ転送を指示する。以降の説明ではＤＭＡコントローラにＩ／Ｆ転送ＤＭＡ転送を指示することを「Ｉ／Ｆ転送ＤＭＡ転送を起動する」というものとする。
【００３９】
図示するようにインタフェースにはＩ／Ｆ転送ＤＭＡ転送が起動中であるか否かを示す「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」が設けられている。ＣＰＵ２８はＩ／Ｆ転送ＤＭＡ転送を起動すると「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」にＯＮをセットする。
Ｉ／Ｆ転送ＤＭＡ転送を起動すると、ＤＭＡコントローラによってＩ／Ｆ転送バッファ３５からインタフェースにＩ／Ｆ転送データがＤＭＡ転送される。そして、インタフェースはそのＤＭＡ転送が終了すると「インタフェースＤＭＡ転送中フラグ」にＯＦＦをセットする。
【００４０】
（１−３）原稿の読み取りと各バッファの記憶領域の割り当ての変更
図３は、原稿の読み取りと各バッファの記憶領域の割り当てを変更する処理のフローチャートである。本実施形態では原稿が１ページのみのときは各バッファの使用状況の取得は行わず、したがってその場合には割り当ての変更も行わず、原稿が複数ページに亘るときのみ使用状況を取得して割り当てを変更する。
【００４１】
複数ページの原稿を読み取るとき、ＣＰＵ２８は最初の１ページ目（所定範囲の一例）を読み取って１ページ目分の画像データを外部の機器に送信するまでの間の各バッファの使用状況を取得する。そして、ＣＰＵ２８は取得した使用状況に基づいて少なくとも２つのバッファの間で記憶領域の割り当てを変更し、変更後に２ページ目以降の読み取りを開始する。
【００４２】
また、実施形態１では、最後にバッファフルが発生したバッファ（バッファフルが発生しなかったバッファがある場合はそれらのいずれか）への記憶領域の割り当てを減らし、最初にバッファフルが発生したバッファへの記憶領域の割り当てを増やす場合を例に説明する。
なお、上述した「イメージセンサ制御回路２６からラインバッファ３２へのＤＭＡ転送」及び「ラインバッファ３２から画像処理回路２７へのＤＭＡ転送」はＣＰＵ２８が関与しない転送であるため、本フローチャート中には表れない。
【００４３】
Ｓ１０５では、ＣＰＵ２８はＰＣ（外部の機器）から原稿の読み取りに関する各種の設定情報の入力を受け付ける。本実施形態では設定情報はＵＳＢインタフェース３７あるいはネットワークインタフェース３８を介して入力され、ＣＰＵ２８は原稿を読み取って画像データを生成すると当該インタフェースを介して上記ＰＣに画像データを送信するものとする。
【００４４】
Ｓ１１０では、ＣＰＵ２８はＰＣからスキャン開始指示の入力を受け付ける。
Ｓ１１５では、ＣＰＵ２８は「各バッファ容量決定処理」を実行する。「各バッファ容量決定処理」は各バッファの初期容量を決定する処理であり、詳細については後述する。
【００４５】
Ｓ１２０では、ＣＰＵ２８は複数ページをスキャンする（読み取る）か否かを判定する。ＣＰＵ２８は、例えば第１原稿台１６上に原稿Ｍがある場合は１ページをスキャンすると判定し、第２原稿台２２上に原稿Ｎがある場合は複数ページをスキャンすると判定する。ＣＰＵ２８は複数ページをスキャンする場合はＳ１２０に進み、１ぺージをスキャンする場合はＳ１４０に進む。
なお、第１原稿台１６上に複数ページの原稿を１ページずつ順に載置して読み取らせる場合もあるので、そのような場合は例えば原稿が１ページであるか複数ページであるかをユーザが操作部１３を操作して入力するようにしてもよい。
【００４６】
Ｓ１２５では、ＣＰＵ２８は「パフォーマンス測定開始処理」を実行する。「パフォーマンス測定開始処理」は各バッファの使用状況を取得するための準備処理であり、詳細については後述する。
Ｓ１３０では、ＣＰＵ２８は「パフォーマンス測定スキャン処理」を実行する。「パフォーマンス測定スキャン処理」は１ページ目をスキャンする処理であるとともに１ページ目を読み取って１ページ目分の画像データを送信するまでの間の各バッファの使用状況を取得する処理であり、詳細については後述する。
【００４７】
Ｓ１３５では、ＣＰＵ２８は「パフォーマンス測定結果に基づいた各バッファ容量変更処理」を実行する。「パフォーマンス測定結果に基づいた各バッファ容量変更処理」は「パフォーマンス測定スキャン処理」で取得された使用状況に基づいて少なくとも２つのバッファの間で記憶領域の割り当てを変更する処理であり、詳細については後述する。
【００４８】
Ｓ１４０では、ＣＰＵ２８は原稿が複数ページである場合は２ページ目以降をスキャンし、原稿が１ページである場合は１ページ目をスキャンする。
Ｓ１４５では、ＣＰＵ２８は全ページのスキャンを終了したかを判定する。終了していない場合はＳ１４０に戻って全ページのスキャンが終了するまで処理を繰り返す。
【００４９】
（１−３−１）各バッファ容量決定処理
図４は、各バッファ容量決定処理のフローチャートである。
Ｓ２０５では、ＣＰＵ２８は各バッファに割り当てる記憶領域の合計容量を取得する。この合計容量は例えばＲＯＭに固定で記憶されており、ＣＰＵ２８はＲＯＭからその合計容量を読み込みことによって取得する。
【００５０】
Ｓ２１０では、ＣＰＵ２８は各バッファの容量を決定する。例えば取得した合計容量が１０メガバイト（ＭＢ）であったとする。この場合、３：５：１：１の比で記憶領域を割り当てるとすると、各バッファの容量は以下のように決定される。
ラインバッファ容量＝３ＭＢ
画像処理後バッファ容量＝５ＭＢ
圧縮バッファ容量＝１ＭＢ
Ｉ／Ｆ転送バッファ容量＝１ＭＢ
【００５１】
（１−３−２）パフォーマンス測定開始処理
図５は、パフォーマンス測定開始処理のフローチャートである。
Ｓ３０５では、ＣＰＵ２８は各バッファのバッファフル発生順を記憶する変数「第１のバッファ種別」、「第２のバッファ種別」、「第３のバッファ種別」、及び「第４のバッファ種別」を初期化する。各バッファには固有のバッファ種別番号が付与されており、初期化すると各変数にはいずれのバッファに付与されているバッファ種別番号とも異なる値（例えば０）が設定される。
【００５２】
（１−３−３）パフォーマンス測定スキャン処理
図６〜図９は、パフォーマンス測定スキャン処理のフローチャートである。
図６〜図９に示すフローチャートは実施形態１〜実施形態５を一つのフローチャートで説明するためのものであり、フローチャート中の「×××のパフォーマンス測定処理２」及び「×××のパフォーマンス測定処理３」は一部の実施形態では実行されない。ここで「×××」は各バッファの名前である。これらの処理が実行されるか否かは各実施形態においてその都度説明する。
【００５３】
Ｓ４０１では、ＣＰＵ２８は各バッファがバッファフルの状態であるか否かを示す変数「ラインバッファフル停止中フラグ」、「画像処理後バッファフル停止中フラグ」、「圧縮バッファフル停止中フラグ」、及び「Ｉ／Ｆ転送バッファフル停止中フラグ」を初期化する。初期化すると各フラグにはバッファフルの状態ではないことを示すＯＦＦが設定される。
【００５４】
Ｓ４０２では、ＣＰＵ２８は各バッファの空き容量を記憶する変数「画像処理後バッファ空き容量」、「圧縮バッファ空き容量」、及び「Ｉ／Ｆ転送バッファ空き容量」にＳ２１０で決定された容量をセットする。
Ｓ４０３では、ＣＰＵ２８はイメージセンサ制御回路２６を制御してスキャンを開始させる。これにより、イメージセンサ２３による原稿のスキャンが開始される。
【００５５】
Ｓ４０４では、ＣＰＵ２８は変数「画像処理後バッファ空き容量」に基づいて「画像処理後ＤＭＡ転送ライン数」を設定する。具体的には、ＣＰＵ２８は「画像処理後バッファ空き容量」を画像処理後データの１ライン当たりのデータ量で除算することにより画像処理後バッファ３３に転送できるライン数を算出し、算出したライン数を「画像処理後ＤＭＡ転送ライン数」に設定する。次に、ＣＰＵ２８は画像処理後ＤＭＡ転送を起動する。
【００５６】
Ｓ４０５では、先ずＣＰＵ２８は画像処理後ＤＭＡ転送が起動中であるか否かを示すフラグ「画像処理後ＤＭＡ転送中フラグ」に起動中であることを示すＯＮをセットする。
次に、ＣＰＵ２８は「Ｉ／Ｆ転送ＤＭＡ転送容量」に初期値として０（零）をセットする。「Ｉ／Ｆ転送ＤＭＡ転送容量」に０をセットする理由は後述するＳ４３５で説明する。
次に、ＣＰＵ２８はＩ／Ｆ転送ＤＭＡ転送が起動中であるか否かを示すフラグ「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」に起動中でないことを示すＯＦＦをセットする。「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」にＯＦＦをセットする理由は後述するＳ４３４で説明する。
【００５７】
Ｓ４０６では、ＣＰＵ２８は「ラインバッファ有効ライン数カウンタ」からラインバッファデータのライン数を読み出し、ラインバッファ容量から当該読み出したライン数分のデータ量を減算することにより、「ラインバッファ空き容量」を算出する。
Ｓ４０７の「ラインバッファのパフォーマンス測定３」は実施形態１では実行しない。
【００５８】
Ｓ４０８では、ＣＰＵ２８は「ラインバッファ空き容量」が所定容量以上であるか否かを判定する。この所定容量はバッファフルの判定基準となる値である。ＣＰＵ２８は「ラインバッファ空き容量」が所定容量以上のときはバッファフルは発生していないと判定してＳ４１１に進み、所定容量未満のときはバッファフルが発生したと判定してＳ４０９に進む。
【００５９】
Ｓ４０９では、ＣＰＵ２８は「ラインバッファのパフォーマンス測定処理１」を実行する。「ラインバッファのパフォーマンス測定処理１」については後述する。
Ｓ４１０では、ＣＰＵ２８はイメージセンサ制御回路２６を制御しスキャンを中断させる。これによりイメージセンサ２３からの画像信号の出力が停止し、未処理のラインバッファデータの上書きが防止される。
次に、ＣＰＵ２８は「ラインバッファフル停止中フラグ」にＯＮをセットし、Ｓ４１４に進む。
【００６０】
Ｓ４１１では、ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦのときはＳ４１４に進み、ＯＮのときはＳ４１２に進む。
Ｓ４１２の「ラインバッファのパフォーマンス測定２」は実施形態１では実行しない。
【００６１】
Ｓ４１３では、ＣＰＵ２８はイメージセンサ制御回路２６を制御してスキャンを再開させるとともに、「ラインバッファフル停止中フラグ」にＯＦＦをセットする。
Ｓ４１４では、ＣＰＵ２８は「画像処理後ＤＭＡ転送中フラグ」がＯＦＦであるか否かを判定する。Ｓ４０５からＳ４１３までの間に画像処理後ＤＭＡ転送が終了していれば、この時点で「画像処理後ＤＭＡ転送中フラグ」はＯＦＦになっている。逆に、未だＤＭＡ転送が終了していなければこの時点で「画像処理後ＤＭＡ転送中フラグ」はＯＮのままになっている。ＣＰＵ２８は「画像処理後ＤＭＡ転送中フラグ」がＯＦＦ、すなわち画像処理後ＤＭＡ転送が終了している場合はＳ４１５に進み、ＯＮ、すなわち画像処理後ＤＭＡ転送が未だ終了していない場合はＳ４２４に進む。
【００６２】
Ｓ４１５では、ＣＰＵ２８は「画像処理後バッファ空き容量」から前回の画像処理後ＤＭＡ転送の起動時に設定した「画像処理後ＤＭＡ転送ライン数」分のデータ量を減算することにより、「画像処理後バッファ空き容量」を更新する。
ここでＳ４１５を初めて実行するときはＳ４０４が「前回の画像処理後ＤＭＡ転送の起動時」となり、Ｓ４１５の実行が２回目以降の場合は後述するＳ４２３が「前回の画像処理後ＤＭＡ転送の起動時」となる。
【００６３】
Ｓ４１６の「画像処理後バッファのパフォーマンス測定処理３」は実施形態１では実行しない。
Ｓ４１７では、ＣＰＵ２８は更新した「画像処理後バッファ空き容量」が所定容量以上であるか否かを判定する。この所定容量はバッファフルの判定基準となる値である。ＣＰＵ２８は「画像処理後バッファ空き容量」が所定容量以上のときはバッファフルは発生していないと判定してＳ４２０に進み、所定容量未満のときはバッファフルが発生したと判定してＳ４１８に進む。
【００６４】
Ｓ４１８では、ＣＰＵ２８は「画像処理後バッファのパフォーマンス測定処理１」を実行する。「画像処理後バッファのパフォーマンス測定処理１」については後述する。
Ｓ４１９では、ＣＰＵ２８は「画像処理後バッファフル停止中フラグ」をＯＮにする。
Ｓ４２０では、ＣＰＵ２８は「画像処理後バッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「画像処理後バッファフル停止中フラグ」がＯＦＦのときはＳ４２３に進み、ＯＮのときはＳ４２１に進む。
【００６５】
Ｓ４２１の「画像処理後バッファのパフォーマンス測定処理２」は実施形態１では実行しない。
Ｓ４２２では、ＣＰＵ２８は「画像処理後バッファフル停止中フラグ」をＯＦＦにする。
【００６６】
Ｓ４２３では、ＣＰＵ２８はＳ４１５で更新した「画像処理後バッファ空き容量」に基づいて「画像処理後ＤＭＡ転送ライン数」を再設定し、画像処理後ＤＭＡ転送を再び起動する。
これとともにＣＰＵ２８は「画像処理後バッファＤＭＡ転送中フラグ」をＯＮにする。
【００６７】
Ｓ４２４では、ＣＰＵ２８は画像処理後バッファ容量から「画像処理後バッファ空き容量」を減算することにより、画像処理後バッファ３３に記憶されている画像処理後データのデータ量である「画像処理後バッファ有効データ容量」を算出する。
Ｓ４２５では、ＣＰＵ２８は「画像処理後バッファ有効データ容量」が所定容量以上であるか否かを判定する。例えば画像処理後データを１６ライン単位で圧縮するとした場合は、１６ライン分のデータ量が所定容量に相当する。「画像処理後バッファ有効データ容量」が所定容量未満（１６ライン未満）のときは圧縮を実行できないので、ＣＰＵ２８は圧縮処理をスキップしてＳ４３４に進む。
【００６８】
Ｓ４２６では、ＣＰＵ２８は「圧縮バッファ空き容量」が所定容量以上であるか否かを判定する。この所定容量はバッファフルの判定基準となる値である。ＣＰＵ２８は「圧縮バッファ空き容量」が所定容量以上のときはバッファフルは発生していないと判定してＳ４２９に進み、所定容量未満のときはバッファフルが発生したと判定してＳ４２７に進む。
【００６９】
Ｓ４２７では、ＣＰＵ２８は「圧縮バッファのパフォーマンス測定処理１」を実行する。「圧縮バッファのパフォーマンス測定処理１」については後述する。
Ｓ４２８では、ＣＰＵ２８は「圧縮バッファフル停止中フラグ」をＯＮにする。
Ｓ４２９では、ＣＰＵ２８は「圧縮バッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「圧縮バッファフル停止中フラグ」がＯＦＦのときはＳ４３２に進み、ＯＮのときはＳ４３０に進む。
【００７０】
Ｓ４３０の「圧縮バッファのパフォーマンス測定処理２」は実施形態１では実行しない。
Ｓ４３１では、ＣＰＵ２８は「圧縮バッファフル停止中フラグ」をＯＦＦにする。
【００７１】
Ｓ４３２では、先ずＣＰＵ２８は画像処理後バッファ３３から例えば１６ライン分の画像処理後データを読み出し、ＪＰＥＧなどの所定の圧縮処理を施して圧縮バッファ３４に書き込む。
次に、ＣＰＵ２８は圧縮前の画像処理後データのデータ量の分だけ「画像処理後バッファ空き容量」を増やす。
次に、ＣＰＵ２８は圧縮バッファ３４に書き込んだ圧縮後の画像処理後データ（圧縮データ）のデータ量の分だけ「圧縮バッファ空き容量」を減らす。
【００７２】
Ｓ４３３の「圧縮バッファのパフォーマンス測定処理３」は実施形態１では実行しない。
Ｓ４３４では、ＣＰＵ２８は「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」がＯＦＦであるときはＳ４３５に進み、ＯＮであるときはＳ４０６に戻る。
前述したようにＣＰＵ２８はＳ４０５において「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」にＯＦＦをセットしているので、最初にＳ４３４を実行するときは「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」はＯＦＦであると判定されることになる。つまり前述したＳ４０５で「Ｉ／Ｆ転送ＤＭＡ転送中フラグ」にＯＦＦを設定した理由は、最初にＳ４３４を実行したときにＯＦＦであると判定されてＳ４３５に進むようにするためである。
【００７３】
Ｓ４３５では、ＣＰＵ２８は前回のＩ／Ｆ転送ＤＭＡ転送の起動時に設定した「Ｉ／Ｆ転送ＤＭＡ転送容量」の分だけ「Ｉ／Ｆ転送バッファ空き容量」を増やす。
最初にＳ４３５を実行するときは未だＩ／Ｆ転送ＤＭＡ転送は起動されておらず、この場合は前述したＳ４０５で「Ｉ／Ｆ転送ＤＭＡ転送容量」に０（零）をセットしているので「Ｉ／Ｆ転送バッファ空き容量」は増えないことになる。つまり前述したＳ４０５で「Ｉ／Ｆ転送ＤＭＡ転送容量」に０を設定した理由は、最初にＳ４３５を実行したときに「Ｉ／Ｆ転送バッファ空き容量」が増えてしまわないようにするためである。Ｓ４３５の実行が２回目以降である場合は、「前回のＩ／Ｆ転送ＤＭＡ転送の起動時」とは後述するＳ４４４のことをいう。
【００７４】
Ｓ４３６では、ＣＰＵ２８は圧縮バッファ容量から「圧縮バッファ空き容量」を減算することにより、圧縮バッファ３４に記憶されている圧縮データのデータ量である「圧縮バッファ有効データ容量」を算出する。
Ｓ４３７では、ＣＰＵ２８は「圧縮バッファ有効データ容量」が所定容量以上であるか否かを判定する。圧縮バッファ３４に圧縮データがなければ転送できないので、ＣＰＵ２８は「圧縮バッファ有効データ容量」が所定容量未満のときはＩ／Ｆ転送バッファ３５への転送をスキップしてＳ４０６に戻る。
【００７５】
Ｓ４３８では、ＣＰＵ２８は「Ｉ／Ｆ転送バッファ空き容量」は所定容量以上であるか否かを判定する。この所定容量はバッファフルの判定基準となる値である。ＣＰＵ２８は「Ｉ／Ｆ転送バッファ空き容量」が所定容量以上のときはバッファフルは発生していないと判定してＳ４４１に進み、所定容量未満のときはバッファフルが発生したと判定してＳ４３９に進む。
【００７６】
Ｓ４３９では、ＣＰＵ２８は「Ｉ／Ｆ転送バッファのパフォーマンス測定処理１」を実行する。「Ｉ／Ｆ転送バッファのパフォーマンス測定処理１」については後述する。
Ｓ４４０では、ＣＰＵ２８は「Ｉ／Ｆ転送バッファフル停止中フラグ」をＯＮにする。
Ｓ４４１では、ＣＰＵ２８は「Ｉ／Ｆ転送バッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「Ｉ／Ｆ転送バッファフル停止中フラグ」がＯＦＦのときはＳ４４４に進み、ＯＮのときはＳ４４２に進む。
【００７７】
Ｓ４４２の「Ｉ／Ｆ転送バッファのパフォーマンス測定処理２」は実施形態１では実行しない。
Ｓ４４３では、ＣＰＵ２８は「Ｉ／Ｆ転送バッファフル停止中フラグ」をＯＦＦにする。
【００７８】
Ｓ４４４では、先ずＣＰＵ２８は圧縮バッファ３４から圧縮データを読み出し、インタフェースに応じた形式のＩ／Ｆ転送データに変換してＩ／Ｆ転送バッファ３５に書き込む。
次に、ＣＰＵ２８は読み出した圧縮データのデータ量の分だけ「圧縮バッファ空き容量」を増やす。
次に、ＣＰＵ２８はＩ／Ｆ転送バッファ３５に書き込んだＩ／Ｆ転送データのデータ量の分だけ「Ｉ／Ｆ転送バッファ空き容量」を減らす。
次に、ＣＰＵ２８はＩ／Ｆ転送バッファ３５に書き込んだＩ／Ｆ転送データのデータ量を「Ｉ／Ｆ転送ＤＭＡ転送容量」に設定し、Ｉ／Ｆ転送ＤＭＡ転送を起動する。
次に、ＣＰＵ２８はＩ／Ｆ転送ＤＭＡ転送中フラグをＯＮにする。
【００７９】
Ｓ４４５の「Ｉ／Ｆ転送バッファのパフォーマンス測定処理３」は実施形態１では実行しない。
Ｓ４４５の後、ＣＰＵ２８はＳ４０６に戻って処理を繰り返す。
【００８０】
（１−３−４）パフォーマンス測定１
実施形態１では、「ラインバッファのパフォーマンス測定処理１」、「画像処理後バッファのパフォーマンス測定処理１」、「圧縮バッファのパフォーマンス測定処理１」、及び「Ｉ／Ｆ転送バッファのパフォーマンス測定処理１」は同一の処理である。
【００８１】
図１０は、パフォーマンス測定１の処理の流れを示すフローチャートである。
Ｓ５０１では、ＣＰＵ２８は変数「第１のバッファ種別」の値がＳ３０５で設定した初期値のままであるか否かを判定する。ＣＰＵ２８は「第１のバッファ種別」の値が初期値のままであるときはＳ５０２に進み、初期値でなければＳ５０３に進む。
【００８２】
Ｓ５０２では、ＣＰＵ２８は変数「第１のバッファ種別」に、バッファフルが発生したバッファに付与されているバッファ種別番号をセットする。例えば「パフォーマンス測定１」が「ラインバッファのパフォーマンス測定処理１」として起動された場合は、バッファフルが発生したバッファはラインバッファ３２であることになり、この場合はラインバッファ３２に割り当てられているバッファ種別番号を「第１のバッファ種別」にセットする。ＣＰＵ２８は変数「第１のバッファ種別」にバッファ種別番号をセットすると、処理を終了する。
【００８３】
Ｓ５０３〜Ｓ５０８までの処理は上記Ｓ５０１〜Ｓ５０２までの処理と実質的に同一であるため説明は省略する。
【００８４】
パフォーマンス測定１によると、最初にバッファフルが発生したバッファのバッファ種別番号が「第１のバッファ種別」にセットされ、次にバッファフルが発生したバッファのバッファ種別番号が「第２のバッファ種別」にセットされることになる。同様にして、最後にバッファフルが発生したバッファのバッファ種別番号が「第４のバッファ種別」にセットされることになる。
【００８５】
（１−３−５）各バッファ容量変更処理
図１１は、パフォーマンス測定結果に基づいた各バッファ容量変更処理の流れを示すフローチャートである。
Ｓ６０１では、ＣＰＵ２８は変数「第１のバッファ種別」の値がＳ３０５で設定した初期値のままであるか否かを判定する。「第１のバッファ種別」の値が初期値であるということは、いずれのバッファにおいてもバッファフルが発生しなかったことを意味する。いずれのバッファにおいてもバッファフルが発生していなければ、各バッファの記憶容量は概ね適切であり、バッファ間での記憶領域の割り当ての変更は不要であるといえる。そのため、ＣＰＵ２８は「第１のバッファ種別」の値が初期値である場合は処理を終了する。ＣＰＵ２８は「第１のバッファ種別」の値が初期値でない場合はＳ６０２に進む。
【００８６】
Ｓ６０２では、ＣＰＵ２８は変数「増やすバッファ種別」に「第１のバッファ種別」にセットされているバッファ種別番号をセットする。
Ｓ６０３では、ＣＰＵ２８は変数「第４のバッファ種別」の値がＳ３０５で設定した初期値のままであるか否かを判定する。「第４のバッファ種別」が初期値のままであるということは、少なくとも一つのバッファについてはバッファフルが発生していないことを意味する。ＣＰＵ２８は「第４のバッファ種別」の値が初期値のままである場合はＳ６０４に進み、初期値ではない場合はＳ６０５に進む。
【００８７】
Ｓ６０４では、ＣＰＵ２８は変数「減らすバッファ種別」にいずれかバッファフルが発生していないバッファのバッファ種別番号をセットする。バッファフルが発生していないバッファが複数ある場合は、いずれのバッファのバッファ種別番号を「減らすバッファ種別」にセットするかは適宜選択可能である。
Ｓ６０５では、ＣＰＵ２８は変数「減らすバッファ種別」に「第４のバッファ種別」の値をセットする。
【００８８】
Ｓ６０６では、ＣＰＵ２８は「減らすバッファ種別」にバッファ種別番号がセットされているバッファの記憶領域の半分を、「増やすバッファ種別」にバッファ種別番号がセットされているバッファに割り当てる。
例えば減らすバッファがＩ／Ｆ転送バッファ３５であり、増やすバッファが画像処理後バッファ３３であるとする。この場合、これら２つのバッファの間で以下のように記憶領域の割り当てを変更する。
Ｉ／Ｆ転送バッファ容量＝１ＭＢ÷２＝０．５ＭＢ
画像処理後バッファ容量＝５ＭＢ＋０．５ＭＢ＝５．５ＭＢ
【００８９】
バッファフルが発生した順番が相対的に早いバッファ領域は今後もバッファフルが発生する可能性が高いバッファ領域であり、逆にバッファフルが発生した順番が相対的に遅いバッファ領域（バッファフルが発生しなかったバッファあるいは最後にバッファフルが発生したバッファ）は今後もバッファフルが発生する可能性が低いバッファ領域であるといえる。したがって、バッファフルが発生した順番が相対的に遅いバッファ領域への記憶領域の割り当てを減らしてバッファフルが発生した順番が相対的に早いバッファ領域への記憶領域の割り当てを増やすことにより、バッファフルが発生する可能性を低減でき、パフォーマンスを好適に向上できる。
【００９０】
以上説明した本発明の実施形態１に係る複合機１によると、ＣＰＵ２８が各バッファの使用状況に基づいて少なくとも２つのバッファの間で記憶領域の割り当てを変更するので、ユーザは自ら割り当てを変更する作業を行う必要がない。よってこの発明によると、複数のバッファへの記憶領域の割り当てが容易である。
【００９１】
更に、複合機１によると、原稿全体を読み取って画像データを送信するまでの間の各バッファの使用状況を取得するのではなく、原稿の１ページ目を読み取って送信するまでの間の使用状況を取得する。これにより、複数のバッファの間で適切に記憶領域の割り当てが変更された状態で原稿の２ページ目以降の読み取りを実行でき、２ページ目以降を読み取る際のパフォーマンスを好適に向上できる。
【００９２】
＜実施形態２＞
次に、本発明の実施形態２を図１２ないし図１４によって説明する。
実施形態２では、バッファフルになった回数が少ないバッファへの記憶領域の割り当てを減らし、バッファフルになった回数が多いバッファへの記憶領域の割り当てを増やす。
【００９３】
（２−１）パフォーマンス測定開始処理
図１２は、実施形態２に係るパフォーマンス測定開始処理のフローチャートである。
Ｓ７０１では、ＣＰＵ２８はバッファフルが発生した回数をバッファ毎にカウントする変数「ラインバッファフル回数カウンタ」、「画像処理後バッファフル回数カウンタ」、「圧縮バッファフル回数カウンタ」、及び「Ｉ／Ｆ転送バッファフル回数カウンタ」を初期化する。初期化すると各変数にはバッファフルが発生していないことを示す値である０（零）がセットされる。
【００９４】
（２−２）パフォーマンス測定スキャン処理
実施形態２のパフォーマンス測定スキャン処理でも、実施形態１と同じく、いずれのバッファについても「パフォーマンス測定２」及び「パフォーマンス測定３」は実行しない。
【００９５】
（２−３）パフォーマンス測定１
実施形態２のパフォーマンス測定１は、バッファ毎にそれぞれ異なる処理が実行される。ただし、処理内容は実質的に同一であるので、ここでは代表して「ラインバッファのパフォーマンス測定１」について説明する。
【００９６】
図１３は、「ラインバッファのパフォーマンス測定１」の処理の流れを示すフローチャートである。
Ｓ８０１では、ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦの場合はＳ８０２に進み、ＯＦＦでない場合、すなわちＯＮの場合は処理を終了する。
【００９７】
「ラインバッファフル停止中フラグ」がＯＮの場合は処理を終了する理由は、１回のバッファフルの発生を多重にカウントしないようにするためである。Ｓ４０９でラインバッファのパフォーマンス測定１が実行されるとその後のＳ４１０において「ラインバッファフル停止中フラグ」にＯＮがセットされるので、「ラインバッファフル停止中フラグ」がＯＮであるということは既に前回「ラインバッファのパフォーマンス測定１」が実行されて回数がカウントされていることになるからである。なお、多重にカウントしたからといって必ずしも問題があるわけではなく、多重のカウントも一つの方法として採用し得る。
【００９８】
Ｓ８０２では、ＣＰＵ２８は「ラインバッファフル回数カウンタ」に１を加算する。
【００９９】
（２−４）パフォーマンス測定結果に基づいた各バッファ容量変更処理
図１４は、パフォーマンス測定結果に基づいた各バッファ容量変更処理の流れを示すフローチャートである。
Ｓ９０１では、ＣＰＵ２８は各バッファのバッファフル回数カウンタが全て初期値（０回）のままであるか否かを判定する。各バッファのバッファフル回数カウンタが全て初期値であるということは、いずれのバッファにおいてもバッファフルが発生しなかったことを意味する。いずれのバッファにおいてもバッファフルが発生していなければ、各バッファの容量は概ね適切であり、バッファ間での記憶領域の割り当ての変更は不要であるといえる。そのため、ＣＰＵ２８は各バッファのバッファフル回数カウンタが全て初期値である場合は処理を終了する。ＣＰＵ２８はいずれかのバッファフル回数カウンタが初期値でない場合はＳ９０２に進む。
【０１００】
Ｓ９０２では、ＣＰＵ２８は変数「増やすバッファ種別」にバッファフル回数カウンタの値が最大のバッファのバッファ種別番号をセットする。
Ｓ９０３では、ＣＰＵ２８は変数「減らすバッファ種別」にバッファフル回数カウンタの値が最小のバッファのバッファ種別番号をセットする。
【０１０１】
Ｓ９０４では、ＣＰＵ２８は「減らすバッファ種別」にバッファ種別番号がセットされているバッファの記憶領域の半分を、「増やすバッファ種別」にバッファ種別番号がセットされているバッファに割り当てる。
例えば減らすバッファが圧縮バッファ３４であり、増やすバッファが画像処理後バッファ３３であるとする。この場合、これら２つのバッファの間で以下のように記憶領域の割り当てを変更する。
圧縮バッファ容量＝１ＭＢ÷２＝０．５ＭＢ
画像処理後バッファ容量＝５ＭＢ＋０．５ＭＢ＝５．５ＭＢ
【０１０２】
バッファフルになった回数が多いバッファは今後もバッファフルが発生する可能性が高いバッファであり、逆にバッファフルになった回数が少ないバッファは今後もバッファフルが発生する可能性が低いバッファであるといえる。したがって、バッファフルになった回数が少ないバッファへの記憶領域の割り当てを減らし、バッファフルになった回数が多いバッファへの記憶領域の割り当てを増やすことにより、バッファフルが発生する可能性を低減でき、パフォーマンスを好適に向上できる。
【０１０３】
＜実施形態３＞
次に、本発明の実施形態３を図１５ないし図１８によって説明する。
実施形態３では、バッファフルの継続時間が短いバッファへの記憶領域の割り当てを減らし、バッファフルの継続時間が長いバッファへの記憶領域の割り当てを増やす。
【０１０４】
（３−１）パフォーマンス測定開始処理
図１５は、実施形態３に係るパフォーマンス測定開始処理のフローチャートである。
Ｓ１００１では、ＣＰＵ２８はバッファフルが継続していた時間のうち最も長く継続していた時間である最長継続時間を記憶するための変数「ラインバッファフル最長継続時間」、「画像処理後バッファフル最長継続時間」、「圧縮バッファフル最長継続時間」、及び「Ｉ／Ｆ転送バッファフル最長継続時間」を初期化する。初期化すると各変数には初期値として０ミリ秒がセットされる。
【０１０５】
（３−２）パフォーマンス測定スキャン処理
実施形態３のパフォーマンス測定スキャン処理では、いずれのバッファについても「パフォーマンス測定１」及び「パフォーマンス測定２」を実行し、「パフォーマンス測定３」は実行しない。
【０１０６】
（３−３）パフォーマンス測定１
実施形態３のパフォーマンス測定１もバッファ毎にそれぞれ異なる処理が実行される。ただし、処理内容は実質的に同一であるので、ここでは代表して「ラインバッファのパフォーマンス測定１」について説明する。
【０１０７】
図１６は、「ラインバッファのパフォーマンス測定１」の処理の流れを示すフローチャートである。
Ｓ１１０１では、ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦのときはＳ１１０２に進み、ＯＦＦでないとき、すなわちＯＮのときは処理を終了する。
Ｓ１１０２では、ＣＰＵ２８はラインバッファフルが発生した時刻を記憶する変数「ラインバッファフル発生時刻」に現在の時刻をセットする。
【０１０８】
（３−４）パフォーマンス測定２
パフォーマンス測定２についても処理内容は実質的に同一であるので、ここでは代表して「ラインバッファのパフォーマンス測定２」について説明する。
図１７は、「ラインバッファのパフォーマンス測定２」の処理の流れを示すフローチャートである。
Ｓ１２０１では、ＣＰＵ２８は変数「ラインバッファフル発生時刻」に記憶されている時刻と現在の時刻との時間差を算出し、算出した時間差を今回のラインバッファフル継続時間とする。
【０１０９】
Ｓ１２０２では、ＣＰＵ２８は今回のラインバッファフル継続時間が変数「ラインバッファフル最長継続時間」よりも長いか否かを判定する。ＣＰＵ２８は今回のラインバッファフル継続時間の方が「ラインバッファフル最長継続時間」よりも長いときはＳ１２０３に進み、「ラインバッファフル最長継続時間」と同じかそれより短い場合は処理を終了する。
【０１１０】
Ｓ１２０３では、ＣＰＵ２８は「ラインバッファフル最長継続時間」に今回のラインバッファフル継続時間をセットする。
【０１１１】
（３−５）パフォーマンス測定結果に基づいた各バッファ容量変更処理
図１８は、パフォーマンス測定結果に基づいた各バッファ容量変更処理の流れを示すフローチャートである。
Ｓ１３０１では、ＣＰＵ２８は各バッファのバッファフル最長継続時間が全て初期値（０ミリ秒）のままであるか否かを判定する。各バッファのバッファフル最長継続時間が全て初期値であるということは、いずれのバッファにおいてもバッファフルが発生しなかったことを意味する。ＣＰＵ２８はいずれかのバッファフル最長継続時間が初期値でない場合はＳ１３０２に進み、全て初期値である場合は処理を終了する。
【０１１２】
Ｓ１３０２では、ＣＰＵ２８は変数「増やすバッファ種別」にバッファフル最長継続時間が最も長いバッファのバッファ種別番号をセットする。
Ｓ１３０３では、ＣＰＵ２８は変数「減らすバッファ種別」にバッファフル最長継続時間が最も短いバッファのバッファ種別番号をセットする。
【０１１３】
Ｓ１３０４では、ＣＰＵ２８は「減らすバッファ種別」にバッファ種別番号がセットされているバッファのバッファ容量の半分を、「増やすバッファ種別」にバッファ種別番号がセットされているバッファに割り当てる。
例えば減らすバッファが圧縮バッファ３４であり、増やすバッファがＩ／Ｆ転送バッファ３５であるとする。この場合、これら２つのバッファの間で以下のように記憶領域の割り当てを変更する。
圧縮バッファ容量＝１ＭＢ÷２＝０．５ＭＢ
Ｉ／Ｆ転送バッファ容量＝１ＭＢ＋０．５ＭＢ＝１．５ＭＢ
【０１１４】
バッファフル最長継続時間が長いバッファは今後もバッファフルが発生する可能性が高いバッファであり、逆にバッファフル最長継続時間が短いバッファは今後もバッファフルが発生する可能性が低いバッファであるといえる。したがって、バッファフル最長継続時間が短いバッファへの記憶領域の割り当てを減らしてバッファフル最長継続時間が長いバッファへの記憶領域の割り当てを増やすことにより、バッファフルが発生する可能性を低減でき、パフォーマンスを好適に向上できる。
【０１１５】
＜実施形態４＞
次に、本発明の実施形態４を図１９ないし図２１によって説明する。
実施形態４では、バッファフルが発生しなかったバッファへの記憶領域の割り当てを減らす場合に、バッファフルが発生しなかったバッファの最小空き容量分を減らし、その分だけ他のバッファへの記憶領域の割り当てを増やす。
【０１１６】
（４−１）パフォーマンス測定開始処理
図１９は、実施形態４に係るパフォーマンス測定開始処理のフローチャートである。
Ｓ１４０１では、ＣＰＵ２８は各バッファのバッファフル発生順を記憶する変数「第１のバッファ種別」、「第２のバッファ種別」、「第３のバッファ種別」及び「第４のバッファ種別」を初期化する。
【０１１７】
Ｓ１４０２では、バッファの最小空き容量をバッファ毎にカウントする変数である「ラインバッファ最小空き容量」、「画像処理後バッファ最小空き容量」、「圧縮バッファ最小空き容量」、「Ｉ／Ｆ転送バッファ最小空き容量」を初期化する。初期化すると各変数には「ラインバッファ容量」、「画像処理後バッファ容量」、「圧縮バッファ容量」、「Ｉ／Ｆ転送バッファ容量」がそれぞれ初期値としてセットされる。
【０１１８】
（４−２）パフォーマンス測定スキャン処理
実施形態４のパフォーマンス測定スキャン処理では、いずれのバッファについても「パフォーマンス測定１」及び「パフォーマンス測定３」を実行し、「パフォーマンス測定２」は実行しない。
【０１１９】
（４−３）パフォーマンス測定１
実施形態４のパフォーマンス測定１は実施形態１のパフォーマンス測定１と同じ処理であり、各バッファについて同一の処理が呼び出される。処理内容は実施形態１のパフォーマンス測定１と同一であるため説明は省略する。
【０１２０】
（４−４）パフォーマンス測定３
パフォーマンス測定３はバッファ毎にそれぞれ異なる処理が実行される。ただし、処理内容は実質的に同一であるため、ここでは代表して「ラインバッファのパフォーマンス測定３」について説明する。
【０１２１】
図２０は、「ラインバッファのパフォーマンス測定３」の処理の流れを示すフローチャートである。
Ｓ１５０１では、ＣＰＵ２８はラインバッファ３２の現在の空き容量を取得し、「ラインバッファ最小空き容量」と現在の空き容量とを比較する。ＣＰＵ２８は「ラインバッファ最小空き容量」よりも現在の空き容量の方が少ないときはＳ１５０２に進み、「ラインバッファ最小空き容量」が現在の空き容量と同じかそれよりも少ないときは処理を終了する。
Ｓ１５０２では、ＣＰＵ２８は「ラインバッファ最小空き容量」に現在の空き容量をセットする。
【０１２２】
（４−５）パフォーマンス測定結果に基づいた各バッファ容量変更処理
図２１は、パフォーマンス測定結果に基づいた各バッファ容量変更処理の流れを示すフローチャートである。
Ｓ１６０１では、ＣＰＵ２８は変数「第１のバッファ種別」の値がＳ１４０２で設定した初期値のままであるか否かを判定する。「第１のバッファ種別」の値が初期値である場合はいずれのバッファもバッファフルが発生していないということであるため、ＣＰＵ２８は記憶領域の割り当てを変更しないで処理を終了する。
【０１２３】
Ｓ１６０２では、ＣＰＵ２８は変数「増やすバッファ種別」に、「第１のバッファ種別」にセットされているバッファ種別番号をセットする。これにより、最初にバッファフルが発生したバッファが記憶容量の増量の対象となる。
Ｓ１６０３では、ＣＰＵ２８は変数「減らすバッファ種別」に、いずれかバッファフルが発生していないバッファのバッファ種別番号をセットする。例えばバッファフルが発生していないバッファが複数ある場合は、それら複数のバッファのバッファ種別番号をセットする。
【０１２４】
Ｓ１６０４では、ＣＰＵ２８は「減らすバッファ種別」にバッファ種別番号がセットされているバッファの最小空き容量を、「増やすバッファ種別」にバッファ種別番号がセットされているバッファに割り当てる。
具体的には例えば、減らすバッファが圧縮バッファ３４とＩ／Ｆ転送バッファ３５であり、増やすバッファが画像処理後バッファ３３であるとする。そして、圧縮バッファ３４及びＩ／Ｆ転送バッファ３５の最小空き容量はそれぞれ０．８ＭＢ、０．３ＭＢであったとする。この場合、これら３つのバッファの間で以下のように記憶領域の割り当てを変更する。
圧縮バッファ容量＝１ＭＢ−０．８ＭＢ＝０．２ＭＢ
Ｉ／Ｆ転送バッファ容量＝１ＭＢ−０．３ＭＢ＝０．７ＭＢ
画像処理後バッファ容量＝５ＭＢ＋０．８ＭＢ＋０．３ＭＢ＝６．１ＭＢ
なお、全てのバッファでバッファフルが発生した場合は実施形態１と同様にして最後にバッファフルが発生したバッファの記憶領域を減らすようにすればよい。
【０１２５】
以上説明したように、バッファフルが発生しなかったバッファへの記憶領域の割り当てを減らす場合、当該バッファの最小空き容量分を減らし、その分だけ他のバッファへの記憶領域の割り当てを増やすようにすると、減らすバッファについて記憶領域を減らし過ぎてしまうことを低減でき、より適切に割り当てることができる。
【０１２６】
＜実施形態５＞
次に、本発明の実施形態５を図２２ないし図２５によって説明する。
実施形態５では、最初にバッファフルが発生したバッファ以外のバッファのうちバッファフルの継続時間が最も短かったバッファの記憶領域を減らし、その分だけ最初にバッファフルが発生したバッファの記憶領域を増やす。
【０１２７】
（５−１）パフォーマンス測定開始処理
図２２は、実施形態５に係るパフォーマンス測定開始処理のフローチャートである。
Ｓ１７０１では、ＣＰＵ２８は各バッファのバッファフル発生順を記憶する変数「第１のバッファ種別」、「第２のバッファ種別」、「第３のバッファ種別」及び「第４のバッファ種別」を初期化する。
【０１２８】
Ｓ１７０２では、ＣＰＵ２８はバッファフルが継続していた時間のうち最も長く継続していた時間である最長継続時間をバッファ毎に記憶する変数「ラインバッファフル最長継続時間」、「画像処理後バッファフル最長継続時間」、「圧縮バッファフル最長継続時間」、及び「Ｉ／Ｆ転送バッファフル最長継続時間」を初期化する。初期化すると各変数に初期値として０ミリ秒がセットされる。
【０１２９】
（５−２）パフォーマンス測定スキャン処理
実施形態５のパフォーマンス測定スキャン処理では、いずれのバッファについても「パフォーマンス測定１」及び「パフォーマンス測定２」を実行し、「パフォーマンス測定３」は実行しない。
【０１３０】
（５−３）パフォーマンス測定１
実施形態５のパフォーマンス測定１もバッファ毎にそれぞれ異なる処理が実行される。ただし、処理内容は実質的に同一であるので、ここでは代表して「ラインバッファのパフォーマンス測定１」について説明する。
【０１３１】
図２３は、「ラインバッファのパフォーマンス測定１」の処理の流れを示すフローチャートである。なお、実施形態５では変数「第１のバッファ種別」〜「第４のバッファ種別」はグローバル変数であり、他のバッファのパフォーマンス測定１からも共通にアクセスされる。
Ｓ１８０１では、ＣＰＵ２８は変数「第１のバッファ種別」の値がＳ１７０１で設定した初期値のままであるか否かを判定する。ＣＰＵ２８は「第１のバッファ種別」の値が初期値のままであるときはＳ１８０２に進み、初期値でなければＳ１８０３に進む。
【０１３２】
Ｓ１８０２では、ＣＰＵ２８は変数「第１のバッファ種別」に、バッファフルが発生したバッファに割り当てられているバッファ種別番号をセットする。「ラインバッファのパフォーマンス測定処理１」の場合はバッファフルが発生したバッファはラインバッファ３２であるので、ラインバッファ３２に割り当てられているバッファ種別番号を「第１のバッファ種別」にセットする。ＣＰＵ２８は変数「第１のバッファ種別」にバッファ種別番号をセットするとＳ１８０９に進む。
【０１３３】
Ｓ１８０３〜Ｓ１８０８までの処理はＳ１８０１〜Ｓ１８０２までの処理と実質的に同一であるため説明は省略する。
Ｓ１８０９では、ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦであるか否かを判定する。ＣＰＵ２８は「ラインバッファフル停止中フラグ」がＯＦＦのときはＳ１８１０に進み、ＯＦＦでないとき、すなわちＯＮのときは処理を終了する。
Ｓ１８１０では、ＣＰＵ２８は「ラインバッファフル発生時刻」に現在の時刻をセットする。
【０１３４】
（５−４）パフォーマンス測定２
パフォーマンス測定２についても処理内容は実質的に同一であるので、ここでは代表して「ラインバッファのパフォーマンス測定２」について説明する。
【０１３５】
図２４は、ラインバッファのパフォーマンス測定２の処理の流れを示すフローチャートである。
Ｓ１９０１では、ＣＰＵ２８は変数「ラインバッファフル発生時刻」に記憶されている時刻と現在の時刻との時間差を算出し、算出した時間差を今回のラインバッファフル継続時間とする。
【０１３６】
Ｓ１９０２では、ＣＰＵ２８は今回のラインバッファフル継続時間が変数「ラインバッファフル最長継続時間」よりも長いか否かを判定する。ＣＰＵ２８は今回のラインバッファフル継続時間が「ラインバッファフル最長継続時間」よりも長いときはＳ１９０３に進み、今回のラインバッファフル継続時間が「ラインバッファフル最長継続時間」と同じかそれより短い場合は処理を終了する。
Ｓ１９０３では、ＣＰＵ２８は「ラインバッファフル最長継続時間」に今回のラインバッファフル継続時間をセットする。
【０１３７】
（５−５）パフォーマンス測定結果に基づいた各バッファ容量変更処理
図２５は、パフォーマンス測定結果に基づいた各バッファ容量変更処理の流れを示すフローチャートである。
Ｓ２００１では、ＣＰＵ２８は変数「第１のバッファ種別」の値がＳ１７０１で設定した初期値のままであるか否かを判定し、「第１のバッファ種別」の値が初期値である場合は処理を終了する。
【０１３８】
Ｓ２００２では、ＣＰＵ２８は変数「増やすバッファ種別」に、変数「第１のバッファ種別」にセットされているバッファ種別番号をセットする。これにより、最初にバッファフルが発生したバッファが記憶容量の増量の対象となる。
【０１３９】
Ｓ２００３では、ＣＰＵ２８は変数「減らすバッファ種別」に、「第１のバッファ種別」にバッファ種別番号がセットされているバッファ以外のバッファのうちバッファフル最長継続時間が最小のバッファのバッファ種別番号をセットする。
【０１４０】
Ｓ２００４では、ＣＰＵ２８は「減らすバッファ種別」にバッファ種別番号がセットされているバッファのバッファ容量の半分を、「増やすバッファ種別」にバッファ種別番号がセットされているバッファに割り当てる。
例えば減らすバッファが圧縮バッファ３４であり、増やすバッファがＩ／Ｆ転送バッファ３５であるとする。この場合、これら２つのバッファの間で以下のように記憶領域の割り当てを変更する。
圧縮バッファ容量＝１ＭＢ÷２＝０．５ＭＢ
Ｉ／Ｆ転送バッファ容量＝５ＭＢ＋０．５ＭＢ＝５．５ＭＢ
【０１４１】
以上説明したように、最初にバッファフルが発生したバッファの記憶領域を増やす場合、最初にバッファフルが発生したバッファ以外のバッファのうちバッファフルの継続時間が最も短かったバッファの記憶領域を減らしてもよい。
【０１４２】
＜他の実施形態＞
本発明は上記記述及び図面によって説明した実施形態に限定されるものではなく、例えば次のような実施形態も本発明の技術的範囲に含まれる。
【０１４３】
（１）上記実施形態では原稿が１ページのみのときは各バッファの使用状況の取得は行わず、原稿が複数ページに亘るときのみ使用状況を取得する場合を例に説明したが、１ページのみのときであっても使用状況を取得するようにしてもよい。
【０１４４】
（２）上記実施形態では所定範囲として原稿が複数ページからなる場合の１ページ目を例に説明したが、所定範囲は原稿全体が読み取られる間に取得される使用状況に基づいて割り当てを変更する場合と比べて変更結果に大差がないと予想される程度の広さの範囲であればよく、１ページ目に限定されない。例えば、原稿の先頭から半ページが読み取られる間の使用状況を取得してもよいし、最初の２ページが読み取られる間の使用状況を取得してもよい。
【０１４５】
また、原稿の所定範囲が読み取られる間の使用状況を取得する場合、原稿の互いに離間した複数の所定範囲について当該所定範囲を読み取って送信するまでの間の各バッファの使用状況をそれぞれ取得し、各所定範囲について使用状況が取得される毎に当該取得された使用状況に基づいて２つ以上のバッファの間で記憶領域の割り当てを変更するようにしてもよい。例えば、原稿が６ページからなる場合、１ページ目、３ページ目、５ページ目についてそれぞれ使用状況を取得するようにしてもよい。あるいは原稿が１ページである場合は、原稿を読み取り方向に複数の範囲に分割し、１範囲おきに使用状況を取得してもよい。これにより、１つの原稿を読み取っている間に原稿内容の変化に応じてよりきめ細かく割り当てを変更できるので、より適切に変更できる。
【０１４６】
また、所定範囲は原稿を基準に決定される場合に限定されず、読取部２１の読み取り動作を基準に決定してもよい。例えば読取部２１がある範囲を読み取る間の使用状況を取得するようにしてもよい。この場合、原稿サイズによっては読み取られた範囲が半ページに相当する場合もあれば、１／４ページに相当する場合もあることになる。
【０１４７】
（３）上記実施形態では例えば最初にバッファフルが発生したバッファの記憶容量を増やすといったように、バッファの間に割り当ての優先順位がない場合を例に説明したが、バッファの間に割り当ての優先順位をつけ、例えば優先順位が最も高いバッファのバッファフル発生順が２番目であったとした場合、１番目にバッファフルが発生したバッファではなく、当該優先順位が最も高いバッファの記憶領域を増やすように割り当てを変更してもよい。
【０１４８】
例えば、前述したようにラインバッファ３２にバッファフルが発生すると読み取りが停止する。つまりＡＤＦ１９による原稿の搬送、あるいはキャリッジ２５によるＣＩＳの搬送が停止し、その後に搬送が再開することになる。このような停止と再開とを繰り返すと画像品質が低下する虞がある。この場合、ラインバッファ３２の優先順位を高くして優先的に記憶領域を割り当てるようにしてもよい。
【０１４９】
（４）上記実施形態では原稿が複数ページに亘るときは常に使用状況を取得して割り当てを変更するが、前回と同じ送信先に前回と同じインタフェースで送信するときは、使用状況の取得および割り当ての変更は行わないようにしてもよい。
一般にインタフェースの送信能力はバッファの使用状況に大きく影響する。逆にいうと、送信能力が前回と同じであれば、インタフェース以外の処理手段による影響はあるものの、概ね前回と同程度のパフォーマンスを維持できる可能性がある。ところで、送信能力はインタフェースにのみ依存するのではなく、送信先の機器の受信能力にも依存する。したがって、送信先及びインタフェースが前回と同じである場合は、前回と概ね同程度の処理能力を維持できるものとして使用状況の取得や割り当ての変更を省略することにより、効率よく処理を実行できる。
【０１５０】
（５）上記実施形態ではバッファ領域として４つのバッファ（ラインバッファ３２、画像処理後バッファ３３、圧縮バッファ３４、Ｉ／Ｆ転送バッファ３５）を例に説明したが、バッファの種類や数はこれに限定されるものではない。
【０１５１】
（６）上記実施形態では使用状況として、バッファフル発生順、バッファフル発生回数、バッファフル最長継続時間、バッファ最小空き容量を例に説明したが、使用状況はこれらに限られるものではない。また、これらを適宜に組み合わせて使用状況として用いてもよい。
【０１５２】
（７）上記実施形態では「減らすバッファ種別」のバッファ容量の半分を減らす場合を例に説明したが、例えば１／３などと係数を変えたり、バッファ容量の比などに応じて減らす記憶領域を算出してもよい。
【０１５３】
（８）上記実施形態では１種のバッファを増やし、１〜２種のバッファの容量を減らす場合を例に説明したが、２種のバッファの記憶領域を増やし、１種のバッファの記憶領域を減らすなど、増減するバッファ種別の数の組み合わせは適宜変更可能である。
【図面の簡単な説明】
【０１５４】
【図１】本発明の一実施形態に係る画像読取装置の模式図。
【図２】本発明の一実施形態に係る画像データの流れを示すブロック図。
【図３】本発明の一実施形態に係るフローチャート。
【図４】本発明の一実施形態に係るフローチャート。
【図５】本発明の一実施形態に係るフローチャート。
【図６】本発明の一実施形態に係るフローチャート。
【図７】本発明の一実施形態に係るフローチャート。
【図８】本発明の一実施形態に係るフローチャート。
【図９】本発明の一実施形態に係るフローチャート。
【図１０】本発明の一実施形態に係るフローチャート。
【図１１】本発明の一実施形態に係るフローチャート。
【図１２】本発明の一実施形態に係るフローチャート。
【図１３】本発明の一実施形態に係るフローチャート。
【図１４】本発明の一実施形態に係るフローチャート。
【図１５】本発明の一実施形態に係るフローチャート。
【図１６】本発明の一実施形態に係るフローチャート。
【図１７】本発明の一実施形態に係るフローチャート。
【図１８】本発明の一実施形態に係るフローチャート。
【図１９】本発明の一実施形態に係るフローチャート。
【図２０】本発明の一実施形態に係るフローチャート。
【図２１】本発明の一実施形態に係るフローチャート。
【図２２】本発明の一実施形態に係るフローチャート。
【図２３】本発明の一実施形態に係るフローチャート。
【図２４】本発明の一実施形態に係るフローチャート。
【図２５】本発明の一実施形態に係るフローチャート。
【符号の説明】
【０１５５】
１…複合機（画像読取装置）
２３…イメージセンサ（読取手段）
２６…イメージセンサ制御回路（読取手段）
２７…画像処理回路（処理手段）
２８…ＣＰＵ（読取手段、処理手段、送信手段、記憶手段、取得手段、変更手段）
３０…ＲＡＭ（記憶手段）
３７…ＵＳＢインタフェース（送信手段）
３８…ネットワークインタフェース（送信手段）
【図１】
2010016646.tif 000003
【図２】
2010016646.tif 000004
【図３】
2010016646.tif 000005
【図４】
2010016646.tif 000006
【図５】
2010016646.tif 000007
【図６】
2010016646.tif 000008
【図７】
2010016646.tif 000009
【図８】
2010016646.tif 000010
【図９】
2010016646.tif 000011
【図１０】
2010016646.tif 000012
【図１１】
2010016646.tif 000013
【図１２】
2010016646.tif 000014
【図１３】
2010016646.tif 000015
【図１４】
2010016646.tif 000016
【図１５】
2010016646.tif 000017
【図１６】
2010016646.tif 000018
【図１７】
2010016646.tif 000019
【図１８】
2010016646.tif 000020
【図１９】
2010016646.tif 000021
【図２０】
2010016646.tif 000022
【図２１】
2010016646.tif 000023
【図２２】
2010016646.tif 000024
【図２３】
2010016646.tif 000025
【図２４】
2010016646.tif 000026
【図２５】
2010016646.tif 000027