(57)【要約】【課題】            適応的に最小限のバッファ長を設定するバッファ管理を行い、データ廃棄率を上昇させずに、データ転送の遅延時間を最小化するデータ転送装置を得る。【解決手段】        入力データの蓄積および出力を行うバッファに蓄積されたデータの蓄積量を監視するバッファ状態監視手段と、バッファのデータ蓄積量を監視する期間を発生するタイミング発生手段と、期間中に監視されたバッファのデータ蓄積量における最小データ蓄積量に基づいて有効バッファ長を算出するバッファ長算出手段と、バッファ長算出手段が算出した有効バッファ長に基づいてバッファを制御するバッファ制御手段とを備えた。【選択図】          図１
2008060658.tif 000002
【特許請求の範囲】
【請求項１】
入力データの蓄積および出力を行うバッファに蓄積されたデータの蓄積量を監視するバッファ状態監視手段と、
このバッファ状態監視手段により前記バッファのデータ蓄積量を監視する期間を発生するタイミング発生手段と、
このタイミング発生手段により発生した前記期間において、前記バッファ状態監視手段により監視された前記バッファのデータ蓄積量における最小データ蓄積量に基づいて有効バッファ長を算出するバッファ長算出手段と、
このバッファ長算出手段が算出した有効バッファ長に基づいて前記バッファを制御するバッファ制御手段と
を備えたことを特徴とするバッファ制御装置。
【請求項２】
前記バッファ制御手段は、前記バッファに蓄積されたデータのフレームを検出し、検出したフレーム単位に、前記バッファに設定された有効バッファ長を超えた前記バッファに蓄積されたデータを廃棄させる
ことを特徴とする請求項１記載のバッファ制御装置。
【請求項３】
前記バッファ長算出手段は、前記バッファに設定された有効バッファ長と前記バッファ状態監視手段により監視された前記バッファのデータ蓄積量に基づく最小データ蓄積量との差分に所定の数を加えた有効バッファ長を算出する
ことを特徴とする請求項１または請求項２に記載のバッファ制御装置。
【請求項４】
前記バッファ長算出手段は、前記バッファ状態監視手段により監視された前記バッファのデータ蓄積量に基づく最大データ蓄積量と最小データ蓄積量との差分に所定の数を加えた有効バッファ長を算出する
ことを特徴とする請求項１または請求項２に記載のバッファ制御装置。
【請求項５】
入力データの蓄積および出力を行うバッファに蓄積されたデータの蓄積量を監視するバッファ状態監視ステップと、
このバッファ状態監視ステップにより前記バッファのデータ蓄積量を監視する期間を発生するタイミング発生ステップと、
このタイミング発生ステップにより発生した前記期間において、前記バッファ状態監視ステップにより監視された前記バッファのデータ蓄積量における最小データ蓄積量に基づいて有効バッファ長を算出するバッファ長算出ステップと、
このバッファ長算出ステップが算出した有効バッファ長に基づいて前記バッファを制御するバッファ制御ステップと
を有することを特徴とするバッファ制御方法。
【請求項６】
前記バッファ制御ステップは、前記バッファに蓄積されたデータのフレームを検出し、検出したフレーム単位に、前記バッファに設定された有効バッファ長を超えた前記バッファに蓄積されたデータを廃棄させる
ことを特徴とする請求項５記載のバッファ制御方法。
【請求項７】
前記バッファ長算出ステップは、前記バッファに設定された有効バッファ長と前記バッファ状態監視ステップにより監視された前記バッファのデータ蓄積量に基づく最小データ蓄積量との差分に所定の数を加えた有効バッファ長を算出する
ことを特徴とする請求項５または請求項６に記載のバッファ制御方法。
【請求項８】
前記バッファ長算出ステップは、前記バッファ状態監視ステップにより監視された前記バッファのデータ蓄積量に基づく最大データ蓄積量と最小データ蓄積量との差分に所定の数を加えた有効バッファ長を算出する
ことを特徴とする請求項５または請求項６に記載のバッファ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、バッファ制御装置およびバッファ制御方法に関するものである。
【背景技術】
【０００２】
従来のバッファ制御装置において、通常、バッファは固定長（固定サイズ）で設けられ、ＦＩＦＯ（First In First Out）方式を採用して、バッファ内データ量がバッファ長（バッファサイズ）を超えないようにデータ廃棄が行われている。出力データ容量が入力データ量以上の場合は、低遅延でデータが出力されるが、出力データ容量が入力データ量より小さくなる状態が続く場合は、入力データがバッファから出力されるまでの待ち時間（遅延時間）が増大していき、やがてバッファ内データ量がバッファ長に達すると、オーバーフロー、すなわちデータ廃棄が起こる。
【０００３】
そこで、バッファやデータ転送の状況に合わせて適応的に動作するバッファ制御として、例えば、特許文献１に開示されるような映像フレーム間隔の平均ジッタ量に応じてバッファ長を適応的に制御するリアルタイムバッファ制御がある。
【０００４】
また、エンコーダを有する装置のバッファ制御では、例えば、特許文献２に開示されるように、バッファの有効サイズを伝送ビット速度とともに変更し、符号化速度を変えることで充填レベルを制限範囲内に維持して一定遅延の伝送を行う。
【０００５】
【特許文献１】特開２００５−３２２９９５号公報（第５頁〜第７頁、図１）
【特許文献２】特表平８−５１０６２８号公報（第２５頁〜第２８頁、図４）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来のバッファ制御では、データを転送する際に、バッファがオーバーフローしないように制御するものであり、バッファ長固定の場合、バッファの出力データ容量に対して入力データ量が大きいときには、バッファ内データ量が最大でバッファ長まで増大し、データがバッファに入力されてからバッファから出力されるまでに時間がかかるため、データ転送の遅延時間の抑制を図ることができないという問題点があった。
【０００７】
また、出力データ容量に対して入力データ量が小さいときでも、ジッタへの対処として意図的にバッファ内にデータを滞留させる制御を行っているため、データ転送の遅延時間の抑制を図ることができないという問題点があった。
【０００８】
この発明は、上述のような課題を解決するためになされたもので、バッファのオーバーフローによるデータ廃棄率を上昇させずに、データ転送の遅延時間の抑制を図ることを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係るバッファ制御装置およびバッファ制御方法は、入力データの蓄積および出力を行うバッファに蓄積されたデータの蓄積量を監視するバッファ状態監視手段と、このバッファ状態監視手段によりバッファのデータ蓄積量を監視する期間を発生するタイミング発生手段と、このタイミング発生手段により発生した期間において、バッファ状態監視手段により監視されたバッファのデータ蓄積量における最小データ蓄積量に基づいて有効バッファ長を算出するバッファ長算出手段と、バッファ長算出手段が算出した有効バッファ長に基づいてバッファを制御するバッファ制御手段とを備えたものである。
【発明の効果】
【００１０】
この発明によれば、バッファ状態に応じた適応的な有効バッファ長でバッファを制御することができ、バッファのオーバーフローによるデータ廃棄率を上昇させずに、データ転送の遅延時間の抑制を図ることができる効果がある。
【発明を実施するための最良の形態】
【００１１】
この発明に係るバッファ制御装置は、バッファの状態、すなわちデータ蓄積量を監視し、ある期間に観測された最小データ蓄積量に基づいて、その次の期間におけるバッファの有効バッファ長を設定するバッファ制御処理を行うものである。この有効バッファ長は、物理的に十分な蓄積容量をもつバッファに対して、この蓄積容量を超えない長さで、期間ごとに設定されるデータ蓄積に使用する最大蓄積許容量を示す。以下、説明中の「バッファ長」は、この有効バッファ長を指すものとする。
【００１２】
このバッファ長を適切に設定することで、バッファへのデータ入出力の状態に適さない必要以上に大きいバッファ長が設定されることによるデータの出力遅延を抑制する。また、バッファのデータ蓄積量がバッファ長を超えるとき、蓄積データの一部を廃棄するバッファ制御を行う。以下、バッファへの入出力データを動画像データとして、この発明に係るバッファ制御装置に係るバッファ制御処理について説明を行う。
【００１３】
実施の形態１．
この発明の実施の形態１では、バッファに動画像データ（以下、データという）が蓄積されて転送遅延が大きくなるとデータを画像フレーム（以下、フレームという）単位に廃棄するとともに、ある期間の終了時に、その終了した期間のバッファ長と最小データ蓄積量とに基づいて算出したバッファ長を、次の期間のバッファ長として設定するバッファ制御装置について説明する。
【００１４】
図１は、この発明の実施の形態１に係るバッファ制御装置の一例を示すブロック構成図である。このブロック構成図に基づいて、各構成要素の機能を説明する。
【００１５】
図１において、バッファ状態監視手段１１０は、入力データの蓄積および出力を行うバッファ１０１に蓄積されたデータ蓄積量を監視する。このバッファ状態監視手段１１０は、バッファ１０１に蓄積されたデータ蓄積量を検知する状態検知手段１１１と、この状態検知手段１１１が検知したバッファ１０１に蓄積されたデータ蓄積量を記憶する状態記憶手段１１２とから構成されている。
【００１６】
次に、タイミング発生手段１２１は、このバッファ状態監視手段１１０によりバッファ１０１のデータ蓄積量を監視する期間を発生する。このタイミング発生手段１２１が発生するタイミング、すなわち期間境界（区切り）に、バッファ状態監視手段１１０内部の状態記憶手段１１２に記憶されるデータ蓄積量が初期化される。
【００１７】
また、バッファ長算出手段１３１は、このタイミング発生手段１２１により発生した期間において、バッファ状態監視手段１１０により監視されたバッファ１０１のデータ蓄積量における最小データ蓄積量に基づいて有効なバッファ長を算出する。
【００１８】
また、バッファ制御手段１４０は、このバッファ長算出手段１３１が算出したバッファ長に基づいてバッファ１０１を制御する。このバッファ制御手段１４０は、バッファ１０１の蓄積データからフレームを検出するフレーム検出手段１４１と、新しい期間に入るときにバッファ長算出手段１３１が算出したバッファ長を再設定し、このバッファ長の再設定によってその時点のデータ蓄積量がバッファ長を超えてオーバーフローするとき、または期間中でもバッファ監視手段１１０が検知したバッファ１０１のデータ蓄積量がバッファ長を超えてオーバーフローするとき、フレーム検出手段１４１が検出したフレーム単位に蓄積データの一部を廃棄してバッファ長に収まるように制御を行うデータ廃棄手段１４２とから構成されている。なお、期間中にオーバーフローしてもバッファ長の再設定は行わないものとする。また、このバッファ制御手段１４０がバッファ１０１にバッファ長を設定することで、バッファ１０１がバッファ長に基づいてデータ蓄積量を制御するものとして説明したが、バッファ制御手段１４０がバッファ長に基づいてバッファ１０１に対しデータ蓄積量を制御する構成としても構わない。
【００１９】
以下では、期間内のバッファ１０１のデータ蓄積量における最小データ蓄積量は、図１におけるバッファ状態監視手段１１０内部の状態検知手段１１１および状態記憶手段１１２、バッファ長算出手段１３１の間で、次のように管理されるものとする。状態検知手段１１１は、バッファ１０１に蓄積されたデータ蓄積量を検知する。状態記憶手段１１２は、タイミング発生手段１２１からの期間開始のタイミングを知らされると、その時点でバッファ１０１に蓄積されているデータ蓄積量、すなわち状態検知手段１１１に検知されたデータ蓄積量を最小データ蓄積量とする初期化を行い、次の期間開始のタイミングまでの期間内に状態検知手段１１１に検知されたデータ蓄積量がその最小データ蓄積量を下回るとそのデータ蓄積量を最小データ蓄積量として更新して記憶する。この結果、バッファ長算出手段１３１は、期間内に状態記憶手段１１２が記憶した最小データ蓄積量を得てバッファ長の算出を行うことができる。
【００２０】
次に、この発明の実施の形態１に係るバッファ制御装置のバッファ１０１のデータ蓄積量とバッファ長に基づくバッファ制御の動作について説明する。まず、基本的なバッファ制御の概要を説明する。
【００２１】
図２は、この発明の実施の形態１に係るバッファ制御装置のバッファへのデータ蓄積量とバッファ長の関係の一例を示す説明図である。横軸が時間経過（時刻）を示し、縦軸にその時刻におけるデータ蓄積量を示している。タイミング発生手段１２１が発生する期間は、等間隔でなくても構わないが、ここでは等間隔の時間Ｔごととする。以下、各期間の開始時刻（ｎ−２）Ｔ、（ｎ−１）Ｔ、ｎＴ、（ｎ＋１）Ｔに基づいて期間（ｎ−２）、期間（ｎ−１）、期間ｎ、期間（ｎ＋１）と称して区別するものとする。
【００２２】
ここで、BufferSizeは、バッファ１０１のバッファ長を示し、BufferSize(n)はバッファ長算出手段１３１により算出される期間ｎにおけるバッファ長である。なお、バッファ長BufferSize(n)は、期間ｎ内は一定値に固定される。また、DataSizeは、バッファ１０１のデータ蓄積量を示し、DataSize(n)はバッファ状態監視手段１１０により監視される期間ｎの各時刻において変化していくデータ蓄積量である。そして、DataSizeMinは、バッファ１０１の最小データ蓄積量を示し、DataSizeMin(n)はバッファ状態監視手段１１０が監視する期間ｎにおいてデータ蓄積量DataSize(n)がとる最小データ蓄積量である。
【００２３】
バッファ長算出手段１３１は、例えば、期間ｎにおけるバッファ長BufferSize(n)を、その前の期間（ｎ−１）に設定されたバッファ長BufferSize(n-1)および期間（ｎ−１）の終了時点（時刻ｎＴ）における最小データ蓄積量DataSizeMin(n-1)に基づいて算出する。最小データ蓄積量DataSizeMin(n-1)は、期間（ｎ−１）の開始時点（時刻（ｎ−１）Ｔ）のデータ蓄積量を初期値として、図２の下方寄りの太い破線のように時間経過とともに変化する。バッファ長BufferSize(n-1)と最小データ蓄積量DataSizeMin(n-1)とに基づくバッファ長BufferSize(n)の算式を次式１に示す。
【００２４】
【数１】
2008060658.tif 000003
【００２５】
最初に計算した仮のバッファ長tmpは、期間（ｎ−１）のバッファ長BufferSize(n-1)から最小データ蓄積量DataSizeMin(n-1)のデータ蓄積量相当をバッファ長の縮小可能サイズとし、定数Ｋだけデータのゆらぎの吸収に対する余裕を持たせたものである。この定数Ｋは、縮小可能サイズである最小データ蓄積量DataSizeMin(n-1)が０となるアンダーフローが発生するとき、バッファ長バッファ長BufferSize(n)を拡大させるように機能する。なお、バッファ長算出手段１３１が算出するバッファ長のとる値の範囲は、最小バッファ長BufferSizeMIN以上最大バッファ長BufferSizeMAX以下となるようにする。この式１で用いた定数Ｋ、最小バッファ長BufferSizeMIN、最大バッファ長BufferSizeMAXは、あらかじめ設定しておいても、あるいは図１のバッファ長算出手段１３１に示した破線矢印の入力信号線のように外部から設定できるようにしても構わない。
【００２６】
以上のような算出方法により、図２に例示した期間ｎの各時刻におけるバッファ１０１のデータ蓄積量DataSize(n)が変化していったとき、バッファ長算出手段１３１はバッファ長を次のように算出していく。ここでは、定数Ｋを１とする。
【００２７】
まず、期間（ｎ−２）におけるバッファ長BufferSize(n-2)は８としている。この期間内におけるデータ蓄積量DataSize(n-2)の最小データ蓄積量DataSizeMin(n-2)は、時刻（ｎ−１）Ｔで０となっており、次の期間（ｎ−１）におけるバッファ長BufferSize(n-1)は、（BufferSize(n-2)−DataSizeMin(n-2)＋Ｋ）から９となる。次に、期間（ｎ−１）内におけるデータ蓄積量DataSize(n-1)の最小データ蓄積量DataSizeMin(n-1)は、時刻ｎＴで２．５となっており、次の期間ｎにおけるバッファ長BufferSize(n)は７．５となる。また、期間ｎ内におけるデータ蓄積量DataSize(n)の最小データ蓄積量DataSizeMin(n)は、時刻（ｎ＋１）Ｔで１．５となっており、次の期間（ｎ＋１）におけるバッファ長BufferSize(n+1)は７となる。
【００２８】
次に、この実施の形態１に係るバッファ制御装置におけるバッファ制御処理手順とその動作の一例を図３のフローチャートに基づいて説明する。
【００２９】
図３において、Ａで示す破線枠で囲んだ処理は、データ入力に関する部分を示す。一般には、入力するデータ長をあらかじめヘッダなどから確認してオーバーフローが起きないときに、バッファ１０１に到着したデータを入力する手順で構成しても構わない。ただし、この手順では、オーバーフローが起きるときには入力データは受信できず、データを廃棄し、蓄積データの送信によりバッファ１０１に空きを増やして受信に備えて待つことになる。そこで、このデータ入力に関する手順では、最大バッファ長BufferSizeMAXをバッファ１０１の物理的な蓄積容量よりも、例えば、１フレームのデータ分程度だけ小さく設定しておき、１フレームの入力データの受信に対する余裕を残しておき、一時的にオーバーフローしてもすでに蓄積されたデータを廃棄することでバッファ１０１に入力しかけたデータのフレームの入力は完了させる構成とする。この構成は、１フレーム分の２次バッファをバッファ１０１の受信側の前段に持つことによっても実現できる。以下、データ入力を実現するこの２つの構成例のうち、後者をとるものとして説明する。
【００３０】
バッファ１０１は、バッファ長とデータ蓄積量に基づいて、バッファ１０１へデータの入力が可能か否かを判定する（ステップST101）。データの入力が可能であるとき（Ｙｅｓ）には、バッファ１０１は、データを入力する（ステップST102）。バッファ状態監視手段１１０は、バッファ１０１でデータ入力によるオーバーフローの発生を確認する（ステップST103）。オーバーフローが発生していることが確認できたとき（Ｙｅｓ）には、バッファ制御手段１４０は、バッファ１０１からデータ廃棄を行う（ステップST104）。また、ステップST103で、バッファ入力によるオーバーフローが発生していないことが確認できたとき（Ｎｏ）には、データ廃棄（ステップST104）は行わず、スキップする。ステップST102またはステップST104でバッファに蓄積されるデータ蓄積量が変化するので、バッファ状態監視手段１１０は、減少に伴うバッファ状態（データ蓄積量）を更新する（ステップ105）。
【００３１】
一方、ステップST101で、データの入力が可能ではなかったとき（Ｎｏ）には、データ入力（ステップST102）およびデータ廃棄（ステップST103〜ST104）はともに行わず、さらに、バッファ状態（データ蓄積量）の更新（ステップST105）も不要となるので、これらのステップはスキップする。
【００３２】
なお、オーバーフローが発生して、データ廃棄を行う（ステップST104および後述のステップST112）ときには、バッファ制御手段１４０内部のデータ廃棄手段１４２は、フレーム検出手段１４１が検出した最も古いフレームを優先して行っても、最も新しいフレームを優先しても構わない。また、最も古いフレームが送出過程にあって不完全な状態であれば、その直後に送出予定の完全なフレームをデータ廃棄の対象としてもよい。あるいは、最も新しいフレームが蓄積過程にあって不完全な状態であれば、それより前に蓄積した完全なフレームをデータ廃棄の対象としてもよい。さらに、例えば、連続した複数のフレームをまとめて廃棄する場合、不連続が大きくなることが好ましくなければ、蓄積されたフレームを適当な間隔で間引いて廃棄して不連続感を和らげても構わない。
【００３３】
次に、図３において、Ｂで示す破線枠で囲んだ処理は、データ出力に関する部分を示す。バッファ１０１は、バッファ１０１からデータの出力が可能か否かを判定する（ステップST106）。データの出力が可能であるとき（Ｙｅｓ）には、データがバッファ１０１から出力される（ステップST107）。データが出力されることで、バッファ１０１に蓄積されるデータ蓄積量が減少するので、バッファ状態監視手段１１０は、減少に伴うバッファ状態（データ蓄積量）を更新する（ステップST108）。一方、ステップST106で、データの出力が可能ではなかったとき（Ｎｏ）には、データ出力（ステップST107）およびバッファ状態（データ蓄積量）の更新（ステップST108）は行わず、これらのステップはスキップする。
【００３４】
さらに、図３において、Ｃで示す破線枠で囲んだ処理は、新たなバッファ長の算出と設定に関する部分を示す。タイミング発生手段１２１がバッファ状態監視手段１１０によるバッファ状態（データ蓄積量）を監視する期間（監視期間）が終了したか否かを判定する（ステップST109）。監視期間が終了したとき（Ｙｅｓ）、バッファ状態監視手段１１０はバッファの状態を検知する（ステップST110）。バッファ長算出手段１３１は、バッファ状態監視手段１１０が検知したバッファ状態（データ蓄積量）を参照してバッファ長を算出する（ステップST111）。バッファ制御手段１４０は、バッファ長算出手段１３１が算出したバッファ長をバッファ１０１に設定する（ステップST112）。このとき、バッファ長の設定により、ステップST110においてバッファ状態監視手段１１０が検知した現状のバッファ１０１のバッファ状態（データ蓄積量）が、設定するバッファ長を超えてしまっているならば、蓄積データの一部を廃棄してバッファ長に収める制御（ステップST104相当のデータ廃棄）も行う。ステップST110からステップST112の処理後、タイミング発生手段１２１は、監視期間を初期化して次の監視期間に入る（ステップST113）。一方、ステップST109で、監視期間が終了していなかったとき（Ｎｏ）には、バッファの状態の検知（ステップST110）、バッファ長の算出（ステップST111）、バッファ長の設定する（ステップST112）および監視期間の初期化（ステップST113）は行わず、これらのステップはスキップする。
【００３５】
以上のように、図３におけるデータ入力、データ出力、バッファ長の算出と設定からなる処理手順により、バッファ制御が行われる。さらに、次に示す図４は、図３におけるステップST111のバッファ長の算出手順およびステップST112のバッファ長の設定手順の動作の一例をより詳しく説明するフローチャートである。
【００３６】
図４において、Ｄで示す破線枠で囲んだ処理は、図３におけるステップST111に相当するバッファ長算出手段１３１が行う上記式１に示したバッファ長算出に関する部分を示す。まず、バッファ長算出手段１３１は、仮のバッファ長tmpを、期間（ｎ−１）に設定したバッファ長BufferSize(n-1)および最小データ蓄積量DataSizeMin(n-1)の差分に定数Ｋを加えた値とする（ステップST201）。
【００３７】
次に、仮のバッファ長tmpと最大バッファ長BufferSizeMAXを比較する（ステップST202）。仮のバッファ長tmpが最大バッファ長BufferSizeMAXより大きいとき（Ｙｅｓ）には、仮のバッファ長tmpを最大バッファ長BufferSizeMAXに更新する（ステップST203）。
【００３８】
一方、ステップST202で、仮のバッファ長tmpが最大バッファ長BufferSizeMAX未満のとき（Ｎｏ）には、仮のバッファ長tmpと最小バッファ長BufferSizeMINを比較する（ステップST204）。仮のバッファ長tmpが最小バッファ長BufferSizeMIN未満のとき（Ｙｅｓ）には、仮のバッファ長tmpを最小バッファ長BufferSizeMINに更新する（ステップST205）。なお、ステップST204で、仮のバッファ長tmpが最小バッファ長BufferSizeMIN以上のとき（Ｎｏ）には、仮のバッファ長tmpは、ステップST203およびステップST205ともにスキップして、ステップST201で算出した値のままとする。
【００３９】
このように、仮のバッファ長tmpは、ステップST201で算出したままの値、ステップST203で更新した値、またはステップST205で更新した値のいずれかをとることになり、期間ｎのバッファサイズBufferSize(n)として設定される（ステップST206）。
【００４０】
次に、図４において、Ｅで示す破線枠で囲んだ処理は、図３におけるステップST112に相当するバッファ制御手段１４０が行うバッファ制御に関する部分を示す。まず、バッファ制御手段１４０は、これらのステップST201からステップST206を処理した時点でのバッファ状態であるデータ蓄積量DataSize(n)とステップST206で設定された新しいバッファサイズBufferSize(n)を比較する（ステップST207）。このデータ蓄積量DataSize(n)は、期間ｎにおけるデータ蓄積量の初期値となるもので、図３のステップST110にてバッファ状態監視手段１１０が検知した期間（ｎ−１）終了時点のバッファ状態（データ蓄積量）である。このデータ蓄積量DataSize(n)がバッファサイズBufferSize(n)より大きいとき（Ｙｅｓ）には、データ蓄積量DataSize(n)から廃棄するデータ蓄積量Cancelを減じて該当する蓄積データの部分を更新する（ステップST208）。このデータ蓄積量DataSize(n)から廃棄するデータ蓄積量Cancelは、ここではフレーム検出手段１４１が検出したフレーム単位に基づいて設定され、データ廃棄手段１４２が該当するフレームを廃棄する。なお、ステップST207で、データ蓄積量DataSize(n)がバッファサイズBufferSize(n)以下であれば、ステップST208をスキップして、データ蓄積量DataSize(n)は更新せず、そのままとする。
【００４１】
そして、この時点でのデータ蓄積量DataSize(n)を次の期間ｎにおけるバッファ状態の最小データ蓄積量DataSizeMin(n)の初期値として設定する（ステップST209）。なお、この後、期間ｎ内に、バッファ１０１のデータ蓄積量DataSize(n)が最小データ蓄積量DataSizeMin(n)を下回ると、最小データ蓄積量DataSizeMin(n)はデータ蓄積量DataSize(n)に更新される。
【００４２】
以上の手順により、この発明の実施の形態１に係るバッファ制御装置のバッファ長の算出および設定と、バッファのデータ蓄積量の制御が行われる。
【００４３】
なお、状態記憶手段１１２は、単一の期間内のバッファ状態、すなわちデータ蓄積量を記憶するだけの場合には、バッファ長更新を示す期間のタイミングで、記憶されるデータ蓄積量をリセットすればよい。ここで記憶されるデータ蓄積量は、最小データ蓄積量だけとしても構わない。
【００４４】
また、これまでバッファ長算出に使用するバッファ状態は、単一の期間に記憶されたデータ蓄積量を使用するものとして説明したが、複数の期間にわたって記憶されたデータ蓄積量を使用するものであっても構わない。この発明の実施の形態１においては、複数の期間にわたって記憶する際には、各期間データ蓄積量とともに、バッファ長も併せて記憶し、上記式１により各期間のバッファ長を算出した後、複数の期間のバッファ長に基づいてバッファに設定すべきバッファ長を算出するものとする。ここで記憶される過去の期間分のデータ蓄積量は、最小データ蓄積量だけとしても構わない。
【００４５】
例えば、バッファ長を算出する期間として過去Ｎ期間分の間、バッファ長およびデータ蓄積量を記憶して参照する場合には、その記憶した期間ごとに各期間番号とバッファ長およびデータ蓄積量を対応付けて履歴を記憶しておき、参照対象外になった期間番号のバッファ長およびデータ蓄積量は消去していけばよい。過去Ｎ期間分のバッファ長およびデータ蓄積量の履歴を用いる際には、例えば、各期間のバッファ長およびデータ蓄積量の履歴から求まるバッファ長に対して、より新しい期間で算出されたバッファ長の重みを大きくする加重平均や相加平均などにより算出することで複数の期間のバッファ長およびデータ蓄積量の履歴を反映させたバッファ長の更新値を求めてもよい。なお、過去分については、バッファ長およびデータ蓄積量を記憶するのではなく、加重平均や相加平均していないその単一期間で算出されたバッファ長の履歴だけを記憶して、複数の期間におけるそれらの単一期間のバッファ長に基づいて、加重平均や相加平均した符号長をバッファに設定するようにしても構わない。
【００４６】
このようにして、この発明の実施の形態１に係るバッファ制御装置は、直近のバッファ状態に基づいて、期間ごとにバッファ長を制御していくことで、適応的に最適なバッファ長でバッファを動作させることができ、必要以上に大き過ぎるバッファ長や少な過ぎるバッファ長を設定することがなくなり、データ廃棄率を必要以上に上昇させず、かつデータ転送の遅延時間を抑制することができる。
【００４７】
また、バッファ長の算出時に定数Ｋを加えることで、データ転送の揺らぎに対する一時的な蓄積量の増大を吸収し、データ廃棄を少なくすることができる。また、定数Ｋを加えることで、バッファの蓄積データにアンダーフローが発生するとき、次の期間のバッファ長を拡大して、データ蓄積量を多く保持できるようにすることができる。
【００４８】
実施の形態２．
この発明の実施の形態２では、バッファに動画像データ（以下、データという）が蓄積されて転送遅延が大きくなるとデータを画像フレーム（以下、フレームという）単位に廃棄するとともに、ある期間の終了時に、その終了した期間のデータ蓄積量の最大データ蓄積量と最小データ蓄積量に基づいて算出したバッファ長を、次の期間のバッファ長として設定するバッファ制御装置について説明する。この発明の実施の形態２は、この発明の実施の形態１とはバッファ長の算出に係る部分が異なり、他の基本的な機能、動作は、この発明の実施の形態１の機能、動作と同様である。以下では、特に、この発明の実施の形態２におけるバッファ長の算出の仕方について説明する。
【００４９】
この発明の実施の形態２に係るバッファ制御装置の一例を示すブロック構成図、およびバッファ状態監視手段１１０の内部の詳細構成の一例は、図１によって、この発明の実施の形態１に示したものと同様に説明できる。よって、バッファ状態監視手段１１０、タイミング発生手段１２１、バッファ長算出手段１３１およびバッファ制御手段１４０の説明は、省略する。ただし、この発明の実施の形態２に係るバッファ制御装置では、この発明の実施の形態１におけるに係るバッファ制御装置で必要としたバッファ１０１のデータ蓄積量における最小データ蓄積量に加え、最大データ蓄積量についてもバッファ長の算出に必要になる。
【００５０】
バッファ１０１のデータ蓄積量の監視期間中、オーバーフローが発生したときには、バッファ長算出手段１３１によるバッファ長の算出で使用される最大データ蓄積量はバッファ長として扱う。オーバーフローが発生した時点で、状態検知手段１１１がバッファ１０１のバッファ長を超えたデータ蓄積量をバッファ長として状態記憶手段１１２に通知しても記憶させてもよいし、また状態記憶手段１１２は状態検知手段１１１がバッファ長を超えるデータ蓄積量を通知してくるとバッファ長として記憶してもよく、バッファ長算出手段１３１は最大データ蓄積量としてその時点のバッファ長を使用する。また、状態検知手段１１１がバッファ長を超えるデータ蓄積量を検知し、状態記憶手段１１２はそのデータ蓄積量を記憶し、バッファ長算出手段１３１が状態記憶手段１１２に記憶されたバッファ長を超えるデータ蓄積量を検出するとその時点のバッファ長として新たなバッファ長の算出に使用しても構わない。
【００５１】
以下では、期間内のバッファ１０１のデータ蓄積量における最大データ蓄積量と最小データ蓄積量は、図１におけるバッファ状態監視手段１１０内部の状態検知手段１１１および状態記憶手段１１２、バッファ長算出手段１３１の間で、次のように管理されるものとする。状態検知手段１１１は、バッファ１０１に蓄積されたデータ蓄積量を検知する。状態記憶手段１１２は、タイミング発生手段１２１からの期間開始のタイミングを知らされると、その時点でバッファ１０１に蓄積されているデータ蓄積量、すなわち状態検知手段１１１に検知されたデータ蓄積量を最大データ蓄積量と最小データ蓄積量とする初期化を行い、次の期間開始のタイミングまでの期間内に状態検知手段１１１に検知されたデータ蓄積量がその最大データ蓄積量を上回るとそのデータ蓄積量を最大データ蓄積量として更新して記憶するとともに、状態検知手段１１１に検知されたデータ蓄積量がその最小データ蓄積量を下回るとそのデータ蓄積量を最小データ蓄積量として更新して記憶する。この結果、バッファ長算出手段１３１は、期間内に状態記憶手段１１２が記憶した最大データ蓄積量と最小データ蓄積量を得てバッファ長の算出を行うことができる。
【００５２】
次に、この発明の実施の形態２に係るバッファ制御装置のバッファ１０１のデータ蓄積量とバッファ長に基づくバッファ制御の動作について説明する。まず、基本的なバッファ制御の概要を説明する。
【００５３】
図５は、この発明の実施の形態２に係るバッファ制御装置のバッファへのデータ蓄積量とバッファ長の関係の一例を示す説明図である。ここで、バッファ長BufferSize、データ蓄積量DataSize、最小データ蓄積量DataSizeMinは、この発明の実施の形態１において説明した通りである。そして、DataSizeMaxは、バッファ１０１の最大データ蓄積量を示し、DataSizeMax(n)はバッファ状態監視手段１１０が監視する期間ｎにおいてデータ蓄積量DataSize(n)がとる最大データ蓄積量である。
【００５４】
バッファ長算出手段１３１は、例えば、期間ｎにおけるバッファ長BufferSize(n)を、その前の期間（ｎ−１）の終了時点（時刻ｎＴ）における最小データ蓄積量DataSizeMin(n-1)および最大データ蓄積量DataSizeMax(n-1)に基づいて算出する。最大データ蓄積量DataSizeMax(n-1)は、先の図２で説明した最小データ蓄積量DataSizeMin(n-1)と同様に、期間（ｎ−１）の開始時点（時刻（ｎ−１）Ｔ）のデータ蓄積量を初期値として、図５の上方寄りの太い破線のように時間経過とともに変化する。最小データ蓄積量DataSizeMin(n-1)と最大データ蓄積量DataSizeMax(n-1)とに基づくバッファ長BufferSize(n)の算式を次式２に示す。
【００５５】
【数２】
2008060658.tif 000004
【００５６】
最初に計算した仮のバッファ長tmpは、期間（ｎ−１）のバッファ長BufferSize(n-1)から最大データ蓄積量DataSizeMax(n-1)と最小データ蓄積量DataSizeMin(n-1)のデータ蓄積量の差分相当をバッファ長の縮小可能サイズとし、定数Ｋだけデータのゆらぎの吸収に対する余裕を持たせたものである。なお、バッファ長算出手段１３１が算出するバッファ長のとる値の範囲は、最小バッファ長BufferSizeMIN以上最大バッファ長BufferSizeMAX以下となるようにする。この式２で用いた定数Ｋ、最小バッファ長BufferSizeMIN、最大バッファ長BufferSizeMAXは、あらかじめ設定しておいても、あるいは図１のバッファ長算出手段１３１に示した破線矢印の入力信号線のように外部から設定できるようにしても構わない。
【００５７】
以上のような算出方法により、図５に例示した期間ｎの各時刻におけるバッファ１０１のデータ蓄積量DataSize(n)が変化していったとき、バッファ長算出手段１３１はバッファ長を次のように算出していく。ここでは、定数Ｋを１とする。
【００５８】
まず、期間（ｎ−２）におけるバッファ長BufferSize(n-2)は８としている。この期間内におけるデータ蓄積量DataSize(n-2)の最大データ蓄積量DataSizeMax(n-2)および最小データ蓄積量DataSizeMin(n-2)は、時刻（ｎ−１）Ｔでそれぞれ６と０となっており、次の期間（ｎ−１）におけるバッファ長BufferSize(n-1)は、（DataSizeMax(n-2)−DataSizeMin(n-2)＋Ｋ）から７となる。次に、期間（ｎ−１）内におけるデータ蓄積量DataSize(n-1)の最大データ蓄積量DataSizeMax(n-1)および最小データ蓄積量DataSizeMin(n-1)は、時刻ｎＴでそれぞれ６．５と２．５となっており、次の期間ｎにおけるバッファ長BufferSize(n)は５となる。また、期間ｎ内におけるデータ蓄積量DataSize(n)の最大データ蓄積量DataSizeMax(n)および最小データ蓄積量DataSizeMin(n)は、時刻（ｎ＋１）Ｔでそれぞれ４．５と１．５となっており、次の期間（ｎ＋１）におけるバッファ長BufferSize(n+1)は４となる。
【００５９】
次に、この実施の形態２に係るバッファ制御装置におけるバッファ制御処理手順とその動作の一例は、この実施の形態１に係るバッファ制御装置におけるバッファ制御処理手順とその動作を示した図３のフローチャートと同様であるので、説明を省略するが、次に示す図６は、図３におけるステップST111のバッファ長の算出手順およびステップST112のバッファ長の設定手順の動作の一例を、この発明の実施の形態２に係るバッファ制御装置について、より詳しく説明するフローチャートである。
【００６０】
図６において、Ｆで示す破線枠で囲んだ処理は、図３におけるステップST111に相当するバッファ長算出手段１３１が行う上記式２に示したバッファ長算出に関する部分を示す。また、Ｇで示す破線枠で囲んだ処理は、図３におけるステップST112に相当するバッファ制御手段１４０が行うバッファ制御に関する部分を示す。
【００６１】
まず、バッファ長算出手段１３１は、仮のバッファ長tmpを、期間（ｎ−１）にとった最大データ蓄積量DataSizeMax(n-1)および最小データ蓄積量DataSizeMin(n-1)の差分に定数Ｋを加えた値とする（ステップST301）。なお、ステップST302からステップST308は、図４のフローチャートにおけるステップST202からステップST208と同一処理を行うため、これらの説明を省略する。
【００６２】
そして、バッファ長が算出され（ステップST301〜ST306）、バッファ制御が行われた（ステップST307〜ST308）後、この時点でのデータ蓄積量DataSize(n)を次の期間ｎにおけるバッファ状態の最大データ蓄積量DataSizeMAX(n)および最小データ蓄積量DataSizeMin(n)の初期値として設定する（ステップST309およびステップST310）。なお、この後、期間ｎ内に、バッファ１０１のデータ蓄積量DataSize(n)が最大データ蓄積量DataSizeMax(n)を上回ると、最大データ蓄積量DataSizeMax(n)はデータ蓄積量DataSize(n)に更新され、また最小データ蓄積量DataSizeMin(n)を下回ると、最小データ蓄積量DataSizeMin(n)はデータ蓄積量DataSize(n)に更新される。
【００６３】
以上の手順により、この発明の実施の形態２に係るバッファ制御装置のバッファ長の算出および設定と、バッファのデータ蓄積量の制御が行われる。
【００６４】
なお、この発明の実施の形態２に係るバッファ制御装置においても、この発明の実施の形態１における説明と同様に、バッファ長算出手段１３１は、状態記憶手段１１２が記憶する単一の期間内のバッファ状態に基づいてバッファ長を算出しても、あるいは状態記憶手段１１２が記憶する複数の期間（Ｎ期間）にわたるバッファ状態の履歴を反映させて各期間のバッファ状態から算出されるバッファ長に基づいて設定するバッファ長を算出しても構わない。
【００６５】
このようにして、この発明の実施の形態２に係るバッファ制御装置は、この発明の実施の形態１に係るバッファ制御装置と同様の効果を得ることができる。
【００６６】
また、この発明の実施の形態２に係るバッファ制御装置は、特に、最大データ蓄積量と最小データ蓄積量の差分に基づいてバッファ長を算出するため、バッファ長と最小データ蓄積量の差分に基づいてバッファ長を算出するこの発明の実施の形態１に係るバッファ制御装置よりもバッファ長が小さく算出されるので、データ転送の遅延時間をより抑制することができる。
【００６７】
なお、バッファ１０１のデータ蓄積量の監視からバッファ長算出手段１３１のバッファ長の算出までの処理過程において、この発明の実施の形態１に係るバッファ制御装置では、バッファ状態監視手段１１０内部の状態記憶手段１１２は、状態検知手段１１１が検知したバッファ１０１のデータ蓄積量が最小データ蓄積量であることを判定してから記憶し、バッファ長算出手段１３１は、状態記憶手段１１２が記憶した最小データ蓄積量に基づいてバッファ長を算出する形態の一例を説明した。また、この発明の実施の形態２に係るバッファ制御装置では、バッファ状態監視手段１１０内部の状態記憶手段１１２は、状態検知手段１１１が検知したバッファ１０１のデータ蓄積量が最大データ蓄積量または最小データ蓄積量であることを判定してから記憶し、バッファ長算出手段１３１は、状態記憶手段１１２が記憶した最大データ蓄積量および最小データ蓄積量に基づいてバッファ長を算出する形態の一例を説明した。
【００６８】
よって、ここでは、このデータ蓄積量が最小データ蓄積量であることを判定する機能をもつ手段またはタイミングが異なる形態の変形例について説明する。この発明の実施の形態２に係るバッファ制御装置で必要とされる最大データ蓄積量については、最小データ蓄積量の最小判定と同様に、同一箇所で最大判定を行うことで得られるため、この発明の実施の形態１に係るバッファ制御装置の最小データ蓄積量のみ判定して記憶する形態について説明する。
【００６９】
第１の変形例は、図１に示すブロック構成図の構成のままで、状態検知手段１１１が検知したバッファ１０１のデータ蓄積量を状態記憶手段１１２が逐次記憶し、バッファ長算出手段１３１によるバッファ長算出の段階で、状態記憶手段１１２に記憶されたデータ蓄積量の中から最小データ蓄積量を選択する形態である。
【００７０】
この形態では、状態検知手段１１１は、バッファ１０１に蓄積されたデータ蓄積量を検知する。状態記憶手段１１２は、タイミング発生手段１２１からの期間開始のタイミングを知らされると、その時点で記憶するデータ蓄積量の初期化を行い、状態検知手段１１１に検知されたデータ蓄積量を逐次記憶する。バッファ長算出手段１３１は、期間内に状態記憶手段１１２が記憶したデータ蓄積量から最小データ蓄積量を選択することで得られ、バッファ長の算出を行うことができる。なお、この最小データ蓄積量の選択は、状態記憶手段１１２またはバッファ長算出手段１３１のいずれが行っても構わないが、バッファ長算出の段階で状態記憶手段１１２に記憶されたデータ蓄積量から選択するものである。
【００７１】
また、第２の変形例は、図７に示すブロック構成図のように構成することで、状態検知手段１１１が検知したバッファ１０１のデータ蓄積量が最小データ蓄積量であるかを状態検知手段１１１が判定して、状態記憶手段１１２に記憶させる形態である。
【００７２】
この形態では、状態記憶手段１１２は、タイミング発生手段１２１からの期間開始のタイミングを知らされると、その時点でバッファ１０１に蓄積されているデータ蓄積量、すなわち状態検知手段１１１に検知されたデータ蓄積量を最小データ蓄積量とする初期化を行う。状態検知手段１１１は、バッファ１０１に蓄積されたデータ蓄積量を検知し、データ蓄積量が状態記憶手段１１２に記憶された最小データ蓄積量を下回るとそのデータ蓄積量を最小データ蓄積量として更新して状態記憶手段１１２に記憶させる。この結果、バッファ長算出手段１３１は、期間内に状態記憶手段１１２が記憶した最小データ蓄積量を得てバッファ長の算出を行うことができる。
【００７３】
なお、これまでに説明してきたこの発明の実施の形態においては、データをフレーム単位で廃棄する例を示したが、フレーム以外の所定の単位で廃棄しても構わない。すなわち、フレーム検出手段１３１が検出対象とする単位であるフレームに代わって、バイトやワード等のデータ単位、パケット等の伝送単位などを検出する構成であっても構わない。この検出対象とする単位を選択するに当たっては、転送するデータを途中で廃棄しても再同期をとることができる単位であれば構わない。このような構成変更に伴い、状態検知手段１１２および状態記憶手段１２１の扱うバッファ状態の単位も変更される。
【００７４】
また、この発明の実施の形態においては、監視するバッファ状態の一例として、最大データ蓄積量や最小データ蓄積量としてフレーム単位のデータを記憶するものとして説明したが、蓄積しているデータ蓄積量を蓄積フレーム数として最大蓄積フレーム数や最小蓄積フレーム数を管理する形態をとっても構わない。このとき、定数Ｋの指定単位もフレーム数とする。
【００７５】
なお、バッファに入力されるデータは、通常はパケット（例えば、ＲＴＰパケット）単位であり、複数のパケットが到着してタイムスタンプを同じくするすべてのデータが集まってフレームが構成される。一方、バッファから出力されるデータは、ＴＣＰによる転送となってバイト単位で扱われるため、フレームのデータが一度に出力されるとは限らない。よって、データ蓄積量をフレーム数として管理する形態では、転送途上のフレームは含めず、バッファ内において完全な状態のフレーム数を管理する。これらのデータ入出力の形式変換は、バッファが機能の一部として備えているものとする。
【００７６】
また、この発明の実施の形態においては、記憶したバッファ状態に基づいて符号長の算出時に加算した定数Ｋを用いず、例えば、上記式１のようなバッファ長および最小データ蓄積量の差分、または上記式２のような最大データ蓄積量および最小データ蓄積量の差分に対して、例えば、その差分の５％や１０％などの一定率の大きさ分を加えて代用しても構わない。また、一定率に限らず、例えば、差分の１０％以内のランダム値の大きさ分を加えて代用しても構わない。あるいは、バッファ長および最小データ蓄積量の差分、または最大データ蓄積量および最小データ蓄積量の差分に対して、正負一定率以内のランダムな大きさ分を加減しても構わない。
【００７７】
なお、この発明の実施の形態においては、動画像（映像）データを転送対象としたバッファ制御について説明を行ったが、音声データ、その他の広範なデータを転送対象とすることができる。
【００７８】
以上のように、この発明の実施の形態に係るバッファ制御装置は、直近のバッファ状態に基づいて、期間ごとにバッファ長を制御していくことで、適応的に最適なバッファ長でバッファを動作させることができ、必要以上に大き過ぎるバッファ長や少な過ぎるバッファ長を設定することがなくなり、データ廃棄率を必要以上に上昇させず、かつデータ転送の遅延時間を抑制することができる。
【００７９】
また、この発明の実施の形態に係るバッファ制御装置は、バッファ長の算出時に定数Ｋを加えることで、データ転送の揺らぎに対する一時的な蓄積量の増大を吸収し、データ廃棄を少なくすることができる。また、定数Ｋを加えることで、バッファの蓄積データにアンダーフローが発生するとき、次の期間のバッファ長を拡大して、データ蓄積量を多く保持できるようにすることができる。
【００８０】
また、この発明の実施の形態に係るバッファ制御装置は、この発明の実施の形態２に係るバッファ制御装置において最大データ蓄積量と最小データ蓄積量の差分に基づいてバッファ長を算出するため、この発明の実施の形態１に係るバッファ制御装置においてバッファ長と最小データ蓄積量の差分に基づいてバッファ長を算出するよりもバッファ長が小さく算出されるので、データ転送の遅延時間をより抑制することができる。
【図面の簡単な説明】
【００８１】
【図１】この発明の実施の形態１およびこの発明の実施の形態２に係るバッファ制御装置の一例を示すブロック構成図である。
【図２】この発明の実施の形態１に係るバッファ制御装置のバッファへのデータ蓄積量とバッファ長の関係の一例を示す説明図である。
【図３】この発明の実施の形態１に係るバッファ制御装置のバッファ制御処理手順の一例を示すフローチャートである。
【図４】この発明の実施の形態１に係るバッファ制御装置のバッファ長算出処理手順の一例を示すフローチャートである。
【図５】この発明の実施の形態２に係るバッファ制御装置のバッファへのデータ蓄積量とバッファ長の関係の一例を示す説明図である。
【図６】この発明の実施の形態２に係るバッファ制御装置のバッファ長算出処理手順の一例を示すフローチャートである。
【図７】この発明の実施の形態１およびこの発明の実施の形態２に係るバッファ制御装置の一例を示すブロック構成図である。
【符号の説明】
【００８２】
１０１  バッファ
１１０  バッファ状態監視手段
１１１  状態検知手段
１１２  状態記憶手段
１２１  タイミング発生手段
１３１  バッファ長算出手段
１４０  バッファ長制御手段
１４１  フレーム検出手段
１４２  データ廃棄手段
【図１】
2008060658.tif 000005
【図２】
2008060658.tif 000006
【図３】
2008060658.tif 000007
【図４】
2008060658.tif 000008
【図５】
2008060658.tif 000009
【図６】
2008060658.tif 000010
【図７】
2008060658.tif 000011