(57)【要約】【課題】メインプロセスのリアルタイム性を保証しつつ、サブプロセスを可能な限り高速で処理できるようにする。【解決手段】  品質判定部１４４は、メインプロセス処理部１４１の品質レベルとして、例えば品質保証余裕度を測定する。処理速度制御部１５４は、CCPU使用率上限値設定部１３３により設定されたCPU使用率の上限値と、CPU使用率検出部１３４により検出された現在のCPU使用率との間の関係、および、品質判定部１４４により判定された現在の品質保証余裕度と、リアルタイム性を確保するために必要最低限な品質レベルとの間の関係に基づいて、処理速度制御範囲内で、サブプロセス処理部１３２の処理速度を制御する。本発明は例えば、メインプロセスとサブプロセスとしてオーディオ／ビデオの処理が実行されるソフトウエアシステムを実現可能な、CPUを備える情報処理装置に適用可能である。【選択図】図４
2006085386.tif 000002
【特許請求の範囲】
【請求項１】
所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理を並列的に実行させるプロセッサを備える情報処理装置において、
前記プロセッサにより実行される前記メインプロセスの処理内容を監視し、その監視結果に基づいて、前記所定の種類の品質のレベルを測定する測定手段と、
前記プロセッサの現在の使用率を検出する検出手段と、
前記プロセッサの使用率の上限値を設定する設定手段と、
前記検出手段により検出された前記プロセッサの現在の使用率と、前記設定手段により設定された前記プロセッサの使用率の上限値との間の第１の関係、および、前記所定の種類の品質についての、前記測定手段により現時点またはその直前に測定された第２のレベルと、確保すべき前記第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、前記プロセッサにより実行される前記サブプロセスの処理速度を制御する制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記第１の関係と前記第２の関係とに加えてさらに、前記測定手段によりこれまでに測定されてきた前記所定の種類の品質のレベルの時間変化に基づいて、前記サブプロセスの処理速度を制御する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記サブプロセスは、
前記プロセッサにより実行される複数の機能ブロックが所定の順番で配置され、かつ、複数の前記機能ブロックのうちの並んで配置される２つの機能ブロックの間にバッファが配置されて構成され、
前記プロセッサは、複数の前記機能ブロックのうちの、最終段の機能ブロックを除く機能ブロックのそれぞれに対して、
所定の単位量の処理に必要なデータが前段のバッファに記憶されているという第１の条件、および、そのデータを記憶させるための空き領域が所定の容量以上だけ後段のバッファに確保されているという第２の条件が満たされた場合、他の機能ブロックとは独立して自立的に、前段の前記バッファからデータを読み出して所定の処理を施し、その処理が施された前記データを後段の前記バッファに書きこむことを開始させ、
前記プロセッサは、複数の前記機能ブロックのうちの、最終段の前記機能ブロックに対して、
前記第１の条件に加えてさらに、前回の処理の開始時点から所定の処理間隔が経過したという第３の条件が満たされた場合、他の機能ブロックとは独立して自立的に、前段のバッファから所定のデータ量のデータを読み出して所定の処理を施し、その処理が施された前記データを、前記サブプロセスの出力データとして外部に出力することを開始させ、
前記制御手段は、
所定のタイミング毎に、そのタイミングにおける前記第１の関係と前記第２の関係のうちの少なくとも一方に基づいて制御量を決定し、決定された前記制御量に応じて、前記第３の条件に含まれる前記処理間隔を更新させていくことで、前記サブプロセスの処理速度を制御する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記制御手段は、前記第２のレベルと前記第１のレベルとの差分が所定の大きさ以上である場合、前記第１の関係を利用して前記制御量を決定し、前記差分が前記大きさ未満である場合、前記第２の関係を利用して前記制御量を決定する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記メインプロセスの単位時間当たりのデータ処理量が前記所定の種類の品質とされ、
前記単位時間当たりに前記メインプロセスから出力すべきデータ量が、前記メインプロセスが確保すべき前記第１のレベルとされ、
前記メインプロセスは、前記プロセッサにより実行される複数の機能ブロックが所定の順番で配置され、かつ、複数の前記機能ブロックのうちの並んで配置される２つの機能ブロックの間にバッファが配置されて構成され、
前記プロセッサは、複数の前記機能ブロックのうちの最終段の機能ブロックに対して、
前記単位時間毎に、前段のバッファから前記第１のレベルに対応するデータ量のデータを読み出して所定の処理を施し、その処理が施された前記データを、前記メインプロセスの出力データとして外部に出力することを開始させ、
前記測定手段は、前記メインプロセスの最終段の前記機能ブロックにとっての前段の前記バッファの記憶データ量を監視し、前記単位時間毎に、その時点で監視された前記バッファの記憶データ量を、前記所定の種類の品質の前記第２のレベルとして測定する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項６】
所定の所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理を並列的に実行させるプロセッサを備える情報処理装置の情報処理方法において、
前記プロセッサにより実行される前記メインプロセスの処理内容を監視し、その監視結果に基づいて、前記所定の種類の品質のレベルを測定する測定ステップと、
前記プロセッサの現在の使用率を検出する検出ステップと、
前記プロセッサの使用率の上限値を設定する設定ステップと、
前記検出ステップの処理により検出された前記プロセッサの現在の使用率と、前記設定ステップの処理により設定された前記プロセッサの使用率の上限値との間の第１の関係、および、前記所定の種類の品質についての、前記測定ステップの処理により現時点またはその直前に測定された第２のレベルと、確保すべき前記第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、前記プロセッサにより実行される前記サブプロセスの処理速度を制御する制御ステップと
を含むことを特徴とする情報処理方法。
【請求項７】
所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理を並列的に実行させるプロセッサを備えるコンピュータに実行させるプログラムであって、
前記プロセッサにより実行される前記メインプロセスの処理内容を監視し、その監視結果に基づいて、前記所定の種類の品質のレベルを測定する測定ステップと、
前記プロセッサの現在の使用率を検出する検出ステップと、
前記プロセッサの使用率の上限値を設定する設定ステップと、
前記検出ステップの処理により検出された前記プロセッサの現在の使用率と、前記設定ステップの処理により設定された前記プロセッサの使用率の上限値との間の第１の関係、および、前記所定の種類の品質についての、前記測定ステップの処理により現時点またはその直前に測定された第２のレベルと、確保すべき前記第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、前記プロセッサにより実行される前記サブプロセスの処理速度を制御する制御ステップと
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および方法、並びにプログラムに関し、特に、メインプロセスのリアルタイム性を保証しつつ、サブプロセスを可能な限り高速で処理することができる、情報処理装置および方法、並びにプログラムに関する。
【背景技術】
【０００２】
近年、複数のプロセッサで構成されるマルチプロセッサシステムが普及してきている。マルチプロセッサシステムは、例えば、１つのメインプロセッサ(MCPU : Main Central Processing Unit）と、複数のサブプロセッサ(SCPU : Sub Central Processing Unit）とがバスを介して相互に接続されて構成される。なお、このバスには、MCPUとSCPUとの他、メインメモリ等が接続されることもある。
【０００３】
このように、マルチプロセッサシステは、複数のプロセッサを有するので、複数のプロセス（例えば、特許文献１参照）のそれぞれを並列して処理することが容易にできる。例えば、マルチプロセッサシステムは、所定のソフトウエアを１以上実行することで、メインプロセスとして図１に示されるようなメインプロセス処理部１を構築し、サブプロセスとして同図に示されるようなサブプロセス処理部２を構築することが容易にできる。そして、マルチプロセッサシステムは、構築されたメインプロセス処理部１とサブプロセス処理部２とのそれぞれの処理を並列して個別に実行することが容易にできる。
【０００４】
即ち、図１は、従来のマルチプロセッサシステムにより構築されてその処理が実行される、メインプロセスとサブプロセスとを含むソフトウエアシステムの構成例を示す機能ブロック図である。
【０００５】
図１の例のメインプロセス処理部１は、ソフトウエアモジュール（機能ブロック）である機能処理部１１乃至１３のそれぞれがその順番に配置されて構築される。機能処理部１１乃至１３のそれぞれは、前段から入力されたデータに対して所定の処理を施して、処理が施されたデータを後段に出力する。即ち、このような機能処理部１１乃至１３のそれぞれの処理がその順番に実行されて、その結果として、最終段の機能処理部１３から出力されるデータが、メインプロセス処理部１の最終的な出力データとして外部に出力されることになる。
【０００６】
同様に、図１の例のサブプロセス処理部２は、ソフトウエアモジュール（機能ブロック）である機能処理部２１乃至２３のそれぞれがその順番に配置されて構築される。機能処理部２１乃至２３のそれぞれは、前段から入力されたデータに対して所定の処理を施して、処理が施されたデータを後段に出力する。即ち、このような機能処理部２１乃至２３のそれぞれの処理がその順番に実行されて、その結果として、最終段の機能処理部２３から出力されるデータが、サブプロセス処理部２の最終的な出力データとして外部に出力されることになる。
【０００７】
なお、ここでは例えば、メインプロセス処理部１のようなメインプロセスとは、リアルタイム性の保証が必要となるプロセスを指す。これに対して、サブプロセスとは、その保証が不要なプロセスを指す。リアルタイム性とは、所定の処理単位のデータに対するプロセスの全処理が所定の単位時間内に完了する、という性質を指す。
【０００８】
以上説明したようなメインプロセスとサブプロセスとのそれぞれの処理が並列して実行される場合、「メインプロセスに影響が無い範囲で、即ち、メインプロセスのリアルタイム性を保証しつつ、サブプロセスを可能な限り高速で（Best effort modeで）実行させたい」という要望が多数のユーザから近年挙げられている。
【特許文献１】特許第３２５３９７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、図１に示されるように、サブプロセスをメインプロセスと完全に独立してフリーランで走らせるという手法（以下、第１の従来の手法と称する）が利用された場合、サブプロセスの処理速度の最高速度が非常に高いときには、サブプロセスの処理速度が最高速度に到達する前に、プロセッサ全体の使用率が100％ になってしまうことが多々ある。また、プロセッサ全体の使用率が100％になる前に、サブプロセスの処理速度が最高速度に到達するときでも、その最高速度がある程度高い値であるときには、プロセッサ全体の使用率は100％ にならないまでも高率になってしまうことが多々ある。即ち、第１の従来の手法が利用された場合には、プロセッサが過負荷状態になってしまうことが多々ある。
【００１０】
このようにしてプロセッサが過負荷状態になってしまうと、メインプロセスの優先度がサブプロセスの優先度よりたとえ高く設定されていたとしても、メインプロセスのリアルタイム性の保証を維持していくことが困難になる、という課題が発生してしまう。即ち、第１の従来の手法が利用された場合には、上述した要望に応えることは困難になってしまう、という課題が発生してしまう。
【００１１】
また、特許文献１には、メインプロセスの処理として、リアルタイムデータを他の情報処理装置に転送するデータ転送処理が開示されており、また、サブプロセスの処理として、非リアルタイムデータを他の情報処理装置に転送するデータ転送処理が開示されている。そして、特許文献１には、次のような手法が開示されている。即ち、メインプロセスは、自分自身が使用する帯域を登録し、登録された帯域以下でデータ転送処理を行う。このデータ転送処理の全てが終了するまでの間は、登録された帯域は固定される。また、サブプロセスは、予め設定された最大帯域（例えば、プロセッサの上限値「％」）から、メインプロセスにより登録された帯域を減算し、その減算の結果得られる帯域以下でデータ転送処理を行う。即ち、サブプロセスもまた、メインプロセスのデータ転送処理の全てが終了するまでの間は、固定された帯域以下でデータ転送を行う。以上のような手法が、特許文献１には開示されている。以下、特許文献１に開示されたこの手法を、第２の従来の手法と称する。
【００１２】
このような第２の従来の手法が利用された場合、メインプロセスが実際に使用している帯域とは無関係に、予め登録された固定帯域に応じて、サブプロセスの使用帯域の上限も決定されることになる。即ち、サブプロセスの使用帯域の上限は、メインプロセスが実際に使用している帯域が少ない場合でも（プロセッサに余裕がある場合でも）、この固定帯域に依存して一定となる。換言すると、サブプロセスの処理の実際の最高速度は、プロセッサに余裕がある場合でも、この固定帯域に依存して一定となり、本来得られるはずの最高速度よりも低くなってしまうことが多々ある。
【００１３】
従って、第２の従来の手法が利用された場合には、メインプロセスのリアルタイム性の保証自体は可能になるが、サブプロセスを可能な限り高速で処理させることは困難になる、という課題が発生してしまう。即ち、上述した要望に応えることは困難になってしまう、という課題が発生してしまう。
【００１４】
以上の内容をまとめると、特許文献１を含む従来の手法では上述した要望に充分応えることは困難である、という課題があった。
【００１５】
本発明は、このような状況に鑑みてなされたものであり、メインプロセスのリアルタイム性を保証しつつ、サブプロセスを可能な限り高速で処理できるようにするものである。
【課題を解決するための手段】
【００１６】
本発明の情報処理装置は、所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理を実行させるプロセッサを備える情報処理装置であって、プロセッサにより実行されるメインプロセスの処理内容を監視し、その監視結果に基づいて、その所定の種類の品質のレベルを測定する測定手段と、プロセッサの現在の使用率を検出する検出手段と、プロセッサの使用率の上限値を設定する設定手段と、検出手段により検出されたプロセッサの現在の使用率と、設定手段により設定されたプロセッサの使用率の上限値との間の第１の関係、および、その所定の種類の品質についての、測定手段により現時点またはその直前に測定された第２のレベルと、確保すべき第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、プロセッサにより実行されるサブプロセスの処理速度を制御する制御手段とを備えることを特徴とする。
【００１７】
制御手段は、第１の関係と第２の関係とに加えてさらに、測定手段によりこれまでに測定されてきたその所定の種類の品質のレベルの時間変化に基づいて、サブプロセスの処理速度を制御するようにすることができる。
【００１８】
サブプロセスは、プロセッサにより実行される複数の機能ブロックが所定の順番で配置され、かつ、複数の機能ブロックのうちの並んで配置される２つの機能ブロックの間にバッファが配置されて構成される。プロセッサは、複数の機能ブロックのうちの、最終段の機能ブロックを除く機能ブロックのそれぞれに対して、所定の単位量の処理に必要なデータが前段のバッファに記憶されているという第１の条件、および、そのデータを記憶させるための空き領域が所定の容量以上後段のバッファに確保されているという第２の条件が満たされた場合、他の機能ブロックとは独立して自立的に、前段のバッファからデータを読み出して所定の処理を施し、その処理が施されたデータを後段のバッファに書きこむことを開始させる。また、プロセッサは、複数の機能ブロックのうちの最終段の機能ブロックに対して、第１の条件に加えてさらに、前回の処理の開始時点から所定の処理間隔が経過したという第３の条件が満たされた場合、他の機能ブロックとは独立して自立的に、前段のバッファから所定のデータ量のデータを読み出して所定の処理を施し、その処理が施されたデータを、サブプロセスの出力データとして外部に出力することを開始させる。この間、制御手段は、所定のタイミング毎に、そのタイミングにおける第１の関係と第２の関係とのうちの少なくとも一方に基づいて所定の制御量を決定し、決定された制御量に応じて、第３の条件に含まれる処理間隔を更新させていくことで、サブプロセスの処理速度を制御するようにすることができる。
【００１９】
制御手段は、第２のレベルと第１のレベルとの差分が所定の大きさ以上である場合、第１の関係を利用して制御量を決定し、その差分がその所定の大きさ未満である場合、第２の関係を利用して制御量を決定するようにすることができる。
【００２０】
メインプロセスの単位時間当たりのデータ処理量が上述した所定の種類の品質とされ、単位時間当たりにメインプロセスから出力すべきデータ量が、メインプロセスが確保すべき第１のレベルとされる。また、メインプロセスは、プロセッサにより実行される複数の機能ブロックが所定の順番で配置され、かつ、複数の機能ブロックのうちの並んで配置される２つの機能ブロックの間にバッファが配置されて構成される。プロセッサは、複数の機能ブロックのうちの最終段の機能ブロックに対して、単位時間毎に、その前段のバッファから第１のレベルに対応するデータ量のデータを読み出して所定の処理を施し、その処理が施されたデータを、メインプロセスの出力データとして外部に出力することを開始させる。この間、測定手段は、メインプロセスの最終段の機能ブロックにとっての前段のバッファの記憶データ量を監視し、単位時間毎に、その時点で監視されたバッファの記憶データ量を、上述した所定の種類の品質の第２のレベルとして測定するようにすることができる。
【００２１】
本発明の情報処理方法は、所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理を並列的に実行させるプロセッサを備える情報処理装置の情報処理方法であって、プロセッサにより実行されるメインプロセスの処理内容を監視し、その監視結果に基づいて、その所定の種類の品質のレベルを測定する測定ステップと、プロセッサの現在の使用率を検出する検出ステップと、プロセッサの使用率の上限値を設定する設定ステップと、検出ステップの処理により検出されたプロセッサの現在の使用率と、設定ステップの処理により設定されたプロセッサの使用率の上限値との間の第１の関係、および、その所定の種類の品質についての、測定ステップの処理により現時点またはその直前に測定された第２のレベルと、確保すべき第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、プロセッサにより実行されるサブプロセスの処理速度を制御する制御ステップとを含むことを特徴とする。
【００２２】
本発明のプログラムは、所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理を並列的に実行させるプロセッサを備えるコンピュータに実行させるプログラムであって、プロセッサにより実行されるメインプロセスの処理内容を監視し、その監視結果に基づいて、その所定の種類の品質のレベルを測定する測定ステップと、プロセッサの現在の使用率を検出する検出ステップと、プロセッサの使用率の上限値を設定する設定ステップと、検出ステップの処理により検出されたプロセッサの現在の使用率と、設定ステップの処理により設定されたプロセッサの使用率の上限値との間の第１の関係、および、その所定の種類の品質についての、測定ステップの処理により現時点またはその直前に測定された第２のレベルと、確保すべき第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、プロセッサにより実行されるサブプロセスの処理速度を制御する制御ステップとを含むことを特徴とする。
【００２３】
本発明の情報処理装置および方法、並びにプログラムにおいては、所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理が並列的にプロセッサにより実行される場合に、サブプロセスの処理速度が制御される。詳細には、プロセッサにより実行されるメインプロセスの処理内容が監視され、その監視結果に基づいてその所定の種類の品質のレベルが測定される。また、プロセッサの現在の使用率が検出される。さらに、プロセッサの使用率の上限値が設定される。そして、検出されたプロセッサの現在の使用率と、設定されたプロセッサの使用率の上限値との間の第１の関係、および、その所定の種類の品質についての、現時点またはその直前に測定された第２のレベルと、確保すべき第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、プロセッサにより実行されるサブプロセスの処理速度が制御される。
【発明の効果】
【００２４】
以上のごとく、本発明によれば、リアルタイム性の保証が必要なメインプロセスと、それ以外のサブプロセスとの並列処理を実行することができる。特に、所定の種類の品質を第１のレベル以上に確保することでリアルタイム性を保証しつつ、サブプロセスを可能な限り高速で処理することができる。
【発明を実施するための最良の形態】
【００２５】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００２６】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
【００２７】
本発明によれば、情報処理装置が提供される。この情報処理装置（例えば、図２の情報処理装置）は、所定の種類の品質を第１のレベル以上確保する必要があるメインプロセス（例えば、図４のメインプロセス処理部１３１や図７のメインプロセス処理部１７２）と、それ以外のサブプロセス（例えば、図４のサブプロセス処理部１３２や図７のサブプロセス処理部１７３）とのそれぞれの処理を並列的に実行させるプロセッサ（例えば、図２と図３のCPU１０１）を備える情報処理装置である。詳細には、この情報処理装置は、前記プロセッサにより実行される前記メインプロセスの処理内容を監視し、その監視結果に基づいて、前記所定の種類の品質のレベル（例えば、図４の品質保証余裕度や図７の出力バッファレベルLevel）を測定する測定手段（例えば、図４の品質判定部１４４や図７の品質判定部１９０）と、前記プロセッサの現在の使用率を検出する検出手段（例えば、図４のCPU使用率検出部１３４や図７のOS１６１）と、前記プロセッサの使用率の上限値を設定する設定手段（例えば、図４のCPU使用率上限値設定部１３３や図７のパワー制御１６２）と、前記検出手段により検出された前記プロセッサの現在の使用率（例えば、図５の現在のCPU使用率X）と、前記設定手段により設定された前記プロセッサの使用率の上限値（例えば、図５のCPU使用率の上限値CPU_Limit（＝P））との間の第１の関係（例えば、図５の関係）、および、前記所定の種類の品質についての、前記測定手段により現時点またはその直前に測定された第２のレベル（例えば、図８の丸印で示される出力バッファレベルLevelの各値）と、確保すべき前記第１のレベル（例えば、図８の白抜き矢印で示されるバッファ残量下限値である１）との間の第２の関係のうちの少なくとも一方に基づいて、前記プロセッサにより実行される前記サブプロセスの処理速度を制御する制御手段（例えば、図４の処理速度制御部１５４や図７の処理速度制御部２００）とを備えることを特徴とする。
【００２８】
この情報処理装置において、前記制御手段は、前記第１の関係と前記第２の関係とに加えてさらに、前記測定手段によりこれまでに測定されてきた前記所定の種類の品質のレベルの時間変化（例えば、図８に示されるような出力バッファレベルLevelのレベルの時間変化）に基づいて、前記サブプロセスの処理速度を制御するようにすることができる。
【００２９】
この情報処理装置において、前記サブプロセス（例えば、図７のサブプロセス処理部１７３）は、前記プロセッサにより実行される複数の機能ブロックが所定の順番で配置され（例えば、図７に示されるように、DeMux部１９１、デコード部１９３、サンプリングレートコンバート処理部１９５、エンコード部１９７、および、Mux部１９９がその順番で配置され）、かつ、複数の前記機能ブロックのうちの並んで配置される２つの機能ブロックの間にバッファ（例えば、図７の入力段リングバッファ１９２、ワークエリアフレームバッファ１９４、ワークエリアフレームバッファ１９６、および出力段リングバッファ１９８）が配置されて構成され、前記プロセッサは、複数の前記機能ブロックのうちの最終段の機能ブロックを除く機能ブロックのそれぞれに対して、所定の単位量（例えば、図７の例では、動画像データが処理対象とされているので、例えばフレーム単位）の処理に必要なデータが入力段のバッファに記憶されているという第１の条件、および、そのデータを記憶させるための空き領域が所定の容量以上だけ後段のバッファに確保されているという第２の条件が満たされた場合、他の機能ブロックとは独立して自立的に、前段の前記バッファからデータを読み出して所定の処理を施し、その処理が施された前記データを後段の前記バッファに書きこむことを開始させ、前記プロセッサは、複数の前記機能ブロックのうちの最終段の前記機能ブロック（例えば、図７のMux部１９９）に対して、前記第１の条件に加えてさらに、前回の処理の開始時点から所定の処理間隔（例えば、図２０に示される書き込み間隔t_period[t]）が経過したという第３の条件が満たされた場合、他の機能ブロックとは独立して自立的に、前段のバッファから所定のデータ量（例えば、図２０に示されるHDD書き込みデータ量W_BK）のデータを読み出して所定の処理を施し、その処理が施された前記データを、前記サブプロセスの出力データとして外部（例えば、図７のストリームマネージャ１７１）に出力することを開始させ、前記制御手段は、所定のタイミング（例えば、図７のビデオカード２０１からの割り込みVideo Frameのタイミング）毎に、そのタイミングにおける前記第１の関係と前記第２の関係とのうちの少なくとも一方に基づいて制御量（例えば、総合制御量Gs）を決定し、決定された前記制御量に応じて、前記第３の条件に含まれる前記処理間隔を更新させていくことで、前記サブプロセスの処理速度を制御するようにすることができる。
【００３０】
前記制御手段は、前記第２のレベルと前記第１のレベルとの差分が所定の大きさ以上である場合、前記第１の関係を利用して前記制御量を決定し（例えば後述するように、総合制御量Gsが、第２の関係を示す出力バッファレベル制御量Gbと、第１の関係を示すCPU使用率制御量Gcとの積として求められる際、出力バッファの現在の第２のレベルLevelが２以上である場合、即ち、出力バッファの現在の第２のレベルLevelと、第１のレベルである１（図８参照）との差分が１以上となった場合、CPU使用率制御量Gcをそのまま総合制御量Gsとして決定し）、前記差分が前記大きさ未満である場合、前記第２の関係を利用して前記制御量を決定する（出力バッファの現在の第２のレベルLevelが２未満である場合、即ち、出力バッファの現在の第２のレベルLevelと、第１のレベルである１との差分が１未満となった場合、出力バッファレベル制御量Gbをそのまま総合制御量Gsとして決定する）ようにすることができる。
【００３１】
前記メインプロセス（例えば、図７のメインプロセス処理部１７２）の単位時間（例えば、図７のビデオカード２０１からの割り込みVide Frameの間隔に対応する時間）当たりのデータ処理量が前記所定の種類の品質とされ、前記単位時間当たりに前記メインプロセスから出力すべきデータ量（例えば、図７のメインプロセス処理部１７２が１倍速で動作している場合、１フレーム分のデータ量）が、前記メインプロセスが確保すべき前記第１のレベルとされ、前記メインプロセスは、前記プロセッサにより実行される複数の機能ブロックが所定の順番で配置され（例えば、図７に示されるように、DeMux部１８１、デコード部１８３、ノイズ除去部１８５、画像処理部１８７、および出力制御部１８９がその順番で配置され）、複数の前記機能ブロックのうちの並んで配置される２つの機能ブロックの間にバッファ（例えば、図７の入力段リングバッファ１８２、ワークエリアフレームバッファ１８４，１８６、および、出力段フレームバッファ１８８）が配置されて構成され、前記プロセッサは、複数の前記機能ブロックのうちの最終段の機能ブロック（例えば、図７の出力制御部１８９）に対して、前記単位時間毎に、入力段のバッファから前記第１のレベルに対応するデータ量のデータを読み出して所定の処理を施し、その処理が施された前記データを、前記メインプロセスの出力データとして外部に出力することを開始させ（例えば、図７のビデオカード２０１からの割り込みVideo Frameのタイミングで、１フレーム分のデータを出力段フレームバッファ１８８から読み出して、ビデオドライバ１６７−２に出力することを開始させ）、前記測定手段は、前記メインプロセスの前記最終段の機能ブロックにとっての入力段の前記バッファ（例えば、図７の出力段フレームバッファ１８８）の記憶データ量を監視し、前記単位時間毎に、その時点で監視された前記バッファの記憶データ量（例えば、図７の出力バッファレベルLevel）を、前記所定の種類の品質の第２のレベルとして測定するようにすることができる。
【００３２】
本発明によれば、情報処理方法が提供される。この情報処理方法は、所定の種類の品質を第１のレベル以上に確保することが必要なメインプロセス（例えば、図４のメインプロセス処理部１３１や図７のメインプロセス処理部１７２）と、それ以外のサブプロセス（例えば、図４のサブプロセス処理部１３２や図７のサブプロセス処理部１７３）とのそれぞれの処理を並列的に実行させるプロセッサ（例えば、図２や図３のCPU１０１）を備える情報処理装置（例えば、図２の情報処理装置）の情報処理方法である。この情報処理方法は、前記プロセッサにより実行される前記メインプロセスの処理内容を監視し、その監視結果に基づいて、前記所定の種類の品質のレベルを測定する測定ステップ（例えば、図７の品質判定部１９０の処理）と、前記プロセッサの現在の使用率を検出する検出ステップ（例えば、図７のOS１６１の処理）と、前記プロセッサの使用率の上限値を設定する設定ステップ（例えば、図７のパワー制御１６２の処理）と、前記検出ステップの処理により検出された前記プロセッサの現在の使用率と、前記設定ステップの処理により設定された前記プロセッサの使用率の上限値との間の第１の関係、および、前記所定の種類の品質についての、前記測定ステップの処理により現時点またはその直前に測定された第２のレベルと、確保すべき前記第１のレベルとの間の第２の関係のうちの少なくとも一方に基づいて、前記プロセッサにより実行される前記サブプロセスの処理速度を制御する制御ステップ（例えば、図７の処理速度制御部２００とMux部１９９との間で行われる処理であって、具体的には例えば、図２２の「速度制御処理」とを含むことを特徴とする。
【００３３】
本発明によれば、プログラムが提供される。このプログラムは、所定の種類の品質が第１のレベル以上となる保証が必要なメインプロセス（例えば、図４のメインプロセス処理部１３１や図７のメインプロセス処理部１７２）と、それ以外のサブプロセス（例えば、図４のサブプロセス処理部１３２や図７のサブプロセス処理部１７３）とのそれぞれの処理を並列的に実行させるプロセッサ（例えば、図２や図３のCPU１０１）を備えるコンピュータ（例えば、図２の構成のコンピュータ）に実行させるプログラムであって、上述した本発明の情報処理方法に対応するプログラムである。
【００３４】
また、本発明によれば、記録媒体が提供される。この記録媒体は、上述した本発明のプログラムを記憶していることを特徴とする。
【００３５】
次に、図面を参照して、本発明の実施の形態について説明する。
【００３６】
図２は、本発明が適用される情報処理装置の一構成例を示している。
【００３７】
図２において、CPU（Central Processing Unit）１０１は、ROM（Read Only Memory）１０２に記録されているプログラム、または記憶部１０８からRAM（Random Access Memory）１０３にロードされたプログラムに従って各種の処理を実行する。具体的には例えば、CPU１０１は、後述する図６の構成の各種プログラムを実行することができる。RAM１０３にはまた、CPU１０１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００３８】
CPU１０１、ROM１０２、およびRAM１０３は、バス１０４を介して相互に接続されている。このバス１０４にはまた、入出力インタフェース１０５も接続されている。
【００３９】
入出力インタフェース１０５には、入力部１０６、出力部１０７、記憶部１０８、および、通信部１０９が接続されている。
【００４０】
入力部１０６は、例えば、キーボード、受光部を含むリモートコントローラ、マウスなどの入力機器で構成される。出力部１０７は、例えば、後述する図７のビデオカード２０１やモニタ２０２等からなる表示部単体、図示せぬサウンドカードやスピーカ等からなる音声出力部単体、または、それらの組合せで構成される。記憶部１０８は、例えば、後述する図７のHDD（Hard Disk Drive）２０３等で構成される。通信部１０９は、例えばモデム、ターミナルアダプタ、無線通信機器等より構成される。係る構成の通信部１０９は、図示せぬネットワークを介する図示せぬ他の情報処理装置との間の通信を制御する。
【００４１】
入出力インタフェース１０５にはまた、必要に応じてドライブ１１０が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどよりなるリムーバブル記録媒体１１１が適宜装着され、それらから読み出されたコンピュータプログラム、具体的には例えば、後述する図６の構成のプログラム等が、必要に応じて記憶部１０８にインストールされる。
【００４２】
係る図２の構成の情報処理装置が上述したマルチプロセッサシステムとして構成される場合、CPU１０１は、例えば図３のように構成される。即ち、図３は、CPU１０１の詳細な構成例を示すブロック図である。
【００４３】
図３の例のCPU１０１は、１つのMCPU１２１とｎ個（ｎは、１以上の任意の整数値）のSCPU１２３−１乃至１２３−ｎとのそれぞれがバス１２２を介して相互に接続されて構成される。
【００４４】
なお、本実施の形態の図３のCPU１０１は１つのチップで構成されているが、MCPU１２１およびSCPU１２３−１乃至１２３−ｎは、１つのチップで構成する必要は特になく、複数チップで構成してもよい。具体的には例えば、MCPU１２１およびSCPU１２３−１乃至１２３−ｎのそれぞれは、相異なる１つのチップで構成されて、図２のバス１０４にそれぞれ個別に接続されてもよい。
【００４５】
かかる図３の構成のCPU１０１は、複数のプロセスのそれぞれの処理を並列して実行することが容易にできる。例えば、CPU１０１は、従来の所定のソフトウエアを１以上実行することで、図１に示されるような、メインプロセス処理部１とサブプロセス処理部２とのそれぞれを構築し、構築されたメインプロセス処理部１とサブプロセス処理部２とのそれぞれの処理を並列して実行することが当然ながらできる。
【００４６】
しかしながら、CPU１０１が、図１のメインプロセス処理部１とサブプロセス処理部２との処理を単に実行した場合、［発明が解決しようとする課題］で上述した課題が当然ながら発生してしまうことになる。
【００４７】
そこで、本発明人は、次のような新たな第１の手法と第２の手法とを発明した。
【００４８】
即ち、本発明人が発明した第１の手法とは、現在のCPU使用率に基づいて、サブプロセス処理部２の処理速度をCPU使用率の上限値を超えない範囲で制御する、という手法である。なお、現在のCPU使用率と、CPU使用率の上限値との詳細については、図５を参照して後述する。
【００４９】
しかしながら、第１の手法で利用されるCPU使用率は一定時間内の平均から求められるため、そのCPU使用率を単に利用してサブプロセス処理部２の処理速度を制御した場合にその応答が遅くなる、という欠点が存在する。この欠点のため、メインプロセス処理部１のリアルタイム性の保証が維持できなくなることもある。即ち、第１の手法を単に利用しただけでは、従来の課題を充分に解決できるとは言い難い。
【００５０】
このような第１の手法に対して本発明人が発明した第２の手法とは、メインプロセス処理部１の所定の種類の品質のレベルに基づいて、リアルタイム性の保証ができるか否かを判定し、即ち、リアルタイム性を保証する上で、メインプロセス処理部１の現在の処理の進捗で充分間に合っているのか否かを判定し、その判定結果に基づいてサブプロセス処理部２の処理速度を制御する、という手法である。
【００５１】
即ち、繰り返しになるが、リアルタイム性とは、所定の処理単位のデータに対するメインプロセス処理部１の全処理が所定の単位時間内に完了する、という性質を指す。従って、例えば、その単位時間当たりにおけるメインプロセス処理部１の処理量（平均処理速度に相当）は、メインプロセス処理部１の品質の１つの種類であると定義すれば、定義された種類の品質のレベルに基づいて、リアルタイム性の保証ができるか否かを判定することができる。詳細には、この場合、メインプロセス処理部１がリアルタイム性を保証するために確保すべき品質のレベルとは、単位時間当たりのプロセス処理部１の処理量が、上述した処理単位に対応するデータ量であることを指す。この場合、単位時間当たりの現在のメインプロセス処理部１の処理量が、このレベル以上である場合にはリアルタイム性の保証ができると判定できる一方、このレベル未満である場合にはリアルタイム性の保証ができないと判定できる。そこで例えば、このようにしてリアルタイム性が保証できると判定された場合には、サブプロセス処理部２の処理速度を上げる。これに対して、リアルタイム性が保証できないと判定された場合には、サブプロセス処理部２の処理速度を下げる。以上のような手法が、本発明人が発明した第２の手法の一例である。
【００５２】
このように、第２の手法では、メインプロセス処理部１のリアルタイム性の保証自体は可能になる。
【００５３】
しかしながら、第２の手法では、現在のCPU使用率が把握できないという欠点が存在する。この欠点のため、第２の手法では、サブプロセス処理部２が可能な限り最速で処理を行っているのか否かを把握できない。即ち、サブプロセス処理部２が可能な限り最速で処理を行っていない状況も発生し得る。このため、第２の手法を単に利用しただけでは、従来の課題を充分に解決できるとは言い難い。
【００５４】
そこで、本発明人は、従来の課題を充分に解決することを目的として、この第１の手法と第２の手法との両者の欠点を補うことが可能な次のような第３の手法をさらに発明した。
【００５５】
即ち、本発明人が発明した第３の手法とは、上述した図１の代わりに、例えば、図４に示されるようなメインプロセス処理部１３１とサブプロセス処理部１３２とを構築し、構築されたメインプロセス処理部１３１とサブプロセス機能処理部１４１とのそれぞれの処理を並列して実行する、という手法を指す。
【００５６】
即ち、図４は、本発明の情報処理装置により構築されてその処理が実行される、メインプロセスとサブプロセスとを含むソフトウエアシステムの構成例を示す機能ブロック図である。換言すると、図４は、本発明が適用されるソフトウエアシステムの構成例を示す機能ブロック図である。
【００５７】
別言すると、本発明の情報処理装置とは、例えば、図４に示されるメインプロセス処理部１３１とサブプロセス処理部１３２とを構築し、構築されたメインプロセス処理部１３１とサブプロセス機能処理部１３２とのそれぞれの処理を並列して実行することが可能な装置であれば足り、その構成は上述した図２や図３の構成に特に限定されない。
【００５８】
図４に示されるように、このソフトウエアシステムは、例えば、メインプロセス処理部１３１、サブプロセス処理部１３２、CPU使用率上限値設定部１３３、および、CPU使用率検出部１３４から構成される。
【００５９】
メインプロセス処理部１３１のうちの従来のメインプロセスに相当する部分は、ソフトウエアモジュール（機能ブロック）である機能処理部１４１乃至１４３のそれぞれがその順番に配置されて構築される。機能処理部１４１乃至１４３のそれぞれは、前段から入力されたデータに対して所定の処理を施して、処理が施されたデータを後段に出力する。即ち、このような機能処理部１４１乃至１４３のそれぞれの処理がその順番に実行されて、その結果として、最終段の機能処理部１４３から出力されるデータが、メインプロセス処理部１３１の最終的な出力データとして外部に出力されることになる。
【００６０】
このように、機能処理部１４１乃至１４３のそれぞれは、上述した図１の機能処理部１１乃至１３のそれぞれと基本的に同様の機能と構成を有している。換言すると、図４の例では、従来の図１のメインプロセス処理部１との対比を明確にすることを目的として、３つの機能処理部１４１乃至１４３がメインプロセス処理部１３１に設けられているだけである。従って、当然ながら、本発明においては、メインプロセスを構成する機能ブロックの個数やその接続形態（処理の順番）は、後述する図７に示されるように、図４の例に特に限定されない。即ち、本発明においては、任意の個数の機能ブロックが任意の接続形態で接続されて、メインプロセスを構成することが可能である。
【００６１】
本発明のメインプロセス処理部１３１には、このような機能処理部１４１乃至１４３からなるメインプロセスの他さらに、品質判定部１４４が設けられている。この品質判定部１４４は、上述した本発明の第２の手法のうちの少なくとも一部に対応する処理を実行する。
【００６２】
即ち、品質判定部１４４は、機能処理部１４１乃至１４３からなるメインプロセスの処理内容を監視し、その監視結果に基づいて、所定の種類、例えば上述したように定義した種類の品質のレベルを測定する。
【００６３】
ここでは、例えば、品質判定部１４４は、所定の種類の品質について、リアルタイム性を保証するための限界レベルである第１のレベルに対する、現在の処理マージンに関する第２のレベルを測定し、それを品質保証余裕度として後述する処理速度制御部１５４に供給する。
【００６４】
品質保証余裕度とは、所定の単位量のデータに対するメインプロセス処理部１３１の処理の進捗度合いを示すパラメータ値、即ち、リアルタイム性を保証する上で、メインプロセス処理部１３１の処理の現在の進捗状態でどの程度間に合っているのかを示すパラメータ値であると言える。或いは、メインプロセス処理部１３１の現時点までの処理履歴と同様の処理が引き続き実行された場合に（これまでの平均処理速度のまま処理が引き続き実行された場合）、リアルタイム性をどの程度保証できるのかを示すパラメータ値であると言える。
【００６５】
なお、品質保証余裕度（品質レベル）の具体例については、図７を参照して後述する。
【００６６】
以上説明したように、品質判定部１４４は、結局、上述した本発明の第２の手法の一部として、品質レベル（品質保証余裕度）を決定する。即ち、品質判定部１４４は、機能処理部１４１乃至１４３の処理内容を監視し、その監視結果に基づいて品質保証余裕度を決定し、サブプロセス処理部１３２に提供する。
【００６７】
サブプロセス処理部１３２のうちの従来のサブプロセスに相当する部分は、ソフトウエアモジュール（機能ブロック）である機能処理部１５１乃至１５３のそれぞれがその順番に配置されて構築される。機能処理部１５１乃至１５３のそれぞれは、前段から入力されたデータに対して所定の処理を施して、処理が施されたデータを後段に出力する。即ち、このような機能処理部１５１乃至１５３のそれぞれの処理がその順番に実行されて、その結果として、最終段の機能処理部１５３から出力されるデータが、サブプロセス処理部１３２の最終的な出力データとして外部に出力されることになる。
【００６８】
このように、機能処理部１５１乃至１５３のそれぞれは、上述した図１の機能処理部２１乃至２３のそれぞれと基本的に同様の機能と構成を有している。換言すると、図４の例では、従来の図１のサブプロセス処理部２との対比を明確にすることを目的として、３つの機能処理部１５１乃至１５３がサブプロセス処理部１３２に設けられているだけである。従って、当然ながら、本発明では、サブプロセスを構成する各機能ブロックの個数やその接続形態（処理の順番）は、後述する図７に示されるように、図４の例に特に限定されない。即ち、本発明においては、メインプロセスとは完全に独立して、任意の個数の機能ブロックが任意の接続形態で接続されて、サブプロセスを構成することが可能である。
【００６９】
本発明のサブプロセス処理部１３２には、このような機能処理部１５１乃至１５３からなるサブプロセスの他さらに、処理速度制御部１５４が設けられている。この処理速度制御部１５４は、機能処理部１５１乃至１５３からなるサブプロセスに対して、上述した本発明の第１の手法と第２の手法とを組み合わせた処理速度制御を施す。
【００７０】
詳細には、図４に示されるように、処理速度制御部１５４には、第２の手法で利用される品質保証余裕度（品質レベル）が品質判定部１４４から供給される。処理速度制御部１５４にはまた、上述した第１の手法で利用される現在のCPU使用率がCPU使用率検出部１３４から供給される他、CPU使用率の上限値がCPU使用率上限値設定部１３３から供給され、かつ、図示せぬ外部から処理速度制御範囲が供給される。
【００７１】
そこで、処理速度制御部１５４は、品質保証余裕度、CPU使用率の上限値、現在のCPU使用率、および、処理速度制御範囲に基づいて、機能処理部１５１乃至機能処理部１５３からなるサブプロセスの処理速度を制御する。
【００７２】
即ち、処理速度制御部１５４は、処理速度制御範囲内で、かつCPU使用率の上限値を超えない範囲で、現在のCPU使用率と現在の品質保証余裕度とに応じてサブプロセスの処理速度の設定を更新していくことで、サブプロセスの処理速度を制御する。なお、CPU使用率の上限値を超えない範囲とは、CPU使用率の上限値が一瞬たりとも越えない範囲を指すのではなく、例えば、CPU使用率が上限値を越えるようなオーバーシュートが短期間あっても、その後、その上限値以下で安定するような範囲を指す。
【００７３】
以上説明したメインプロセス処理部１３１とサブプロセス処理部１３２の他、図４のソフトウエアシステムには、上述したように、CPU使用率上限値設定部１３３とCPU使用率検出部１３４とがさらに設けられている。CPU使用率上限値設定部１３３は、CPU使用率の上限値を設定し、処理速度制御部１５４に供給する。CPU使用率検出部１３４は、現在のCPU使用率を検出（演算）し、処理速度制御部１５４に供給する。
【００７４】
ここで、図５を参照して、現在のCPU使用率と、CPU使用率の上限値とについてそれぞれ説明する。即ち、図５は、図３のMCPU１２１およびSCPU１２３−１乃至SCPU１２３−ｎ（以下、これらをまとめて各プロセッサと称する）のうちの所定の１つ（以下図５の説明では、着目プロセッサと称する）についての、現在のCPU使用率と、CPU使用率の上限値とのそれぞれを模式的に示した図である。
【００７５】
図５において、CPU_Maxとは、着目プロセッサの最大使用率を示している。なお、図５の例では、最大使用率CPU_Maxは１とされている。
【００７６】
CPU_Limitとは、着目プロセッサのCPU使用率の上限値を示している。着目プロセッサのCPU使用率の上限値CPU_Limitは、図５に示されるように最大使用率CPU_Limit以下の範囲で、図４のCPU使用率上限値設定部１３３により設定される。即ち、図５の例では、CPU使用率の上限値CPU_Limitとして、０乃至１の間の任意の値が設定される。CPU使用率の上限値CPU_Limitが０に設定されるとは、着目プロセッサの使用禁止の設定を意味している。即ち、CPU使用率上限値設定部１３３は、各プロセッサのうちの幾つかのCPU使用率の上限値CPU_Limitを０に設定することで、使用できるプロセッサの数を制限することができる。なお、以下の説明では、CPU使用率の上限値CPU_Limitは、図５に示されるように、CPU使用率の上限値Pと記述されることもある。即ち、本明細書では、CPU_Limit＝Ｐとされる。
【００７７】
また、図５において、Ｘは、図４のCPU使用率検出部１３４により検出（算出）される着目プロセッサの現在のCPU使用率を示している。図５に示されるように、各プロセッサとも、現在のCPU使用率Xが、CPU使用率の上限値CPU_Limitを超えないように制御されることになる。
【００７８】
また、図５において、αは、着目プロセッサの現在のCPU使用率Xの、CPU使用率の上限値CPU_Limitに対する余裕度を示している。即ち、この余裕度αが小さい程、着目プロセッサの負荷が重いことになる。
【００７９】
このように、図４のCPU使用率検出部１３４により検出された各プロセッサのそれぞれの現在のCPU使用率Xは、CPU使用率上限値設定部１３３により設定されたCPU使用率の上限値CPU_Limitを超えないように制御される。
【００８０】
次に、上述した図４のソフトウエアシステムの具体例として、オーディオ（Audio）/ビデオ（Video）の処理を行うソフトウエアシステム（以下、AVシステムと称する）について説明する。具体的には例えば、図４のメインプロセス処理部１３１が、MPEG（Moving Picture Experts GroUp）2 ストリームのうちのビデオの再生処理を行い、サブプロセス処理部１３２が、MPEG2 ストリームのうちのビデオのレート変換処理を行うことを特徴とするAVシステムの例について説明する。
【００８１】
このような、AVシステムを構築し、その処理を実行するために必要なソフトウエアの構成例が図６に示されている。即ち、図６は、本発明の情報処理装置が実行するソフトウエア、即ち、例えば本実施の形態では図２と図３の構成の情報処理装置が実行するソフトウエアの構成例を示している。
【００８２】
図６に示されるように、本発明のソフトウエアは、OS（Kernel）１６１乃至システムサービス１６６、並びに、ドライバ１６７−１乃至ドライバ１６７−ｍ（ｍは、任意の整数値）から構成されている。
【００８３】
OS１６１は、例えば図３のMCPU１２１に搭載される。即ち、OS１６１は、MCPU１２１により実行される。OS１６１は、各SCPU１２３−１乃至１２３−ｎが実行するプログラムのロード、メモリ管理、並びに、各SCPU１２３−１乃至１２３−ｎ間の同期、排他、および、メッセージ通信などの基本的な制御のうちの少なくとも一部を行う。少なくとも一部と記述したのは、このような基本的な制御のうちの幾つかの制御が、後述するシステムサービス１６６により実行されることもあるからである。
【００８４】
また、OS１６１は、各プロセッサ（MCPU１２１およびSCPU１２３−１乃至１２３−ｎ）のタスク（各機能ブロックの処理）のスケジューリングを行う。即ち、OS１６１は、タスクの優先順位やタスクが起動してからの経過時間などを考慮し、空いているプロセッサへ対応するタスクを割り当てる。なお、タスクのスケジューリングの具体例については、図１５を参照して後述する。
【００８５】
さらに、OS１６１は、外部デバイスに対するドライバ１６７−１乃至１６７−ｍの管理も行う。
【００８６】
さらにまた、OS１６１は、後述するシステムサービス１６６からの依頼を受けて、各プロセッサ（MCPU１２１およびSCPU１２３−１乃至１２３−ｎ）のそれぞれについての現在のCPU使用率Xを演算（検出）して、その演算結果を通知する。即ち、OS１６１のうちの一部が、図４のCPU使用率検出部１３４に対応する。
【００８７】
パワー制御１６２は、例えば図３のMCPU１２１に搭載される。即ち、パワー制御１６２は、MCPU１２１により実行される。パワー制御１６２は、システム全体の消費電力を下げるためのパワーセーブ制御を行う。ここで言うシステムとは、例えば図２の情報処理装置全体を指す。
【００８８】
詳細には、パワー制御１６２は、後述するアプリケーション１６５が実行可能で、かつシステム全体の消費電力を下げるように、各プロセッサ（MCPU１２１およびSCPU１２３−１乃至SCPU１２３−ｎ）のそれぞれのCPU使用率の上限値P（＝CPU_Limit）を最適な値に設定する。即ち、パワー制御１６２のうちの少なくとも一部は、図４のCPU使用率上限値設定部１３３に対応する。
【００８９】
なお、パワー制御１６２は、本発明のソフトウエアにとって必須なソフトウエアではない。即ち、パワー制御１６２は、図６の例ではソフトウエアとして構成されているが、ハードウエアで構成してもよい。
【００９０】
AVライブラリ１６３は、AVシステムの処理に必要な各種ソフトウエアモジュール（機能ブロック）、例えば上述した図４の例では、機能処理部１４１乃至１４３および機能処理部１５１乃至１５３のそれぞれを個別に格納している。
【００９１】
具体的には例えば、ここでのメインプロセスの処理とは、上述したように、MPEG2 ストリームのうちのビデオの再生処理である。従って、このようなビデオの再生処理を実現するために必要な各タスクのそれぞれに対応するソフトウエアモジュール（機能ブロック）が、AVライブラリ１６３に個別に格納されている。より具体的には例えば後述する図７に示される、DeMux部１８１、デコード部１８３、ノイズ除去部１８５、画像処理部１８７、および、出力制御部１８９のそれぞれが、AVライブラリ１６３に個別に格納されている。
【００９２】
また例えば、ここでのサブプロセス処理とは、上述したように、MPEG2 ストリームのうちのビデオのレート変換処理である。従って、このようなビデオのレート変換処理を実現するために必要な各タスクのそれぞれに対応するソフトウエアモジュール（機能ブロック）が、AVライブラリ１６３に個別に格納されている。より具体的には例えば、後述する図７に示される、DeMux部１９１、デコード部１９３、サンプリングレートコンバート処理部１９５、エンコード部１９７、および、Mux部１９９のそれぞれが、AVライブラリ１６３に個別に格納されている。
【００９３】
さらに例えば、MPEG2ストリームの転送を制御する後述する図７のストリームマネージャ１７１、上述した図４の品質判定部１４４に対応する図７の品質判定部１９０、および、図４の処理速度制御部１５４に対応する図７の処理速度制御部２００も、AVライブラリ１６３に個別に格納されている。
【００９４】
なお、AVライブラリ１６３に格納されている各機能ブロック単体の具体的な説明については、図７を参照して後述する。
【００９５】
AVシステム制御１６４は、AVライブラリ１６３に個別に格納されている各機能ブロックのそれぞれを、例えば、上述した図４または後述する図７に示されるように配置することで、図４または図７に示される構成のAVシステムを構築する。このとき、AVシステム制御１６４は、必要に応じて、２つの機能ブロックの間にバッファを配置する。このバッファの具体例については、図７を参照して後述する。
【００９６】
そして、AVシステム制御１６４は、後述するアプリケーション１６５から発行される各種コマンドに基づいて、構築されたAVシステムの動作を制御する。なお、AVシステムの動作の詳細な説明については、図７を参照して後述する。
【００９７】
アプリケーション１６５は、AVシステム制御１６４等に各種コマンドを発行することで、図４や図７のAVシステムを統括的に制御するアプリケーションソフトウエアである。
【００９８】
システムサービス１６６は、一般的なプロセスの起動、消滅、通信制御、および管理等を実行する。本実施の形態では例えば、システムサービス１６６は、上述したように、OS１６１から現在のCPU使用率Xを取得するとともに、パワー制御１６２により設定されたCPU使用率の上限値Pを取得し、上述した図４の処理速度制御部１５４や後述する図７の処理速度制御部２００に供給する。
【００９９】
ドライバ１６７−１乃至１６７−ｍのそれぞれは、サウンドカード、ビデオカード、HDD等の外部デバイス（ハードウエア）と、図６の構成のソフトウエアとの間でやり取りされるデータの転送制御を行う。
【０１００】
例えば、ドライバ１６７−１は、後述する図７に示されるように、図２の記憶部１０８に含まれるHDD２０３（ハードウエア）と、ストリームマネージャ１７１（ソフトウエア）との間でやり取りされるデータの転送制御を行う。従って、以下、ドライバ１６７−１を、他のドライバと区別するために、HDDドライバ１６７−１と称する。
【０１０１】
また例えば、ドライバ１６７−２は、後述する図７に示されるように、図２の出力部１０７に含まれるビデオカード２０１（ハードウエア）と、出力制御部１８９（ソフトウエア）との間でやり取りされるデータの転送制御を行う。従って、以下、ドライバ１６７−２を、他のドライバと区別するために、ビデオドライバ１６７−２と称する。
【０１０２】
次に、図７を参照して、係る図６の構成を有する本発明のソフトウエアにより実現されるAVシステムの構成例について説明する。即ち、図７は、MPEG2 ストリームのうちのビデオの再生処理がメインプロセスの処理とされ、かつ、MPEG2 ストリームのうちのビデオのレート変換処理がサブプロセスの処理とされた場合における、本発明が適用されるAVシステムの構成例を示している。
【０１０３】
上述したように、図６のAVシステム制御１６４は、DeMux部１８１等の図７に示される各種機能ブロックをAVライブラリ１６３から抽出し、図７に示されるように配置する。このとき、AVシステム制御部１６４は、メインプロセスとサブプロセスとのそれぞれを構成する機能ブロックのうちの所定の２つの間に、バッファを配置する。すると、図７に示されるような、メインプロセス処理部（再生部）１７２と、サブプロセス処理部（レート変換記録部）１７３とのそれぞれが構築される。
【０１０４】
詳細には、図７に示されるように、DeMux部１８１乃至出力制御部１８９がその順番に配置されて接続されることでメインプロセスが構築され、このメインプロセスに品質判定部１９０が接続されることで、メインプロセス処理部１７２が構築される。
【０１０５】
即ち、DeMux部１８１、デコード部１８３、ノイズ除去部１８５、画像処理部１８７、および出力制御部１８９のそれぞれは、ブロックの個数は一致しないが図４の機能処理部１４１乃至１４３に対応する機能ブロックであり、図６のAVライブラリ１６３から抽出された後その順番で配置される。
【０１０６】
そして、DeMux部１８１とデコード部１８３との間には入力段リングバッファ１８２（以下、単にバッファ１８２と称する）が配置されて接続される。デコード部１８３とノイズ除去部１８５との間にはワークエリアフレームバッファ１８４（以下、単にバッファ１８４と称する）が配置されて接続される。ノイズ除去部１８５と画像処理部１８７との間にはワークエリアフレームバッファ１８６（以下、単にバッファ１８６と称する）が配置されて接続される。画像処理部１８７と出力制御部１８９との間には出力段フレームバッファ１８８（以下、単にバッファ１８８と称する）が配置されて接続される。
【０１０７】
即ち、DeMux部１８１乃至出力制御部１８９がその順番に並んで接続される。
【０１０８】
そして、入力段のDeMux部１８１には、AVライブラリ１６３から抽出されたストリームマネージャ１７１が接続され、かつ、出力段の出力制御部１８９にはビデオドライバ１６７−２が接続される。
【０１０９】
これにより、DeMux部１８１乃至出力制御部１８９からなるメインプロセスが構築される。
【０１１０】
さらに、このようにして構築されたメインプロセスの品質レベル（品質保証余裕度）を判定（測定）する品質判定部１９０が、AVライブラリ１６３から抽出される。そして、この品質判定部１９０が、メインプロセスのうちのバッファ１８８に接続され、かつ、サブプロセス処理部１７３の処理速度制御部２００に接続されることで、メインプロセス処理部１７２が構築される。
【０１１１】
このようにして、図４のメインプロセス処理部１３１に対応する図７のメインプロセス処理部１７２が構築される。即ち、図７のDeMux部１８１乃至出力制御部１８９からなるメインプロセスが、図４の機能処理部１４１乃至１４３からなるメインプロセスに対応する。図７の品質判定部１９０が図４の品質判定部１４４に対応する。
【０１１２】
また、図７に示されるように、DeMux部１９１乃至Mux部１９９がその順番に配置されて接続されることでサブプロセスが構築され、さらに、そのサブプロセスに処理速度制御部２００が接続されることで、サブプロセス処理部１７３が構築される。
【０１１３】
即ち、DeMux部１９１、デコード部１９３、サンプリングレートコンバート処理部１９５５、エンコード部１９７、およびMux部１９９のそれぞれは、ブロックの個数は一致しないが図４の機能処理部１５１乃至１５３に対応する機能ブロックであり、図６のAVライブラリ１６３から抽出された後その順番で配置される。
【０１１４】
そして、DeMux部１９１とデコード部１９３との間には入力段リングバッファ１９２（以下、単にバッファ１９２と称する）が配置されて接続される。デコード部１９３とサンプリングレートコンバート処理部１９５との間にはワークエリアフレームバッファ１９４（以下、単にバッファ１９４と称する）が配置されて接続される。サンプリングレートコンバート処理部１９５とエンコード部１９７との間にはワークエリアフレームバッファ１９６（以下、単にバッファ１９６と称する）が配置されて接続される。エンコード部１９７とMux部１９９との間には出力段リングバッファ１９８（以下、単にバッファ１９８と称する）が配置されて接続される。
【０１１５】
即ち、DeMux部１９１乃至Mux部１９９がその順番に並んで接続される。
【０１１６】
そして、入力段のDeMux部１９１と出力段のMux部１９９とのそれぞれには、ストリームマネージャ１７１が接続される。
【０１１７】
これにより、DeMux部１９１乃至Mux部１９９からなるサブプロセスが構築される。
【０１１８】
さらに、このようにして構築されたサブプロセスの処理速度を制御する処理速度制御部２００が、AVライブラリ１６３から抽出される。そして、この処理速度制御部２００が、サブプロセスのうちのMux部１９９に接続され、さらに、システムサービス１６６、ビデオドライバ１６７−２、および、上述したメインプロセス処理部１７２の品質判定部１９０のそれぞれに接続されることで、サブプロセス処理部１７３が構築される。
【０１１９】
このようにして、図４のサブプロセス処理部１３２に対応する図７のサブプロセス処理部１７３が構築される。即ち、図７のDeMux部１９１乃至Mux部１９９からなるサブプロセスが、図４の機能処理部１５１乃至１５３からなるサブプロセスに対応する。図７の処理速度制御部２００が図４の処理速度制御部１５４に対応する。
【０１２０】
さらに、図６のAVシステム制御１６４はストリームマネージャ１７１をHDDドライバ１６７−１を介してHDD２０３に接続する。同様に、AVシステム制御１６４は、出力制御部１８９をビデオドライバ１６７−２を介してビデオカード２０１に接続する。
【０１２１】
また、AVシステム制御１６４は、処理速度制御部２００に対して、図４のCPU使用率検出部１３４に対応する図６のOS１６１と、図４のCPU使用率上限値設定部１３３に対応する図６のパワー制御１６２のそれぞれを、システムサービス１６６を介して接続する。
【０１２２】
このようにして、AVシステム制御１６４により図７のAVシステムが構築される。
【０１２３】
次に、AVシステム制御１６４は、このようにして構築された図７のAVシステムの動作を、アプリケーション１６５からの各種コマンドに基づいて制御する。
【０１２４】
以下、メインプロセス処理部１７２とサブプロセス処理部１７３とのそれぞれの動作を、それらに含まれる各機能ブロックの機能を適宜説明しつつ、その順番に個別に説明していく。
【０１２５】
最初に、メインプロセス処理部１７２の動作について説明する。
【０１２６】
メインプロセス処理部１７２においては、最終出力段である出力制御部１８９のみが、ビデオカード２０１からのビデオドライバ１６７−２を介する割り込みVideo frameのタイミングに同期して処理を行い、それ以外のブロックは、後段のバッファの空き具合に応じて処理を行う。
【０１２７】
また、本実施の形態では、最終出力段である出力制御部１８９のみが３フレーム構成で処理を行い、それ以外は２フレーム構成で処理を行う。このため、最終出力段である出力制御部１８９の前段のバッファ１８８は、３フレーム分のデータが記憶可能なように構成されている。これに対して、バッファ１８４とバッファ１８６は、２フレーム分のデータが記憶可能なように構成されている。
【０１２８】
ストリームマネージャ１７１は、HDD２０３に蓄積されているMPEG2ストリームデータをHDDドライバ１６７−１を介して読み出し、メインプロセス処理部１７２のDeMux部１８１に供給する。
【０１２９】
すると、DeMux部１８１乃至出力制御部１８９からなるメインプロセスは、次のような処理を実行する。
【０１３０】
即ち、DeMux部１８１は、供給されたMPEG2ストリームデータをフレーム単位で、圧縮符号化ビデオデータと圧縮符号化オーディオデータとのそれぞれに分離し、そのうちの圧縮符号化ビデオデータをバッファ１８２に記憶させる。
【０１３１】
デコード部１８３は、１フレーム分の圧縮符号化ビデオデータをバッファ１８２から読み出して、MPEG2方式に従った復号処理を施し、その結果得られる１フレーム分のビデオデータをバッファ１８４に記憶させる。
【０１３２】
ノイズ除去部１８５は、１フレーム分のビデオデータをバッファ１８４から読み出して、ノイズ除去処理を施した後、バッファ１８６に記憶させる。
【０１３３】
画像処理部１８７は、１フレーム分のビデオデータをバッファ１８６から読み出して、例えば輝度調整や色相調整といった各種画像処理を施した後、バッファ１８８に記憶させる。
【０１３４】
出力制御部１８９は、ビデオカード２０１からの割り込みVideo Frameのタイミング毎に、１フレーム分のビデオデータをバッファ１８８から読み出して、その１フレーム分のビデオデータに対応するビデオ信号を、ビデオドライバ１６７−２とビデオカード２０１とを介してモニタ２０２に供給する。
【０１３５】
すると、モニタ２０２は、供給された１フレーム分のビデオ信号に対応する映像、即ち、対応するフレームを表示する。
【０１３６】
このように、DeMux部１８１乃至出力制御部１８９からなるメインプロセスにおいては、最終出力段である出力制御部１８９が、割り込みVideo Frameのタイミングに同期する形で、例えば１フレーム分のビデオデータをビデオドライバ１６７−２に転送する。
【０１３７】
このため、メインプロセスのリアルタイム性の保証が、モニタ２０２に表示される映像の品質（映像が途切れることなく適切な画質で表示されること）に重要な影響を及ぼす。また、メインプロセスのリアルタイム性の保証は、出力制御部１８９の前段のバッファ１８８に記憶されているデータ量に依存することになる。即ち、必要最低限のデータ量のビデオデータがバッファ１８８に記憶されていないと、リアルタイム性の保証は困難になる。
【０１３８】
そこで、本実施の形態では、上述したように割り込みVideo frameのタイミングで１フレーム分のビデーデータが出力されるので、図７の例では、その割り込みVideo frameタイミング時点でバッファ１８８に蓄積されているビデオデータのデータ量をフレーム単位で表した値が、品質保証余裕度（品質レベル）として利用される。即ち、図７の例では、Kフレーム分（Kは、バッファ１８８においては０乃至３のうちの何れかの値）のビデオデータがバッファ１８８に蓄積されている場合、その値Kが、品質保証余裕度として利用される。以下、図７の例で利用されるこの品質保証余裕度（値K）を、出力バッファレベルLevelと称する。即ち、図７の例では、品質判定部１９０は、バッファ１８８の記憶データ量を監視することで、そのバッファレベルLevelを検出して、サブプロセス処理部１７３の処理速度制御部２００に供給する。
【０１３９】
この場合、図７の例では、バッファ１８８の最大記憶容量は３フレーム分のデータ量とされているので、出力バッファレベルLevelは、上述したように０乃至３の値Ｋを取ることになる。
【０１４０】
このとき、出力バッファレベルLevelの値が１(K=1)であることが、１フレーム分のビデオデータを出力制御部１８９が出力可能な最低条件、即ち、リアルタイム性が保証される最低条件となる。また、出力バッファレベルLevelの値が０（K=0）であることとは、バッファ１８８が破綻したこと、即ち、リアルタイム性の保証が不可能になったことを示す。従って、出力バッファレベルLevelの値が０になってしまったときには、１つ前のフレームデータを繰り返し出力するなどの所定のエラー処理の実行が必要となる。
【０１４１】
なお、メインプロセスのバッファ１８８の最大記憶容量は、３フレーム分に特に限定されることは無く、Qフレーム分（Qは、１以上の任意の整数値）とすることができる。この場合、出力バッファレベルLevelは、０乃至Qの値を取ることになる。
【０１４２】
ただし、メインプロセスのバッファ１８８の最大記憶容量を多く取れば取る程、システム（図２の情報処理装置）全体としては安全になるが、システムディレイ量やメモリ使用量の増加を招くといった弊害もまた発生する。従って、このような弊害を考慮すると、メインプロセスのバッファ１８８の最大記憶容量は、本実施の形態のように３フレーム分程度が好適である。
【０１４３】
換言すると、図７の例では例えば、ビデオカード２０１からの割り込みVide Frameの間隔に対応する時間が単位時間とされて、その単位時間当たりのメインプロセス処理部１７２のデータ処理量が、品質の１つの種類として利用されている。そして、例えば、この単位時間当たりにメインプロセス処理部１７２から出力すべき１フレーム分のデータ量（１倍速の場合）が、メインプロセス処理部１７２のリアルタイム性の保証を確保するために最低限必要な第１のレベルとされている。
【０１４４】
このような状態で、品質判定部１９０は、バッファ１８８の記憶データ量を監視し、上述した単位時間毎に、その時点で監視されたバッファの記憶データ量、即ち例えば図７の出力バッファレベルLevelを、上述した種類の品質の第２のレベルとして測定し、処理速度制御部２００に供給する。
【０１４５】
これにより、詳細については後述するが、処理速度制御部２００は、現在のCPU使用率XとCPU使用率の上限値との間の第１の関係に加えてさらに、上述した第１のレベルと、品質判定部１９０から供給される第２のレベル（出力バッファレベルLevel）との間の第２の関係に基づいて、サブプロセス処理部１７３の処理速度を制御することが可能になる。
【０１４６】
以上、メインプロセス処理部１７２の動作例について説明した。次に、サブプロセス処理部１７３の動作例について説明する。
【０１４７】
サブプロセス処理部１７３においては、最終出力段であるMux部１９９のみが、所定の時間間隔で処理を行い、それ以外のブロックは、後段のバッファの空き具合に応じて処理を行う。従って、詳細については後述するが、所定のタイミング毎に、Mux部１９９で利用される時間間隔が処理速度制御部２００の制御により更新されていくことで、サブプロセス処理部１７３全体の処理速度が制御されることになる。
【０１４８】
また、本実施の形態では、最終出力段であるMux部１９９以外は２フレーム構成で処理を行う。このため、バッファ１９４とバッファ１９６は、２フレーム分のデータが記憶可能なように構成されている。
【０１４９】
ストリームマネージャ１７１は、HDD２０３に蓄積されているMPEG2ストリームデータをHDDドライバ１６７−１を介して読み出し、サブプロセス処理部１７３のDeMux部１９１に供給する。
【０１５０】
すると、DeMux部１９１乃至MUX部１９９からなるサブプロセスは、次のような処理を実行する。
【０１５１】
即ち、DeMux部１９１は、供給されたMPEG2ストリームデータをフレーム単位で、圧縮符号化ビデオデータと圧縮符号化オーディオデータとのそれぞれに分離し、そのうちの圧縮符号化ビデオデータをバッファ１９２に記憶させる。
【０１５２】
デコード部１９３は、１フレーム分の圧縮符号化ビデオデータをバッファ１９２から読み出して、MPEG2方式に従った復号処理を施し、その結果得られる１フレーム分のビデオデータをバッファ１９４に記憶させる。
【０１５３】
サンプリングレートコンバート処理部１９５は、１フレーム分のビデオデータをバッファ１９４から読み出して、サンプリングレートコンバート処理を施した後、バッファ１９６に記憶させる。
【０１５４】
エンコード部１９７は、１フレーム分の圧縮符号化ビデオデータをバッファ１９６から読み出して、MPEG2方式に従った圧縮符号化処理を施し、その結果得られる１フレーム分の圧縮符号化ビデオデータをバッファ１９８に記憶させる。このとき、エンコード部１９７は、１フレーム分のビデオデータに対して圧縮符号化処理を施す前に、その出力段のバッファ１９８の空き容量を確認し、その空き容量が規定量に足りなければ一定時間その処理を待機（Wait）する。
【０１５５】
Mux部１９９は、HDD２０３の書き込み処理速度に対応した所定のデータ量の圧縮符号化ビデオデータをバッファ１９８から読み出し、図示せぬ機能ブロック等から供給される圧縮符号化オーディオデータと多重処理を行った上で、ストリームマネージャ１７１とHDDドライバ１６７−１とを介してHDD２０３へ書き込む。
【０１５６】
このとき、エンコード部１９７の処理を、ビデオカード２０１からの割り込みVideo frameのタイミングに同期させて１フレームずつ処理させた場合には、処理速度は１倍速となる。
【０１５７】
ただし、本実施の形態では、エンコード部１９７の処理を、割り込みVideo frameのタイミングとは非同期に行わせ、MUX部１９９からHDD２０３への書き込み速度を処理速度制御部２００により制御させる。これにより、サブプロセス処理部１７３の最高処理速度、即ち、HDD２０３への最高書き込み速度を越えない範囲（図４の処理速度制御範囲に対応）内で、その処理速度は動的に変更される。
【０１５８】
即ち、処理速度制御部２００は、品質判定部１９０から供給される出力バッファレベルLevel、システムサービス１６６から供給される現在のCPU使用率XおよびCPU使用率の上限値P、並びに、処理速度制御範囲（HDD２０３への最高書き込み速度を越えない範囲）に基づいて、MUX部１９９からHDD２０３への書き込み速度を制御する制御量（以下、図７の記述に併せて、制御量Gsと称する）を可変設定し、その制御量GsをMux部１９９に供給する。この制御量Gsは、ビデオカード２０１からの割り込みVideo Frameのタイミング毎に、処理速度制御部２００により再設定され（更新され）、Mux部１９９に順次供給される。即ち、Mux部１９９には、割り込みVideo Frameのタイミング毎に値が順次更新される制御量Gsが入力される。
【０１５９】
そこで、Mux部１９９は、この割り込みVideo Frameのタイミング毎に値が更新されていく制御量Gsに応じて、自分自身の処理の時間間隔も更新していくことで、HDD２０３への書き込み速度を変更する。
【０１６０】
以下、処理速度制御部２００により設定されて、Mux部１９９に供給される制御量Gsの詳細について説明していく。
【０１６１】
上述したように、本実施の形態では、CPU使用率の上限値を超えない範囲で現在のCPU使用率Xに基づいてサブプロセスの処理速度を制御するという本発明の第１の手法と、品質保証余裕度（図７の例では、出力バッファレベルLevel）に基づいてサブプロセスの処理速度を制御するという本発明の第２の手法とが組み合わされた本発明の第３の手法により、サブプロセス処理部１７３の処理速度が制御される。
【０１６２】
従って、制御量Gsとは、結局、本発明の第１の手法に対応する制御量、即ち、現在のCPU使用率Xに応じて値が変化する制御量（以下、CPU使用率制御量Gcと称する）と、本発明の第２の手法に対応する制御量、即ち、出力バッファレベルLevelに応じて値が変化する制御量（以下、出力バッファレベル制御量Gbと称する）とを組み合わせた制御量を指す。なお、以下、制御量Gsを総合制御量Gsと称する。即ち、総合制御量Gsは、例えば次の式（１）により示される。
【０１６３】
Gs = f(Gb,Gc)      ・・・（１）
【０１６４】
式（１）において、f(Gb,Gc)は、出力バッファレベル制御量GbとCPU使用率制御量Gcとのそれぞれを入力パラメータとする所定の関数を示している。この関数f(Gb,Gc)は、任意の関数で構わないが、本実施の形態では、次の式（２）に示される関数f(Gb,Gc)が利用されるとする。即ち、本実施の形態では、総合制御量Gsは、次の式（２）により示されるとする。
【０１６５】
Gs = f(Gb,Gc) = Gb × Gc      ・・・（２）
【０１６６】
以下、この総合制御量Gsの演算に必要な出力バッファレベル制御量GbとCPU使用率制御量Gcとのそれぞれについて、その順番に個別に説明していく。
【０１６７】
初めに、出力バッファレベル制御量Gbについて説明する。
【０１６８】
図８は、図７のメインプロセス処理部１７２のバッファ１８８における出力バッファレベルLevelの時間推移の例を示している。図８において、縦軸は、出力バッファレベルLevelを示しており、横軸は時間軸を示している。横軸の１マスは、図７のビデオカード２０１からの割り込みVideo Frameの時間間隔に対応している。
【０１６９】
上述したように、例えば本実施の形態では、バッファ１８８の最大記憶容量は３フレーム分のデータ容量であることから、出力バッファレベルLevelが取り得る範囲は０乃至３の範囲になる。また、出力バッファレベルLevelの値が１であることが、１フレーム分のビデオデータを出力制御部１８９が出力可能な最低条件、即ち、リアルタイム性を保証するために最低限必要なバッファ１８８の残量になる。このことが、図８においては、出力バッファレベルLevelの値が１であることを示す白抜き矢印、即ち、「バッファ残量下限値」と記された白抜き矢印により示されている。
【０１７０】
図８において、リアルタイム性を保証するという観点に立つと、点線の区間は、メインプロセス処理部１７２の処理速度が充分間に合っている区間を示し、また、実線の区間は、メインプロセス処理部１７２の処理速度が間に合っていない区間を示している。
【０１７１】
図８に示されるように、出力バッファレベルLevelの値がたとえ同じ２となるタイミングであっても、これまでの時間変化の推移の違いにより、メインプロセス処理部１７２の処理速度が充分間に合っている区間に属するタイミングであると判定されたり、メインプロセス処理部１７２の処理速度が間に合っていない区間に属するタイミングであると判定されることになる。即ち、出力バッファレベルLevelが減少方向に推移している場合、出力バッファレベルLevelが２となるタイミングは、メインプロセス処理部１７２の処理速度が間に合っていない区間に属すると判定されることになる。これに対して、出力バッファレベルLevelが増加方向に推移している場合、出力バッファレベルLevelが２となるタイミングは、メインプロセス処理部１７２の処理速度が充分間に合っている区間に属すると判定されることになる。
【０１７２】
従って、出力バッファレベル制御量Gbは、出力バッファレベルLevelの現在値だけを用いて単に設定されるのではなく、それに加えてさらに、出力バッファレベルLevelの時間変化のこれまでの推移も用いて設定されると好適である。
【０１７３】
換言すると、出力バッファレベル制御量Gbの設定手法は、出力バッファレベルLevelの現在値と、出力バッファレベルLevelの時間変化のこれまでの経緯とに基づいて設定する設定手法であれば、特に限定されず、様々な設定手法を採用することが可能である。
【０１７４】
具体的には例えば、本実施の形態では、出力バッファレベル制御量Gbの設定手法として次のような手法が採用されているとする。
【０１７５】
即ち、出力バッファ残量レベルLevelの現在値のそれぞれについて、その現在値に至るまでの出力バッファ残量レベルLevelの時間変化の推移（以下、レベル変化と称する）の各パターンのそれぞれに対して、所定のIndex値を予め付与しておく。そして、Index値と出力バッファレベル制御量Gbとの対応関係を示すテーブルを処理速度制御部２００に予め保持させておく。この状態で、処理速度制御部２００は、ビデオカード２０１からの割り込みVideo Frameのタイミング毎に品質判定部１９０から順次供給されてくる出力バッファ残量レベルLevelの値を順次取得し、２以上の取得値から対応するIndex値を決定する。そして、処理速度制御部２００は、予め保持されたテーブルを参照して、決定されたIndex値に対応する出力バッファレベル制御量Gbを設定する。本実施の形態では、このような設定手法が、出力バッファレベル制御量Gbの設定手法として採用されているとする。
【０１７６】
具体的には例えば、処理速度制御部２００は、図９乃至図１４に示されるような関係に従って、Index値を決定する。
【０１７７】
即ち、図９は、出力バッファ残量レベルLevelの現在値が０の場合における、レベル変化の各パターンのそれぞれとIndex値との関係の例を示している。例えば、図９において、出力バッファ残量レベルLevelの前回の値と現在値とが共に０の場合、即ち、出力バッファ残量レベルLevelの値が０から０に変化した場合（変化がない場合）、Index値は０００に設定されることになる。
【０１７８】
同様に、図１０乃至図１２のそれぞれは、出力バッファ残量レベルLevelの現在値が１の場合における、レベル変化の各パターンのそれぞれとIndex値との関係の例を示している。なお、図１１と図１２に示される、N_slpは、出力バッファ残量レベルLevelの値が２に変化してから１に変化するまでの回数を示している。以下、この値N_slpを、レベル２継続回数N_slpと称する。このレベル２継続回数N_slpの大きさによってレベル変化の変動速度が判別可能になる。即ち、図１１と図１２には、レベル２継続回数N_slpの値が1,2,8のそれぞれに対応するIndex値しか示されていないが、実際には、レベル２継続回数N_slpが取り得る各値のそれぞれに対して一意のIndex値が対応付けられている。
【０１７９】
また、図１３は、出力バッファ残量レベルLevelの現在値が２の場合における、レベル変化の各パターンのそれぞれとIndex値との関係の例を示している。図１４は、出力バッファ残量レベルLevelの現在値が３の場合における、レベル変化の各パターンのそれぞれとIndex値との関係の例を示している。
【０１８０】
なお、ここでは理解を容易なものとするために、Index値は、図９乃至図１４のような図面に基づいて決定されるとしたが、実際には、例えば後述する図２３の「Index値およびUp制御ホールドフラグ生成処理」が実行されて決定される。
【０１８１】
図７の処理速度制御部２００は、このようにしてIndex値を決定すると、例えば後述する図１９のテーブルを参照して、そのIndex値に対応する出力バッファレベル制御量Gbを設定する。
【０１８２】
以上、出力バッファレベル制御量Gbについて説明した。次に、CPU使用率制御量Gcについて説明する。
【０１８３】
上述したように、CPU使用率制御量Gcは、現在のCPU使用率Xにより決定される。そこで、初めに、現在のCPU使用率Xについて再度（ただしより詳しく）説明する。
【０１８４】
上述したように、図７のメインプロセス処理部１７２とサブプロセス処理部１７３とのそれぞれを構成する各機能ブロックのそれぞれの処理は、各プロセッサ（図３のMCPU１２１およびSCPU１２３−１乃至SCPU１２３−ｎ）のうちの何れかにより実行される。
【０１８５】
即ち、メインプロセスおよびサブプロセス内の各タスク（対応する機能ブロックの処理）のプロセッサへの割り当てのスケジューリングは、タスクの起動時に設定された優先度と、そのタスクが起動してからの経過時間の長さとを考慮し、空いているプロセッサに対して、各プロセッサへの割り当て量がなるべく均一になるように、図６のOS１６１により実行される。
【０１８６】
具体的には例えば、図３のCPU１０１がMCPU１２１と４個のSCPU１２３−１乃至１２３−４とで構成されている場合には、図１５に示されるようにスケジューリングされることになる。即ち、図１５においては、各プロセッサ（MCPU１２１と４個のSCPU１２３−１乃至１２３−４）のそれぞれに対する、図７のAVシステムの各タスクの割り当てのスケジューリングの例が上から順番にそれぞれ示されている。なお、図１５の各プロセッサのスケジューリング例において、白色の範囲は、メインプロセス処理部１７２のタスク、即ち、DeMux部１８１乃至出力制御部１８９のうちの所定の１つの処理を示している。これに対して、灰色の範囲は、サブプロセス処理部１７３のタスク、即ち、DeMux部１９１乃至Mux部１９９のうちの所定の１つの処理を示している。
【０１８７】
図１５に示されるように、この例では、メインプロセス処理部１７２とサブプロセス処理部１７３とのうちの、デコード部１８３，１９３や画像処理部１８７といったCPU負荷の重い機能ブロックの処理（タスク）は全て、SCPU１２３−１乃至１２３−４で行われ、その他の負荷の軽いシステム制御系の機能ブロック、例えば、DeMux部１８１，１９１およびMux部１９９といった機能ブロックの処理（タスク）は、MCPU１２１で行われるように、スケジューリングされている。
【０１８８】
このような図１５の例のようにスケジューリングされた場合には、サブプロセス処理部１７３の処理速度が上昇すると、SCPU１２３−１乃至１２３−４側の負荷による制約が支配的になり、MCPU１２１の負荷はシステム全体（図２の構成の情報処理装置全体）から見て支配的ではなくなる。
【０１８９】
従って、本実施の形態においては、現在のCPU使用率Xとして、MCPU１２１のCPU使用率は採用せず、SCPU１２３−１乃至１２３−４のそれぞれのCPU使用率のみを採用するとする。ただし、現在のCPU使用率Xとして、MCPU１２１のCPU使用率を含める場合或いはそれ単体で使用する場合についても、基本的な考え方は以下の説明と同様である。
【０１９０】
SCPU１２３−１乃至１２３−４のそれぞれの現在のCPU使用率（以下、最終的に使用される現在のCPU使用率Xと区別するために、CPU使用率X1乃至X4のそれぞれと称する）は、対応するプロセッサがタスクを処理している占有サイクル数と、動作周波数とに基づいて、図６のOS１６１によって計算される。そして、上述したように、現在の各CPU使用率X１乃至X4のそれぞれは、図６と図７のシステムサービス１６６がOS１６１に問い合わることで、OS１６１からシステムサービス１６６を介して処理速度制御部２００に通知される。なお、システムサービス１６６を介さずに、OS１６１から処理速度制御部２００に直接CPU使用率X1乃至X4が通知されることもあるし、或いは、OS１６１から他の機能ブロックを介して処理速度制御部２００にCPU使用率X1乃至X4が通知されることもある。
【０１９１】
何れにしても、CPU使用率X1乃至X4が処理速度制御部２００に通知されると、例えば本実施の形態では、処理速度制御部２００は、次の式（３）の演算を行うことで、現在のCPU使用率Xを求める。即ち、本実施の形態では、現在のCPU使用率Xとは、SCPU１２３−１乃至１２３−４のそれぞれの現在のCPU使用率X1乃至X4の平均値である。
【０１９２】
X = (X1 + X2 + X3 +X4)/4      ・・・（３）
【０１９３】
具体的には例えばいま、SCPU１２３−１乃至１２３−４のそれぞれの現在のCPU使用率X1乃至X4のそれぞれが、図１６に示されるように、７５％、１５％、４０％、および６０％のそれぞれであるとする。即ち、図１６は、各プロセッサの現在のCPU使用率の例と、図６と図７のパワー制御１６２によるCPU使用率の上限値の設定例とを示している。
【０１９４】
この場合、現在のCPU使用率Xは、次の式（４）に示されるように0.65になる。
【０１９５】
X = (0.75+0.15+0.4+0.6)/4 = 0.65      ・・・（４）
【０１９６】
以上、現在のCPU使用率Xについて説明した。次に、現在のCPU使用率Xに基づいて決定されるCPU使用率制御量Gcについて説明する。
【０１９７】
例えば、現在のCPU使用率X(0<= X <= 1)を入力パラメータとする速度制御量評価関数Y(X)を次の式（５）乃至式（７）のように定義するとする。
【０１９８】
Y(X)= K/P×X − K      ・・・（５）
ただし、Up制御ホールドフラグが１、かつ Y(X) < 0 のときには、Y(X)=0    ・・・（６）
また、0<= Y（X） < q のときには、Y（X） = q       ・・・（７）
【０１９９】
式（５）において、Kは、システム（図２の情報処理装置）として決定される定数を示している。Pは、上述したようにCPU使用率の上限値を示しており、例えば本実施の形態では、SCPU１２３−１乃至１２３−４とも同一の値が設定されているとする。具体的には例えば、図１６の例では、SCPU使用率の上限目標値（SCPU_Limit）である８０％に対応する0.8が、式（５）のPに代入されることになる。
【０２００】
また、Up制御ホールドフラグとは、サブプロセスの処理速度を上げる方向（以下、Up方向と称する）の速度制御を禁止させるフラグである。即ち、Up制御ホールドフラグが立っている場合（１の場合）、サブプロセスのUp方向の速度制御は禁止される。これに対して、Up制御ホールドフラグが０の場合、サブプロセスのUp方向の速度制御が許可される。
【０２０１】
また、式（７）における、ｑは、サブプロセスの処理速度を下げる方向（以下、Down方向と称する）の速度制御を行う場合に、速度の下げ量を増やすための重み値を示している。即ち、詳細については後述するが、速度制御量評価関数Y(X)の出力値が０になった場合とは、現在のCPU使用率XがCPU使用率の上限値Pに到達してしまったことを意味している。この場合、可能な限り素早くサブプロセスの処理速度を下げて、現在のCPU使用率Xを下げる必要がある。そこで、本実施の形態では、現在のCPU使用率XがCPU使用率の上限値P以上になった場合には、サブプロセスのDown方向の速度制御が行われる。このようなサブプロセスのDown方向の速度制御が行われる場合に、その速度の下げ量を増やすための重み値として、本実施の形態では値ｑが利用されるのである。
【０２０２】
図７の処理速度制御部２００は、このような速度制御量評価関数Y(X)の出力値を演算し、その出力値を用いて、CPU使用率制御量Gcを設定することができる。
【０２０３】
換言すると、CPU使用率制御量Gcの設定手法は、現在のCPU使用率XとCPU使用率の上限値Pとに基づいて設定する設定手法であれば、特に限定されず、様々な設定手法を採用することが可能であり、そのような様々な設定手法のうちの一例が、速度制御量評価関数Y(X)を用いる設定手法であると言える。
【０２０４】
さらに、速度制御量評価関数Y(X)を用いるCPU使用率制御量Gcの設定手法も、速度制御量評価関数Y(X)さえ用いれば任意の手法で構わない。ただし、本実施の形態では例えば、速度制御量評価関数Y(X)の出力値をそのままCPU使用率制御量Gcとして設定する手法が採用されているとする。
【０２０５】
なお、図１７には、速度制御量評価関数Y(X)の形、即ち、CPU使用率制御量Gcの形（グラフ）が示されている。また、図１８には、現在のCPU使用率Xに応じて可変する速度制御量評価関数Y(X)の出力値、即ち、CPU使用率制御量Gcの値の時間変化の推移例が示されている。即ち、図１８において、上側の図は、現在のCPU使用率Xの時間変化の推移例を示しており、下側の図は、上側の図に対応する、速度制御量評価関数Y(X)の出力値、即ち、CPU使用率制御量Gcの時間変化の推移例を示している。このため、図１８の上側の図の縦軸は現在のCPU使用率Xを示し、図１８の下側の縦軸は速度制御量評価関数Y(X)、即ち、CPU使用率制御量Gcを示し、かつ、図１８の両図とも、その横軸は同一の時間軸を示している。
【０２０６】
図１８に示されるように、現在のCPU使用率XがCPU使用率の上限値Pに到達するまでは、CPU使用率制御量Gcは負の値を取る。従って、CPU使用率制御量Gcが負の値である場合とは、現在のCPU使用率Xにまだ余裕があることを示しており、その余裕の度合がCPU使用率制御量Gcの絶対値で示されることになる。そこで、本実施の形態では、CPU使用率制御量Gcが負の値である場合、サブプロセス処理のUp方向の速度制御が行われる。このとき、速度の上げ量は、CPU使用率制御量Gcの絶対値に応じて設定される。
【０２０７】
これに対して、上述したように、CPU使用率制御量Gcが０以上の場合とは、現在のCPU使用率XがCPU使用率の上限値P以上になったことを示しており、可能な限り素早くサブプロセスの処理速度を下げで、現在のCPU使用率Xを下げる必要がある。そこで、本実施の形態では、CPU使用率制御量Gcが０または正値である場合、サブプロセス処理のDown方向の速度制御が行われる。このとき、速度の下げ量は、CPU使用率制御量Gcの絶対値に応じて設定される。このCPU使用率制御量Gcの絶対値を増やすために、即ち、速度の下げ量を増やすために、上述した重み値qが利用されるのである。
【０２０８】
ところで、現在のCPU使用率Xは、一定時間の平均値により求められる。従って、上述したように、このような現在のCPU使用率Xを単に用いる第１の手法を利用してサブプロセスの処理速度制御が行われた場合、即ち、CPU使用率制御量Gcを単に用いてサブプロセスの処理速度制御が行われた場合、実時間としての応答速度は悪くなり、メインプロセスの所定の品質のレベルが瞬間的に悪くなったとしても、即ち、例えば本実施の形態では出力バッファレベルLevelが０になったとしても、その瞬間ではそのことを判別して、制御に反映させることができないという課題が発生してしまう。
【０２０９】
そこで、この課題を解決するために、本実施の形態では上述したように、現在のCPU使用率Xの他にさらに、メインプロセスの品質保証余裕度（品質レベル）、即ち、例えば本実施の形態では出力バッファレベルLevelを用いて、サブプロセスの処理速度制御が行われるのである。
【０２１０】
即ち、本実施の形態では、以上説明したようにして、出力バッファレベル制御量GbとCPU使用率制御量Gcとのそれぞれが設定されると、出力バッファレベル制御量GbとCPU使用率制御量Gcとのそれぞれが上述した式（２）に代入されて、総合制御量Gsが求められる。即ち、出力バッファレベル制御量GbとCPU使用率制御量Gcとの積が、総合制御量Gsとして設定される。そして、この総合制御量Gsに基づいてサブプロセスの処理速度制御が行われるのである。
【０２１１】
なお、実際には、例えば図１９に示されるようなテーブルが図７の処理速度制御部２００に予め保持されており、処理速度制御部２００は、このテーブルを参照して、出力バッファレベル制御量GbとCPU使用率制御量Gcとのそれぞれを設定する。
【０２１２】
なお、図１９のテーブルにおいて、出力バッファレベル制御量の項目に示されている△は、図７のHDD２０３の性能や各種ライブラリの処理能力に応じて、システム（図２の情報処理装置）として決定される固定値である。
【０２１３】
また、図１９のテーブルにおいては、出力バッファレベルLevelの現在値が０または１の場合、現在のCPU使用率Xに依存せずに、出力バッファレベルLevelに基づいてサブプロセスのDown方向の速度制御が行われる。このため、出力バッファレベルLevelの現在値が０または１の場合、CPU使用率制御量Gcは強制的に１に設定される。
【０２１４】
これに対して、図１９のテーブルにおいては、出力バッファレベルLevelの現在値が２または３の場合、出力バッファレベルLevelに依存せずに、現在のCPU使用率Xに基づいてサブプロセスのUp方向またはDown方向の速度制御が行われる。このため、出力バッファレベルLevelの現在値が０または１の場合、出力バッファレベル制御量Gcは強制的に１に設定される。
【０２１５】
このように、設計者等は、このようなテーブルを予め作成して処理速度制御部２００に保持させておくことで、所定のパターンでは特例を設ける等、総合制御量Gsの細かい設定を行うことが可能になる。即ち、処理速度制御部２００に保持されるテーブルは、当然ながら図１９の例に限定されず、設計者等が自在に作成できる任意のテーブルで構わない。
【０２１６】
以上、図７の処理速度制御部２００により設定されて、Mux部１９９に供給される総合制御量Gsの詳細について説明した。
【０２１７】
次に、この総合制御量Gsを用いるサブプロセスの速度制御手法の例について説明する。
【０２１８】
上述したように、図７のサブプロセス処理部１７３のうちの、デコード部１９３、サンプリングレートコンバート処理部１９５、および、エンコード部１９７といった機能ブロックは、次の第１の条件と第２の条件とが満たされた場合、他の機能ブロックとは独立して処理を開始する。第１の条件とは、所定の単位量の処理に必要なデータ、例えば本実施の形態では、処理すべき１フレーム分のデータ（入力データ）が前段のバッファに格納されているという条件である。第２の条件とは、処理後のそのデータ（出力データ）を記憶させるための空き領域が所定の容量以上後段のバッファに確保されているという条件である。このため、DeMux部１９１乃至エンコード部１９７においては、ビデオカード２０１からの割り込みVideo Frameのタイミングとは非同期に、Ｎ倍速（Ｎは、１以上の任意の整数値）で処理がおこなわれる。なお、１倍速とは、ビデオカード２０１からの割り込みVideo Frameの間隔に１フレーム分の処理が行われる速度を指す。
【０２１９】
ただし、最終段のMux部１９９では、上述した第１の条件に加えてさらに、前回のHDD２０３への書き込み処理の開始時点から、HDD２０３への書き込み間隔が経過したという第３の条件が満たされると、今回のHDD２０３への書き込み処理を開始する。この第３の条件に含まれるHDD２０３への書き込み間隔は、処理速度制御部２００から供給される総合制御量Gsに応じて逐次更新される。このため、HDD２０３への書き込み間隔が逐次更新されていくことで、最集段のMux部１９９の処理間隔が制御され、その結果として、サブプロセス処理部１７３全体の処理速度が制御されることになる。
【０２２０】
即ち、最終段のMux部１９９は、所定のタイミング毎に処理速度制御部２００から供給されてくる総合制御量Gsの更新値に基づいて、HDD２０３への書き込み間隔を再設定（更新）する。これにより、HDD２０３への書き込み間隔が逐次更新され、その結果として、サブプロセス処理部１７３の処理速度が制御される。
【０２２１】
以上の手法が、総合制御量Gsを用いるサブプロセスの速度制御手法の一例である。
【０２２２】
なお、HDD２０３への書き込み間隔の設定手法は、総合制御量Gsを用いる手法であれば特に限定されず、様々な手法を適用することができる。ただし、本実施の形態では、HDD２０３への書き込み間隔の設定手法として、例えば次のような手法が採用されているとする。
【０２２３】
即ち、総合制御量Gsは、ビデオカード２０１の割り込みVideo Frameのタイミングと略同一のタイミングで、処理速度制御部２００からMux部１９９に供給されてくる。そこで、Mux部１９９は、総合制御量Gsが供給される毎に、即ち、ビデオカード２０１の割り込みVideo Frameのタイミングと略同一のタイミングで、HDD２０３への書き込み間隔の設定を更新していく、という手法が本実施の形態では採用されている。
【０２２４】
詳細には、ビデオカード２０１の割り込みVideo Frameのt回目のタイミングと略同一のタイミングを時刻tと記述し、かつ、その時刻tにおけるHDD２０３への書き込み間隔をt_period［t］（秒）と記述すると、Mux部１９９は、次のようにして書き込み間隔t_period［t］の設定を更新していく。
【０２２５】
即ち、Mux部１９９は、t=0における書き込み間隔t_period［0］の設定、即ち、初期設定として、次の式（８）を演算する。
【０２２６】
t_period[0] = t_target      ・・・（８）
【０２２７】
式（８）において、t_targetは、初期書き込み間隔を示している。具体には例えば、初期書き込み間隔t_targetは、次の式（９）により示される。
【０２２８】
t_target = W_BK/Rate_Application_Normal      ・・・（９）
【０２２９】
式（９）において、W_BKは、HDD２０３に対して１回に書き込むデータ（ブロック）の単位(Byte)を示しており、システム（図２の情報処理装置）として設定される値であって、通常は固定値である。以下、W_BKを、HDD書き込みデータ量W_BKと称する。
【０２３０】
また、式（９）において、Rate_Application_Normalは、サブプロセス処理部１７３の処理速度、即ち、単位時間（1秒間）あたりのデータ処理量の初期値（bps）を示しており、システム（図２の情報処理装置）として設定される値であって、通常は固定値である。
【０２３１】
このようにして書き込み間隔t_period［0］の初期設定がなされた場合、それ以降、総合制御量Gsが供給される毎に、Mux部１９９は、次の式（１０）と式（１１）とをその順番で順次演算していくことで、書き込み間隔t_period［t］の設定を更新していく。即ち、Mux部１９９は、初めに式（１０）を演算し、次に、その演算結果である式（１０）の左辺の値t_period［t］を、式（１１）の右辺に代入して式（１１）を演算し、その演算結果である式（１１）の左辺の値t_period［t］を、最終的な書き込み間隔として設定する。
【０２３２】
t_period[t] = Max (t_period[t-1] + Gs, tmin)    ・・・（１０）
t_period[t] = Min (t_period[t], tmax)          ・・・（１１）
【０２３３】
式（１０）において、t_period[t-1]は、更新前の書き込み間隔、即ち、ビデオカード２０１の割り込みVideo Frameのt-1回目のタイミング（前回の割り込みVideo Frameのタイミング）と略同一の時刻t-1に設定された書き込み間隔を示している。t_minは、書き込み間隔の最小値を示しており、HDD２０３自体の書き込み最大レートを越えない範囲で予め設定される固定値である。また、Max (t_period[t-1] + Gs, tmin)は、t_period[t-1] + Gsとtminとのうちの最大値を出力する関数である。
【０２３４】
式（１１）において、t_maxは、書き込み間隔の最大値を示しており、予め設定される固定値である。なお、書き込み間隔t_period［t］がその最大値t_max 以上になったときには、サブプロセス処理部１７３全体の処理が一時停止する。また、Min (t_period[t], tmax)は、t_period[t]とtmaxとのうちの最小値を出力する関数である。
【０２３５】
即ち、Mux部１９９は、初めに、更新前の書き込み間隔t_period[t-1]に総合制御量Gsの値を加算した値を、とりあえずの書き込み間隔t_period［t］として設定する。次に、Mux部１９９は、とりあえずの書き込み間隔t_period［t］とその最小値Minとを比較し、とりあえずの書き込み間隔t_period［t］がその最小値t_minより小さい場合、とりあえずの書き込み間隔t_period［t］を最小値t_minに変更する。ここまでの一連の処理が、式（１０）の演算処理である。
【０２３６】
次に、Mux部１９９は、とりあえずの書き込み間隔t_period［t］とその最大値t_maxとを比較し、とりあえずの書き込み間隔t_period［t］がその最大値t_maxより小さい場合、とりあえずの書き込み間隔t_period［t］を最終的な（正式な）書き込み間隔t_period［t］として設定する。これに対して、とりあえずの書き込み間隔t_period［t］がその最大値t_max以上の場合、最大値t_maxを最終的な書き込み間隔t_period［t］として設定する。
【０２３７】
このようにして、書き込み間隔t_period［t］は、t_min <= t_period <= t_maxの範囲で可変設定される。即ち、t_min < t_period < t_maxの範囲内においては、書き込み間隔t_period［t］は、更新前の書き込み間隔t_period[t-1]に総合制御量Gsの値が加算された値に更新されていく。そして、書き込み間隔t_period［t］が延長方向に更新されていき、その最大値t_max以上になると、書き込み間隔t_period[t]はその最大値t_maxにホールドされる。逆に、書き込み間隔t_period［t］が短縮方向に更新されていき、その最小値t_max以下になると、書き込み間隔t_period[t]はその最小値t_minにホールドされる。
【０２３８】
以上のようなHDD２０３への書き込み間隔の設定手法が、本実施の形態で採用されている手法である。
【０２３９】
Mux部１９９は、このような手法を利用して書き込み間隔t_period［t］を設定すると、図２０に示されるように、前回の書き込み（Write）からの時間経過が、その書き込み間隔t_period［t］を超えたタイミングで、HDD書き込みデータ量W_BKのデータをその前段のバッファ１９８から読み出して、ストリームマネージャ１７１とHDDドライバ１６７−１とを介してHDD２０３に書き込む(Writeする)。
【０２４０】
この書き込み間隔t_period［ｔ］は、上述したように、また、図２０に示されるように、総合制御量Gsの値によって動的に変化する。詳細には、総合制御量 Gsとして負の値が設定されている場合には、書き込み間隔t_period［ｔ］は短くなる。即ち、サブプロセス処理部１７３の処理速度は加速される。これに対して、総合制御量Gsとして正の値が設定されている場合には、書き込み間隔t_period［ｔ］は長くなる。即ち、サブプロセス処理部１７３の処理速度は減速される。
【０２４１】
ただし、MUX部１９９は、HDD書き込みデータ量W_BK以上のデータがその前段のバッファ１９８にストアされていなかった場合、または、その後段のストリームマネージャ１７１にデータを書き込めなかった場合は、バッファ１９８からのデータの読み出しを中止する。即ち、サブプロセス処理部１７３全体の処理が一時停止する。
【０２４２】
なお、このような場合であって、さらに、t_period[t-1]  < t_period[t] であった場合には、例えば本実施の形態では、Mux部１９９は、書き込み間隔t_period[t] の設定値を、更新前の書き込み間隔t_period[t-1] に置き換える。
【０２４３】
また、例えば本実施の形態では、サブプロセス処理部１７３全体の処理が一時停止してから再開するまでの回数（フレーム数）として、N_suspendという値（以下、再開設定回数と称する）が予め設定されている。そこで、サブプロセス処理部１７３全体の処理が一時停止した後も、Mux部１９９は、書き込み間隔t_period[t]の設定の更新を繰り返し行うとともに、サブプロセス処理部１７３全体の処理が一時停止を開始してからの回数（フレーム数）をカウントしていく。そして、Mux部１９９は、再開設定回数N_suspend以上の間隔が空いた状態で、かつ、設定更新後の書き込み間隔t_period［t］の値がその最大値t_max より小さくなった場合、サブプロセス処理部１７３全体の処理の一時停止を解除し、その処理を再開させる。
【０２４４】
以上、図２０を参照して説明したで手法が、総合制御量Gsを用いるサブプロセスの速度制御手法の一例である。即ち、図２０は、本発明が適用されるサブプロセスの速度制御手法の一例を示している。
【０２４５】
次に、図２１のアローチャートを参照して、サブプロセス処理部１７３の上述した動作のうちの、Mux部１９９、Mux部１９９の前段のエンコード部１９７およびバッファ１９８、並びに、Mux部１９９の後段のストリームマネージャ１７１のそれぞれの動作の詳細例について説明する。
【０２４６】
上述したように、エンコード部１９７とその後段のバッファ１９８との間の処理は、MUX部１９９側の処理とは非同期で行われる。
【０２４７】
詳細には例えば、図２１のステップＳ１において、エンコード部１９７は、Mux部１９９側の処理とは独立して自立的に、バッファ１９８の空き確認を行う。即ち、エンコード部１９７は、１フレーム分の出力データを書き込む空き領域がバッファ１９８に存在するか否かを確認する。
【０２４８】
例えばこのステップＳ１の時点で、バッファ１９８に空き領域が存在しなければ、ステップＳ２において、バッファ１９８は、ＮＧの応答、即ち、空き領域が存在しないという応答をエンコード部１９７に送信する。
【０２４９】
すると、ステップＳ３において、エンコード部１９７は、一定時間その処理を待機（Wait）する。そして、Mux部１９９側の処理とは独立して自立的に一定時間Waitすると、ステップＳ４において、エンコード部１９７は、バッファ１９８に対して空き確認を行う。
【０２５０】
例えばこのステップＳ４の時点までに、Mux部１９９によりデータが読み出されてバッファ１９８に空き領域ができた場合には、ステップＳ５において、バッファ１９８は、Readyの応答、即ち、空き領域が存在するという応答をエンコード部１９７に送信する。
【０２５１】
すると、ステップＳ６において、エンコード部１９７は、１フレーム分の処理を実行する。即ち、エンコード部１９７は、その前段のバッファ１９６から１フレーム分のビデオデータを読み出して、MPEG２方式に従った圧縮符号化処理を施す。そして、エンコード部１９７は、ステップＳ６の処理の結果得られる１フレーム分の圧縮符号化ビデオデータ（Data）をバッファ１９８に書き込む。
【０２５２】
その後、ステップＳ８において、バッファ１９８は、Readyの応答、即ち、データが正常に書き込めたという応答をエンコード部１９７に送信すると、Mux部１９９側の処理とは独立して自立的に、上述したステップＳ１乃至Ｓ８の処理が繰り返される。
【０２５３】
このようなエンコード部１９７とバッファ１９８との間の処理とは独立して自立的に、バッファ１９８、Mux部１９９、および、ストリームマネージャ１７１の間では、次のような処理が実行される。
【０２５４】
即ち、ステップＳ１１において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータの読み出し（Read）の要求を、バッファ１９８に対して送信する。
【０２５５】
ステップＳ１２において、バッファ１９８が、Readyの応答、即ち、そのRead要求に応えることが可能であるという応答を送信してくると、Mux部１９９は、HDD書き込みデータ量W_BK分のデータをバッファ１９８から読み出す。
【０２５６】
そして、ステップＳ１３において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータをストリームマネージャ１７１を介してHDD２０３に書き込む（Writeする）。
【０２５７】
ステップＳ１４において、ストリームマネージャ１７１が、Readyの応答、即ち、Writeが正常に行われたという応答を送信してくると、ステップＳ１５において、Mux部１９９は、その直前に設定された書き込み間隔t_period[t]分の時間だけその処理を待機（Wait）する。
【０２５８】
そして、書き込み間隔t_period[t]分の時間が経過した時点で、処理はステップＳ１６に進む。即ち、ステップＳ１６において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータのRead要求を、バッファ１９８に対して送信する。
【０２５９】
ステップＳ１７において、バッファ１９８がReadyの応答を送信してくると、Mux部１９９は、HDD書き込みデータ量W_BK分のデータをバッファ１９８から読み出す。
【０２６０】
そして、ステップＳ１８において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータをストリームマネージャ１７１を介してHDD２０３にWriteする。
【０２６１】
ステップＳ１９において、ストリームマネージャ１７１が、Readyの応答を送信してくると、ステップＳ２０において、Mux部１９９は、その直前に設定された書き込み間隔t_period[t]分の時間だけWaitする。
【０２６２】
そして、書き込み間隔t_period[t]分の時間が経過した時点で、処理はステップＳ２１に進む。即ち、ステップＳ２１において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータのRead要求を、バッファ１９８に対して送信する。
【０２６３】
この時点で例えばバッファ１９８にHDD書き込みデータ量W_BK分のデータが蓄積されていない場合には、ステップＳ２２において、バッファ１９８はNGの応答をMux部１９９に送信する。このような場合、ステップＳ２３において、Mux部１９９は、上述したように、書き込み間隔t_period[t]を、前回の値、即ち、前回の書き込み間隔t_period[t-1]に置き換える。そして、ステップＳ２４において、Mux部１９９は、ステップＳ２３の処理で前回の値に置き換えられた書き込み間隔t_period[t]分の時間だけWaitする。
【０２６４】
そして、書き込み間隔t_period[t]分の時間が経過した時点で、処理はステップＳ２５に進む。即ち、ステップＳ２５において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータのRead要求を、バッファ１９８に対して送信する。
【０２６５】
ステップＳ２６において、バッファ１９８がReadyの応答を送信してくると、Mux部１９９は、HDD書き込みデータ量W_BK分のデータをバッファ１９８から読み出す。
【０２６６】
そして、ステップＳ２７において、Mux部１９９は、HDD書き込みデータ量W_BK分のデータをストリームマネージャ１７１を介してHDD２０３にWriteする。正常にWriteが行われると、ステップＳ２８において、ストリームマネージャ１７１が、Readyの応答をMux部１９９に送信する。
【０２６７】
その後、上述した一連の処理が、バッファ１９８、Mux部１９９、および、ストリームマネージャ１７１の間で、エンコード部１９７とバッファ１９８との間の処理とは独立して自立的に繰り返されていく。
【０２６８】
以上、図２１のアローチャートを参照して、サブプロセス処理部１７３の動作のうちの、エンコード部１９７とバッファ１９８との間の動作（処理）と、Mux部１９９側の処理、即ち、バッファ１９８、Mux部１９９、および、ストリームマネージャ１７１の間の動作（処理）
とのそれぞれの詳細について説明した。
【０２６９】
次に視点を変えて、図２２のフローチャートを参照して、サブプロセス処理部１７３の動作（処理）のうちの、処理速度制御部２００とMux部１９９との間で行われる処理、即ち、上述した図２０に示される書き込み間隔t_period[t]の設定を更新していくことでサブプロセス処理部１７３全体の処理速度を制御する処理（以下、速度制御処理と称する）の詳細についてさらに説明する。
【０２７０】
即ち、図２２は、「速度制御処理」の一例を示すフローチャートである。
【０２７１】
上述したように、この「速度制御処理」は、ビデオカード２０１からの割り込みVideo frameのタイミング毎に逐次実行される。
【０２７２】
このため、最初のステップＳ４１において、処理速度制御部２００は、フレームカウンタ値N_countの更新を行う。即ち、ステップＳ１において、N_Count = N_count + 1が演算される。
【０２７３】
ステップＳ４２において、処理速度制御部２００は、品質判定部１９０から供給される出力バッファレベルLevelの現在値を取得して、出力バッファレベルLevelの現在値と、出力バッファレベルLevelのこれまでの時間変化の推移とに基づいて、上述したIndex値を決定するとともに、上述したUp制御ホールドフラグの値（０または１）を決定する。
【０２７４】
以下、このようなステップＳ４２の処理を「Index値およびUp制御ホールドフラグ生成処理」と称する。この「Index値およびUp制御ホールドフラグ生成処理」の詳細例については、図２３のフローチャートを参照して後述する。
【０２７５】
ステップＳ４３において、処理速度制御部２００は、ステップＳ４２の処理で決定されたIndex値に該当する出力バッファレベル制御量Gbの値を、例えば上述した図１９等のテーブルを参照して設定する。
【０２７６】
ステップＳ４４において、処理速度制御部２００は、現在のCPU使用率Xの値をシステムサービス１６６から取得する。このとき、処理速度制御部２００はまた、CPU使用率の上限値Pの値もシステムサービス１６６から取得する。
【０２７７】
ステップＳ４５において、処理速度制御部２００は、現在のCPU使用率X（および、CPU使用率の上限値P）を入力パラメータとする上述した式（５）乃至式（７）で示される速度制御量評価関数Y(X)から、CPU制御量Gcを設定する。なお、上述したように、本実施の形態では、速度制御量評価関数Y(X)の出力値がそのままCPU制御量Gcに設定される。なお、上述した式（６）等に示されるように、速度制御量評価関数Y(X)の出力値は、Up制御ホールドフラグを考慮して算出される。
【０２７８】
ステップＳ４６において、処理速度制御部２００は、総合制御量Gs（＝Gc×Gb）を設定し、その設定値をMux部１９９に通知する。
【０２７９】
すると、ステップＳ４７において、Mux部１９９は、HDD２０３へのとりあえずの書き込み間隔t_period（上述したt_period［t］に相当）として、前回の「速度制御処理」で設定された書き込み間隔t_period_pre（上述したt_period［t-1］に相当）を設定する。即ち、ステップＳ４７において、t_period=t_period_preが演算される。
【０２８０】
ステップＳ４８において、Mux部１９９は、HDD２０３へのとりあえずの書き込み間隔t_periodとして、ステップＳ４７の処理で設定された書き込み間隔t_period（即ち、前回の書き込み間隔t_period_pre）に対して、ステップＳ４６の処理で設定された総合制御量Gsの値を加算した値を設定する。即ち、ステップＳ４８において、t_period＝t_period＋Gsが演算される。
【０２８１】
ステップＳ４９において、Mux部１９９は、t_period>t_minであるか否かを判定する。
【０２８２】
Mux部１９９は、ステップＳ４９において、t_period>t_minではないと判定した場合、即ち、HDD２０３へのとりあえずの書き込み間隔t_periodがその最小値t_min以下の場合、ステップＳ５０において、HDD２０３への正式な書き込み間隔t_periodとして、その最小値t_minを設定する。即ち、ステップＳ５０において、t_period=t_minが演算される。換言すると、サブプロセス処理部１７３の処理速度が速度上限値（最高値）に設定されることになる。これにより、「速度制御処理」は終了となる。
【０２８３】
これに対して、ステップＳ４９において、t_period>t_minであると判定された場合、即ち、HDD２０３へのとりあえずの書き込み間隔t_periodがその最小値t_minより大きい場合、処理はステップＳ５１に進む。
【０２８４】
このように、ステップＳ４７乃至Ｓ５０の処理は、上述した式（１０）の演算処理に相当する。
【０２８５】
ステップＳ５１において、Mux部１９９は、t_period<t_maxであるか否かを判定する。
【０２８６】
Mux部１９９は、ステップＳ５１において、t_period<t_maxではないと判定した場合、即ち、HDD２０３へのとりあえずの書き込み間隔t_periodがその最大値t_max以上の場合、ステップＳ５２において、HDD２０３への正式な書き込み間隔t_periodとして、その最大値t_maxを設定する。即ち、ステップＳ５０において、t_period=t_maxが演算される。
【０２８７】
そして、ステップＳ５３において、サブプロセス処理部１７３は、そのサブプロセス処理の一時中断を行う。サブプロセス処理の一時中断とは、サブプロセス内の各タスク、即ち、デコード部１９３等のサブプロセスを構成する各機能ブロックの処理が、現在処理中の１フレーム分のデータが後段のバッファに書き込まれた時点で中断されることを指す。これにより、「速度制御処理」は終了となる。
【０２８８】
これに対して、ステップＳ５１おいて、t_period<t_maxであると判定された場合、即ち、HDD２０３へのとりあえずの書き込み間隔t_periodがその最大値t_maxより小さい場合、処理はステップＳ５４に進められる。
【０２８９】
ステップＳ５４において、Mux部１９９は、Mux部１９９自身のデータ読み出し時の前段のバッファ１９８の残量不足か、または、Mux部１９９からストリームマネージャ１７１を介するHDD２０３への書き込み不良が発生しているか否かを判定する。
【０２９０】
Mux部１９９のデータ読み出し時の前段のバッファ１９８の残量不足と、Mux部１９９からストリームマネージャ１７１を介するHDD２０３への書き込み不良との何れもが発生していない場合、ステップＳ５４においてNOであると判定されて、処理はステップＳ５６に進む。
【０２９１】
ステップＳ５６において、Mux部１９９は、HDD２０３への正式な書き込み間隔を、前回の書き込み間隔t_periodo_preから、ステップＳ４８の処理で設定されたHDD２０３へのとりあえずの書き込み間隔t_periodに更新する。即ち、ステップＳ５６において、HDD２０３へのとりあえずの書き込み間隔t_periodが、HDD２０３への正式な書き込み間隔として設定されるのである。
【０２９２】
このように、ステップＳ５１，Ｓ５２，Ｓ５６の処理は、上述した式（１１）の演算処理に相当する。
【０２９３】
これに対して、Mux部１９９のデータ読み出し時の前段のバッファ１９８の残量不足と、Mux部１９９からストリームマネージャ１７１を介するHDD２０３への書き込み不良とのうちの少なくとも一方が発生している場合、ステップＳ５４においてYESであると判定されて、処理はステップＳ５５に進む。
【０２９４】
ステップＳ５５において、Mux部１９９は、t_period＝Min（t_period，t_period_pre）の演算を行う。即ち、Mux部１９９は、t_period_pre< t_period であったときには、HDD２０３へのとりあえずの書き込み間隔t_periodの設定値（ステップＳ４８の処理で設定された値）を、更新前の書き込み間隔t_period_pre に置き換える。
【０２９５】
そして、ステップＳ５６において、Mux部１９９は、HDD２０３への正式な書き込み間隔を、前回の書き込み間隔t_periodo_preから、ステップＳ５５の処理で設定されたHDD２０３へのとりあえずの書き込み間隔t_periodに更新する。即ち、ステップＳ５６において、HDD２０３へのとりあえずの書き込み間隔t_periodが、HDD２０３への正式な書き込み間隔として設定されるのである。ただし、ステップＳ５５において、HDD２０３へのとりあえずの書き込み間隔t_period[t] の設定値が更新前の書き込み間隔t_period_pre に既に置き換えられている場合には、HDD２０３への正式な書き込み間隔は、結局、更新前の書き込み間隔t_period_preのまま更新されないことになる。
【０２９６】
ステップＳ５７において、Mux部１９９は、上述した再開設定回数N_suspend以上サブプロセス処理部１７３全体の処理が一時中断しているか否かを判定する。
【０２９７】
サブプロセス処理部１７３全体の処理が一時中断されていない場合、或いは、サブプロセス処理部１７３全体の処理が一時中断されているが、その一時中断開始からの回数（フレーム数、即ち、ステップＳ４１の処理で更新されるフレームカウンタ値N_Countの増加数）が再開設定回数N_suspendを超えていない場合、ステップＳ５７においてNOであると判定されて、「速度制御処理」は終了となる。
【０２９８】
これに対して、サブプロセス処理部１７３全体の処理が一時中断されており、その一時中断開始からの回数が再開設定回数N_suspend以上になった場合、ステップＳ５７においてYESであると判定されて、処理はステップＳ５８に進む。
【０２９９】
ステップＳ５８において、サブプロセス処理部１７３は、その処理を再開させる。これにより、「速度制御処理」は終了となる。
【０３００】
以上、図２２のフローチャートを参照して「速度制御処理」の一例について説明した。
【０３０１】
次に、図２３のフローチャートを参照して、この例の「速度制御処理」のうちのステップＳ４２の「Index値およびUp制御ホールドフラグ生成処理」の一例について説明する。即ち、図２３のフローチャートは、上述した図９乃至図１４の関係で示されるIndex値を決定するための「Index値およびUp制御ホールドフラグ生成処理」の一例を示している。
【０３０２】
ステップＳ７１において、処理速度制御部２００は、１つ前の出力バッファレベルの値を保持する。即ち、直前の「Index値およびUp制御ホールドフラグ生成処理」において現在の出力バッファレベルLevelの値として取得された値が、1つ前の出力バッファレベルLevel_preとして設定される（Level_pre＝Level）。
【０３０３】
ステップＳ７２において、処理速度制御部２００は、現在の出力バッファレベルLevelの値（０乃至３のうちのいずれかの値）を品質判定部１９０から取得する。
【０３０４】
ステップＳ７３において、処理速度制御部２００は、現在の出力バッファレベルLevelと１つ前の出力バッファレベルLevel_preとが同じ値であるか否かを判定する。
【０３０５】
処理速度制御部２００は、ステップＳ７３において、現在の出力バッファレベルLevelと１つ前の出力バッファレベルLevel_preとが同じ値であると判定した場合、即ち、出力バッファレベルLevelの値が変化しなかった場合、ステップＳ７４において、現在の出力バッファレベルLevelの値は２であるか否かを判定する。
【０３０６】
ステップＳ７４において、現在の出力バッファレベルLevelの値は２ではないと判定された場合、即ち、現在の出力バッファレベルLevelの値が１つ前の出力バッファレベルLevel_preと同一値であって、０，１，３のうちの何れかの値である場合、処理はステップＳ７５に進む。
【０３０７】
ステップＳ７５において、処理速度制御部２００は、「Index＝Level×１００」の演算を行い、その演算結果IndexをIndex値として決定する。これにより、「Index値およびUp制御ホールドフラグ生成処理」は終了となる。
【０３０８】
これに対して、ステップＳ７４において、現在の出力バッファレベルLevelの値は２であると判定された場合、即ち、現在の出力バッファレベルLevelの値が１つ前の出力バッファレベルLevel_preと同一値であって、２である場合、処理はステップＳ７６に進む。
【０３０９】
ステップＳ７６において、処理速度制御部２００は、「N_slp=Min(N_slp,16)」を演算する。
【０３１０】
N_slpとは、上述したように、出力バッファ残量レベルLevelの値が２に変化してから１に変化するまでの回数（以下、レベル２継続回数と称する）である。また、ステップＳ７３の処理でYESであると判定され、かつ、ステップＳ７４の処理でYESであると判定されて、処理がステップＳ７６に進む場合とは、出力バッファ残量レベルLevelの値が２回以上連続して２を維持していることを意味している。そこで、ステップＳ７６において、レベル２継続回数N_slpの値が、前回のレベル２継続回数N_slpに対して１だけ加えられた値に更新される。即ち、「N_slp=N_slp+1」が演算される。ただし、この例では、レベル２継続回数N_slpの最大値は例えば１６に予め設定されている。そこで、さらにステップＳ７６において、更新されたレベル２継続回数N_slpの値が１６未満の場合には、更新されたレベル２継続回数N_slpの値が正式なレベル２継続回数N_slpとして設定される。これに対して、更新されたレベル２継続回数N_slpの値が１６以上の場合には、強制的に１６がレベル２継続回数N_slpとして設定されるのである。即ち、「N_slp=Min(N_slp,16)」が演算されるのである。
【０３１１】
ステップＳ７７において、処理速度制御部２００は、「N_hold=N_hold+1」を演算する。
【０３１２】
N_holdとは、Up制御ホールドフラグ（以下、Hdと記述する）が１に設定されてから（立ってから）現在までの回数（フレーム数）、即ち、サブプロセス処理部１７３のUp方向の速度制御が禁止（ホールド）されてから現在に至るまでの回数を示している。以下、この回数N_holdを、Up制御ホールド継続回数N_holdと称する。
【０３１３】
即ち、詳細についてはステップＳ８１の説明として後述するが、出力バッファ残量レベルLevelの値が２以外の値から２に変化すると、Up制御ホールドフラグHdが１に設定されて、サブプロセス処理部１７３のUp方向の速度制御の禁止が開始される。そして、サブプロセス処理部１７３のUp方向の速度制御の禁止は、出力バッファ残量レベルLevelの値が２を維持している限り、引き続き実行されることになる。ただし、あまりに長い期間、サブプロセス処理部１７３のUp方向の速度制御の禁止が続くと、いわゆる無制御状態になってしまう。そこで、例えば本実施の形態では、サブプロセス処理部１７３のUp方向の速度制御の禁止期間の最大回数（長さ）が、ホールドレングスHd_lengthとして予め設定されている。このため、サブプロセス処理部１７３のUp方向の速度制御が禁止されてから現在に至るまでの回数が、ホールドレングスHd_lengthを超えていないか否か（小さい値か否か）を判定するために、Up制御ホールド継続回数N_holdが定義されているのである。
【０３１４】
このような判定処理、即ち、Up制御ホールド継続回数N_holdはホールドレングスHd_lengthより小さい値か否かという判定処理が、Up制御ホールド継続回数N_holdの更新を行うステップＳ７７の処理に続くステップＳ７８の処理として、処理速度制御部２００により実行される。
【０３１５】
ステップＳ７８において、Up制御ホールド継続回数N_holdはホールドレングスHd_lengthより小さい値であると判定された場合、ステップＳ７５において、「Index＝Level×１００」が演算されて、その演算結果IndexがIndex値として決定される。これにより、「Index値およびUp制御ホールドフラグ生成処理」は終了となる。この場合、Up制御ホールドフラグHdは立ったまま（１のまま）である。このため、サブプロセス処理部１７３のUp方向の速度制御の禁止が引き続き実行されることになる。
【０３１６】
これに対して、ステップＳ７８において、Up制御ホールド継続回数N_holdはホールドレングスHd_lengthより小さい値ではないと判定された場合、即ち、Up制御ホールド継続回数N_holdがホールドレングスHd_lengthを超えた場合、処理はステップＳ７９に進む。
【０３１７】
ステップＳ７９において、処理速度制御部２００は、Up制御ホールドフラグHdを０に設定し（Hd=0を演算し）、かつ、Up制御ホールド継続回数N_holdを０に初期設定する（N_hold=0を演算する）。その後、ステップＳ７９において、「Index＝Level×１００」が演算されて、その演算結果IndexがIndex値として決定される。これにより、「Index値およびUp制御ホールドフラグ生成処理」は終了となる。この場合、上述したステップＳ７９の処理でUp制御ホールドフラグHdは降ろされる（０に設定される）ので、サブプロセス処理部１７３のUp方向の速度制御の禁止が解除されることになる。即ち、サブプロセス処理部１７３のUp方向の速度制御が再開されることになる。
【０３１８】
以上、ステップＳ７３においてYESであると判定された場合、即ち、現在の出力バッファレベルLevelと１つ前の出力バッファレベルLevel_preとが同じ値である場合のそれ以降の処理について説明した。
【０３１９】
次に、ステップＳ７３においてNOであると判定された場合、即ち、現在の出力バッファレベルLevelと１つ前の出力バッファレベルLevel_preとが違う値である場合、換言すると、出力バッファレベルLevelの値が変化した場合のそれ以降の処理について説明する。
【０３２０】
即ち、ステップＳ７３においてNOであると判定されると、処理はステップＳ８０に進む。ステップＳ８０において、処理速度制御部２００は、現在の出力バッファレベルLevelの値は２であるか否かを判定する。
【０３２１】
ステップＳ８０において現在の出力バッファレベルLevelの値は２ではないと判定された場合、即ち、現在の出力バッファレベルLevelの値が、１つ前の出力バッファレベルLevel_preとは異なる値であって、０，１，３のうちの何れかの値である場合、処理はステップＳ８１に進む。
【０３２２】
ステップＳ８１において、処理速度制御部２００は、レベル２継続回数N_slpを０に初期設定し（N_slp=0を演算し）、Up制御ホールドフラグHdを降ろし（Hd=0を演算し）、かつ、Up制御ホールド継続回数N_holdを０に初期設定する（N_hold=0を演算する）。
【０３２３】
これに対して、ステップＳ８０において現在の出力バッファレベルLevelは２であると判定された場合、即ち、現在の出力バッファレベルLevelが１つ前の出力バッファレベルLevel_preとは異なる値であって、２である場合とは、上述したように、サブプロセス処理部１７３のUp方向の速度制御の禁止が行われることを意味している。そこで、ステップＳ８０において現在の出力バッファレベルLevelは２であると判定された場合、処理はステップＳ８２に進み、次のような処理が実行される。
【０３２４】
即ち、ステップＳ８２において、処理速度制御部２００は、レベル２継続回数N_slpを１に設定し（N_slp=１を演算し）、Up制御ホールドフラグHdを立たせ（Hd=1を演算し）、かつ、Up制御ホールド継続回数N_holdを１に設定する（N_hold=1を演算する）。
【０３２５】
以上のようなステップＳ８１またはＳ８２の処理に引き続いて、ステップＳ８３において次のような処理が実行される。
【０３２６】
即ち、ステップＳ８３において、処理速度制御部２００は、現在の出力バッファレベルLevelの値が１つ前の出力バッファレベルLevel_preの値より上昇（Up）したか否かを判定する。
【０３２７】
ステップＳ８３において、現在の出力バッファレベルLevelの値が１つ前の出力バッファレベルLevel_preの値よりUpしたと判定された場合、処理はステップＳ８４に進む。
【０３２８】
ステップＳ８４において、処理速度制御部２００は、「Index＝Level×１００＋（Level−Level_pre）＋１９」の演算を行い、その演算結果IndexをIndex値として決定する。これにより、「Index値およびUp制御ホールドフラグ生成処理」は終了となる。
【０３２９】
これに対して、ステップＳ８３において、現在の出力バッファレベルLevelの値が１つ前の出力バッファレベルLevel_preの値よりUpしていないと判定された場合、即ち、現在の出力バッファレベルLevelの値が１つ前の出力バッファレベルLevel_preの値より下降（Down）した場合、処理はステップＳ８５に進む。
【０３３０】
ステップＳ８５において、処理速度制御部２００は、現在の出力バッファレベルLevelの値は１かつ出力バッファレベルLevel_preの値は２であるか否かを判定する。
【０３３１】
ステップＳ８５において、現在の出力バッファレベルLevelの値は１かつ１つ前の出力バッファレベルLevel_preの値は２ではないと判定された場合、即ち、出力バッファレベルLevelの変化パターンが「２→１」以外のDownパターンである場合、処理はステップＳ８６に進む。
【０３３２】
ステップＳ８６において、処理速度制御部２００は、「Index＝Level×１００＋（４−Level_pre）」の演算を行い、その演算結果IndexをIndex値として決定する。これにより、「Index値およびUp制御ホールドフラグ生成処理」は終了となる。
【０３３３】
これに対して、ステップＳ８５において、現在の出力バッファレベルLevelの値は１かつ１つ前の出力バッファレベルLevel_preの値は２であると判定された場合、即ち、出力バッファレベルLevelの変化パターンが「２→１」である場合、処理はステップＳ８７に進む。
【０３３４】
ステップＳ８７において、処理速度制御部２００は、「Index＝Level×１００＋N_slp＋１」の演算を行い、その演算結果IndexをIndex値として決定する。これにより、「Index値およびUp制御ホールドフラグ生成処理」は終了となる。
【０３３５】
以上、図２２のフローチャートを参照して、処理速度制御部２００とMux部１９９との間で実行される「速度制御処理」の一例について説明し、その後、図２３のフローチャートを参照して、その「速度制御処理」のうちのステップＳ４２の「Index値およびUp制御ホールドフラグ生成処理」の詳細例について説明した。
【０３３６】
このような図２２と図２３のフローチャートに従って「速度制御処理」が実際に実行された場合の処理結果が、図２４乃至図２６に示されている。ただし、図２４乃至図２６は、速度制御量評価関数Y(X)において、K = △×16 ，q = △/4  とされ、Y(X) = △ (20X - 16)とされた場合の「速度制御処理」の処理結果を示している。
【０３３７】
図２４乃至図２６において、図中上から１番目の図は、CPU使用率Xの時間推移を示している。即ち、横軸は時間軸(time)を示しており、縦軸はCPU使用率Xを示している。同図に示されるように、CPU使用率の上限値Pは0.8に設定されている。また、時間帯Tuは、現在のCPU使用率XがCPU使用率の上限値P以上となっている時間帯を示している。
【０３３８】
図２４乃至図２６において、図中上から２番目の図は、図７のメインプロセス処理部１７２のバッファ１８８における出力バッファレベルLevelの時間推移を示している。即ち、図中上から２番目の図は、上述した図８に対応する実際の処理結果を示す図である。従って、図８と同様に、縦軸は、出力バッファレベルLevelを示しており、また、横軸は他の図と同一の時間軸を示している。横軸の１マスは、図７のビデオカード２０１からの割り込みVideo Frameの時間間隔に対応している。また、下方に示される括弧書きの３桁の数値、例えば（３００）は、図２３の「Index値およびUp制御ホールドフラグ生成処理」により実際に決定されたIndex値を示している。
【０３３９】
図２４乃至図２６において、図中上から３番目の図は、Up制御ホールドフラグHdの時間推移を示している。即ち、縦軸がUp制御ホールドフラグHdを示しており、同図に示されるように、図中上側のレベルが１とされ、下側のレベルが０とされている。横軸は他の図と同一の時間軸を示している。
【０３４０】
図２４乃至図２６において、図中上から３番目と４番目の図の間には、総合制御量Gsが示されている。各タイミング（割り込みVideo Frameのタイミング）における総合制御量Gsのそれぞれの上方に示される各矢印（ベクトル）は、そのタイミングにおける、図７のサブプロセス処理部１７３の処理速度制御の方向と制御量とを示している。即ち、上向きの矢印は、サブプロセス処理部１７３の処理速度制御の方向がUp方向であることを示している。これに対して、下向きの矢印は、サブプロセス処理部１７３の処理速度制御の方向がDown方向であることを示している。また、上向きの矢印と下向きの矢印ともに、その長さが、サブプロセス処理部１７３の処理速度制御の制御量を示している。即ち、矢印が長いほど、制御量が大きい（加速または減速の割合が大きくなるように制御する）ことを示している。
【０３４１】
図２４乃至図２６において、図中上から４番目の図、即ち、図中一番下の図は、図７のHDD２０３への書き込み間隔t_periodの時間推移を示している。即ち、縦軸がHDD２０３への書き込み間隔t_periodを示しており、横軸が他の図と同一の時間軸を示している。
【０３４２】
図２５と図２６とからわかるように、本発明のサブプロセス処理部１７３の処理速度制御では、品質レベルを示す出力バッファレベルLevelの値が、リアルタイム性を保証するための最低限の値である１になると、即座に、サブプロセス処理部１７３のDown方向の処理速度制御が行われる。その結果、その制御の出力であるHDD２３への書き込み間隔t_periodも、延長方向に高応答で推移していく。即ち、サブプロセス処理部１７３の実際の処理速度もDown方向に高応答で推移していく。本発明のサブプロセス処理部１７３の処理速度制御では、CPU使用率Xのみならず、出力バッファレベルLevelも用いているからである。
【０３４３】
即ち、出力バッファレベルLevelを用いずに、サブプロセス処理部１７３の処理速度制御が仮に行われた場合、上述したようにCPU使用率Xは応答が遅いので、出力バッファレベルLevelの値が最低限の１になった時点でも、CPU使用率XがCPU使用率の上限値Pを超えていないときも多々あり、そのようなときには、サブプロセス処理部１７３のUp方向の処理速度制御がそのまま行われてしまう。即ち、サブプロセス処理部１７３の処理速度はさらに高速となってしまう。それに伴い、メインプロセス処理部１７２の処理速度はその分だけ下がり、出力バッファレベルLevelの値が最低限の１を下回り０になってしまう恐れもある。即ち、メインプロセス処理部１７２のリアルタイム性が確保できなくなってしまう恐れもある。
【０３４４】
これに対して、本発明のサブプロセス処理部１７３の処理速度制御では、CPU使用率Xと出力バッファレベルLevelとが併用されているので、出力バッファレベルLevelの値が最低限の１になった場合でも、ほぼその時点で即座に、サブプロセス処理部１７３のDown方向の処理速度制御が開始される。その結果、サブプロセス処理部１７３の実際の処理速度もDown方向に高応答で推移していき、それに伴い、メインプロセス部１７２の処理速度もその分だけ上がり、出力バッファレベルLevelの値を１以上に維持していくことが可能になる。即ち、メインプロセス部１７２のリアルタイム性の保証を維持していくことが可能になる。
【０３４５】
さらに、図２４乃至図２６からわかるように、本発明のサブプロセス処理部１７３の処理速度制御では、現在のCPU使用率XがCPU使用率の上限値Pを超えた場合にも、ほぼその時点で即座に、サブプロセス処理部１７３のDown方向の処理速度制御が行われる。その結果、その制御の出力であるHDD２３への書き込み間隔t_periodも、延長方向に高応答で推移していく。即ち、サブプロセス処理部１７３の実際の処理速度もDown方向に高応答で推移していく。本発明のサブプロセス処理部１７３の処理速度制御では、出力バッファレベルLevelのみならず、CPU使用率Xも用いているからである。
【０３４６】
即ち、CPU使用率Xを用いずに、サブプロセス処理部１７３の処理速度制御が仮に行われた場合、出力バッファレベルLevelが一定の条件さえ満たしてさえいれば、サブプロセス処理部１７３のUp方向の処理速度制御がそのまま行われてしまう。即ち、サブプロセス処理部１７３の処理速度はさらに高速となってしまう。その結果、CPU使用率Xは、CPU使用率の上限値Pを超えて益々上がっていってしまう。
【０３４７】
これに対して、本発明のサブプロセス処理部１７３の処理速度制御では、CPU使用率Xと出力バッファレベルLevelとが併用されているので、CPU使用率XがCPU使用率の上限値Pを超えた場合、ほぼその時点で即座に、Down方向の処理速度制御が行われる。その結果、サブプロセス処理部１７３の実際の処理速度もDown方向に高応答で推移していくので、CPU使用率Xを、CPU使用率の上限値P未満まで下げることが可能になる。
【０３４８】
さらにまた、図２４乃至図２６からわかるように、現在のCPU使用率XがCPU使用率の上限値P未満で余裕があり、かつ、現在の出力バッファレベルLevelの値とこれまでの出力バッファレベルLevelの時間変化の推移とから、メインプロセス処理部１７３のリアルタイム性が確保できると判断される場合には、本発明のサブプロセス処理部１７３の処理速度制御では、Up方向の処理速度制御が行われ、その結果、サブプロセス処理部１７３の処理を可能な限り高速に（Best effortで）実行させることが可能になる。
【０３４９】
以上、本発明のサブプロセス処理部１７３の処理速度制御について説明してきたが、次のような処理速度制御がサブプロセスに対して施されば、本発明のサブプロセス処理部１７３の処理速度制御と全く同様の効果を奏することが可能になる。即ち、メインプロセス処理のリアルタイム性を確保したままで、サブプロセスを可能な限り高速で処理することが可能になる。
【０３５０】
即ち、このような効果を奏することが可能な本発明の処理速度制御とは、所定の種類の品質を第１のレベル以上に確保する必要があるメインプロセスと、それ以外のサブプロセスとのそれぞれの処理が所定のプロセッサで実行される場合、そのプロセッサの現在の使用率とそのプロセッサの使用率の上限値との関係、および、その種類の品質の現在の第２のレベルと確保すべき第１のレベルとの関係に基づいて、サブプロセスの処理速度を制御する、という制御である。
【０３５１】
さらに、そのプロセッサの現在の使用率とそのプロセッサの使用率の上限値との関係、および、その種類の品質の現在の第２のレベルと確保すべき第１のレベルとの関係に加えてさらに、その種類の品質のこれまでのレベル変化の時間推移に基づいて、サブプロセスの処理速度を制御すると好適である。なぜならば、その種類の品質の現在の第２のレベルが同一レベルであっても、その種類の品質のこれまでのレベル変化の時間推移のパターンに応じて、その制御方向（Up方向またはDown方向）や制御量を異なるように細かく設定して制御することができるからである。
【０３５２】
ところで、上述した一連の処理もソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
【０３５３】
このようなプログラムを含む記録媒体は、図２に示されるように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フロッピディスクを含む）、光ディスク（CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む）、光磁気ディスク（ＭＤ（Mini-Disk）を含む）、もしくは半導体メモリなどよりなるリムーバブル記録媒体（パッケージメディア）１１１により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM１０２や、記憶部１０８に含まれるハードディスクなどで構成される。
【０３５４】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０３５５】
また、本明細書において、システムとは、複数の装置や処理部（ソフトウエアモジュール含む）により構成される装置全体または一部分を表すものである。
【図面の簡単な説明】
【０３５６】
【図１】メインプロセスとサブプロセスとの並列処理を実現する従来のソフトウエアシステムを示す機能ブロック図である。
【図２】本発明が適用される情報処理装置のハードウエア構成例を示すブロック図である。
【図３】図２の情報処理装置のCPUの詳細なハードウエア構成例を示すブロック図である。
【図４】図３のCPUにより実行される、メインプロセスとサブプロセスとの並列処理を実現する本発明のソフトウエアシステムを示す機能ブロック図である。
【図６】図３のCPUにより実行される本発明のソフトウエア構成を示す図である。
【図５】CPU使用率と、CPU使用率の上限値とを説明する図である。
【図７】図４の本発明のソフトウエアシステムの一実施形態としての、本発明が適用されるAVシステムの構成例を示す機能ブロック図である。
【図８】メインプロセスの出力バッファレベルの変化の時間推移の例を示す図である。
【図９】メインプロセスの出力バッファレベルと、Index値との関係の例を示す図である。
【図１０】メインプロセスの出力バッファレベルと、Index値との関係の例を示す図である。
【図１１】メインプロセスの出力バッファレベルと、Index値との関係の例を示す図である。
【図１２】メインプロセスの出力バッファレベルと、Index値との関係の例を示す図である。
【図１３】メインプロセスの出力バッファレベルと、Index値との関係の例を示す図である。
【図１４】メインプロセスの出力バッファレベルと、Index値との関係の例を示す図である。
【図１５】各CPUへのタスク（図７の各機能ブロックの処理）の割り当て例を示す図である。
【図１６】CPU使用率Xの計算例を示す図である。
【図１７】速度量制御関数Y(X)の形の例を示す図である。
【図１８】CPU使用率Xの時間推移の例と、それに伴う速度量制御関数Y(X)の時間推移を示す図である。
【図１９】Index値と速度制御量（出力バッファレベル制御量やCPU使用率制御量）との関係の例を示す図である。
【図２０】図７のサブプロセス処理部の処理速度制御としての、図７のMux部からHDDへの書き込み間隔の制御結果の例を示す図である。
【図２１】図７のサブプロセス処理部の処理のうちの、エンコード部、リングバッファ、Mux部、および、ストリームマネージャの間で行われる処理例を説明するアローチャートである。
【図２２】図７のサブプロセス処理部の処理のうちの、処理速度制御部とMux部との間で行われる「速度制御処理」の例を説明するアローチャートである。
【図２３】図２２の「速度制御処理」のうちの「Index値およびUp制御ホールドフラグ生成処理」の例を説明するフローチャートである。
【図２４】図２２の「速度制御処理」の処理結果の例を示す図である。
【図２５】図２２の「速度制御処理」の処理結果の例を示す図である。
【図２６】図２２の「速度制御処理」の処理結果の例を示す図である。
【符号の説明】
【０３５７】
１０１  CPU，  １０８  記憶部，  １１１  リムーバブル記録媒体，  １２１  MCPU，  １２３−１乃至１２３−ｎ  SCPU，  １３１  メインプロセス処理部，  １３２  サブプロセス処理部，  １３３  CPU使用率上限値設定部，  １３４  CPU使用率検出部，  １４１乃至１４３  機能処理部，  １４４  品質判定部，  １５１乃至１５３  機能処理部，  １５４  処理速度制御部，  １６１  OS（CPU使用率検出部），  １６２  パワー制御（CPU使用率上限値設定部），  １７２  メインプロセス処理部（再生部），  １７３  サブプロセス処理部（レート変換記録部），  １８１  DeMux部，  １８２  入力段リングバッファ，  １８３  デコード部，  １８４  ワークエリアフレームバッファ，  １８５  ノイズ除去部，  １８６  ワークエリアフレームバッファ，  １８７  画像処理部，  １８８  出力段フレームバッファ，  １８９  出力制御部，  １９０  品質判定部，  １９１  DeMux部，  １９２  入力段リングバッファ，  １９３  デコード部，  １９４  ワークエリアフレームバッファ，  １９５  サンプリングレートコンバート処理部，  １９６  ワークエリアフレームバッファ，  １９７  エンコード部，  １９８  出力段リングバッファ，  １９９  Mux部，  ２００  処理速度制御部
【図１】
2006085386.tif 000003
【図２】
2006085386.tif 000004
【図３】
2006085386.tif 000005
【図４】
2006085386.tif 000006
【図５】
2006085386.tif 000007
【図６】
2006085386.tif 000008
【図７】
2006085386.tif 000009
【図８】
2006085386.tif 000010
【図９】
2006085386.tif 000011
【図１０】
2006085386.tif 000012
【図１１】
2006085386.tif 000013
【図１２】
2006085386.tif 000014
【図１３】
2006085386.tif 000015
【図１４】
2006085386.tif 000016
【図１５】
2006085386.tif 000017
【図１６】
2006085386.tif 000018
【図１７】
2006085386.tif 000019
【図１８】
2006085386.tif 000020
【図１９】
2006085386.tif 000021
【図２０】
2006085386.tif 000022
【図２１】
2006085386.tif 000023
【図２２】
2006085386.tif 000024
【図２３】
2006085386.tif 000025
【図２４】
2006085386.tif 000026
【図２５】
2006085386.tif 000027
【図２６】
2006085386.tif 000028