(57)【要約】【課題】バッファアンダーフローの発生頻度を低減する。【解決手段】本発明のデータ出力装置１は、バッファ情報保持部１４がデータの挿入後においてバッファに蓄積されたデータ蓄積量を保持する。そして、新たにデータを挿入する際に、バッファ制御部１３が、バッファ情報保持部１４によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定する。これにより、再びバッファアンダーフローが発生しないように、挿入するデータ量を適切に設定することができる。よって、バッファアンダーフローの発生する頻度を低減することができる。【選択図】図４
2008258847.tif 000002
【特許請求の範囲】
【請求項１】
入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置であって、
前記バッファにデータを挿入する制御を行うバッファ制御手段と、
データの挿入後において前記バッファに蓄積されたデータ蓄積量を保持するバッファ情報保持手段と、
を備え、
前記バッファ制御手段は、前記バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定することを特徴とするデータ出力装置。
【請求項２】
入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置であって、
前記バッファに蓄積されたデータの一部を廃棄する制御を行うバッファ制御手段と、
データの廃棄後において前記バッファに蓄積されたデータ蓄積量を保持するバッファ情報保持手段と、
を備え、
前記バッファ制御手段は、前記バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定することを特徴とするデータ出力装置。
【請求項３】
入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置であって、
前記バッファに蓄積されたデータの一部を廃棄する制御、及び、前記バッファにデータを挿入する制御を行うバッファ制御手段と、
データが廃棄された場合、データ廃棄後において前記バッファに蓄積されたデータ蓄積量とデータ廃棄後のデータ蓄積量である旨の情報とを関連付けて保持し、データが挿入された場合、データ挿入後において前記バッファに蓄積されたデータ蓄積量とデータ挿入後のデータ蓄積量である旨の情報とを関連付けて保持するバッファ情報保持手段と、
を備え、
前記バッファ制御手段は、前記バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量と前記バッファ制御手段による前回の処理がデータの挿入か廃棄かを示す情報とに基づいて新たに廃棄するデータ量を決定し、前記バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量と前記バッファ制御手段による前回の処理がデータの挿入か廃棄かを示す情報とに基づいて新たに挿入するデータ量を決定することを特徴とするデータ出力装置。
【請求項４】
前記バッファ制御手段は、前記バッファ内のデータ蓄積量が前記バッファの蓄積量の下限値を下回った場合に、前記バッファ内のデータ蓄積量が前記下限値を上回るように、前記バッファ情報保持手段によって保持されたデータ蓄積量に基づいて、挿入するデータ量を決定することを特徴とする請求項１又は３に記載のデータ出力装置。
【請求項５】
前記バッファ制御手段は、前記バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回った場合に、バッファパラメータを変更することを特徴とする請求項１，３，及び４のいずれか１項に記載のデータ出力装置。
【請求項６】
前記バッファ制御手段は、前記バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、前記バッファ内のデータ蓄積量が前記上限値を下回るように、前記バッファ情報保持手段によって保持されたデータ蓄積量に基づいて、廃棄するデータ量を決定することを特徴とする請求項２又は３に記載のデータ出力装置。
【請求項７】
前記バッファ制御手段は、前記バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、バッファパラメータを変更することを特徴とする請求項２，３，及び６のいずれか１項に記載のデータ出力装置。
【請求項８】
前記バッファ制御手段は、前記バッファ内において定常遅延が発生している場合に、前記バッファ内のデータを所定量だけ廃棄するように制御することを特徴とする請求項１〜７のいずれか１項に記載のデータ出力装置。
【請求項９】
前記バッファ制御手段は、前記バッファ内において定常遅延が発生している場合に、バッファパラメータを変更することを特徴とする１〜８のいずれか１項に記載のデータ出力装置。
【請求項１０】
前記バッファ情報保持手段は、最後に前記データ蓄積量を保持した後に所定の時間が経過すると、保持している情報をリセットすることを特徴とする請求項１〜９のいずれか１項に記載のデータ出力装置。
【請求項１１】
前記バッファ情報保持手段は、前記データ蓄積量を保持する際に、すでに保持しているデータ蓄積量を更新するように保持することを特徴とする請求項１〜１０のいずれか１項に記載のデータ出力装置。
【請求項１２】
入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置において、
バッファ制御手段が、前記バッファにデータを挿入する制御を行うバッファ制御ステップと、
バッファ情報保持手段が、データの挿入後において前記バッファに蓄積されたデータ蓄積量を保持するバッファ情報保持ステップと、
を備え、
前記バッファ制御ステップでは、前記バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定することを特徴とするデータ出力方法。
【請求項１３】
入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置において、
バッファ制御手段が、前記バッファに蓄積されたデータの一部を廃棄する制御を行うバッファ制御ステップと、
バッファ情報保持手段が、データの廃棄後において前記バッファに蓄積されたデータ蓄積量を保持するバッファ情報保持ステップと、
を備え、
前記バッファ制御ステップでは、前記バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定することを特徴とするデータ出力方法。
【請求項１４】
入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置において、
バッファ制御手段が、前記バッファに蓄積されたデータの一部を廃棄する制御、及び、前記バッファにデータを挿入する制御を行うバッファ制御ステップと、
バッファ情報保持手段が、データが廃棄された場合、データ廃棄後において前記バッファに蓄積されたデータ蓄積量とデータ廃棄後のデータ蓄積量である旨の情報とを関連付けて保持し、データが挿入された場合、データ挿入後において前記バッファに蓄積されたデータ蓄積量とデータ挿入後のデータ蓄積量である旨の情報とを関連付けて保持するバッファ情報保持ステップと、
を備え、
前記バッファ制御ステップでは、前記バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量と前回の前記バッファ制御ステップにおける処理がデータの挿入か廃棄かを示す情報とに基づいて新たに廃棄するデータ量を決定し、前記バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量と前回の前記バッファ制御ステップにおける処理がデータの挿入か廃棄かを示す情報とに基づいて新たに挿入するデータ量を決定することを特徴とするデータ出力方法。
【請求項１５】
前記バッファ制御ステップでは、前記バッファ内のデータ蓄積量が前記バッファの蓄積量の下限値を下回った場合に、前記バッファ内のデータ蓄積量が前記下限値を上回るように、前記バッファ情報保持ステップにおいてに保持されたデータ蓄積量に基づいて、挿入するデータ量を決定することを特徴とする請求項１２又は１４に記載のデータ出力方法。
【請求項１６】
前記バッファ制御ステップでは、前記バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回った場合に、バッファパラメータを変更することを特徴とする請求項１２，１４，及び１５のいずれか１項に記載のデータ出力方法。
【請求項１７】
前記バッファ制御ステップでは、前記バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、前記バッファ内のデータ蓄積量が前記上限値を下回るように、前記バッファ情報保持ステップにおいてに保持されたデータ蓄積量に基づいて、廃棄するデータ量を決定することを特徴とする請求項１３又は１４に記載のデータ出力方法。
【請求項１８】
前記バッファ制御ステップでは、前記バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、バッファパラメータを変更することを特徴とする請求項１３，１４，及び１７のいずれか１項に記載のデータ出力方法。
【請求項１９】
前記バッファ制御ステップでは、前記バッファ内において定常遅延が発生している場合に、前記バッファ内のデータを所定量だけ廃棄するように制御することを特徴とする請求項１２〜１８のいずれか１項に記載のデータ出力方法。
【請求項２０】
前記バッファ制御ステップでは、前記バッファ内において定常遅延が発生している場合に、バッファパラメータを変更することを特徴とする１２〜１９のいずれか１項に記載のデータ出力方法。
【請求項２１】
前記バッファ情報保持手段が、最後に前記データ蓄積量を保持した後に所定の時間が経過すると、保持している情報をリセットするリセットステップを備えることを特徴とする請求項１２〜２０のいずれか１項に記載のデータ出力方法。
【請求項２２】
前記バッファ情報保持ステップでは、前記データ蓄積量を保持する際に、すでに保持しているデータ蓄積量を更新するように保持することを特徴とする請求項１２〜２１のいずれか１項に記載のデータ出力方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、VoIP（Voice over Internet Protocol）等のパケット通信に関し、受信したデータを一時的に蓄積し、蓄積したデータを出力する装置およびその方法に関する。
【背景技術】
【０００２】
現在、IPネットワーク上で音声通信を行うVoIP技術を用いた、IP電話やインターネット電話の利用が増大している。VoIPでは，音声データをパケット化し、IPネットワークを介して送受信することで、音声通信を可能としている。ところが、VoIPでは、送信側において音声データを送信してから、受信側において音声データを受信するまでの転送時間がパケットごとに異なるという、転送時間の揺らぎの問題がある。リアルタイムに、連続的に音声通信を行うためには、転送時間の揺らぎの解決は必須である。そこで受信側において、受信した音声データを、揺らぎ吸収バッファと呼ばれるバッファに一時的に蓄積することにより、揺らぎを吸収する方法が広く用いられている。
【０００３】
揺らぎ吸収バッファは、その蓄積容量を大きくすることで吸収できる揺らぎ量は大きくなるが、音声データを受信してから出力されるまでの遅延が大きくなるという問題がある．その解決方法として、特許文献１および特許文献２では、揺らぎ吸収バッファの蓄積量に応じて蓄積しているデータを廃棄することで、音声データを受信してから出力するまでの遅延を低減し、揺らぎを吸収する方法が開示されている。
【特許文献１】特開２００５−１３６７４２号公報
【特許文献２】特開２００６−２３８２１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１では、データの受信から出力までの遅延を低減するためにデータを廃棄する場合、廃棄する量によっては蓄積データが不足する場合（バッファアンダーフロー）がある。特許文献１には、それについての解決方法は開示されていない。一方、特許文献２では、データの受信から出力までの定常的な遅延を低減するためのデータ蓄積量の検査区間を検査区間内のバッファの蓄積状態に応じて変更することで、長周期の揺らぎを定常的な遅延としてデータを廃棄してしまい、バッファアンダーフローに陥らない方法は開示されているが、実際に定常的な遅延を検出しデータを廃棄する際に、廃棄する量によってはバッファアンダーフローが発生する場合がある。
【０００５】
また、バッファアンダーフローが発生した場合にデータをバッファに挿入することによりバッファアンダーフローを解消する方法がある。しかしながら、挿入する量によっては蓄積データが過剰になる場合（バッファオーバーフロー）がある。
【０００６】
そこで本発明は、上記の従来法にある問題を鑑み、バッファアンダーフローとバッファオーバーフローとの少なくとも一方の発生頻度を低減することを可能とするデータ出力装置及びデータ出力方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明のデータ出力装置は、入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置であって、バッファにデータを挿入する制御を行うバッファ制御手段と、データの挿入後においてバッファに蓄積されたデータ蓄積量を保持するバッファ情報保持手段と、を備え、バッファ制御手段は、バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定することを特徴とする。
【０００８】
本発明のデータ出力方法は、入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置において、バッファ制御手段が、バッファにデータを挿入する制御を行うバッファ制御ステップと、バッファ情報保持手段が、データの挿入後においてバッファに蓄積されたデータ蓄積量を保持するバッファ情報保持ステップと、を備え、バッファ制御ステップでは、バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定することを特徴とする。
【０００９】
本発明によれば、データの挿入後においてバッファに蓄積されたデータ蓄積量を保持し、新たにデータを挿入する際に、バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定する。例えば、データを挿入したにもかかわらずバッファアンダーフローが発生して再びデータの挿入を行う場合に、前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定する。これにより、再びバッファアンダーフローが発生しないように、挿入するデータ量を適切に設定することができる。よって、バッファアンダーフローの発生する頻度を低減することができる。
【００１０】
本発明のデータ出力装置は、入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置であって、バッファに蓄積されたデータの一部を廃棄する制御を行うバッファ制御手段と、データの廃棄後においてバッファに蓄積されたデータ蓄積量を保持するバッファ情報保持手段と、を備え、バッファ制御手段は、バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定することを特徴とする。
【００１１】
本発明のデータ出力方法は、入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置において、バッファ制御手段が、バッファに蓄積されたデータの一部を廃棄する制御を行うバッファ制御ステップと、バッファ情報保持手段が、データの廃棄後においてバッファに蓄積されたデータ蓄積量を保持するバッファ情報保持ステップと、を備え、バッファ制御ステップでは、バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定することを特徴とする。
【００１２】
本発明によれば、データの廃棄後においてバッファに蓄積されたデータ蓄積量を保持し、新たにデータを廃棄する際に、バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定する。例えば、前回のデータを廃棄したにもかかわらずバッファオーバーフローが発生して再びデータの廃棄を行う場合に、前回の廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定するので、再びバッファオーバーフローが発生しないように、廃棄するデータ量を適切に設定することができる。よって、バッファオーバーフローの発生する頻度を低減することができる。
【００１３】
本発明のデータ出力装置は、入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置であって、バッファに蓄積されたデータの一部を廃棄する制御、及び、バッファにデータを挿入する制御を行うバッファ制御手段と、データが廃棄された場合、データ廃棄後においてバッファに蓄積されたデータ蓄積量とデータ廃棄後のデータ蓄積量である旨の情報とを関連付けて保持し、データが挿入された場合、データ挿入後においてバッファに蓄積されたデータ蓄積量とデータ挿入後のデータ蓄積量である旨の情報とを関連付けて保持するバッファ情報保持手段と、を備え、バッファ制御手段は、バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量とバッファ制御手段による前回の処理がデータの挿入か廃棄かを示す情報とに基づいて新たに廃棄するデータ量を決定し、バッファ情報保持手段によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量とバッファ制御手段による前回の処理がデータの挿入か廃棄かを示す情報とに基づいて新たに挿入するデータ量を決定することを特徴とする。
【００１４】
本発明のデータ出力方法は、入力したデータをバッファに一時的に蓄積した後に出力するデータ出力装置において、バッファ制御手段が、バッファに蓄積されたデータの一部を廃棄する制御、及び、バッファにデータを挿入する制御を行うバッファ制御ステップと、バッファ情報保持手段が、データが廃棄された場合、データ廃棄後においてバッファに蓄積されたデータ蓄積量とデータ廃棄後のデータ蓄積量である旨の情報とを関連付けて保持し、データが挿入された場合、データ挿入後においてバッファに蓄積されたデータ蓄積量とデータ挿入後のデータ蓄積量である旨の情報とを関連付けて保持するバッファ情報保持ステップと、を備え、バッファ制御ステップでは、バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量と前回のバッファ制御ステップにおける処理がデータの挿入か廃棄かを示す情報とに基づいて新たに廃棄するデータ量を決定し、バッファ情報保持ステップにおいて保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量と前回のバッファ制御ステップにおける処理がデータの挿入か廃棄かを示す情報とに基づいて新たに挿入するデータ量を決定することを特徴とする。
【００１５】
本発明によれば、データの廃棄後及び挿入後においてバッファに蓄積されたデータ蓄積量を保持し、新たにデータを廃棄又は挿入する際に、バッファ情報保持手段によって保持されたデータ蓄積量であって前回の廃棄後又は挿入後に保持されたデータ蓄積量と前回のバッファ制御ステップにおける処理がデータの挿入か廃棄かを示す情報とに基づいて、新たに廃棄又は挿入するデータ量を決定する。例えば、データを廃棄後、廃棄量が多かったためにバッファアンダーフローが発生した場合に、前回のデータ挿入後のデータ蓄積量と直近のバッファ制御がデータの廃棄であった旨の情報とに基づいて、再びバッファオーバーフロー及びバッファアンダーフローが発生しないように、挿入するデータ量を適切に設定することができる。また例えば、データを挿入後、挿入量が多かったためにバッファオーバーフローが発生した場合に、前回のデータ廃棄後のデータ蓄積量と直近のバッファ制御がデータの挿入であった旨の情報とに基づいて、再びバッファオーバーフロー及びバッファアンダーフローが発生しないように、廃棄するデータ量を適切に設定することができる。よって、バッファオーバーフロー及びバッファアンダーフローの発生する頻度を低減することができる。
【００１６】
好ましくは、バッファ制御手段は、バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回った場合に、バッファ内のデータ蓄積量が下限値を上回るように、バッファ情報保持手段によって保持されたデータ蓄積量に基づいて、挿入するデータ量を決定する。
【００１７】
好ましくは、バッファ制御ステップでは、バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回った場合に、バッファ内のデータ蓄積量が下限値を上回るように、バッファ情報保持ステップにおいてに保持されたデータ蓄積量に基づいて、挿入するデータ量を決定する。
【００１８】
この場合、バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回わり、バッファアンダーフローに陥ると、バッファ内のデータ蓄積量が下限値を上回るように、バッファ情報保持手段によって保持されたデータ蓄積量に基づいて、挿入するデータ量を決定することとなる。
【００１９】
好ましくは、バッファ制御手段は、バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回った場合に、バッファパラメータを変更する。
【００２０】
好ましくは、バッファ制御ステップでは、バッファ内のデータ蓄積量がバッファの蓄積量の下限値を下回った場合に、バッファパラメータを変更する。
【００２１】
この場合、バッファアンダーフローに陥ると、バッファの蓄積量の下限値、バッファからデータを出力するか否か判定する閾値等のバッファパラメータを変更することとなる。これにより、バッファアンダーフローの発生する頻度を更に低減することができる。
【００２２】
好ましくは、バッファ制御手段は、バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、バッファ内のデータ蓄積量が上限値を下回るように、バッファ情報保持手段によって保持されたデータ蓄積量に基づいて、廃棄するデータ量を決定する。
【００２３】
好ましくは、バッファ制御ステップでは、バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、バッファ内のデータ蓄積量が上限値を下回るように、バッファ情報保持ステップにおいてに保持されたデータ蓄積量に基づいて、廃棄するデータ量を決定する。
【００２４】
この場合、バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回り、バッファオーバーフローに陥ると、バッファ内のデータ蓄積量が上限値を下回るように、バッファ情報保持手段によって保持されたデータ蓄積量に基づいて、廃棄するデータ量を決定することとなる。
【００２５】
好ましくは、バッファ制御手段は、バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、バッファパラメータを変更する。
【００２６】
好ましくは、バッファ制御ステップでは、バッファ内のデータ蓄積量がバッファの蓄積量の上限値を上回った場合に、バッファパラメータを変更する。
【００２７】
この場合、バッファオーバーフローに陥ると、バッファの蓄積量の上限値、バッファからデータを出力するか否か判定する閾値等のバッファパラメータを変更することとなる。これにより、バッファオーバーフローの発生する頻度を更に低減することができる。
【００２８】
好ましくは、バッファ制御手段は、バッファ内において定常遅延が発生している場合に、バッファ内のデータを所定量だけ廃棄するように制御する。
【００２９】
好ましくは、バッファ制御ステップでは、バッファ内において定常遅延が発生している場合に、バッファ内のデータを所定量だけ廃棄するように制御する。
【００３０】
この場合、定常遅延が発生している場合に、バッファ内のデータを廃棄するので、定常遅延を解消することができる。
【００３１】
好ましくは、バッファ制御手段は、バッファ内において定常遅延が発生している場合に、バッファパラメータを変更する。
【００３２】
好ましくは、バッファ制御ステップでは、バッファ内において定常遅延が発生している場合に、バッファパラメータを変更する。
【００３３】
この場合、定常遅延が発生している場合に、バッファからデータを出力するか否か判定する閾値等のバッファパラメータを変更することとなる。これにより、バッファからデータを適切に出力することとなるので、定常遅延の発生を抑制することができる。
【００３４】
好ましくは、バッファ情報保持手段は、最後にデータ蓄積量を保持した後に所定の時間が経過すると、保持している情報をリセットする。
【００３５】
好ましくは、バッファ情報保持手段が、最後にデータ蓄積量を保持した後に所定の時間が経過すると、保持している情報をリセットするリセットステップを備える。
【００３６】
この場合、データの廃棄量又は挿入量を決定するに当たって、古いデータ（データ蓄積量）に基づくことなく、適切なデータに基づいて、データ廃棄量又はデータ挿入量を決定することができる。
【００３７】
好ましくは、バッファ情報保持手段は、データ蓄積量を保持する際に、すでに保持しているデータ蓄積量を更新するように保持する。
【００３８】
好ましくは、バッファ情報保持ステップでは、データ蓄積量を保持する際に、すでに保持しているデータ蓄積量を更新するように保持する。
【００３９】
この場合、データの廃棄量又は挿入量を決定するに当たって、古いデータ（データ蓄積量）に基づくことなく、適切なデータに基づいて、データ廃棄量又はデータ挿入量を決定することができる。
【発明の効果】
【００４０】
本発明によれば、バッファアンダーフロー又はバッファオーバーフローの発生する頻度を低減することが実現できる。
【発明を実施するための最良の形態】
【００４１】
以下、本発明の実施形態について図面を参照して説明する。なお、図面の説明においては、同一要素には同一の符号を付し、重複する説明は省略する。なお、以下の説明では、信号はアナログ・デジタル変換後のデジタル信号とする。
【００４２】
図１は、本実施形態に係るデータ出力装置の機能ブロック図である。本実施形態に係るデータ出力装置１は、VoIP技術を用いてIPネットワーク上で音声通信を行うシステム（図示せず）における受信側に設けられた装置である。受信側には、受信した入力データを一時的に蓄積して、揺らぎを吸収するバッファが備えられている。データ出力装置１は、受信側においてそのバッファと接続されて、受信した入力データをバッファに一時的に蓄積した後に出力する。
【００４３】
データ出力装置１は、データ蓄積部１１、蓄積量監視部１２、バッファ制御部（バッファ制御手段）１３、及びバッファ情報保持部（バッファ情報保持部）１４を有する。
【００４４】
データ蓄積部１１は、データの受信側にて受信したデータを入力データとし、一時的にデータをバッファに蓄積した後、データ受信側に設けられたデータ再生部（図示せず）へ出力する。さらに、バッファに蓄積されているデータの廃棄、バッファへ擬似データの挿入、バッファパラメータの変更を行う。バッファパラメータとは、バッファアンダーフローの判断をする閾値（バッファの下限値）、バッファオーバーフローを判断する閾値（バッファの上限値）、蓄積されているデータを出力するか否かを判断する閾値（バッファの出力閾値）等である。また、バッファパラメータとして特許文献１及び特許文献２に記載されている定常遅延を検出するための定常遅延閾値や検査区間も含まれる。
【００４５】
蓄積量監視部１２は、データ蓄積部１１によって蓄積されたバッファのデータ蓄積量を監視する。蓄積量監視部１２は、データ蓄積部１１によって入力データのバッファへの蓄積が開始されてから出力（初期出力）できるだけ蓄積されたか判断する。蓄積量監視部１２は、出力できるだけバッファにデータが蓄積されたと判断すると、その旨をバッファ制御部１３へ通知する。
【００４６】
また、蓄積量監視部１２は、バッファオーバーフロー及びバッファアンダーフローを検出し、検出した場合にはデータ蓄積量をバッファ制御部１３へ通知する。さらに、蓄積量監視部１２は、データ蓄積部１１において定常的にデータが蓄積され、データの入力から出力までの定常的な遅延を検出する。蓄積量監視部１２は、定常的な遅延を検出した場合にも、データ蓄積量をバッファ制御部１３へ通知する。
【００４７】
バッファ制御部１３は、蓄積量監視部１２から出力できるだけバッファにデータが蓄積された旨の通知を入力すると、バッファからデータを出力するようにデータ蓄積部１１を制御する。また、バッファ制御部１３は、蓄積量監視部１２からバッファオーバーフロー、バッファアンダーフロー、又は定常遅延を検出した旨の通知を入力すると、データ蓄積部１１に対して、バッファに蓄積されているデータの廃棄、バッファに擬似データの挿入、又は、バッファパラメータの変更の処理を命令し、データ蓄積部１１を制御する。
【００４８】
これらの処理を命令する際に、バッファ制御部１３は、バッファ情報保持部１４より、保持しているデータ蓄積量、バッファパラメータ、及び各イベント（初期出力，バッファオーバーフロー、バッファアンダーフロー、定常遅延）の発生を示すフラグの通知を受ける。そして、バッファ制御部１３は、データの廃棄量、又は、データの挿入量を決定し、データ蓄積部１１に対して決定した量を通知すると共に上記の処理命令を行う。そして、処理を行った時刻、命令した処理、処理後のデータ蓄積量、処理後のバッファパラメータ、及び発生したイベントを、バッファ情報保持部１４へ通知する。
【００４９】
バッファ情報保持部１４は、バッファ制御部１３からの通知に応じて情報を保持する。また、バッファ情報保持部１４は、保持している情報をバッファ制御部へ通知する。図２は、本実施形態に係るデータ出力装置が備えるバッファ情報保持部が保持している保持情報の例を示す。
【００５０】
図２に示すように、バッファ情報保持部１４は、バッファ制御部１３が通知した時刻の情報、バッファ制御部１３がデータ蓄積部１１へ命令した処理の情報、処理後のバッファのデータ蓄積量、処理後のバッファパラメータ、及び当該処理に発生したイベントを示すフラグ群である。保持情報内のイベント発生フラグ群のうちの発生したイベントのフラグが「１」に設定される。
【００５１】
データ出力装置１の各機能は、図３に示すハードウェアにより実現される。図３は、本実施形態に係るデータ出力装置のハードウェア構成図である。データ出力装置１は、物理的には、図３に示すように、ＣＰＵ２１、主記憶装置であるＲＡＭ２２及びＲＯＭ２３、ハードディスク等の補助記憶装置２５、入力デバイスであるキーボード及びマウス等の入力装置２６、ディスプレイ等の出力装置２７、データ送受信デバイスである通信モジュール２４などを含むコンピュータシステムとして構成されている。
【００５２】
図２において説明した各機能は、図３に示すＣＰＵ２１、ＲＡＭ２２等のハードウェア上に所定のコンピュータソフトウェアを読み込ませることにより、ＣＰＵ２１の制御のもとで通信モジュール２４、入力装置２６、出力装置２７を動作させるとともに、ＲＡＭ２２や補助記憶装置２５におけるデータの読み出し及び書き込みを行うことで実現される。
【００５３】
図４は、本実施形態に係るデータ出力装置の動作を説明するフローチャートである。まず、入力データが、データ蓄積部１１よってバッファへ蓄積される（ステップＳ１０１）。次に、バッファのデータ蓄積量が、バッファ出力閾値を上回ったか否かに基づいて、バッファからのデータ出力を開始するか否か、蓄積量監視部１２によって判断される（ステップＳ１０２）。
【００５４】
データを出力できない場合（ステップＳ１０２でＮＯ）、ステップＳ１０１に戻り、入力されるデータをバッファに蓄積する。データが出力できる場合（ステップＳ１０２でＹＥＳ）、データが、データ蓄積部１１によってバッファから出力される（ステップＳ１０３）。続いて、データ蓄積部１１にデータが入力されると、入力データが、データ蓄積部１１によってバッファに蓄積される（ステップＳ１０４）。
【００５５】
データがバッファに蓄積されると、バッファ制御処理を行うか否か（バッファでイベントが発生したか否か）、蓄積量監視部１２によって判断される（ステップＳ１０５）。バッファでイベントが発生しておらず、バッファ制御処理を行わないと判断された場合（ステップＳ１０５でＮＯ）は、ステップＳ１０３に戻りデータが出力される。
【００５６】
バッファでイベントが発生し、バッファ制御処理を行うと判断された場合（ステップＳ１０５でＹＥＳ）、蓄積量監視部１２によってバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せて発生したイベントも通知される（ステップＳ１０６）。次に、保持情報が、バッファ情報保持部１４によってバッファ制御部１３へ通知される（ステップＳ１０７）。
【００５７】
通知された発生イベントに応じて、データ挿入、データ廃棄、バッファパラメータの変更のいずれか、またはこれらの組み合わせである処理が、バッファ制御部１３によって、通知された保持情報に基づいて行われる（ステップＳ１０８）。
【００５８】
バッファ制御処理後、バッファ制御部１３からバッファ情報保持部１４に、処理を行った時刻、命令したバッファ制御処理、処理後のデータ蓄積量、処理後のバッファパラメータ、及び発生したイベントが通知され、バッファ情報保持部１４によって保持される（ステップＳ１０９；バッファ情報保持ステップ）。そしてステップＳ１０３に戻り、再びデータが出力され、以降、データの入力が終了するまで上記のステップＳ１０３〜Ｓ１０９が繰り返される。
【００５９】
上記のステップＳ１０５〜Ｓ１０８によってバッファ制御ステップＳ１が行われる。より具体的なバッファ制御ステップＳ１の第１の例Ｓ１Ａについて、図５を参照して説明する。図５は、本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第１の例を示すフローチャートである。バッファ制御ステップの第１の例Ｓ１Ａは、バッファにおいてバッファオーバーフローが発生しているか否か判定し、バッファオーバーフローが発生している場合に、データの廃棄を行うバッファ制御処理である。
【００６０】
まず、バッファのデータ蓄積量がバッファの上限値を上回っているか否か（バッファオーバーフローが発生しているか否か）、蓄積量監視部１２によって判断される（ステップＳ１１１）。バッファのデータ蓄積量がバッファの上限値を上回っていない場合（ステップＳ１１１でＮＯ）は、Ｓ１０３へ戻りデータを出力する。
【００６１】
バッファのデータ蓄積量がバッファの上限値を上回っている場合（ステップＳ１１１でＹＥＳ）は、蓄積量監視部１２よりバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せてバッファオーバーフローの発生が通知される（ステップＳ１１２）。次に、バッファ情報保持部１４よりバッファ制御部１３へ、保持情報が通知される（ステップＳ１１３）。
【００６２】
通知された保持情報に基づいて、データの廃棄が、バッファ制御部１３によって行われる（ステップＳ１１４）。さらに、通知された保持情報に基づいて、必要に応じてバッファパラメータが、バッファ制御部１３によって変更される（ステップＳ１１５）。
【００６３】
次に、バッファ制御ステップＳ１の第２の例Ｓ１Ｂについて、図６を参照して説明する。図６は、本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第２の例を示すフローチャートである。このバッファ制御ステップの第２の例Ｓ１Ｂは、バッファにおいてバッファアンダーフローが発生しているか否か判定し、バッファアンダーフローが発生している場合に、データの挿入を行うバッファ制御処理である。
【００６４】
まず、バッファのデータ蓄積量がバッファの下限値を下回っているか否か（バッファアンダーフローが発生しているか否か）、蓄積量監視部１２によって判断される（ステップＳ１２１）。バッファのデータ蓄積量がバッファの下限値を下回っていない場合（ステップＳ１２１でＮＯ）は、Ｓ１０３へ戻りデータを出力する。
【００６５】
バッファの蓄積量がバッファの下限値を下回っている場合（ステップＳ１２１でＹＥＳ）は、蓄積量監視部１２よりバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せてバッファアンダーフローの発生が通知される（ステップＳ１２２）。次に、バッファ情報保持部１４よりバッファ制御部１３へ、保持情報が通知される（ステップＳ１２３）。
【００６６】
通知された保持情報に基づいて、データの挿入が、バッファ制御部１３によって行われる（ステップＳ１２４）。さらに、通知された保持情報に基づいて、必要に応じてバッファパラメータが、バッファ制御部１３によって変更される（ステップＳ１２５）。
【００６７】
次に、バッファ制御ステップＳ１の第３の例Ｓ１Ｃについて、図７を参照して説明する。図７は、本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第３の例を示すフローチャートである。このバッファ制御ステップの第３の例Ｓ１Ｃは、バッファにおいて定常遅延が発生しているか否か判定し、定常遅延が発生している場合に、データの削除を行うバッファ制御処理である。
【００６８】
まず、バッファで定常遅延が発生しているか否か、蓄積量監視部１２によって判断される（ステップＳ１３１）。定常遅延が発生しているか否かを判断する方法としては、特許文献１に記載の方法がある。この方法は、定常遅延の各検査区間におけるバッファのデータ蓄積量の最低値が、所定の定常遅延閾値よりも大きい場合、定常遅延が発生していると判断する方法である。特許文献１に開示されていないが、この方法において、検査区間におけるバッファ蓄積量の最低値の代わりに平均値を利用することもできる。本発明において、定常遅延の判断方法は限定されない。定常遅延が発生していない場合（ステップＳ１３１でＮＯ）は、Ｓ１０３へ戻りデータを出力する。
【００６９】
定常遅延が発生している場合（ステップＳ１３１でＹＥＳ）は、蓄積量監視部１２よりバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せて定常遅延の発生が通知される（ステップＳ１３２）。次に、バッファ情報保持部１４よりバッファ制御部１３へ、保持情報が通知される（ステップＳ１３３）。
【００７０】
通知された保持情報に基づいて、データの廃棄が、バッファ制御部１３によって行われる（ステップＳ１３４）。さらに、通知された保持情報に基づいて、必要に応じてバッファパラメータが、バッファ制御部１３によって変更される（ステップＳ１３５）。バッファパラメータの変更として、例えば、定常遅延閾値、バッファの出力閾値等が変更される。
【００７１】
次に、バッファ制御ステップＳ１の第４の例Ｓ１Ｄについて、図８を参照して説明する。図８は、本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第４の例を示すフローチャートである。このバッファ制御ステップの第４の例Ｓ１Ｄは、上述した第１〜第３の例を組み合わせたものである。
【００７２】
まず、バッファで定常遅延が発生しているか否か、蓄積量監視部１２によって判断される（ステップＳ１４１）。定常遅延が発生していない場合（ステップＳ１４１でＮＯ）は、ステップＳ１４６へ進む。
【００７３】
定常遅延が発生している場合（ステップＳ１４１でＹＥＳ）は、蓄積量監視部１２よりバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せて定常遅延の発生が通知される（ステップＳ１４２）。次に、バッファ情報保持部１４よりバッファ制御部１３へ、保持情報が通知される（ステップＳ１４３）。
【００７４】
通知された保持情報に基づいて、データの廃棄が、バッファ制御部１３によって行われる（ステップＳ１４４）。さらに、通知された保持情報に基づいて、必要に応じてバッファパラメータが、バッファ制御部１３によって変更される（ステップＳ１４５）。
【００７５】
続いて、バッファの蓄積量がバッファの下限値を下回っているか否か（バッファアンダーフローが発生しているか否か）、蓄積量監視部１２によって判断される（ステップＳ１４６）。バッファの蓄積量がバッファの下限値を下回っていない場合（ステップＳ１４６でＮＯ）は、ステップＳ１５１へ進む。
【００７６】
バッファの蓄積量がバッファの下限値を下回っている場合（ステップＳ１４６でＹＥＳ）は、蓄積量監視部１２よりバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せてバッファアンダーフローの発生が通知される（ステップＳ１４７）。次に、バッファ情報保持部１４よりバッファ制御部１３へ、保持情報が通知される（ステップＳ１４８）。
【００７７】
通知された保持情報に基づいて、データの挿入が、バッファ制御部１３によって行われる（ステップＳ１４９）。さらに、通知された保持情報に基づいて、必要に応じてバッファパラメータが、バッファ制御部１３によって変更される（ステップＳ１５０）。
【００７８】
続いて、バッファのデータ蓄積量がバッファの上限値を上回っているか否か（バッファオーバーフローが発生しているか否か）、蓄積量監視部１２によって判断される（ステップＳ１５１）。バッファの蓄積量がバッファの上限値を上回っていない場合（ステップＳ１５１でＮＯ）は、Ｓ１０３へ戻りデータを出力する。
【００７９】
バッファの蓄積量がバッファの上限値を上回っている場合（ステップＳ１５１でＹＥＳ）は、蓄積量監視部１２よりバッファ制御部１３へ、現在のバッファのデータ蓄積量が通知され、併せてバッファオーバーフローの発生が通知される（ステップＳ１５２）。次に、バッファ情報保持部１４よりバッファ制御部１３へ、保持情報が通知される（ステップＳ１５３）。
【００８０】
通知された保持情報に基づいて、データの廃棄が、バッファ制御部１３によって行われる（ステップＳ１５４）。さらに、通知された保持情報に基づいて、必要に応じてバッファパラメータが、バッファ制御部１３によって変更される（ステップＳ１５５）。以上のようにバッファ制御処理が行われる。
【００８１】
ここで、図５、図７及び図８の通知された保持情報に基づくデータ廃棄（ステップＳ１１４，Ｓ１３４，Ｓ１４４，Ｓ１５４）の具体例を説明する。まず、保持情報についてより詳細に説明する。バッファ情報保持部１４によって保持されている保持情報を図９に示す。保持情報は、図９（ａ）に示す２つ前の保持情報と図９（ｂ）に示す直前の保持情報とを含む。２つ前の保持情報は、２つ前のバッファ制御処理に関する情報である。直前の保持情報は、直前のバッファ制御処理に関する情報である。２つ前のバッファ制御処理を行った時刻をｔ１、直前のバッファ制御処理を行った時刻をｔ２、現在の時刻をｔ１とすると、ｔ１＜ｔ２＜ｔ３である。
【００８２】
２つ前の保持情報として、例えば、時刻情報がｔ１、バッファ制御処理がデータ挿入と上限値変更、（バッファ制御処理後の）データ蓄積量がｓ１、バッファパラメータが出力閾値oth0，最大許容蓄積量ith0，最小許容蓄積量dth0，上限値uth1，下限値lth0，定常遅延閾値sth0、イベントフラグ群が初期出力０，オーバーフロー０，アンダーフロー１，定常遅延０等の情報が保持されている。
【００８３】
直前の保持情報として、例えば、時刻情報がｔ２、バッファ制御処理がデータ廃棄、（バッファ制御処理後の）データ蓄積量がｓ２、バッファパラメータが出力閾値oth0，最大許容蓄積量ith0，最小許容蓄積量dth0，上限値uth1，下限値lth0，定常遅延閾値sth0、イベントフラグ群が初期出力０，オーバーフロー１，アンダーフロー０，定常遅延０等が保持されている。
【００８４】
バッファオーバーフローが発生していると判断された場合、バッファ情報保持部１４において保持されている保持情報のうち、直前の保持情報と２つ前の保持情報とが、バッファ制御部１３へ通知される。直前の保持情報のバッファ制御処理が「データ廃棄」であれば、直前のイベントに対するデータ廃棄で十分にバッファのデータ蓄積量を低く設定できず、今回再びデータを廃棄する必要が生じたと考えられる。そのため今回のデータ廃棄では、直前のデータ廃棄によるバッファのデータ蓄積量よりも、データ廃棄後のバッファの蓄積量が低くなるようにデータを廃棄すれば、その後に再びデータ廃棄をする状況が起こりにくくなると考えられる。
【００８５】
また直前の保持情報のバッファ制御処理が「データ挿入」であれば、データ挿入でバッファに挿入されたデータ量が多く、今回データを廃棄する必要が生じた可能性がある。そのため、今回のイベントに対応するデータ廃棄後のバッファのデータ蓄積量を、直前のデータ挿入によるバッファのデータ蓄積量より低くすれば、その後に再びデータ廃棄をする状況が起こりにくくなると考えられる。
【００８６】
一方で、今回のイベントの２つ前のイベント発生時の保持情報のバッファ制御処理が「データ廃棄」であれば、バッファ制御処理として、「データ廃棄」をし、「データ挿入」をして、今回「データ廃棄」することになる。この場合、２つ前のイベントに対応して行われた「データ廃棄」が、直前の「データ挿入」を必要とするイベント、すなわちアンダーフローの発生の原因になっている可能性がある。そのため、２つ前のイベントに対するデータ廃棄と同じようにデータを廃棄すると、後に再びアンダーフローが発生する可能性があるため、バッファのデータ蓄積量が２つ前のイベントに対するデータ廃棄後より高くなるようにデータ廃棄するなど、データ廃棄後のバッファ蓄積量に注意する必要がある。
【００８７】
またいずれの場合も、大量のデータをバッファから廃棄すると、アンダーフローが発生する可能性が高くなるため、注意が必要になる。例えば、あらかじめデータ廃棄によるバッファのデータ蓄積量の下限値（最小許容蓄積量）を決めておき、この最小許容蓄積量を下回らない範囲でデータ廃棄を行う。
【００８８】
データ廃棄（ステップＳ１１４，Ｓ１３４，Ｓ１４４，Ｓ１５４）の第１の例Ｓ１１４Ａについて図１０を参照して説明する。図１０は、本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ廃棄の第１の例を示すフローチャートである。図１０は、ステップＳ１１４の第１の例を示している。
【００８９】
まずデータ廃棄後のバッファのデータ蓄積量が、直前の保持情報内のデータ蓄積量よりも低くなるように、データ廃棄量を設定する（ステップＳ１１４０１）。次に直前のイベントに対するバッファ制御処理がデータ廃棄か否か、判断される（ステップＳ１１４０２）。
【００９０】
直前のバッファ制御処理がデータ廃棄ではない場合（ステップＳ１１４０２でＮＯ）、２つ前の保持情報内のバッファ制御処理がデータ廃棄か否か、判断される（ステップＳ１１４０３）。２つ前の保持情報内のバッファ制御処理がデータ廃棄でない場合（ステップＳ１１４０３でＮＯ）、ステップＳ１１４０６へ進む。
【００９１】
２つ前の保持情報内のバッファ制御処理がデータ廃棄の場合（ステップＳ１１４０３でＹＥＳ）、ステップＳ１１４０１で設定したデータ廃棄量でデータ廃棄した場合のバッファのデータ蓄積量が２つ前の保持情報内のデータ蓄積量よりも低いか否か、判断される（ステップＳ１１４０４）。２つ前の保持情報内のデータ蓄積量以上である場合（ステップＳ１１４０４でＮＯ）、ステップＳ１１４０６へ進む。
【００９２】
２つ前の保持情報内のデータ蓄積量よりも低い場合（ステップＳ１１４０４でＹＥＳ）、データ廃棄後のバッファのデータ蓄積量が、２つ前の保持情報内のデータ蓄積量よりも高くなるようにデータ廃棄量が設定され（ステップＳ１１４０５）、ステップＳ１１４０６へ進む。
【００９３】
直前のバッファ制御処理がデータ廃棄の場合（ステップＳ１１４０２でＹＥＳ）、ステップＳ１１４０６へ進む。ステップＳ１１４０６では、設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、所定の最小許容蓄積量よりも低いか否か判断される。設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、最小許容蓄積量以上の場合（ステップＳ１１４０６でＮＯ）、ステップＳ１１４０８へ進む。
【００９４】
設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、最小許容蓄積量よりも低い場合（ステップＳ１１４０６でＹＥＳ）、データ廃棄後のバッファのデータ蓄積量が最小許容蓄積量になるようにデータ廃棄量が設定される（ステップＳ１１４０７）。そして、設定されたデータ廃棄量だけ、バッファからデータが廃棄される（ステップＳ１１４０８）。
【００９５】
本例では、ステップＳ１１４０５で、データ廃棄後のバッファのデータ蓄積量が、２つ前の保持情報内のデータ蓄積量よりも高くなるようにデータ廃棄量を設定したが、例えば、あらかじめ決められたデータ廃棄量を今回のデータ廃棄量として設定してもよい。
【００９６】
また本例では、バッファ情報保持部１４からバッファ制御部１３へ直前の保持情報及び２つ前の保持情報が通知されたが、バッファ情報保持部１４で、バッファ制御部１３で利用する保持情報だけを選択して通知してもよく、本発明は保持情報の通知方法には限定されない。
【００９７】
データ廃棄（ステップＳ１１４，Ｓ１３４，Ｓ１４４，Ｓ１５４）の第２の例Ｓ１１４Ｂについて図１１を参照して説明する。図１１は、本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ廃棄の第２の例を示すフローチャートである。図１１は、ステップＳ１１４の第２の例Ｓ１１４Ｂを示している。
【００９８】
まず直前のイベントに対するバッファ制御処理がデータ廃棄か否か、判断される（ステップＳ１１４１１）。直前のバッファ制御処理がデータ廃棄ではない場合（ステップＳ１１４０２でＮＯ）、データ廃棄後のデータ蓄積量が、前回のデータ廃棄時のデータ蓄積量よりも高くなるように、データ廃棄量が設定される（ステップＳ１１４１２）。前回のデータ廃棄時のデータ蓄積量とは、バッファ情報保持部１４によって保持された保持情報において、データ廃棄後に保持された情報のうちの最新の保持情報である。すなわち、前回のデータ廃棄時のデータ蓄積量とは、前回のデータ廃棄後に保持されたデータ蓄積量である。
【００９９】
直前のバッファ制御処理がデータ廃棄である場合（ステップＳ１１４１１でＹＥＳ）、データ廃棄後のバッファのデータ蓄積量が、直前の保持情報内のデータ蓄積量よりも低くなるように、データ廃棄量が設定される（ステップＳ１１４１３）。直前の保持情報内のデータ蓄積量とは、情報保持部１４によって保持された保持情報のうちの最新の保持情報である。
【０１００】
ステップＳ１１４１２又はＳ１１４１３で設定したデータ廃棄量でデータ廃棄した場合のバッファのデータ蓄積量が所定の最小許容蓄積量よりも低いか否か、判断される（ステップＳ１１４１４）。設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、最小許容蓄積量以上の場合（ステップＳ１１４１４でＮＯ）、ステップＳ１１４１６へ進む。
【０１０１】
設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、最小許容蓄積量よりも低い場合（ステップＳ１１４１４でＹＥＳ）、データ廃棄後のバッファのデータ蓄積量が最小許容蓄積量になるようにデータ廃棄量が設定される（ステップＳ１１４１５）。設定されたデータ廃棄量だけ、バッファからデータが廃棄される（ステップＳ１１４１６）。
【０１０２】
この例では、直前と２つ前の保持情報に基づくのではなく、現在から最近のデータ廃棄処理を行った際の保持情報に基づいて処理される。そのため、通知される保持情報は直前の保持情報であり、さらに直前のバッファ制御処理がデータ廃棄ではない場合は、現在から前回のデータ廃棄処理を行った際の保持情報が併せて通知される。また、現在から最近のデータ廃棄処理を行った際の保持情報と、当該廃棄処理後にデータ挿入処理を行ったか否かの情報が通知されてもよい。
【０１０３】
ここで、図６及び図８の通知された保持情報に基づくデータ挿入（ステップＳ１２４，Ｓ１４９）の具体例を説明する。
【０１０４】
バッファ情報保持部１４によって保持されている保持情報のうち、直前の保持情報と２つ前の保持情報が、バッファ制御部１３へ通知される。直前の保持情報のバッファ制御処理が「データ挿入」であれば、直前のイベントに対するデータ挿入で十分にバッファの蓄積量を高く設定できず、今回再びデータを挿入する必要が生じたと考えられる。そのため今回のデータ挿入では、直前のデータ挿入によるバッファの蓄積量よりも、データ挿入後のバッファの蓄積量が高くなるようにデータを挿入すれば、その後に再びデータ挿入をする状況が起こりにくくなると考えられる。
【０１０５】
また直前の保持情報のバッファ制御処理が「データ廃棄」であれば、データ廃棄でバッファから廃棄されたデータ量が多く、今回データを挿入する必要が生じた可能性がある。そのため、今回のイベントに対応するデータ挿入後のバッファのデータ蓄積量を、直前のデータ廃棄によるバッファのデータ蓄積量より高くすれば、その後に再びデータ挿入をする状況が起こりにくくなると考えられる。
【０１０６】
一方で、今回のイベントの２つ前のイベント発生時の保持情報のバッファ制御処理が「データ挿入」であれば、バッファ制御処理として、「データ挿入」をし、「データ廃棄」をして、今回「データ挿入」することになる。この場合、２つ前のイベントに対応して行われた「データ挿入」が、直前の「データ廃棄」を必要とするイベントの発生の原因になっている可能性がある。そのため、２つ前のイベントに対するデータ挿入と同じようにデータを挿入すると、後に再びデータ廃棄をする状況が発生する可能性があるため、バッファのデータ蓄積量が２つ前のイベントに対するデータ挿入後より低くなるようにデータ挿入するなど、データ挿入後のバッファ蓄積量に注意する必要がある。
【０１０７】
またいずれの場合も、大量のデータをバッファに挿入すると、バッファオーバーフローが発生する可能性が高くなるため、注意が必要になる。例えば、あらかじめデータ挿入によるバッファのデータ蓄積量の上限値（最大許容蓄積量）を決めておき、この最大許容蓄積量を上回らない範囲でデータ挿入を行うことなどが考えられる。
【０１０８】
データ挿入（ステップＳ１２４，Ｓ１４９）の第１の例Ｓ１２４Ａについて図１２を参照して説明する。図１２は、本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ挿入の第１の例を示すフローチャートである。図１２は、ステップＳ１２４の第１の例を示している。
【０１０９】
まずデータ挿入後のバッファのデータ蓄積量が、直前の保持情報内のデータ蓄積量よりも高くなるように、データ挿入量が設定される（ステップＳ１２４０１）。次に直前のイベントに対するバッファ制御処理が、データ挿入か否か判断される（ステップＳ１２４０２）。
【０１１０】
直前のバッファ制御処理がデータ挿入ではない場合（ステップＳ１２４０２でＮＯ）、２つ前の保持情報内のバッファ制御処理がデータ挿入か否か判断される（ステップＳ１２４０３）。２つ前の保持情報内のバッファ制御処理がデータ挿入ではない場合（ステップＳ１２４０３でＮＯ）、ステップＳ１２４０６へ進む。
【０１１１】
２つ前の保持情報内のバッファ制御処理がデータ挿入の場合（ステップＳ１２４０３でＹＥＳ）、ステップＳ１２４０１で設定したデータ挿入量でデータ挿入した場合のバッファのデータ蓄積量が、２つ前の保持情報内のデータ蓄積量よりも高いか否か判断される（ステップＳ１２４０４）。２つ前の保持情報内のデータ蓄積量以下の場合（ステップＳ１２４０４でＮＯ）、ステップＳ１２４０６へ進む。
【０１１２】
２つ前の保持情報内のデータ蓄積量よりも高い場合（ステップＳ１２４０４でＹＥＳ）、データ挿入後のバッファのデータ蓄積量が、２つ前の保持情報内のデータ蓄積量よりも低くなるようにデータ挿入量が設定される（ステップＳ１２４０５）、ステップＳ１２４０６へ進む。
【０１１３】
一方、直前のバッファ制御処理がデータ挿入である場合（ステップＳ１２４０２でＹＥＳ）、ステップＳ１２４０６へ進む。ステップＳ１２４０６では、設定されたデータ挿入量でデータを挿入した場合のバッファのデータ蓄積量が、所定の最大許容蓄積量よりも高いか否か判断される（ステップＳ１２４０６）。最大許容蓄積量以下の場合（ステップＳ１２４０６でＮＯ）、ステップＳ１２４０８へ進む。
【０１１４】
最大許容蓄積量よりも高い場合（ステップＳ１２４０６でＹＥＳ）、データ挿入後のバッファのデータ蓄積量が最大許容蓄積量になるようにデータ挿入量が設定される（ステップＳ１２４０７）。続いて、設定されたデータ挿入量だけ、バッファへデータが挿入される（ステップＳ１２４０８）。
【０１１５】
本例では、ステップＳ１２４０５で、データ挿入後のバッファのデータ蓄積量が、２つ前の保持情報内のデータ蓄積量よりも低くなるようにデータ挿入量を設定したが、例えば、あらかじめ決められたデータ挿入量を今回のデータ挿入量として設定してもよい。
【０１１６】
また本例では、バッファ情報保持部１４からバッファ制御部１３へ直前の保持情報及び２つ前の保持情報が通知されたが、バッファ情報保持部１４で、バッファ制御部１３で利用する保持情報だけを選択して通知してもよく、本発明は保持情報の通知方法には限定されない。
【０１１７】
データ挿入（ステップＳ１２４，Ｓ１４９）の第２の例Ｓ１２４Ａについて図１３を参照して説明する。図１３は、本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ挿入の第２の例を示すフローチャートである。図１３は、ステップＳ１２４の第２の例を示している。
【０１１８】
まず直前のイベントに対するバッファ制御処理が、データ挿入か否か判断される（ステップＳ１２４１１）。直前のバッファ制御処理がデータ挿入ではない場合（ステップＳ１２４１１でＮＯ）、データ挿入後のデータ蓄積量が、前回のデータ挿入時のデータ蓄積量よりも低くなるように、データ挿入量が設定される（ステップＳ１２４１２）。前回のデータ挿入時のデータ蓄積量とは、バッファ情報保持部１４によって保持された保持情報において、データ挿入後に保持された情報のうちの最新の保持情報である。すなわち、前回のデータ挿入時のデータ蓄積量とは、前回のデータ挿入後に保持されたデータ蓄積量である。
【０１１９】
直前のバッファ制御処理がデータ挿入である場合（ステップＳ１２４１１でＹＥＳ）、データ挿入後のバッファのデータ蓄積量が、直前の保持情報内のデータ蓄積量よりも高くなるように、データ挿入量が設定される（ステップＳ１２４１３）。
【０１２０】
そして、設定されたデータ挿入量でデータを挿入した場合のバッファのデータ蓄積量が、所定の最大許容蓄積量よりも高いか否か判断される（ステップＳ１２４１４）。最大許容蓄積量以下の場合（ステップＳ１２４１４でＮＯ）、ステップＳ１２４１６へ進む。
【０１２１】
最大許容蓄積量よりも高い場合（ステップＳ１２４１４でＹＥＳ）、データ挿入後のバッファのデータ蓄積量が最大許容蓄積量になるようにデータ挿入量が設定される（ステップＳ１２４１５）。続いて、設定されたデータ挿入量だけ、バッファへデータが挿入される（ステップＳ１２４１６）。
【０１２２】
この例では、直前と２つ前の保持情報に基づくのではなく、現在から最近のデータ挿入処理を行った際の保持情報に基づいて処理される。そのため、通知される保持情報は直前の保持情報であり、さらに直前のバッファ制御処理がデータ挿入ではない場合は、現在から最近のデータ挿入処理を行った際の保持情報が併せて通知される。また、現在から最近のデータ挿入処理を行った際の保持情報と、当該挿入処理後にデータ廃棄処理を行ったか否かの情報が通知されてもよい。
【０１２３】
上記の例では、制御処理後のバッファのデータ蓄積量を設定し、それに基づいてデータ廃棄量、データ挿入量を設定していた。一方で、データ廃棄量、データ挿入量を直接設定してもよい。
【０１２４】
データ廃棄（ステップＳ１１４，Ｓ１３４，Ｓ１４４，Ｓ１５４）の第３の例Ｓ１１４Ｂについて図１４を参照して説明する。図１４は、本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ廃棄の第３の例を示すフローチャートである。図１４は、ステップＳ１１４の第３の例を示している。
【０１２５】
まず直前のイベントに対するバッファ制御処理がデータ廃棄か否か、判断される（ステップＳ１１４２１）。直前のバッファ制御処理がデータ廃棄ではない場合（ステップＳ１１４２１でＮＯ）、前回のデータ廃棄時の保持情報内のデータ廃棄量よりも少なくなるように、データ廃棄量を設定する（ステップＳ１１４２２）。
【０１２６】
直前のバッファ制御処理がデータ廃棄である場合（ステップＳ１１４２１でＹＥＳ）、データ廃棄量を直前の保持情報内のデータ廃棄量よりも多い値に設定する（ステップＳ１１４２３）。
【０１２７】
設定したデータ廃棄量でデータ廃棄した場合のバッファのデータ蓄積量が、所定の最小許容蓄積量よりも低いか否か判断される（ステップＳ１１４２４）。設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、最小許容蓄積量以上の場合（ステップＳ１１４２４でＮＯ）、ステップＳ１１４２６へ進む。
【０１２８】
設定されたデータ廃棄量でデータを廃棄した場合のバッファのデータ蓄積量が、最小許容蓄積量よりも低い場合（ステップＳ１１４２４でＹＥＳ）、データ廃棄後のバッファのデータ蓄積量が最小許容蓄積量になるようにデータ廃棄量が設定される（ステップＳ１１４２５）。設定されたデータ廃棄量だけ、バッファからデータが廃棄される（ステップＳ１１４２６）。
【０１２９】
データ挿入（ステップＳ１２４，Ｓ１４９）の第３の例Ｓ１２４Ｃについて図１５を参照して説明する。図１５は、本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ挿入の第３の例を示すフローチャートである。図１５は、ステップＳ１２４の第３の例を示している。
【０１３０】
まず直前のイベントに対するバッファ制御処理がデータ挿入か否か、判断される（ステップＳ１２４２１）。直前のバッファ制御処理がデータ挿入ではない場合（ステップＳ１２４２１でＮＯ）、前回のデータ挿入時の保持情報内のデータ挿入量よりも少なくなるように、データ挿入量が設定される（ステップＳ１２４２２）。
【０１３１】
直前のバッファ制御処理がデータ挿入である場合（ステップＳ１２４１１でＹＥＳ）、データ挿入量が直前の保持情報内のデータ挿入量よりも多い値に設定される（ステップＳ１２４２３）。
【０１３２】
そして、設定されたデータ挿入量でデータを挿入した場合のバッファのデータ蓄積量が、所定の最大許容蓄積量よりも高いか否か判断される（ステップＳ１２４２４）。最大許容蓄積量以下の場合（ステップＳ１２４２４でＮＯ）、ステップＳ１２４２６へ進む。
【０１３３】
最大許容蓄積量よりも高い場合（ステップＳ１２４２４でＹＥＳ）、データ挿入後のバッファのデータ蓄積量が最大許容蓄積量になるように、データ挿入量が設定される（ステップＳ１２４２５）。続いて、設定されたデータ挿入量だけ、バッファへデータが挿入される（ステップＳ１２４２６）。
【０１３４】
ここで、図４〜図８において、通知された保持情報に基づくバッファパラメータ変更（ステップＳ１０８，Ｓ１１５，Ｓ１２５，Ｓ１３５，Ｓ１４５，Ｓ１５０，Ｓ１５５）について説明する。
【０１３５】
定常遅延が発生して、その定常遅延を取り除くためのデータ廃棄が行われた場合、ステップＳ１３５，Ｓ１４５において、バッファの上限値を低く設定する。これは、転送時間の揺らぎを吸収するためのバッファの大きさに加え、定常遅延によるデータ蓄積量の増加を考慮して、バッファの上限値が高く設定されていたものを、転送時間の揺らぎを吸収するためだけのバッファの大きさになるように、バッファの上限値を低く設定することである。なお、このバッファパラメータの変更制御は、定常遅延に対するデータ廃棄をと同時に必ず行う必要は無く、定常遅延に対するデータ廃棄後、オーバーフローが発生していないことを確認後に上限値を変更してもよい。
【０１３６】
また、アンダーフロー発生時に、ステップＳ１２５，Ｓ１５０において、バッファ制御部１３によって、通知された保持情報から、以前にバッファオーバーフローが発生しているか否かを調べ、発生していた場合にはバッファの蓄積量の上限値を高くしてもよい。このとき、バッファオーバーフローの発生を調べる対象は、所定の時間内に発生したイベントについてのみであってもよい。
【０１３７】
以上説明したように、バッファ情報保持部１４は、データが廃棄された場合、データ廃棄時のバッファパラメータとデータ廃棄時のバッファパラメータである旨の情報とを関連付けて保持し、データが挿入された場合、データ挿入時のバッファパラメータとデータ挿入時のバッファパラメータである旨の情報とを関連付けて保持する。そして、バッファ制御部１３は、データを廃棄する場合、又は、バッファオーバーフローが発生した場合に、バッファ情報保持部１４によって保持されたバッファパラメータであって前回のデータ廃棄後に保持されたバッファパラメータに基づいて、バッファパラメータを変更する。また、バッファ制御部１３は、データを挿入する場合、又は、バッファアンダーフローが発生した場合に、バッファ情報保持部１４によって保持されたバッファパラメータであって前回のデータ挿入後に保持されたバッファパラメータに基づいて、バッファパラメータを変更する。
【０１３８】
このようにして、バッファパラメータ（バッファの蓄積量上限値、下限値）の変更を行うことにより、データ廃棄・挿入と同様の効果を奏する。すなわち、データを廃棄して、バッファオーバーフローに対処することは、バッファのデータ蓄積量が上限値より下回るようにするためであり、データを廃棄せずとも、上限値を高くすることによっても同様の状況は得られる。一方、データを挿入してバッファアンダーフローに対処することは、バッファのデータ蓄積量が下限値より上回るようにするためであり、データを挿入せずとも、物理的なバッファサイズの許す範囲で、下限値を低くすることによっても同様の状況は得られる。
【０１３９】
また、パラメータ変更とデータの挿入・廃棄は同時に実行されてもよい。例えば、データを挿入する際に、バッファのデータ蓄積量を現在の上限値よりも高く設定したい場合、挿入と同時に上限値を高く変更すればよい。一方、データを廃棄する際に、バッファのデータ蓄積量を現在の下限値よりも低く設定したい場合、廃棄と同時に下限値を低く変更すればよい。
【０１４０】
ただし、パラメータ変更の際に、バッファの上限値や下限値を、高くしすぎたり低くしすぎたりすると、データ出力までの遅延が大きくなったり、バッファオーバーフロー／バッファアンダーフローが頻繁に発生したり、バッファ内のデータ蓄積量が完全にゼロになり、データが不連続に出力されるため、バッファの上限値及び下限値として設定できる最大値及び最小値（上限値最大値、上限値最小値、下限値最大値、下限値最小値）をあらかじめ決めておき、バッファの上限値及び下限値の設定可能な範囲を定めておくなどの対処が必要である。
【０１４１】
また、バッファのパラメータの変更は、バッファ制御部１３において、通知された保持情報に基づいて実行されるため、保持情報の内容によってはパラメータが変更されない場合も有りうる。
【０１４２】
パラメータ変更の方法は、上記の方法を組み合わせてもよい。ただし、本発明のパラメータ変更の方法は、上記の方法に限定されない。
【０１４３】
図１６は、本実施形態に係るデータ出力装置の動作の第１の変形例を説明するフローチャートである。なお、図１６において図４に示した動作と同様の処理は同じ符号を付し、説明を省略する。第１の変形例では、ステップＳ１０３とステップＳ１０４との間にステップＳ３０が挿入されている。
【０１４４】
ステップＳ３０では、バッファ情報保持部１４で保持している情報がバッファ情報保持部１４によって所定の規則に基づきリセットされる（リセットステップ）。例えば、最後にデータ蓄積量を保持した後に所定の時間が経過した場合に、バッファ情報保持部１４で保持している情報を削除する。本実施例では、ステップＳ３０はＳ１０３の後に実行されるが、Ｓ１０３の前、Ｓ１０４の後でもよく、またＳ１０３〜Ｓ１０９の処理と並行して実行されてもよい。
【０１４５】
保持情報のリセットは、例えば図１７に示すようにして行われる。図１７は、本実施形態に係るデータ出力装置の動作の第１の変形例における保持情報のリセットの第１の例Ｓ３０Ａを示すフローチャートである。
【０１４６】
まず、バッファ情報保持部１４によって保持されている全ての保持情報について、保持期間を検査したか否か判断される（ステップＳ３０１）。全ての保持情報を検査している場合（ステップＳ３０１でＹＥＳ）、保持情報のリセットの処理（Ｓ３０）を終了する。
【０１４７】
検査していない保持情報がある場合（ステップＳ３０１でＮＯ）、バッファ情報保持部１４によって保持されている一つの保持情報について、保持期間が所定の保持期間閾値より短いか否か判断される（ステップＳ３０２）。一つの保持情報の保持期間が保持期間閾値より短い場合（ステップＳ３０２でＹＥＳ）、当該保持情報の検査を終了しＳ３０１へ戻る。
【０１４８】
一つの保持情報の保持期間が保持期間閾値以上である場合（ステップＳ３０２でＮＯ）、当該保持情報を消去しＳ３０１に戻る。このようにして、全ての保持情報を検査する。これにより、保持している全ての保持情報について、保持期間が所定の保持期間閾値よりも長い場合は消去される。
【０１４９】
図１８は、本実施形態に係るデータ出力装置の動作の第１の変形例における保持情報のリセットの第２の例Ｓ３０Ｂを示すフローチャートである。
【０１５０】
まず、バッファ情報保持部１４に保持している保持情報のうち、未検査で最も古い情報が取り出される（ステップＳ３１１）。取り出された一つの保持情報について、保持期間が所定の保持期間閾値より短いか否か判断される（ステップＳ３１２）。
【０１５１】
取り出された一つの保持情報の保持期間が所定の保持期間閾値よりも短い場合（ステップＳ３１２でＹＥＳ）は、保持情報のリセットの処理（Ｓ３０）を終了する。取り出された一つの保持情報の保持期間が保持期間閾値以上である場合（ステップＳ３０２でＮＯ）、当該保持情報を消去しＳ３１１に戻る。
【０１５２】
この例では、第１の例と異なり、全ての保持情報の保持期間を検査する必要が無い。しかし、ステップＳ３１１において、未検査で最も古い保持情報を取り出さなければならないため、バッファ情報保持部１４によって、あらかじめ保持情報を保持情報の時刻情報順に並べて保持していることが好ましい。
【０１５３】
また、保持情報のリセット（Ｓ３０）の第２の例とは逆に、未検査で最新の保持情報から保持期間を検査し、所定の保持期間閾値よりも古い保持情報を検出したところで、当該保持情報よりも古い保持情報を全て消去してもよい。
【０１５４】
図１９は、本実施形態に係るデータ出力装置の動作の第２の変形例を説明するフローチャートである。なお、図１９において図４に示した動作と同様の処理は同じ符号を付し、説明を省略する。第２の変形例では、バッファ情報保持ステップにおいて、バッファ制御処理後の情報の保持する処理（ステップＳ１０９）に変えて、バッファ制御処理後の情報で保持情報を更新する処理（ステップＳ１０９Ａ）を行う。
【０１５５】
ステップＳ１０８の後、バッファ処理制御後の情報でバッファ情報保持部１４によって保持されている情報が更新される（ステップＳ１０９Ａ）。具体的には、バッファ情報保持部１４によってすでに保持している情報のうち最も古い保持情報を消去し、ステップＳ１０８のバッファ処理制御後の保持情報を保持する。
【０１５６】
引き続いて、本実施形態における効果について説明する。
【０１５７】
本実施形態によれば、データの挿入後においてバッファに蓄積されたデータ蓄積量を保持し、新たにデータを挿入する際に、バッファ情報保持部１４によって保持されたデータ蓄積量であって前回のデータ挿入後に保持されたデータ蓄積量に基づいて、新たに挿入するデータ量を決定する。これにより、再びバッファアンダーフローが発生しないように、挿入するデータ量を適切に設定することができる。よって、バッファアンダーフローの発生する頻度を低減することができる。
【０１５８】
本実施形態によれば、データの廃棄後においてバッファに蓄積されたデータ蓄積量を保持し、新たにデータを廃棄する際に、バッファ情報保持部１４によって保持されたデータ蓄積量であって前回のデータ廃棄後に保持されたデータ蓄積量に基づいて、新たに廃棄するデータ量を決定する。これにより、再びバッファオーバーフローが発生しないように、廃棄するデータ量を適切に設定することができる。よって、バッファオーバーフローの発生する頻度を低減することができる。
【０１５９】
本実施形態によれば、データの廃棄後及び挿入後においてバッファに蓄積されたデータ蓄積量を保持し、新たにデータを廃棄又は挿入する際に、バッファ情報保持部１４によって保持されたデータ蓄積量であって前回の廃棄後又は挿入後に保持されたデータ蓄積量と前回のバッファ制御ステップにおける処理がデータの挿入か廃棄かを示す情報とに基づいて、新たに廃棄又は挿入するデータ量を決定する。例えば、データを廃棄後、廃棄量が多かったためにバッファアンダーフローが検出された場合に、前回のデータ挿入後のデータ蓄積量と直近のバッファ制御がデータの廃棄であった旨の情報とに基づいて、再びバッファオーバーフロー及びバッファアンダーフローが発生しないように、挿入するデータ量を適切に設定することができる。また例えば、データを挿入後、挿入量が多かったためにバッファオーバーフローが発生した場合に、前回のデータ廃棄後のデータ蓄積量と直近のバッファ制御がデータの挿入であった旨の情報とに基づいて、再びバッファオーバーフロー及びバッファアンダーフローが発生しないように、廃棄するデータ量を適切に設定することができる。よって、バッファオーバーフロー及びバッファアンダーフローの発生する頻度を低減することができる。
【０１６０】
本実施形態では、バッファアンダーフローに陥ったと判断されると、バッファの蓄積量の下限値、バッファからデータを出力するか否か判定する閾値等のバッファパラメータを変更することとなる。これにより、バッファアンダーフローの発生する頻度を更に低減することができる。
【０１６１】
本実施形態では、バッファオーバーフローに陥ったと判断されると、バッファの蓄積量の上限値、バッファからデータを出力するか否か判定する閾値等のバッファパラメータを変更することとなる。これにより、バッファオーバーフローの発生する頻度を更に低減することができる。
【０１６２】
本実施形態では、定常遅延が発生している場合に、バッファ内のデータを廃棄するので、定常遅延を解消することができる。
【０１６３】
本実施形態では、定常遅延が発生している場合に、バッファからデータを出力するか否か判定する閾値等のバッファパラメータを変更することとなる。これにより、バッファからデータを適切に出力することとなるので、定常遅延の発生を抑制することができる。
【０１６４】
本実施形態では、バッファ情報保持部１４が、最後にデータ蓄積量を保持した後に所定の時間が経過すると、保持している情報をリセットするので、データの廃棄量又は挿入量を決定するに当たって、古いデータ（データ蓄積量）に基づくことなく、適切なデータに基づいて、データ廃棄量又はデータ挿入量を決定することができる。
【０１６５】
本実施形態では、バッファ情報保持部１４が、データ蓄積量を保持する際に、すでに保持しているデータ蓄積量を更新するように保持するので、データの廃棄量又は挿入量を決定するに当たって、古いデータ（データ蓄積量）に基づくことなく、適切なデータに基づいて、データ廃棄量又はデータ挿入量を決定することができる。
【図面の簡単な説明】
【０１６６】
【図１】本実施形態に係るデータ出力装置の機能ブロック図である。
【図２】本実施形態に係るデータ出力装置が備えるバッファ情報保持部が保持している保持情報の例を示す。
【図３】本実施形態に係るデータ出力装置のハードウェア構成図である。
【図４】本実施形態に係るデータ出力装置の動作を説明するフローチャートである。
【図５】本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第１の例を示すフローチャートである。
【図６】本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第２の例を示すフローチャートである。
【図７】本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第３の例を示すフローチャートである。
【図８】本実施形態に係るデータ出力装置の動作におけるバッファ制御処理ステップの第４の例を示すフローチャートである。
【図９】本実施形態に係るデータ出力装置が備えるバッファ情報保持部１４によって保持されている情報の例を示す図である。
【図１０】本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ廃棄の第１の例を示すフローチャートである。
【図１１】本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ廃棄の第２の例を示すフローチャートである。
【図１２】本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ挿入の第１の例を示すフローチャートである。
【図１３】本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ挿入の第２の例を示すフローチャートである。
【図１４】本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ廃棄の第３の例を示すフローチャートである。
【図１５】本実施形態に係るデータ出力装置における通知された保持情報に基づくデータ挿入の第３の例を示すフローチャートである。
【図１６】本実施形態に係るデータ出力装置の動作の第１の変形例を説明するフローチャートである。
【図１７】本実施形態に係るデータ出力装置の動作の第１の変形例における保持情報のリセットの第１の例を示すフローチャートである。
【図１８】本実施形態に係るデータ出力装置の動作の第１の変形例における保持情報のリセットの第２の例を示すフローチャートである。
【図１９】本実施形態に係るデータ出力装置の動作の第２の変形例を説明するフローチャートである。
【符号の説明】
【０１６７】
１１…データ蓄積部、１２…蓄積量監視部、１３…バッファ制御部（バッファ制御手段）、１４…バッファ情報保持部（バッファ情報保持手段）。
【図１】
2008258847.tif 000003
【図２】
2008258847.tif 000004
【図３】
2008258847.tif 000005
【図４】
2008258847.tif 000006
【図５】
2008258847.tif 000007
【図６】
2008258847.tif 000008
【図７】
2008258847.tif 000009
【図８】
2008258847.tif 000010
【図９】
2008258847.tif 000011
【図１０】
2008258847.tif 000012
【図１１】
2008258847.tif 000013
【図１２】
2008258847.tif 000014
【図１３】
2008258847.tif 000015
【図１４】
2008258847.tif 000016
【図１５】
2008258847.tif 000017
【図１６】
2008258847.tif 000018
【図１７】
2008258847.tif 000019
【図１８】
2008258847.tif 000020
【図１９】
2008258847.tif 000021