(57)【要約】複数のビデオサンプルを有するビデオ情報をコーディングするための方法および装置が開示される。ビデオデータのためのブロックは、各ブロックについての量子化パラメータ（ＱＰ）に基づいてエンコーダによってコーディングされる。各ブロックに使用されるＱＰは、最大ＱＰ値によって制限され得る。バッファユニット中で現在占有されているビット数と、バッファユニットの現在の容量との間の比を示すバッファユニットのバッファフルネスが決定され得る。エンコーダは、決定されたバッファフルネスに基づいて、最大ＱＰのための調整値を決定し得る。ビデオデータのブロックをコーディングするための最大ＱＰを動的に調整することによって、量子化による歪みは、バッファユニットがオーバーフローすることまたは空になることを防ぎながら低減され得る。【選択図】図１１
2019512970.tif 000002
【特許請求の範囲】
【請求項１】
ビデオ情報をコーディングするための装置であって、
コーディングされたビデオ情報を記憶するように構成されたバッファユニットと、
ハードウェアプロセッサとを備え、前記プロセッサは、
前記バッファユニットのバッファフルネスを決定することと、前記バッファフルネスは、前記バッファユニット中で現在占有されているビット数と、前記バッファユニットの現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定することと、
前記バッファユニットの前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することと、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整することと、ここにおいて、前記調整された最大ＱＰ値は、前記ビデオ情報の前記現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の前記現在のブロックをコーディングすることと、
を行うように構成される、
装置。
【請求項２】
前記ハードウェアプロセッサは、前記バッファユニットの前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定するようにさらに構成され、前記デフォルトの調整値は０より大きい、請求項１に記載の装置。
【請求項３】
前記ハードウェアプロセッサは、前記デフォルトの調整値よりも高い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第２のフルネスしきい値より低い、請求項２に記載の装置。
【請求項４】
前記ハードウェアプロセッサは、前記デフォルトの調整値よりも低い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第１のフルネスしきい値より高い、請求項２に記載の装置。
【請求項５】
前記ハードウェアプロセッサは、ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定するようにさらに構成され、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、請求項１に記載の装置。
【請求項６】
前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、請求項１に記載の装置。
【請求項７】
前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、請求項１に記載の装置。
【請求項８】
前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、請求項１に記載の装置。
【請求項９】
前記バッファユニットは、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、請求項１に記載の装置。
【請求項１０】
ビデオ情報をコーディングするための方法であって、
コーディングされたビデオ情報を記憶するように構成されたバッファユニットのバッファフルネスを決定することと、前記バッファフルネスは、前記バッファユニット中で現在占有されているビット数と、前記バッファユニットの現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定することと、
前記バッファユニットの前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することと、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整することと、ここにおいて、前記調整された最大ＱＰ値は、前記ビデオ情報の前記現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の前記現在のブロックをコーディングすることと、
を備える、方法。
【請求項１１】
前記バッファユニットの前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定することをさらに備え、前記デフォルトの調整値は０より大きい、請求項１０に記載の方法。
【請求項１２】
前記デフォルトの調整値よりも高い値に前記調整値を設定することをさらに備え、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第２のフルネスしきい値より低い、請求項１１に記載の方法。
【請求項１３】
前記デフォルトの調整値よりも低い値に前記調整値を設定することをさらに備え、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第１のフルネスしきい値より高い、請求項１１に記載の方法。
【請求項１４】
ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定することをさらに備え、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１５】
前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１６】
前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１７】
前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１８】
前記バッファユニットは、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、請求項１０に記載の方法。
【請求項１９】
ビデオ情報をコーディングするための装置であって、
コーディングされたビデオ情報を記憶するためのバッファ手段と、
前記バッファ手段のバッファフルネスを決定するための手段と、前記バッファフルネスは、前記バッファ手段中で現在占有されているビット数と、前記バッファ手段の現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定するための手段と、
前記バッファ手段の前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定するための手段と、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整するための手段と、ここにおいて、前記調整された最大ＱＰ値は、前記ビデオ情報の前記現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の前記現在のブロックをコーディングするための手段と、
を備える、装置。
【請求項２０】
前記調整値を決定するための前記手段は、前記バッファ手段の前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定するように構成され、前記デフォルトの調整値は０より大きい、請求項１９に記載の装置。
【請求項２１】
前記調整値を決定するための前記手段は、前記デフォルトの調整値よりも高い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファ手段の前記バッファフルネスは前記第２のフルネスしきい値より低い、請求項２０に記載の装置。
【請求項２２】
前記調整値を決定するための前記手段は、前記デフォルトの調整値よりも低い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファ手段の前記バッファフルネスは前記第１のフルネスしきい値より高い、請求項２０に記載の装置。
【請求項２３】
ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定するための手段をさらに備え、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２４】
前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２５】
前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２６】
前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２７】
前記バッファ手段は、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、請求項１９に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、ビデオコーディングおよび圧縮の分野に関し、具体的には、ディスプレイリンクを介した送信のためのビデオの圧縮に関する。
【背景技術】
【０００２】
[0002]デジタルビデオ機能は、デジタルテレビ、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、デスクトップモニタ、デジタルカメラ、デジタル記録デバイス、デジタルメディアプレーヤ、ビデオゲームデバイス、ビデオゲーム機、セルラまたは衛星無線電話、ビデオ電話会議デバイス、等を含む、幅広い範囲のディスプレイに組み込まれることができる。ディスプレイリンクは、適切なソースデバイスにディスプレイを接続するために使用される。ディスプレイリンクの帯域幅要件は、ディスプレイの解像度に比例し、そのため、高解像度ディスプレイは、広帯域幅ディスプレイリンクを要求する。いくつかのディスプレイリンクは、高解像度ディスプレイをサポートする帯域幅を有さない。より小さい帯域幅のディスプレイリンクが高解像度ディスプレイにデジタルビデオを提供するために使用されることができるように帯域幅要件を緩和するために、ビデオ圧縮が使用され得る。
【発明の概要】
【０００３】
[0003]本開示のシステム、方法、デバイスは各々、いくつかの革新的な態様を有し、それらのどの１つをとっても、単独で本明細書で開示される所望の属性に対して責任を担うものではない。
【０００４】
[0004]一態様では、ビデオ情報のディスプレイストリーム圧縮における最大量子化パラメータ（ＱＰ）値を決定するための方法が提供される。方法は、ビデオ情報のブロックをコーディングするために使用されるバッファユニットにおいて利用可能なビット数を決定することを備える。方法はさらに、ビデオ情報の前のブロックをコーディングするのに費やされたビット数に基づいて導かれた複雑度値を決定することを備える。方法はさらに、バッファユニットにおいて利用可能なビット数に基づいて、および／または決定された複雑度値に基づいて、現在のブロックについての最大ＱＰ値のための調整値を決定することを備える。
【０００５】
[0005]いくつかの実施形態では、ビデオ情報をコーディングするための装置が提供される。装置は、コーディングされたビデオ情報を記憶するように構成されたバッファユニットを備える。装置はさらに、バッファユニットのバッファフルネス（buffer fullness：バッファ充足率）を決定するように構成されたハードウェアプロセッサを備え、該バッファフルネスは、バッファユニット中で現在占有されているビット数と、バッファユニットの現在の容量との間の比を示す。ハードウェアプロセッサはさらに、初期最大量子化パラメータ（ＱＰ）値を決定するように構成される。ハードウェアプロセッサはさらに、バッファユニットの決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定するように構成される。ハードウェアプロセッサはさらに、決定された調整値を使用して初期最大ＱＰ値を調整するように構成され、ここにおいて、該調整された最大ＱＰ値は、ビデオ情報の現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する。ハードウェアプロセッサはさらに、ディスプレイまたは送信のためにビデオデータビットストリームを形成するためのＱＰ値に基づいて、該ＱＰ値が調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の現在のブロックをコーディングするように構成される。
【０００６】
[0006]いくつかの実施形態では、ビデオ情報をコーディングするための方法が提供される。方法は、コーディングされたビデオ情報を記憶するように構成されたバッファユニットのバッファフルネスを決定することを備え、該バッファフルネスは、バッファユニット中で現在占有されているビット数と、バッファユニットの現在の容量との間の比を示す。方法はさらに、初期最大量子化パラメータ（ＱＰ）値を決定することを備える。方法はさらに、バッファユニットの決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することを備える。方法はさらに、決定された調整値を使用して初期最大ＱＰ値を調整することを備え、ここにおいて、該調整された最大ＱＰ値は、ビデオ情報の現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する。方法はさらに、ディスプレイまたは送信のためにビデオデータビットストリームを形成するためのＱＰ値に基づいて、該ＱＰ値が調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の現在のブロックをコーディングすることを備える。
【０００７】
[0007]いくつかの実施形態では、ビデオ情報をコーディングするための装置が提供される。装置は、コーディングされたビデオ情報を記憶するためのバッファ手段を備える。装置はさらに、バッファ手段のバッファフルネスを決定するための手段を備え、該バッファフルネスは、バッファ手段中で現在占有されているビット数と、バッファ手段の現在の容量との間の比を示す。装置はさらに、初期最大量子化パラメータ（ＱＰ）値を決定するための手段を備える。装置はさらに、バッファ手段の決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定するための手段を備える。装置はさらに、決定された調整値を使用して初期最大ＱＰ値を調整するための手段を備え、ここにおいて、該調整された最大ＱＰ値は、ビデオ情報の現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する。装置はさらに、ディスプレイまたは送信のためにビデオデータビットストリームを形成するためのＱＰ値に基づいて、該ＱＰ値が調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の現在のブロックをコーディングするための手段を備える。
【図面の簡単な説明】
【０００８】
【図１Ａ】本開示で説明される態様にしたがった技法を利用し得る実例的なビデオ符号化および復号システムを例示するブロック図である。
【図１Ｂ】本開示で説明される態様にしたがった技法を実行し得る別の実例的なビデオ符号化および復号システムを例示するブロック図である。
【図２Ａ】本開示で説明される態様したがった技法を実施し得る実例的なビデオエンコーダを例示するブロック図である。
【図２Ｂ】本開示で説明される態様にしたがった技法を実施し得る実例的なビデオデコーダを例示するブロック図である。
【図３】デルタサイズユニット可変長コーディング（ＤＳＵ−ＶＬＣ）を使用するビデオデータの実例的なコーディングの機能ブロック図を示す。
【図４】いくつかの実施形態にしたがった、ビデオデータの所与のＰ×Ｑブロックのサンプルを複数のサンプルベクトル（グループ）に区分化する例を例示する。
【図５】Ｋ個のしきい値を使用してｄｉｆｆＢｉｔｓをＫ＋１範囲にセグメント化することによって、ＱｐＡｄｊを決定する実例的な方法を例示するグラフを図示する。
【図６】デフォルトの方法および方法Ｐ１についてのｄｉｆｆＢｉｔｓの関数としてのデルタＱｐの関係を例示するグラフを図示する。
【図７】いくつかの実施形態にしたがった、デフォルトの方法、方法Ｑ１、および方法Ｑ２についてのｄｉｆｆＢｉｔｓの関数としてのデルタＱｐの関係を例示するグラフを図示する。
【図８Ａ】低複雑度画像データと高複雑度画像データとの混合を有する実例的な画像を例示する。
【図８Ｂ】図８Ａの画像の異なる空間エリアをコーディングする際にエンコーダによって使用され得るＱＰ値をマッピングする実例的なＱＰマップを例示し、ここで最大ＱＰ値は固定されている。
【図８Ｃ】図８Ａの画像の異なる空間エリアをコーディングする際にエンコーダによって使用され得るＱＰ値をマッピングする実例的なＱＰマップを例示し、ここで最大ＱＰ値は動的に調整される。
【図９】バッファフルネス（ＢＦ）の異なる範囲に対するオフセットデルタ値を選ぶための実例的なスキームのグラフを図示する。
【図１０】バッファフルネス（ＢＦ）の異なる範囲に対するオフセットデルタ値を選ぶための実例的なスキームのグラフを例示する。
【図１１】ビデオデータのブロックをコーディングするための最大ＱＰ値を調整することについての実例的なプロセスのフローチャートを図示する。
【詳細な説明】
【０００９】
[0022]一般に、本開示は、ディスプレイストリームを圧縮するために使用されるような技法といった、ビデオ圧縮技法を向上させる方法に関する。より具体的には、本開示は、量子化パラメータ（ＱＰ）調整値を計算するための適切な技法の選択を介してＱＰの更新を改善するためのシステムおよび方法に関する。
【００１０】
[0023]ある特定の実施形態が本明細書ではディスプレイストリーム圧縮（ＤＳＣ）規格のコンテキストで説明されるけれども、本明細書で開示されるシステムおよび方法は、いずれの適したビデオコーディング規格にも適用可能であり得る。たとえば、本明細書で開示される実施形態は、以下の規格：国際電気通信連合（ＩＴＵ）電気通信標準化部門（ＩＴＵ−Ｔ）Ｈ．２６１、国際標準化機構／国際電気標準会議（ＩＳＯ／ＩＥＣ）ＭＰＥＧ−１（Moving Picture Experts Group-1）ビジュアル、ＩＴＵ−Ｔ  Ｈ．２６２即ちＩＳＯ／ＩＥＣ  ＭＰＥＧ−２ビジュアル、ＩＴＵ−Ｔ  Ｈ．２６３、ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４ビジュアル、（ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４  ＡＶＣとしても知られている）ＩＴＵ−Ｔ  Ｈ．２６４、高効率ビデオコーディング（ＨＥＶＣ）、およびそのような規格のあらゆる拡張版、のうちの１つまたは複数に適用可能であり得る。本明細書で説明される技法は、バッファモデルを組み込む規格またはコーディング技法に特に適用可能であり得る。様々な実施形態において、固定ビットレート（ＣＢＲ）または可変ビットレート（ＶＢＲ）バッファモデルが利用され得る。また、本開示で説明される技法は、将来開発される規格の一部になり得る。言い換えると、本開示で説明される技法は、前に開発されたビデオコーディング規格、現在開発中のビデオコーディング規格、および来たるビデオコーディング規格に適用可能であり得る。
【００１１】
[0024]ＶＥＳＡ（Video Electronics Standards Association）によって最近になって完成された３：１ディスプレイストリーム圧縮（ＤＳＣ）ｖ.１０ソリューション世代は、特に４Ｋのような高解像度ディスプレイについての、将来のモバイルマーケットの要件を行使する（drive）のに不十分である。したがって、将来の需要に対処するために、ＶＥＳＡは、圧縮比４：１以上をターゲットとする次世代ＤＳＣソリューションを開発するために、ＣｆＴ（call for technology）をリリースした。
【００１２】
[0025]一般に、ＤＳＣコーダは、低コストで固定レートの、視覚的にロスレスの圧縮を提供する。コーダは、（ブロックサイズＰ×Ｑを用いる）ブロックベースの手法に基づいて設計され、多数のコーディングモードにより構成されている。たとえば、各ブロックに利用可能なコーディングオプションは、変換（たとえば、ＤＣＴ、アダマール）、ブロック予測、ＤＰＣＭ、パターン、中間点予測（ＭＰＰ：mid-point prediction）および中間点予測フォールバック（ＭＰＰＦ）モードである。いくつかのコーディングモードが、異なるタイプのコンテンツまたは画像を効果的に圧縮するためにコーダにおいて使用される。たとえば、テキスト画像が、パターンモードによって効果的に圧縮され得るのに対し、自然画は、変換モードによって効果的にキャプチャされ得る。
【００１３】
[0026]各ブロックが、モードのレートと歪みとの両方を検討することによって各ブロックにとって最良のモードを選択することを目指すレート制御メカニズムに基づいて、複数のコーディングモードから１つのコーディングモードを選び得る。レート制御メカニズムは、バッファモデルによってサポートされており、バッファ（たとえば、バッファユニット）が、アンダーフロー（０よりも少ないビットがバッファにある）、またはオーバーフロー（バッファサイズが設定された最大サイズを超えて拡大してしまっている）の状態に決してならないことが、コデックの設計要件である。
【００１４】
[0027]ビデオコーディング方法は、前に計算されたＱＰ値をＱＰ調整値で更新することによって、ＱＰ値を計算し得る。ＱＰ調整値は、前ブロックと現在のブロックとの間の差分、たとえば、前ブロックをコーディングするのに要求されたビットと現在のブロックをコーディングするためのターゲットビット数との間の差分、に基づいて計算され得る。
【００１５】
[0028]しかしながら、従来の技法によって決定されるＱＰ調整値は、結果としてコーディング非効率をもたらし得るか、またはある特定の状況下で顕著なアーティファクトを引き起こし得る。たとえば、ＱＰ調整値を決定するための従来の技法は、画像の平坦領域から複雑領域への遷移に十分な程にはアグレッシブでないことがある（たとえば、ＱＰ調整値は、結果として顕著なアーティファクトが無いより良好なコーディング効率をもたらすだろう、より所望のＱＰ調整値よりも小さいことがある）。平坦領域および複雑領域の概念は、以下でより詳細に説明される。
【００１６】
[0029]加えて、バッファのフルネスが空である、またはフルであるしきい値内であるとき、ＱＰ調整値を計算するための従来の技法は、過度にアグレッシブであり得、これは、結果としてデコーダによって再構築される画像においてアーティファクトを引き起こす。たとえば、従来の技法によって計算されるＱＰ調整値は、再構築された画像においてアーティファクトが顕著であることにマスクする（mask）だろう、より所望のＱＰ調整値よりも大きいことがある。
【００１７】
[0030]したがって、本開示の態様は、少なくとも上で示された問題を解決することを対象としている。ある特定の態様では、これは、上で示された問題に関連付けられ得るコンディションの検出または決定、および該検出されたコンディション下でＱＰ調整値を計算するための１つまたは複数の代替技法を適用することを介して達成され得る。
【００１８】
ビデオコーディング規格
[0031]ビデオ画像、ＴＶ画像、静止画像、またはビデオレコーダもしくはコンピュータによって生成された画像のようなデジタル画像は、水平線状および垂直線状に配列されたピクセルまたはサンプルを含み得る。単一画像におけるピクセル数は通常、数万である。各ピクセルは通常、輝度およびクロミナンス情報を含む。圧縮なしでは、画像エンコーダから画像デコーダに伝達されるべき情報の膨大な量が、リアルタイムの画像送信を実現困難にするだろう。送信されるべき情報量を低減するために、ＪＰＥＧ、ＭＰＥＧ、およびＨ．２６３規格のような複数の異なる圧縮方法が開発されてきた。
【００１９】
[0032]ビデオコーディング規格には、ＩＴＵ−Ｔ  Ｈ．２６１、ＩＳＯ／ＩＥＣ  ＭＰＥＧ−１ビジュアル、ＩＴＵ−Ｔ  Ｈ．２６２即ちＩＳＯ／ＩＥＣ  ＭＰＥＧ−２ビジュアル、ＩＴＵ−Ｔ  Ｈ．２６３、ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４ビジュアル、（ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４  ＡＶＣとしても知られている）ＩＴＵ−Ｔ  Ｈ．２６４、およびＨＥＶＣが、該規格の拡張版を含めて、挙げられる。
【００２０】
[0033]加えて、ビデオコーディング規格、すなわちＤＳＣ、は、ＶＥＳＡによって開発されてきた。ＤＳＣ規格は、ディスプレイリンクを介した送信のためにビデオを圧縮することができるビデオ圧縮規格である。ディスプレイの解像度が増加するにつれ、ディスプレイを駆動するために要求されるビデオデータの帯域幅が相応して増加する。いくつかのディスプレイリンクは、そのような解像度のためのディスプレイにビデオデータの全てを送信するための帯域幅を有さないことがある。したがって、ＤＳＣ規格は、ディスプレイリンクを介した相互動作可能で視覚的にロスレスな圧縮のための圧縮規格を規定する。
【００２１】
[0034]ＤＳＣ規格は、Ｈ．２６４およびＨＥＶＣのような他のビデオコーディング規格とは異なる。ＤＳＣは、フレーム内圧縮を含むが、フレーム間圧縮は含まず、これは、ビデオデータをコーディングする際に時間情報がＤＳＣ規格によって使用されないことがあることを意味する。対照的に、他のビデオコーディング規格は、それらのビデオコーディング技法においてフレーム間圧縮を用い得る。
【００２２】
ビデオコーディングシステム
[0035]新規のシステム、装置、および方法の様々な態様が、添付の図面を参照して以下でより十分に説明される。しかしながら、本開示は、多くの異なる形態で具現化され得、本開示全体を通して提示されるいずれの特定の構造または機能にも限定されるとは解釈されるべきではない。むしろ、これらの態様は、本開示が徹底的で完全になるように提供されており、当業者に本開示の範囲を十分に伝達することになる。本明細書における教示に基づいて、本開示の範囲が、本明細書で開示される新規のシステム、装置、および方法のいずれの態様も、本開示のいずれの他の態様からも独立して実施されようと本開示のいずれの他の態様と組み合わせられようと、カバーするように意図されていることを当業者は認識するべきである。たとえば、いずれの数の本明細書で述べられる態様を使用しても、装置は実装され得る、または方法は実施され得る。加えて、本開示の範囲は、本明細書で述べられる本開示の様々な態様に加えて、またはそれ以外に、他の構造、機能性、または構造と機能性を使用して実施されるような装置または方法をカバーするように意図されている。本明細書で開示されるいずれの態様も請求項の１つまたは複数の要素によって具現化され得ることは理解されるべきである。
【００２３】
[0036]特定の態様が本明細書で説明されるけれども、これらの態様の多くのバリエーションおよび置換が、本開示の範囲内に含まれる。好まれる態様のいくつかの利益および利点に言及されるけれども、本開示の範囲は、特定の利益、使用、または目的に限定されるように意図されていない。むしろ、本開示の態様は、異なるワイヤレス技術、システム構成、ネットワーク、および送信プロトコルに広く適用可能であるように意図されており、それらのうちのいくつかは、好まれる態様の以下の説明において、および図において、例として例示される。詳細な説明および図面は単に、限定ではなく本開示を例示するものであり、本開示の範囲は、添付の請求項およびそれらの均等物によって定義される。
【００２４】
[0037]添付の図面は例を例示する。添付の図面において参照番号によって示される要素は、以下の説明において同様の参照番号によって示される要素に対応する。本開示では、順序を示す言葉（たとえば、「第１の」、「第２の」、「第３の」、等）で始まる名前を有する要素は、該要素が特定の順序を有することを必ずしも含意しない。むしろ、そのような順序を示す言葉は単に、同じまたは同様のタイプの異なる要素を指すように使用される。
【００２５】
[0038]図１Ａは、本開示で説明される態様にしたがった技法を利用し得る実例的なビデオコーディングシステム１０を例示するブロック図である。本明細書で説明されて使用される場合、「ビデオコーダ」または「コーダ」という用語は総称して、ビデオエンコーダとビデオデコーダとの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は総称して、ビデオ符号化およびビデオ復号を指し得る。ビデオエンコーダおよびビデオデコーダに加えて、本願で説明される態様は、トランスコーダ（たとえば、ビットストリームを復号し、別のビットストリームを再符号化することができるデバイス）およびミドルボックス（たとえば、ビットストリームを修正、変換、および／または別の形で操作することができるデバイス）のような他の関連デバイスに拡張され得る。
【００２６】
[0039]図１Ａで図示されているように、ビデオコーディングシステム１０は、宛先デバイス１４によって後の時間に復号されるべき符号化されたビデオデータを生成するソースデバイス１２を含む。図１Ａの例では、ソースデバイス１２および宛先デバイス１４は、別個のデバイスを構成する。しかしながら、図１Ｂの例で図示されるように、ソースデバイス１２および宛先デバイス１４が同じデバイス上にあり得る、または同じデバイスの一部であり得ることに留意されたい。
【００２７】
[0040]図１Ａを再度参照すると、ソースデバイス１２および宛先デバイス１４は、それぞれ、デスクトップコンピュータ、ノートブック（たとえば、ラップトップ）コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンのような電話ハンドセット、いわゆる「スマート」パッド、テレビ、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲーム機、車載コンピュータ、ビデオストリーミングデバイス、アイウェアのような、エンティティ（たとえば、人間、動物、および／または別の制御されるデバイス）によってウェアラブルな（または、エンティティに取り外し可能に取り付けられる）デバイスおよび／またはエンティティ内に配置されている、取り込まれている、または消費されること（consumed）ができるウェアラブルなコンピュータ、デバイス、または装置、ならびに／あるいは同様のものを含む幅広い範囲のデバイスのうちのいずれも備え得る。様々な実施形態において、ソースデバイス１２および宛先デバイス１４は、ワイヤレス通信のために装備され得る。
【００２８】
[0041]宛先デバイス１４は、復号されるべき符号化されたビデオデータを、リンク１６を介して、受信し得る。リンク１６は、ソースデバイス１２から宛先デバイス１４に符号化されたビデオデータを移動させる能力を有するいずれのタイプの媒体またはデバイスも備え得る。図１Ａの例では、リンク１６は、ソースデバイス１２が宛先デバイス１４に符号化されたビデオデータをリアルタイムに送信することを可能にする通信媒体を備え得る。符号化されたビデオデータは、ワイヤレス通信プロトコルのような通信規格にしたがって変調され、宛先デバイス１４に送信され得る。通信媒体は、無線周波数（ＲＦ）スペクトルまたは１つまたは複数の物理伝送線のような、あらゆるワイヤレスまたは有線通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットといったグローバルネットワークのような、パケットベースのネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス１２から宛先デバイス１４への通信を容易にするのに役立ち得るいずれの他の機器も含み得る。
【００２９】
[0042]図１Ａの例では、ソースデバイス１２は、ビデオソース１８、ビデオエンコーダ２０、および出力インターフェース２２を含む。いくつかのケースでは、出力インターフェース２２は、変調器／復調器（モデム）および／または送信機を含み得る。ソースデバイス１２においてビデオソース１８は、ビデオカメラといったビデオキャプチャデバイス、前にキャプチャされたビデオを含むビデオアーカイブ、ビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェース、および／またはソースビデオとしてコンピュータグラフィックデータを生成するためのコンピュータグラフィックシステムのようなソース、あるいはそのようなソースの組合せを含み得る。一例として、ビデオソース１８がビデオカメラである場合、ソースデバイス１２および宛先デバイス１４は、図１Ｂの例で例示されているような、いわゆる「カメラ付電話」または「ビデオ電話」を形成し得る。しかしながら、本開示で説明される技法は、ビデオコーディング全般に適用可能であり得、ワイヤレスおよび／または有線アプリケーションに適用され得る。
【００３０】
[0043]キャプチャされた、前にキャプチャされた、またはコンピュータにより生成されたビデオは、ビデオエンコーダ２０によって符号化され得る。符号化されたビデオデータは、ソースデバイス１２の出力インターフェース２２を介して、宛先デバイス１４に送信され得る。符号化されたビデオデータはまた（または、代わりとして）、復号および／または再生のための宛先デバイス１４または他のデバイスによる後のアクセスのために、記憶デバイス３１上に記憶され得る。図１Ａおよび図１Ｂで例示されているビデオエンコーダ２０は、図２Ａで例示されるビデオエンコーダ２０または本明細書で説明されるいずれの他のビデオエンコーダも備え得る。
【００３１】
[0044]図１Ａの例では、宛先デバイス１４は、入力インターフェース２８、ビデオデコーダ３０、およびディスプレイデバイス３２を含む。いくつかのケースでは、入力インターフェース２８は、受信機および／またはモデムを含み得る。宛先デバイス１４の入力インターフェース２８は、リンク１６を介しておよび／または記憶デバイス３１から符号化されたビデオデータを受信し得る。リンク１６を介して通信されるまたは記憶デバイス３１上で提供される符号化されたビデオデータは、ビデオデータを復号する際にビデオデコーダ３０のようなビデオデコーダによって使用される、ビデオエンコーダ２０によって生成される様々なシンタックス要素を含み得る。そのようなシンタックス要素は、通信媒体上で送信される、記憶媒体上に記憶される、またはファイルサーバに記憶される符号化されたビデオデータとともに含まれ得る。図１Ａおよび図１Ｂで例示されているビデオデコーダ３０は、図２Ｂで例示されるビデオデコーダ３０または本明細書で説明されるいずれの他のビデオデコーダも備え得る。
【００３２】
[0045]ディスプレイデバイス３２は、宛先デバイス１４と統合され得るか、または宛先デバイス１４の外部にあり得る。いくつかの例では、宛先デバイス１４は、統合されたディスプレイデバイスを含み得、また外部のディスプレイデバイスとインターフェース接続するように構成され得る。他の例では、宛先デバイス１４は、ディスプレイデバイスであり得る。一般にディスプレイデバイス３２は、ユーザに復号されたビデオデータをディスプレイし、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイ、有機発光ダイオード（ＯＬＥＤ）ディスプレイ、または別のタイプのディスプレイデバイスのような、様々なディスプレイデバイスのいずれも備え得る。
【００３３】
[0046]関連する態様で、図１Ｂは、例となるビデオコーディングシステム１０’を図示しており、ここにおいて、ソースデバイス１２および宛先デバイス１４は、デバイス１１上にあるか、またはデバイス１１の一部である。デバイス１１は、「スマート」フォンなどの電話ハンドセットまたは同様のものであり得る。デバイス１１は、ソースデバイス１２および宛先デバイス１４と有効な（operative）通信状態にある（オプションで存在する）プロセッサ／コントローラデバイス１３を含み得る。図１Ｂのビデオコーディングシステム１０’およびそのコンポーネントは、他の点では（otherwise）、図１Ａのビデオコーディングシステム１０およびそのコンポーネントと同様である。
【００３４】
[0047]ビデオエンコーダ２０およびビデオデコーダ３０は、ＤＳＣのような、ビデオ圧縮規格にしたがってオペレートし得る。代わりとして、ビデオエンコーダ２０およびビデオデコーダ３０は、ＭＰＥＧ―４、Ｐａｒｔ１０、ＡＶＣ、ＨＥＶＣ、またはそのような規格の拡張版とも代わりとして称されるＩＴＵ−Ｔ  Ｈ．２６４規格のような他の専有または工業規格にしたがってオペレートし得る。しかしながら、本開示の技法は、いずれの特定のコーディング規格にも限定されない。ビデオ圧縮規格の他の例は、ＭＰＥＧ−２およびＩＴＵ−Ｔ  Ｈ．２６３を含む。
【００３５】
[0048]図１Ａおよび図１Ｂの例では図示されていないけれども、ビデオエンコーダ２０およびビデオデコーダ３０は各々、オーディオエンコーダおよびデコーダと統合され得、共通のデータストリームまたは別個のデータストリームにおけるオーディオとビデオとの両方の符号化をハンドリングするために、適切なＭＵＸ−ＤＥＭＵＸユニットまたは他のハードウェアおよびソフトウェアを含み得る。適用可能な場合、いくつかの例では、ＭＵＸ−ＤＥＭＵＸユニットは、ＩＴＵ．Ｈ．２２３マルチプレクサプロトコル、またはユーザデータグラムプロトコル（ＵＤＰ）のような他のプロトコルに準拠し得る（conform to）。
【００３６】
[0049]ビデオエンコーダ２０およびビデオデコーダ３０は各々、１つまたは複数のマイクロプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリート論理回路、ソフトウェア、ハードウェア、ファームウェア、またはそれらのあらゆる組合せのような、様々な適したエンコーダ回路のうちのいずれとしても実装され得る。技法がソフトウェアにおいて部分的に実施されるとき、デバイスは、適した非一時的コンピュータ可読媒体にソフトウェアのための命令を記憶し、本開示の技法を実行するために、１つまたは複数のプロセッサを使用してハードウェアにおいて該命令を実行し得る。ビデオエンコーダ２０およびビデオデコーダ３０の各々は、１つまたは複数のエンコーダまたはデコーダに含まれ得、それらのどちらも、それぞれのデバイスにおける複合エンコーダ／デコーダ（combined encoder/decoder）の一部として統合され得る。
【００３７】
ビデオコーディングプロセス
[0050]上で簡単に言及されたように、ビデオエンコーダ２０は、ビデオデータを符号化する。ビデオデータは、１つまたは複数のピクチャを備え得る。ピクチャの各々は、ビデオの一部を形成する静止画像である。いくつかの事例では、ピクチャは、ビデオ「フレーム」と称され得る。ビデオエンコーダ２０がビデオデータを符号化するとき、ビデオエンコーダ２０は、ビットストリームを生成し得る。ビットストリームは、ビデオデータのコード化表現（coded representation）を形成するビットのシーケンスを含み得る。ビットストリームは、コーディングされたピクチャおよび関連データを含み得る。コーディングされたピクチャは、ピクチャのコード化表現である。
【００３８】
[0051]ビットストリームを生成するために、ビデオエンコーダ２０は、ビデオデータ中の各ピクチャに対して符号化オペレーションを実行し得る。ビデオエンコーダ２０がピクチャに対して符号化オペレーションを実行するとき、ビデオエンコーダ２０は、一連のコーディングされたピクチャおよび関連データを生成し得る。関連データは、ＱＰのようなコーディングパラメータのセットを含み得る。コーディングされたピクチャを生成するために、ビデオエンコーダ２０は、ピクチャを、サイズが等しいビデオブロックに区分化し得る。ビデオブロックは、サンプルの２次元アレイであり得る。コーディングパラメータは、ビデオデータの全てのブロックについてコーディングオプション（たとえば、コーディングモード）を定義し得る。コーディングオプションは、所望のレート−歪みパフォーマンスを達成するために選択され得る。
【００３９】
[0052]いくつかの例では、ビデオエンコーダ２０は、ピクチャを、複数のスライスに区分化し得る。スライスの各々は、画像（たとえば、フレーム）中の空間的に別々の領域を含み得、それは、画像またはフレーム中の残りの領域からの情報なしに独立して復号されることができる。各画像またはビデオフレームは、単一のスライスにおいて符号化され得るか、あるいは各画像またはビデオフレームは、いくつかのスライスにおいて符号化され得る。ＤＳＣでは、各スライスを符号化するために割り振られるターゲットビットは、略一定であり得る。ピクチャに対して符号化オペレーションを実行することの一部として、ビデオエンコーダ２０は、ピクチャの各スライスに対して符号化オペレーションを実行し得る。ビデオエンコーダ２０がスライスに対して符号化オペレーションを実行するとき、ビデオエンコーダ２０は、該スライスに関連付けられた符号化されたデータを生成し得る。スライスに関連付けられた符号化されたデータは、「コード化スライス（coded slice）」と称され得る。
【００４０】
ＤＳＣビデオエンコーダ
[0053]図２Ａは、本開示で説明される態様にしたがった技法を実施し得るビデオエンコーダ２０の例を例示するブロック図である。ビデオエンコーダ２０は、本開示の技法のうちのいくつかまたは全てを実行するように構成され得る。いくつかの例では、本開示で説明される技法は、ビデオエンコーダ２０の様々なコンポーネントの間で共有され得る。いくつかの例では、加えてまたは代わりとして、プロセッサ（図示せず）が、本開示で説明される技法のうちのいくつかまたは全てを実行するように構成され得る。
【００４１】
[0054]説明の目的で、本開示は、ビデオエンコーダ２０をＤＳＣコーディングのコンテキストで説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【００４２】
[0055]図２Ａの例では、ビデオエンコーダ２０は、複数の機能コンポーネントを含む。ビデオエンコーダ２０の機能コンポーネントは、色空間コンバータ１０５と、バッファ１１０と、平坦度検出器１１５と、レートコントローラ１２０と、予測器、量子化器、および再構築器コンポーネント１２５と、ラインバッファ１３０と、インデックスカラー履歴１３５と、エントロピーエンコーダ１４０と、サブストリームマルチプレクサ１４５と、レートバッファ１５０とを含む。他の例では、ビデオエンコーダ２０は、より多い、より少ない、または異なる機能コンポーネントを含み得る。
【００４３】
[0056]色空間コンバータ１０５は、入力された色空間を、コーディング実施において使用される色空間にコンバートし得る。たとえば、１つの実例的な実施形態では、入力されたビデオデータの色空間は、赤、緑、青（ＲＧＢ）色空間にあり、コーディングは、輝度Ｙ、クロミナンス緑Ｃｇ、およびクロミナンスオレンジＣｏ（ＹＣｇＣｏ）の色空間において実施される。色空間コンバージョンは、ビデオデータへの追加およびシフトを含む方法（複数を含む）によって実行され得る。他の色空間にある入力されたビデオデータが処理され得、他の色空間へのコンバージョンもまた実行され得ることに留意されたい。
【００４４】
[0057]関連する態様で、ビデオエンコーダ２０は、バッファ１１０、ラインバッファ１３０、および／またはレートバッファ１５０を含み得る。たとえば、バッファ１１０は、ビデオエンコーダ２０の他の部分によるバッファ１１０の使用より前に、色空間コンバートされたビデオデータを保持し得る。別の例では、ビデオデータは、ＲＧＢ色空間に記憶され得、色空間コンバージョンは、色空間コンバートされたデータはより多くのビットを要求し得るため、必要に応じて実行され得る。
【００４５】
[0058]レートバッファ１５０は、ビデオエンコーダ２０におけるレート制御メカニズムの一部として機能し得、これは、レートコントローラ１２０と関係して以下でより詳細に説明されることになる。各ブロックを符号化するのに費やされるビットは、ブロックの性質に基づいて極めて大きく（highly substantially）変動し得る。レートバッファ１５０は、圧縮されたビデオにおけるレートバリエーションを滑らかにすることができる。いくつかの実施形態では、ビットが固定ビットレートでバッファから取り出されるＣＢＲバッファモデルまたはオペレーションモードが用いられる。他の実施形態では、ビットが可変（非固定）ビットレートでバッファから取り出されるＶＢＲバッファモデルまたはオペレーションモードが用いられ得る。いくつかの実施形態では、ビデオエンコーダ２０は、（たとえば、ビットがバッファから取り出されるレートよりも高いレートで）ビットストリームに過度に多いビットを追加する場合、レートバッファ１５０はオーバーフローし得る。一方で、ビデオエンコーダ２０はまた、レートバッファ１５０のアンダーフローを防ぐために、十分なビットを追加する必要もあり得る。
【００４６】
[0059]ビデオデコーダ側では、ビットが、固定ビットレートでビデオデコーダ３０のレートバッファ１５５（以下でさらに詳細に説明される図２Ｂを参照）に追加され得、ビデオデコーダ３０は、ブロックごとに可変のビット数（variable numbers of bits）を取り除き得る。適当な復号を確実にするために、ビデオデコーダ３０のレートバッファ１５５は、圧縮されたビットストリームの復号中、「アンダーフロー」も「オーバーフロー」もするべきではない。
【００４７】
[0060]いくつかの実施形態では、バッファフルネス（ＢＦ）は、現在バッファ中にあるビット数を表す値ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ、およびレートバッファ１５０のサイズ、すなわち任意の時点におけるレートバッファ１５０に記憶されることができる最大ビット数、を表すＢｕｆｆｅｒＭａｘＳｉｚｅに基づいて定義され得る。ＢＦは、次の通りに計算され得る：
ＢＦ＝（（ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ＊１００）／ＢｕｆｆｅｒＭａｘＳｉｚｅ）
[0061]ＢＦを計算することに対する上記手法が単なる例であること、および、ＢＦが、特定の実装またはコンテキストに応じて、いずれの数の異なる方法でも計算され得ることに留意されたい。
【００４８】
[0062]平坦度検出器１１５は、ビデオデータ中の複雑な（すなわち、平坦でない）エリアからビデオデータ中の平坦な（すなわち、シンプルまたは均一の）エリアへの、および／または、その逆への変化を検出することができる。「複雑」および「平坦」という用語は概して、ビデオエンコーダ２０がビデオデータのそれぞれの領域を符号化する難しさを指すように本明細書では使用されることになる。したがって、複雑という用語は、本明細書で使用される場合、概して、ビデオデータの領域を、ビデオエンコーダ２０が符号化するには複雑であるものとして説明し、たとえば、テキスチャ化されたビデオデータ、高空間周波数、および／または符号化するには複雑である他の特徴を含み得る。平坦という用語は、本明細書で使用される場合、概して、ビデオデータの領域を、ビデオエンコーダ２０が符号化するのにはシンプルであるものとして説明し、たとえば、ビデオデータ中の滑らかな勾配、低空間周波数、および／または符号化するにはシンプルである他の特徴を含み得る。複雑領域から平坦領域への遷移は、符号化されたビデオデータ中の量子化アーティファクトを低減するために、ビデオエンコーダ２０によって使用され得る。具体的には、レートコントローラ１２０と、予測器、量子化器、および再構築器コンポーネント１２５とが、複雑領域から平坦領域への遷移が識別されるときに、そのような量子化アーティファクトを低減することができる。同様に、平坦領域から複雑領域への遷移は、現在のブロックをコーディングするために要求される予定レート（expected rate）を低減するためにＱＰを増加するよう、ビデオエンコーダ２０によって使用され得る。
【００４９】
[0063]レートコントローラ１２０は、コーディングパラメータ、たとえばＱＰ、のセットを決定する。ＱＰは、レートバッファ１５０がオーバーフローもアンダーフローもしないことを確実にするターゲットビットレートに対するピクチャ品質を最大にするために、レートバッファ１５０のバッファフルネスおよびビデオデータの画像アクティビティ（たとえば、複雑領域から平坦領域への遷移またはその逆）に基づいて、レートコントローラ１２０によって調整され得る。レートコントローラ１２０はまた、最適なレート歪みパフォーマンスを達成するために、ビデオデータのブロックごとに特定のコーディングオプション（たとえば、特定のモード）を選択する。レートコントローラ１２０は、再構築された画像の歪みを、それがビットレート制約を満たすように、すなわち実際のコーディングレート全体がターゲットビットレート内に収まるように、最小限にする。したがって、レートコントローラ１２０の１つの目的は、レート歪みパフォーマンスを最大にしながらレートに対する瞬間的および平均的制約を満たすために、たとえばＱＰ（複数を含む）、コーディングモード（複数を含む）等のコーディングパラメータのセットを決定することである。
【００５０】
[0064]予測器、量子化器、および再構築器コンポーネント１２５は、ビデオエンコーダ２０の少なくとも３つの符号化オペレーションを実行し得る。予測器、量子化器、および再構築器コンポーネント１２５は、複数の異なるモードで予測を実行し得る。１つの例となる予測モードは、中央値適応予測（median-adaptive prediction）の修正されたバージョンである。中央値適応予測は、ロスレスなＪＰＥＧ規格（ＪＰＥＧ−ＬＳ）によって実施され得る。予測器、量子化器、および再構築器コンポーネント１２５によって実行され得る中央値適応予測の修正されたバージョンは、３つの連続したサンプル値の並行予測を可能にし得る。別の例となる予測モードは、ブロック予測である。ブロック予測では、上の線または同じ線の左にある、前に再構築されたピクセルからサンプルが予測される。いくつかの実施形態では、ビデオエンコーダ２０およびビデオデコーダ３０は両方とも、ブロック予測の使用を決定するために、再構築されたピクセルに対して同一の探索を実行し得、そのため、ビットはブロック予測モードでは全く送られる必要はない。他の実施形態では、ビデオエンコーダ２０は、探索を実行し、ビデオデコーダ３０が別個の探索を実行する必要がないように、ビットストリームにおいてブロック予測ベクトルをシグナリングし得る。成分範囲（component range）の中間点を使用してサンプルが予測される中間点予測モードもまた実施され得る。中間点予測モードは、ワーストケースのサンプルにおいてさえも圧縮ビデオに要求されるビット数を制限すること（bounding）を可能にし得る。
【００５１】
[0065]予測器、量子化器、および再構築器コンポーネント１２５はまた、量子化も実行する。たとえば、量子化は、シフタを使用して実施され得る２の累乗量子化器（power-of-2 quantizer）を介して実施され得る。２の累乗量子化器の代わりに他の量子化技法が実施され得ることに留意されたい。予測器、量子化器、および再構築器コンポーネント１２５によって実行される量子化は、レートコントローラ１２０によって決定されるＱＰに基づき得る。最後に、予測器、量子化器、および再構築器コンポーネント１２５はまた、予測された値に逆量子化された残差を追加すること、およびその結果がサンプル値の有効範囲外にならないことを確実にすることを含む再構築を実行する。
【００５２】
[0066]予測器、量子化器、および再構築器コンポーネント１２５によって実行される予測、量子化、および再構築に対する上で説明された例となる手法が単なる例示であること、および他の手法が実施され得ることに留意されたい。予測器、量子化器、および再構築器コンポーネント１２５が、予測、量子化、および／または再構築を実行するためのサブコンポーネント（複数を含む）を含み得ることにも留意されたい。予測、量子化、および／または再構築が、予測器、量子化器、および再構築器コンポーネント１２５の代わりに、いくつかの別個のエンコーダコンポーネントによって実行され得ることにもさらに留意されたい。
【００５３】
[0067]ラインバッファ１３０は、予測器、量子化器、および再構築器コンポーネント１２５とインデックスカラー履歴１３５とが、バッファされたビデオデータを使用することできるように、予測器、量子化器、および再構築器コンポーネント１２５からの出力を保持する。インデックスカラー履歴１３５は、最近使用されたピクセル値を記憶する。これらの最近使用されたピクセル値は、専用シンタックスを介して、ビデオエンコーダ２０によって直接参照され得る。
【００５４】
[0068]エントロピーエンコーダ１４０は、インデックスカラー履歴１３５および平坦度検出器１１５によって識別された平坦度遷移に基づいて、予測器、量子化器、および再構築器コンポーネント１２５から受信された予測残差およびあらゆる他のデータ（たとえば、予測器、量子化器、および再構築器コンポーネント１２５によって識別されたインデックス）を符号化する。いくつかの例では、エントロピーエンコーダ１４０は、サブストリームエンコーダごとに１クロックあたり３つのサンプルを符号化し得る。サブストリームマルチプレクサ１４５は、ヘッダレスパケット多重化スキームに基づいて、ビットストリームを多重化し得る。これは、ビデオデコーダ３０が、３つのエントロピーデコーダを並行して稼働させることを可能にし、これは、１クロックあたり３ピクセルの復号を容易にする。サブストリームマルチプレクサ１４５は、パケットがビデオデコーダ３０によって効率的に復号されることができるようにパケット順序を最適化し得る。エントロピーコーディングに対する異なる手法が実施され得、これが、１クロックあたり２の累乗ピクセル（たとえば、２ピクセル／クロックまたは４ピクセル／クロック）の復号を容易にし得ることに留意されたい。
【００５５】
ＤＳＣビデオデコーダ
[0069]図２Ｂは、本開示で説明される態様にしたがった技法を実施し得るビデオデコーダ３０の例を例示するブロック図である。ビデオデコーダ３０は、本開示の技法のうちのいくつかまたは全てを実行するように構成され得る。いくつかの例では、本開示で説明される技法は、ビデオデコーダ３０の様々なコンポーネントの間で共有され得る。いくつかの例では、加えてまたは代わりとして、プロセッサ（図示せず）が、本開示で説明される技法のうちのいくつかまたは全てを実行するように構成され得る。
【００５６】
[0070]説明の目的で、本開示は、ビデオデコーダ３０をＤＳＣコーディングのコンテキストで説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【００５７】
[0071]図２Ｂの例では、ビデオデコーダ３０は、複数の機能コンポーネントを含む。ビデオデコーダ３０の機能コンポーネントは、レートバッファ１５５と、サブストリームデマルチプレクサ１６０と、エントロピーデコーダ１６５と、レートコントローラ１７０と、予測器、量子化器、および再構築器コンポーネント１７５と、インデックスカラー履歴１８０と、ラインバッファ１８５と、色空間コンバータ１９０とを含む。ビデオデコーダ３０の例示されているコンポーネントは、図２Ａにおけるビデオエンコーダ２０と関係して上で説明された対応するコンポーネントに類似する。このように、ビデオデコーダ３０のコンポーネントの各々は、上で説明されたようなビデオエンコーダ２０の対応するコンポーネントと同様の方式でオペレートし得る。
【００５８】
量子化パラメータ（ＱＰ）
[0072]上で説明されたように、エンコーダ２０の予測器、量子化器、および再構築器コンポーネント１２５は、ビデオデータのブロックにおいて歪みをもたらし得る量子化を実行し得る。歪みの量は、ブロックの量子化パラメータ（ＱＰ）によって制御され得る。たとえば、エンコーダ２０は、ブロックのビデオデータの色成分の値を量子化するための量子化ステップサイズを決定するために、ブロックについてのＱＰを使用し得る。いくつかの実施形態では、エンコーダ２０が各ＱＰについての量子化ステップサイズを記憶する代わりに、エンコーダ２０は、ＱＰの関数としてスケーリング行列を指定し得る。各ＱＰについての量子化ステップサイズは、スケーリング行列から導かれることができ、ここにおいて、該導かれた値は、必ずしも２の累乗であるわけではなく、たとえば、導かれた値は、２の累乗でない（non-power of two）こともあり得る。
【００５９】
[0073]ＤＳＣテストモデルのいくつかの実施形態では、輝度チャンネルについての最小および最大それぞれのＱＰは、８ｂｐｃのために、１６および５６に設定される。各輝度ＱＰに対して、オンザフライ（on the fly）で導かれ得るか、またはルックアップテーブルから推測され得る関連するクロミナンスＱＰが存在し得る。
【００６０】
スキップモード
[0074]ビデオデータの所与のブロックにおける単一の成分の全ての値が０である場合、エンコーダ２０は、スキップモードを使用してブロックを効果的にコーディングし得る。スキップモードコーディングのいくつかの実施形態では、エンコーダ２０は、デコーダ３０によって読み出され得る１ビットフラグをシグナリングし得、これは、現在のブロックが、スキップモードを使用してコーディングされているのか（全ての値が０である場合）、またはスキップモードではコーディングされていないか（ブロックにおける少なくとも１つの値が非０である場合）を示す。
【００６１】
デルタサイズユニット可変長コーディング
[0075]図３は、デルタサイズユニット可変長コーディング（ＤＳＵ−ＶＬＣ）を使用してビデオデータをコーディングする例を図示する。いくつかの実施形態では、エンコーダ２０は、（「グループ」とも称される）Ｋ長サンプルベクトル３０２の量子化された残差値を、コーディングされたビットのシーケンス３０６にコーディングするためにＤＳＵ−ＶＬＣプロセッサ３０４を使用し得る。コーディングされたビットのシーケンス３０６は、プレフィックス３０８およびサフィックス３１０を備え得、ここにおいて、サフィックス３１０は、複数のサフィックス部分を備える。ＤＳＵ−ＶＬＣプロセッサ３０４は、図２Ａで例示されたエントロピーエンコーダ１４０に対応し得る。本明細書で使用される場合、サンプルは、単一の色成分における値を指し得、たとえばＲＧＢ４４４では、各ピクセルは３つのサンプルを有する。
【００６２】
[0076]プレフィックス３０８は、サフィックス３１０のサフィックス部分の各々の残差値のサイズ（たとえばビット長）（該サイズはＢビットと表示される）を示す。いくつかの実施形態では、プレフィックス３０８は可変長であり得、単進コード（unary code）を使用してコーディングされ得る。サフィックス３１０は、サンプルベクトル３０２における全てのサンプルの実際の残差値を示す（たとえば、サフィックス３１０の各サフィックス部分は、サンプルベクトル３０２の１つのサンプルに対応し得る）。エンコーダ２０は、特定のフォーマット（たとえば２の補数）を使用しておよび各残差値に対して同じビット数（たとえばＢビット）を使用してサフィックス３１０を形成するために、サンプルベクトル３０２におけるＫ個全ての残差値をコーディングし得る。
【００６３】
[0077]例として、サンプルベクトル３０２が、値［１，−２，−１，０］をもつ４つのサンプルを備える場合、エンコーダ２０は、２の補数表現を使用してサンプルベクトル３０２の各々のサンプルをコーディングするためにＢ＝２ビットを必要とし得る。このように、プレフィックス３０８は、値Ｂ＝２の単進コードを表す値００１を有し得る。サフィックス３１０は、［０１，１０，１１，００］の値を有するサフィックス部分を備え得、それらはそれぞれ、Ｂ＝２ビットを使用してサンプルベクトル３０２のコーディングされたサンプル値の各々を表している。プレフィックス３０８を復号することであって、これは大抵単一のクロックサイクルで行われる、によって、デコーダ３０は、サフィックス３１０の４つ全てのサンプルを並行して復号できることがある。
【００６４】
ＤＳＣにおけるエントロピーコーディング
[0078]図４は、いくつかの実施形態にしたがった、ビデオデータの所与のＰ×Ｑブロックのサンプルを複数のサンプルベクトル（グループ）に区分化する例を例示する。図４で例示されているように、ブロック４０２は、１６個のサンプルを備える２×８ブロックであり得る。ブロック４０２の各サンプルは、ブロック４０２に対応するビデオデータの特定の色成分の量子化された残差値に対応し得る。サンプルがＤＳＵ−ＶＬＣプロセッサ３０４を使用してコーディングされる前に、エンコーダ２０は、サンプルを複数のサンプルベクトルに区分化し得る。たとえば、図４は、各々が４つのサンプルを備える４つのサンプルベクトル４０４（たとえば、サンプルベクトル４０４Ａ、４０４Ｂ、４０４Ｃ、および４０４Ｄ）に区分化されたブロック４０２の１６個のサンプルを例示している。ＤＳＵ−ＶＬＣプロセッサ３０４は、各々が（たとえば、図３で例示されたような）プレフィックスおよびサフィックスを有するコード（図示せず）を作り出すようにサンプルベクトル４０４Ａ−４０４Ｄをコーディングし得る。上で説明されたように、（図２Ｂで例示されたような）デコーダ３０は、コードの各々のプレフィクスおよびサフィックスを並行して復号できることがあり、これにより、デコーダ３０は、クロックサイクルごとに４つのサンプルを復号することが可能になる。
【００６５】
[0079]ブロック４０２のサンプルをグループに区分化するためにエンコーダ２０を使用することによって、クロックごとの複数のサンプルのスループットが、コーディングされたグループを復号するときにデコーダ３０によって達成され得る。図４は、ブロック４０２のサンプルがサンプルベクトル４０４に均一に区分化されることを例示しているものの、エンコーダ２０が、サンプルのブロックをＮ個のサンプルベクトルに均一にまたは不均一に区分化し得ることは理解される。均一グループ化方法では、Ｎ個全てのサンプルベクトル４０４が等しい数のサンプルを有することになる。一方で、各サンプルベクトル４０４におけるサンプルの数は、不均一グループ化方法を使用するとき、異なり得る。
【００６６】
[0080]いくつかの実施形態では、ブロック４０２の区分化が均一であるか、不均一であるかは、ブロック４０２に関連付けられたコーディングモードに基づき得る。たとえば、エンコーダ２０は、ブロック予測およびＤＰＣＭモードでは均一グループ化方法を使用し得るのに対し、変換モードでは不均一グループ化方法を使用し得る。
【００６７】
ＱＰ計算
[0081]いくつかの実施形態では、レートコントローラ１２０が、（ｃｕｒｒＱＰと表示される）ビデオデータの現在のブロックについてのＱＰを導き得る、または計算し得る。ＱＰを計算するための技法は、２０１５年４月１３日付で出願され、現在では米国出願公開第２０１５／０２９６２０６号として公開されている、米国出願第１４／６８５，４３０号において開示されており、これは、参照によって全体として本明細書に組み込まれている。そこで説明されているように、レートコントローラ１２０は、以下の数式を使用して、ビデオデータの前のブロック（たとえば、ビデオデータの、コーディング順序で前のブロック）のＱＰに基づいて、現在のブロックについてのＱＰ（ｃｕｒｒＱＰ）を導き得る：
ｃｕｒｒＱＰ＝ｐｒｅｖＱＰ＋ＱｐＡｄｊ＊（ｄｉｆｆＢｉｔｓ＞０？１：−１）
ここで、ｐｒｅｖＱＰは、前ブロックに関連付けられたＱＰであり、ｄｉｆｆＢｉｔｓは、ｐｒｅｖｉｏｕｓＢｌｏｃｋＢｉｔｓとｔａｒｇｅｔＢｉｔｓとの間の差分を表し、ＱｐＡｄｊは、ｄｉｆｆＢｉｔｓの大きさに基づいて計算されるＱＰオフセット値である。ｐｒｅｖｉｏｕｓＢｌｏｃｋＢｉｔｓは、前ブロックをコーディングするために使用されたビット数に対応するのに対し、ｔａｒｇｅｔＢｉｔｓは、現在のブロックを符号化するためのターゲットビット数に対応する。
【００６８】
[0082]上記数式で見られるように、ｐｒｅｖｉｏｕｓＢｌｏｃｋＢｉｔｓ＞ｔａｒｇｅｔＢｉｔｓであるとき、ｄｉｆｆＢｉｔｓは正であり、レートコントローラ１２０は、ｐｒｅｖＱＰにオフセットＱｐＡｄｊを加えることによって現在のブロックＱＰを導く。言い換えると、ＱＰ値は、ｐｒｅｖＱＰと比べて、減少することは許されない。ｐｒｅｖｉｏｕｓＢｌｏｃｋＢｉｔｓ＜ｔａｒｇｅｔＢｉｔｓであるとき、ｄｉｆｆＢｉｔｓは負であり、ｃｕｒｒＱＰは、ｐｒｅｖＱＰと比べて、増加することは許されない。
【００６９】
[0083]図５は、ｄｉｆｆＢｉｔｓの値に基づいてＱｐＡｄｊを決定する実例的な方法を例示するグラフを図示する。より具体的には、図５のチャートは、０から、方向５０２に増加するｄｉｆｆＢｉｔｓの値を表す横軸を図示する。ｄｉｆｆＢｉｔｓの値は、ｋ個のしきい値（たとえば、しきい値１、しきい値２、しきい値３．．．しきい値ｋ）を使用してｋ＋１個の範囲にセグメント化され、ここでｋは整数値である。たとえば、図５で例示されているような「範囲１」は、０と「しきい値１」との間のｄｉｆｆＢｉｔｓ値に対応し得るのに対し、「範囲２」は、「しきい値１」と「しきい値２」との間のｄｉｆｆＢｉｔｓ値に対応し、「範囲３」は、「しきい値２」と「しきい値３」との間のｄｉｆｆＢｉｔｓ値に対応し、「しきい値ｋ」を上回るｄｉｆｆＢｉｔｓ値に対応する「範囲ｋ＋１」まで、その後も同様に続く（and so forth）。
【００７０】
[0084]ｄｉｆｆＢｉｔｓ範囲（たとえば、範囲１、範囲２、．．．範囲ｋ＋１）の各々は、特定のＱｐＡｄｊ値（たとえば、ＱｐＡｄｊ１、ＱｐＡｄｊ２、．．．ＱｐＡｄｊｋ＋１）に関連付けられ得る。ＱｐＡｄｊ１〜ＱｐＡｄｊｋ＋１の値は、範囲が増加するにつれて増加し得る（たとえば、ＱｐＡｄｊ１≦ＱｐＡｄｊ２≦ＱｐＡｄｊ３．．．≦ＱｐＡｄｊｋ＋１）。このように、いくつかの実施形態では、レートコントローラ１２０は、ｄｉｆｆＢｉｔｓの大きさが増加するにつれてＱｐＡｄｊが単調に増加するような形で、ｄｉｆｆＢｉｔｓの関数としてオフセット値ＱｐＡｄｊを計算し得る。
【００７１】
[0085]一方で、ｄｉｆｆＢｉｔｓ＜＝０（図示せず）であるとき、ｄｉｆｆＢｉｔｓの絶対値は、ｊ個のしきい値を使用してｊ＋１個の範囲に分類され得、ここにおいて、ｊは整数値に対応する。加えて、特定のＱｐＡｄｊ値は、各範囲に関連付けられ得る。いくつかの実施形態では、ｊ＋１個の範囲の各々に関連付けられたＱｐＡｄｊ値は、ｄｉｆｆＢｉｔｓの絶対値が増加するにつれて増加し得る。本明細書で使用される際、ＱｐＡｄｊを計算するためのこの方法は、「デフォルトの方法」と称される。
【００７２】
[0086]さらに、いくつかの実施形態では、レートコントローラ１２０は、レートバッファ１５０（以下、バッファ１５０とも称される）の状態に基づいて、該バッファ１５０のアンダーフローおよびオーバーフローを防ぐために、ｃｕｒｒＱＰを調整し得る。バッファ１５０の状態は、バッファ１５０に記憶され得る総ビット数に対するバッファ１５０に現在記憶されているビット数を測定する、バッファフルネスＢＦの観点から表され得る。たとえば、いくつかの実施形態では、ＢＦがある特定のしきい値（たとえばＰ１）を超えるとき、レートコントローラ１２０は、固定のオフセット（たとえばｐ１）分だけｃｕｒｒＱＰをインクリメントすることによって、ｃｕｒｒＱＰ＋＝ｐ１になるように、ｃｕｒｒＱＰの値を調整し得る。一方で、ＢＦがある特定のしきい値（たとえばＱ１）を下回るとき、レートコントローラ１２０は、固定のオフセット（たとえばｑ１）分だけデクリメントすることによって、ｃｕｒｒＱＰ＋＝ｑ１になるように、ｃｕｒｒＱＰを調整し得る。いくつかの実施形態では、単一のしきい値Ｐ１（またはＱ１）の代わりに、レートコントローラ１２０は、複数のバッファフルネスしきい値に基づいて、ｃｕｒｒＱＰを調整し得、ここにおいて、各バッファフルネスしきい値は、ｃｕｒｒＱＰを調整するための異なる対応するオフセット値に関連付けられ得る。
【００７３】
[0087]いくつかの実施形態では、レートコントローラ１２０はさらに、ビデオデータの現在のブロックが、複雑領域から平坦領域への遷移、または平坦領域に関連付けられているか否かに基づいて、ｃｕｒｒＱＰ値を決定し得る。たとえば、平坦度検出器１１５は、複雑領域から平坦領域への遷移がビデオデータのブロック内で生じると決定し得るか、またはビデオデータのブロックが平坦領域を備えると決定する。平坦度検出器１１５による決定に応答して、レートコントローラ１２０は、ｃｕｒｒＱＰを所定の値に設定し得る。
【００７４】
ＤＳＣにおけるＱＰ更新モード
[0088]ＤＳＣでは、バッファ１５０のバッファフルネスに基づいて、ビデオデータの現在のブロックのＱＰを更新するために、レートコントローラ１２０によって様々なモードが使用され得る。たとえば、いくつかの実施形態では、バッファ１５０のバッファフルネスがある特定のしきい値に下回る、またはしきい値を超えるとき、ＱｐＡｄｊを計算するためにデフォルトの方法を使用する代わりに、ｃｕｒｒＱＰを決定するようＱｐＡｄｊを計算するために、レートコントローラ１２０によって様々な方法が使用され得る。
【００７５】
バッファがしきい値制限を超える
[0089]上で説明されたように、いくつかの実施形態では、レートコントローラ１２０は、バッファ１５０のバッファフルネスの量に応じて、様々に（differently）ＱｐＡｄｊの値を計算し得る。たとえば、いくつかの実施形態では、レートコントローラ１２０は、単調な降順で配列されたｎ個のしきい値に対応し得る、複数のしきい値［Ｐ１、Ｐ２、．．．Ｐｎ］を維持し得る。加えて、レートコントローラ１２０は、ＱｐＡｄｊを計算するために使用され得る複数のそれぞれの方法［方法Ｐ１、方法Ｐ２、．．．方法Ｐｎ］を維持し得る。レートコントローラ１２０は、バッファ１５０のバッファフルネスと複数のしきい値との間の関係に基づいて、ＱｐＡｄｊを計算するための特定の方法を選択し得る。たとえば、いくつかの実施形態では、
Ｉｆ（バッファフルネス＞＝Ｐ１）
方法Ｐ１がＱｐＡｄｊを計算するために使用される；
ｅｌｓｅ  ｉｆ（バッファフルネス＞＝Ｐ２）
方法Ｐ２がＱｐＡｄｊを計算するために使用される；
…
ｅｌｓｅ  ｉｆ（バッファフルネス＞＝Ｐｎ）
方法ＰｎがＱｐＡｄｊを計算するために使用される；
である。
【００７６】
[0090]いくつかの実施形態では、ｄｉｆｆＢｉｔｓ＞０であるとき、ｄｉｆｆＢｉｔｓの所与の値について、方法Ｐ１を使用して計算されたＱｐＡｄｊの値＞＝方法Ｐ２を使用して計算されたＱｐＡｄｊ値＞＝．．．方法Ｐｎを使用して計算されたＱｐＡｄｊ値＞＝デフォルトの方法を使用して計算されたＱｐＡｄｊ値である。
【００７７】
[0091]一方で、ｄｉｆｆＢｉｔｓ＜０であるとき、方法Ｐ１を使用して計算されたＱｐＡｄｊ値＜＝方法Ｐ２を使用して計算されたＱｐＡｄｊの値＜＝．．．方法Ｐｎを使用して計算されたＱｐＡｄｊ値＜＝デフォルトの方法を使用して計算されたＱｐＡｄｊ値である。言い換えると、いくつかの実施形態にしたがうと、レートコントローラ１２０によって計算されるとき、バッファ１５０がフルである程、ｃｕｒｒＱＰの値はより高くなり得る。
【００７８】
[0092]図６は、デフォルトの方法および（たとえば、バッファフルネスのしきい値の量に対応する）方法Ｐ１についてのｄｉｆｆＢｉｔｓの関数としてのデルタＱｐの関係を例示するグラフを図示する。本明細書で使用される場合、デルタＱＰは概して、ｃｕｒｒＱＰがｐｒｅｖＱＰとどれ程異なっているかを指す。たとえば、デルタＱＰは、ＱｐＡｄｊ＊（ｄｉｆｆＢｉｔｓ＞０？１：−１）として定義され得る。言い換えると、ＱｐＡｄｊは、デルタＱＰの絶対値と考えられ得る。いくつかの実施形態では、デルタＱＰは、ｄｉｆｆＢｉｔｓが正の値を有するときに正になり、ｄｉｆｆＢｉｔｓが負の値を有するときに負になる。
【００７９】
[0093]図６のグラフは、ｄｉｆｆＢｉｔｓの値に対応するｘ軸、およびデルタＱＰの値に対応するｙ軸を図示する。グラフは、バッファ１５０のバッファフルネスがＰ１しきい値より小さいときに応答する、デフォルトの関数を使用してレートコントローラ１２０によって決定されるようなデルタＱＰに対応する第１の低い方の（lower）曲線６０２を図示する。加えて、グラフは、バッファ１５０のバッファフルネスがＰ１しきい値を満たすか、またはＰ１しきい値を超えるがＰ２しきい値よりも小さいときに使用される、方法Ｐ１を使用してレートコントローラ１２０によって決定されるようなデルタＱＰに対応する第２の上方の曲線６０４を図示する。第１の低い方の曲線６０２および第２の上方の曲線６０４は、実質的に階段関数の形態にあり得る。
【００８０】
[0094]図６のグラフで例示されているように、０よりも大きいｄｉｆｆＢｉｔｓの所与の値について、方法Ｐ１を使用してレートコントローラ１２０によって計算されるようなＱｐＡｄｊの値は、デフォルトの方法を使用して計算されるようなＱｐＡｄｊの値以上になる。一方で、ｄｉｆｆＢｉｔｓ＜＝０では、方法Ｐ１を使用して計算されるような（デルタＱＰの絶対値である）ＱｐＡｄｊの値は、デフォルトの方法を使用して計算されるようなＱｐＡｄｊの値より小さくなる。言い換えると、ｄｉｆｆＢｉｔｓの所与の値について、デルタＱＰ（および結果としてｃｕｒｒＱＰ）は概して、バッファ１５０のバッファフルネスがＰ１のしきい値の量を超えるときは、バッファフルネスがＰ１を超えないときと比べてより高くなる。
【００８１】
バッファがしきい値制限を下回る
[0095]いくつかの実施形態では、レートコントローラ１２０は、バッファ１５０のバッファフルネスが１つまたは複数のしきい値未満であることに基づいて、ＱｐＡｄｊ（および結果としてｃｕｒｒＱＰ）の値を計算するために異なる方法を使用し得る。たとえば、いくつかの実施形態では、レートコントローラ１２０は、単調な昇順で配列されたｍ個のしきい値［Ｑ１、Ｑ２、．．．Ｑｍ］、およびＱｐＡｄｊを計算するためにレートコントローラ１２０によって使用されるそれぞれの方法［方法Ｑ１、方法Ｑ２、．．．方法Ｑｍ］を維持し得る。たとえば、いくつかの実施形態では、レートコントローラ１２０は、以下に基づいて、ＱｐＡｄｊを計算するための特定の方法を選択し得る：
Ｉｆ（バッファフルネス＜＝Ｑ１）
方法Ｑ１がＱｐＡｄｊを計算するために使用される；
ｅｌｓｅ  ｉｆ（バッファフルネス＜＝Ｑ２）
方法Ｑ２がＱｐＡｄｊを計算するために使用される；
…
ｅｌｓｅ  ｉｆ（バッファフルネス＜＝Ｑｍ）
方法ＱｍがＱｐＡｄｊを計算するために使用される；
【００８２】
[0096]いくつかの実施形態では、ｄｉｆｆＢｉｔｓ＞０の所与の値について、デフォルトの方法を使用して計算されたＱｐＡｄｊ値＞＝方法Ｑ１を使用して計算されたＱｐＡｄｊ値＞＝．．．方法Ｑ２を使用して計算されたＱｐＡｄｊ値＞＝方法Ｑｍを使用して計算されたＱｐＡｄｊ値である。一方で、ｄｉｆｆＢｉｔｓ＜＝０の所与の値について、デフォルトの方法を使用して計算されたＱｐＡｄｊの値＜＝方法Ｑ１を使用して計算されたＱｐＡｄｊ値＜＝．．．方法Ｑ２を使用して計算されたＱｐＡｄｊ値＜＝方法Ｑｍを使用して計算されたＱｐＡｄｊ値である。言い換えると、いくつかの実施形態にしたがうと、レートコントローラ１２０によって計算されるとき、バッファ１５０のバッファフルネスが低い程、ｃｕｒｒＱＰの値はより低くなり得る。
【００８３】
[0097]図７は、いくつかの実施形態にしたがった、デフォルトの方法、方法Ｑ１、および方法Ｑ２についてのｄｉｆｆＢｉｔｓの関数としてのデルタＱｐの関係を例示するグラフを図示する。図６にあるように、図７で例示されているグラフは、ｄｉｆｆＢｉｔｓの値に対応するｘ軸、およびデルタＱＰの値に対応するｙ軸を図示する。グラフは、バッファ１５０のバッファフルネスがＱ１しきい値より大きいときに使用される、デフォルトの関数を使用して決定されるようなデルタＱＰに対応する（実線で例示されている）第１の上方の曲線７０２を図示する。グラフはさらに、方法Ｑ１および方法Ｑ２を使用して決定されるようなデルタＱＰにそれぞれ対応する、（破線として例示されている）第２の中間曲線７０４および（点線として例示されている）第３の低い方の曲線７０６を図示する。上で説明されたように、レートコントローラ１２０は、バッファ１５０のバッファフルネスがＱ１しきい値とＱ２しきい値との間にあるとき、ＱｐＡｄｊ（および故にデルタＱＰ）を計算するために方法Ｑ１を使用し得る。レートコントローラは、バッファフルネスがＱ２しきい値とＱ３しきい値との間にあるとき、デルタＱＰを計算するために方法Ｑ２を使用し得る。図６と同様に、曲線７０２、７０４、および７０６の各々は、実質的に階級関数の形状にあり得る。
【００８４】
[0098]図７のグラフで例示されているように、０よりも大きいｄｉｆｆＢｉｔｓの所与の値について、方法Ｑ１を使用してレートコントローラ１２０によって計算されるようなＱｐＡｄｊの値は、デフォルトの方法を使用して計算されるようなＱｐＡｄｊの値以下になり、方法Ｑ２を使用して計算されるＱｐＡｄｊの値以上になる。一方で、ｄｉｆｆＢｉｔｓ＜＝０では、方法Ｑ１を使用して計算されるような（デルタＱＰの絶対値である）ＱｐＡｄｊの値は、デフォルトの方法を使用して計算されるようなＱｐＡｄｊの値以下になり、方法Ｑ２を使用して計算されるＱｐＡｄｊの値以上になる。言い換えると、ｄｉｆｆＢｉｔｓの所与の値について、デルタＱＰ（および結果としてｃｕｒｒＱＰ）は概して、バッファ１５０のバッファフルネスがＱ１のしきい値の量より低いときは、バッファフルネスがＱ１のしきい値の量より高いときと比べてより低くなる。
【００８５】
バッファフルネス計算
[0099]いくつかの実施形態では、バッファ１５０の状態に基づいてビデオデータの現在のブロックのＱＰ値（ｃｕｒｒＱＰ）を調整できるために、レートコントローラ１２０がバッファ１５０についての正確なバッファフルネス（ＢＦ）値を決定できることが必要であり得る。いくつかの実施形態では、バッファ１５０において利用可能な最大ビット数は、エンコーダ２０がビデオデータのブロックを符号化すると、調整され得る。たとえば、スライスの終了時、バッファ１５０のサイズ（たとえば、スライスの終了時にバッファ１５０に含まれることができる最大ビット数）がｍａｘＢｕｆｆｅｒＢｉｔｓＡｔＳｌｉｃｅＥｎｄによって表示され得るような形で、バッファ１５０のサイズは、スライス中の何らかの固定数のブロックをコーディングした後に一定レートで線形に減少し得る。このように、ビデオデータの所与のスライスの終了時に、バッファ１５０のＢＦは、ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ＝ｍａｘＢｕｆｆｅｒＢｉｔｓＡｔＳｌｉｃｅＥｎｄである場合、１００％である。
【００８６】
[0100]特定の時間におけるバッファ１５０のサイズは、ｂｕｆＡｄｊＳｉｚｅによって表示され得、スライス中のビデオデータのブロックがコーディングされるにつれてバッファ１５０のサイズが減少するレートは、ｂｕｆｆｅｒＲａｔｅＲｅｄｕｃｔｉｏｎＰｅｒＢｌｏｃｋによって表示され得る。このように、レートコントローラ１２０は、
ＢＦ＝（（（ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ＊１００）＋（ｂｕｆＡｄｊＳｉｚｅ＞＞１））／ｂｕｆＡｄｊＳｉｚｅ）  （１）
の通りにバッファ１５０のＢＦを計算し得、ここで、ｂｕｆｆｅｒＡｄｊＳｉｚｅ＝ＢｕｆｆｅｒＭａｘＳｉｚｅ-ｏｆｆｓｅｔ，ｏｆｆｓｅｔ＝（（ｂｕｆｆｅｒＲａｔｅＲｅｄｕｃｔｉｏｎＰｅｒＢｌｏｃｋ）＊（ｎｕｍＢｌｏｃｋｓＣｏｄｅｄ-ｎｕｍＢｌｏｃｋｓＴｈ））である。本明細書で使用される場合、ｎｕｍＢｌｏｃｋｓＣｏｄｅｄは、それまでのスライス中の、エンコーダ２０によってコーディングされたブロックの数を表し得、ｎｕｍＢｌｏｃｋｓＴｈは、エンコーダ２０によって設定可能であるしきい値パラメータに対応し得る。
【００８７】
[0101]いくつかの実施形態では、バッファ１５０は、コーディングされるビデオデータのブロックごとにそのサイズを線形に調整し得る。いくつかの実施形態では、バッファ１５０がブロックごとにそのサイズを調整したレートは、ｂｕｆｆｅｒＲａｔｅＲｅｄｕｃｔｉｏｎＰｅｒＢｌｏｃｋ＝ｄｉｆｆＳｉｚｅ／（ＴｏｔａｌｎｕｍｂｅｒｏｆＢｌｏｃｋｓＩｎＳｌｉｃｅ-ｎｕｍＢｌｏｃｋｓＴｈ）の通りに計算され得、ここで、ｄｉｆｆＳｉｚｅ＝ＢｕｆｆｅｒＭａｘＳｉｚｅ−ｍａｘＢｕｆｆｅｒＢｉｔｓＡｔＳｌｉｃｅＥｎｄ、即ちバッファ１５０の最大サイズとスライスの終了時におけるバッファ１５０の最大サイズとの間の総差分、である。参照によって全体として本明細書に組み込まれている、２０１５年８月６日付で出願された米国出願第１４／８２０，４０４号は、バッファフルネス（ＢＦ）を計算するための方法が説明されることを説明している。
【００８８】
[0102]いくつかの実施形態では、レートコントローラ２１０は、ハードウェアおよび／またはソフトウェアを通じて、上記数式（１）に基づいてバッファ１５０のバッファフルネスを計算し得る。しかしながら、数式（１）は、スライス中の現在のブロックの位置に応じて数式（１）の分母における値が変化する除算演算を含み、これは、該計算を潜在的にコスト多大に（expensive）させる。バッファフルネスを計算するための代替の方法が、参照によって全体として本明細書に組み込まれている２０１６年３月８日付で出願された米国出願第第６２／３０５，３１４号で提案されている。いくつかの実施形態では、分母がｂｕｆＡｄｊＳｉｚｅからＢｕｆｆｅｒＭａｘＳｉｚｅに変更されるように、数式（１）において、分母から分子にオフセット値が移動される。ＢｕｆｆｅｒＭａｘＳｉｚｅが、スライス中の現在のブロックの位置に関わらず一定のままであるので、結果として得られる数式は、レートコントローラ１２０にとって計算するのにずっと簡単であり得る。このように、数式（１）は、
ＢＦ＝（（（ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ＋ｏｆｆｓｅｔ）＊１００）＋（ＢｕｆｆｅｒＭａｘＳｉｚｅ＞＞１））／ＢｕｆｆｅｒＭａｘＳｉｚｅ）  （２）
の通りに修正され得る。
【００８９】
[0103]数式（２）におけるオフセット値は、上で説明されたものと同じ方法で計算され得る。数式（２）における分母は、スライス全体で一定値であるため、レートコントローラ１２０は、数式（２）における分母を予め算出し得、それは、（たとえば、ルックアップテーブル（ＬＵＴ）または他のデータ構造のような）コデックのパラメータセットに記憶され得る。
【００９０】
最大ＱＰ値を設定する
[0104]いくつかの実施形態では、レートコントローラ１２０は、ビデオデータの現在のブロックについてのＱＰ値を計算するとき、最大ＱＰ値を強要し得る。（ＱＰしきい値（threshold QP value）とも称される）最大ＱＰ値は、ビデオデータをコーディングするときの、量子化ロスまたは歪みの許容可能な量を示す上限の役割を果たし得る。たとえば、いくつかの実施形態では、レートコントローラ１２０は、上で説明された技法のうちの任意のものを使用して、ビデオデータの現在のブロックについてのｃｕｒｒＱＰ値を計算し得る。レートコントローラ１２０はその後、該計算されたｃｕｒｒＱＰを最大ＱＰ値と比較し得る。該計算されたｃｕｒｒＱＰが最大ＱＰ値を超える場合、レートコントローラ１２０は、最大ＱＰ値以下になるようにｃｕｒｒＱＰを設定し得る。
【００９１】
[0105]いくつかの実施形態では、レートコントローラ１２０によって強要された最大ＱＰは、所定の固定値に設定され得る。しかしながら、最大ＱＰを単一の固定値に設定することは、全てのタイプのビデオコンテンツに対して効果的に機能しないことがある。いくつかの実施形態では、固定の最大ＱＰ値を強要するレートコントローラ１２０は、高いＱＰ値が不必要であるとき、ビデオデータのブロックについてのＱＰ値を無理に（artificially）高め得る。たとえば、バッファ１５０が空に近いケースでは、レートコントローラ１２０がより低い最大ＱＰ値を強要することが望ましくあることがある。このことは、量子化に起因したロスまたは歪みを低減し、バッファ１５０が、ビデオデータのブロックをコーディングするためにエンコーダ２０によって使用されるビット数を増加させることによって空になることを防ぐこととなることがある。一方で、バッファ１５０がフルに近い場合、ビデオデータのブロックをコーディングするためにエンコーダ２０によって使用されるビット数を低減することによる潜在的なオーバーフローを防ぐために、強要された最大ＱＰ値がより高くなる必要があり得る。
【００９２】
[0106]いくつかの実施形態では、バッファ１５０は、エンコーダ２０によって符号化されたコーディングされたビデオデータを受信および記憶し、該コーディングされたビデオデータをビデオデータビットストリームに出力する。このように、いずれの所与の時間でも、バッファ１５０のビット数は、コーディングされたビデオデータ（たとえば、エンコーダ２０によって既にコーディングされているが、未だビデオデータビットストリーム中に出力されていないビデオデータ）によって占有され得る。上で説明されたように、バッファ１５０のバッファフルネスは、バッファ１５０中で現在占有されているビット数と、バッファ１５０の現在の容量との比を示し得る。バッファ１５０のバッファフルネスは、ビデオデータの前のブロックをコーディングするためにエンコーダ２０によって使用されたビット数と、バッファ１５０に記憶されたコーディングされたビデオデータがビットストリームに出力されるレートとの間の関係に基づいて変化し得る。
【００９３】
[0107]いくつかの実施形態では、エンコーダ２０は、バッファ１５０がビデオデータビットストリームを形成するために特定の（たとえば、一定）レートでビデオデータのビットを出力するように構成されるよう、固定レートコデックを使用してビデオデータをコーディングし得る。たとえば、エンコーダがビデオデータのブロックをコーディングできる時間期間中に、バッファ１５０は、ビットストリームに固定ビット数を出力するように構成され得る。したがって、エンコーダ２０が平均して固定ビット数より多いビット数を使用してビデオデータのブロックをコーディングしている場合、バッファ１５０は、満タンになり始め（たとえば、バッファフルネスを増加させ）、潜在的にオーバーフローし得る。一方で、エンコーダ２０が平均して固定ビット数より少ないビット数を使用してビデオデータのブロックをコーディングしている場合、バッファ１５０は、バッファフルネスが減少し得、潜在的に空になり得る。
【００９４】
[0108]いくつかの実施形態では、レートコントローラ１２０は、「オンザフライ」で（たとえば、オペレーション中に）最大ＱＰ値を調整するように構成され得る。オペレーション中に最大ＱＰ値を動的に調整できることによって、エンコーダ２０は、レートバッファ１５０がオーバーフローもせず、空にもならないことを確実にしながら、より低い平均的ＱＰ値（結果として、量子化を通じたロスが少なくなる）を使用してビデオデータをコーディングできる。
【００９５】
[0109]図８Ａは、低複雑度画像データと高複雑度画像データとの混合を有する実例的な画像８００を例示する。たとえば、図８Ａで例示されているように、画像８００は、実質的に平坦なバックグラウンド８０２（低複雑度）および複雑なフォアグラウンド８０４（高複雑度）を有する。
【００９６】
[0110]図８Ｂは、固定の最大ＱＰ値を使用して、画像８００の異なる空間エリアをコーディングする際にエンコーダ２０によって使用され得るＱＰ値を図示するＱＰ値マップ８１０を例示する。ＱＰ値マップ８１０は、画像８００の空間エリアであって、エンコーダ２０が、それらのエリアに関連付けられたビデオデータのブロックをコーディングする際により高いＱＰ値を使用する空間エリア、に対応するより明るいエリア８１２を含み得る。加えて、ＱＰ値マップ８１０の減光（dimmer）エリア８１４は、画像８００の空間エリアであって、エンコーダ２０が、画像８００のエリアをコーディングすることにおいてより低いＱＰ値を使用する空間エリアに対応する。たとえば、ＱＰ値マップ８１０のより明るいエリア８１２は、画像８００の複雑なフォアグラウンド８０４に対応し得、より高いＱＰ値を使用してエンコーダ２０によってコーディングされ得、これは、より大量の量子化ロスに繋がる。一方で、ＱＰ値マップ８１０の減光エリア８１４は、画像８００の実質的に平坦なバックグラウンド８０２に対応し得、ここで、エンコーダ２０は、ビデオデータをコーディングするためにより低いＱＰ値を使用する。
【００９７】
[0111]図８Ｃは、画像８００の異なる空間エリアをコーディングする際にエンコーダ２０によって使用され得るＱＰ値を示す別のＱＰ値マップ８２０を例示し、ここで、エンコーダ２０は、最大ＱＰ値を動的に調整できる。図８Ｃで例示されているように、最大ＱＰ値を動的に調整することによって、画像全体にわたった平均ＱＰ値が低減され得、これが、潜在的に画像品質を向上させ、歪みを低減する。たとえば、画像の（ＱＰ値マップ８１０のエリア８１２に対応する）エリア８２２をコーディングする際にエンコーダ２０によって使用されるＱＰ値は、（たとえば、図８Ｂで例示されたような）固定の最大ＱＰ値が使用されるときと比べて、エンコーダ２０が最大ＱＰ値を動的に調整できるときは、より低くなり得る。
【００９８】
[0112]いくつかの実施形態では、最大ＱＰは、輝度チャンネルにのみ対応する値を指し得るか、または輝度チャンネルとクロミナンスチャンネルとの両方を指し得る。代わりとして、最大ＱＰは、マスタ最大ＱＰ値であって、そこから、それぞれの輝度およびクロミナンス最大ＱＰ値が、（たとえば、ルックアップテーブル（ＬＵＴ）または他のデータ構造から）計算または推測されるマスタ最大ＱＰ値を指し得る。
【００９９】
[0113]いくつかの実施形態では、レートコントローラ１２０は、（たとえば、バッファ１５０のバッファフルネスとして測定される）バッファ１５０中のビット数に基づいて、最大ＱＰを調整し得る。いくつかの実施形態では、レートコントローラ１２０は、ビデオデータの前にコーディングされたブロックの複雑度情報（たとえば、複雑度値）に基づいて、最大ＱＰを計算し得る。たとえば、ビデオデータの前にコーディングされたブロックが高複雑度値を有する場合、レートコントローラ１２０は、ビデデータの後続のブロックが、より少ないビットを使用してコーディングされ得るように、最大ＱＰ値をより高い値に調整し得る。一方、ビデオデータの前にコーディングされたブロックが低複雑度値を有する場合、レートコントローラ１２０は、ビデオデータの後続のブロックがより多いビット数を使用してコーディングされ得るように、より低い値に最大ＱＰ値を調整し得る。いくつかの実施形態では、レートコントローラ１２０は、ビデオデータの１つまたは複数の前にコーディングされたブロックの複雑度値が１つまたは複数のしきい値を満たすかどうかの決定に基づいて、ビデオデータの現在のブロックをコーディングするための最大ＱＰ値を調整すべき量を決定し得る。いくつかの実施形態では、複雑度情報は、平坦度検出器１１５によって計算され得る。
【０１００】
[0114]いくつかの実施形態では、ビデオデータのブロックについての複雑度値は、たとえばアダマール、ＤＣＴ、および／または同様のものといった変換を使用して、ブロックから導かれ得る。いくつかの実施形態では、ブロックについての複雑度値は、ブロックをコーディングするのに費やされるビット数、ならびにブロックに関連付けられたＱＰ値およびモード情報（たとえば、ブロックをコーディングするために使用されるコーディングモード）に基づいて導かれ得る。
【０１０１】
[0115]いくつかの実施形態では、ビデオデータの１つまたは複数の前にコーディングされたブロックの複雑度値は、バッファ１５０のバッファフルネスから推測され得る。たとえば、いくつかの実施形態では、バッファ１５０のバッファフルネスが高い（たとえば、バッファ１５０がほとんどフルである）とき、１つまたは複数の前にコーディングされたブロックは高複雑度値を有することが推測され得る。一方で、バッファ１５０のバッファフルネスが低いとき、１つまたは複数の前にコーディングされたブロックは低複雑度値を有することが推測され得る。
【０１０２】
[0116]いくつかの実施形態では、レートコントローラ１２０は、最大ＱＰ値を調整するために、バッファ１５０の状態（たとえば、バッファフルネス）と前にコーディングされたブロックの複雑度値との両方を使用し得る。
【０１０３】
[0117]いくつかの実施形態にしたがうと、ｍａｘＦｉｘｅｄＱｐが、エンコーダ２０によって維持されるデフォルトの最大ＱＰ値（たとえば、所定の値）を表し得るのに対し、ｍａｘＣａｌＱｐは、（たとえば、レートコントローラ１２０によって）調整された最大ＱＰ値を表し得る。δは、ｍａｘＣａｌＱｐを決定するようにｍａｘＦｉｘｅｄＱｐを調整するために使用されるオフセット値（調整値とも称される）を表示する。すなわち、調整された最大ＱＰは、ｍａｘＣａｌＱｐ＝ｍａｘＦｉｘｅｄＱｐ−δの通りに調整され得る。いくつかの実施形態では、δは、バッファ１５０のバッファフルネス（ＢＦ）にのみ基づいて決定される。別の実施形態では、レートコントローラ１２０は、δオフセット値を導くために、ＢＦと１つまたは複数の前にコーディングされたブロックの複雑度値との両方を組み合わせ得る。
【０１０４】
[0118]いくつかの実施形態では、ＢＦが、第１のより小さいしきい値（Ｓｎ）と第２のより大きいしきい値（Ｌｍ）との間に、Ｓｎ＜ＢＦ＜Ｌｍになるようにあるとき、レートコントローラ１２０は、ｍａｘＣａｌＱｐを計算するためにデフォルトの非ゼロの正のオフセット値δ＝δｄｅｆａｕｌｔ＞０を使用し得る。たとえば、ｍａｘＦｉｘｅｄＱｐのより高い値を使用する代わりに、レートコントローラ１２０は、より低い値ｍａｘＣａｌＱｐを決定するために固定オフセット分だけｍａｘＦｉｘｅｄＱｐを減少させ、より低い値ｍａｘＣａｌＱｐは、スライス中の連続ブロックを符号化するために使用され得る（たとえば、スライス中の連続ブロックを符号化するために使用されるＱＰ値は、より高いｍａｘＦｉｘｅｄＱｐの代わりに、より低いｍａｘＣａｌＱｐによって制限され得る。
【０１０５】
[0119]上で説明されたように、バッファ１５０のバッファフルネスは、ビデオデータのブロックをコーディングするためにエンコーダ２０によって使用されるビット数によって影響され得る。たとえば、エンコーダ２０が平均ビット数を使用してビデオデータのブロックをコーディングしているとき、バッファ１５０のフルネスは、実質的に一定のままであり得る。一方で、エンコーダ２０が、平均ビット数より少ないビット数を使用してビデオデータのブロックをコーディングしているとき、バッファ１５０のフルネスは減少し始め得る。エンコーダ２０が、ビデオデータのブロックをコーディングするために平均ビット数より多いビット数を使用しているとき、バッファ１５０のフルネスは増加し得る。
【０１０６】
[0120]いくつかの実施形態では、エンコーダ２０がビデオデータの連続ブロックにおける視覚情報を、たとえば該連続ブロック中のテキスチャ化された／複雑な視覚情報に起因して、平均ビット数より多いビット数を使用して効果的にコーディングするのに十分な程、計算されたｍａｘＣａｌＱｐが低いとき、バッファ１５０のバッファフルネスはしきい値Ｌｍを超えて増加し得る。バッファフルネスがＬｍのしきい値を超えるとき、レートコントローラ１２０はδｄｅｆａｕｌｔの値を低減し、ビデオデータの次の連続ブロックをコーディングする際にエンコーダ２０にとって新たなｍａｘＣａｌＱｐを導くために該低減されたオフセット値を使用し得る。このように、ｍａｘＣａｌＱｐは高くなり、これにより、エンコーダ２０は、より高いＱＰ値でビデオデータのブロックを符号化することが可能になる。この新たな最大値が結果としてバッファフルネスの更なる増加をもたらす場合、低減されたオフセット値はさらに低減される。レートコントローラ１２０は、バッファ１５０がオーバーフローするのを防ぐために、バッファフルネスが所定のしきい値よりも小さくなるまで、オフセット値を連続的に低減し、ｍａｘＣａｌＱｐを計算するステップを繰り返し得る。ある特定のケースでは、負のオフセットがバッファオーバーフローを防ぐために許され得る。
【０１０７】
[0121]一方で、ｍａｘＣａｌＱｐが結果として、（たとえば、エンコーダ２０が平均ビット数よりも少ないビット数を使用してビデオデータの連続ブロックにおける視覚情報をコーディングするのに十分な程、ｍａｘＣａｌＱｐが高いことに起因して）バッファフルネスがしきい値Ｓｎを超えて減少することをもたらすとき、レートコントローラ１２０は、オフセット値を増加させ得、結果としてｍａｘＣａｌＱｐのより低い値をもたらす。より低いｍａｘＣａｌＱｐ値は、エンコーダ２０により低いＱＰ値、そのため、平均してより高いビット数を使用してビデオデータのブロックをコーディングさせ得る。いくつかの実施形態では、オフセット値は、バッファフルネスがしきい値Ｓｎ未満に減少するとき、変更されないことがある。
【０１０８】
[0122]図９は、バッファフルネス（ＢＦ）の異なる範囲に対するオフセットデルタ値を選ぶための実例的なスキームのグラフを図示する。いくつかの実施形態では、レートコントローラ１２０は、複数の異なるバッファフルネスしきい値に基づいてｍａｘＣａｌＱｐを決定するためにオフセットδを調整し得る。図９は、バッファ１５０のバッファフルネス値に対応する横軸を例示しており、軸の左側の最小値（Ｍｉｎ  ＢＦ）から軸の右側の最大値（Ｍａｘ  ＢＦ）まで範囲が広がっている。複数のしきい値は、ｎ個の小さい方の（smaller）バッファ値［Ｓ１、Ｓ２、．．．Ｓｎ］およびｍ個の大きい方の（larger）バッファ値［Ｌ１、Ｌ２、．．．Ｌｍ］を含みながら、横軸に沿って位置する。しきい値は、Ｓ１≦Ｓ２≦、．．．≦ＳｎおよびＬ１≧Ｌ２≧、．．．≧Ｌｍ≧Ｓｎになるように配列されている。
【０１０９】
[0123]隣接するしきい値［Ｓ１、Ｓ２、．．．Ｓｎ］および［Ｌ１、Ｌ２、．．．Ｌｍ］の各ペアは、ｍａｘＣａｌＱｐを決定するためにレートコントローラ１２０によって使用され得る特定のオフセット値に関連付けられたバッファフルネス範囲を定義し得る。たとえば、ＳｎとＬｍとの間のバッファフルネス値の範囲は、デフォルトのオフセット値δｄｅｆａｕｌｔに関連付けられ得る。隣接する小さい方のしきい値［Ｓ１、Ｓ２、．．．Ｓｎ］によって定義された各範囲は、それぞれのオフセット値［δ１’’、δ２’’、．．．、δｎ’’］に関連付けられ得、ここにおいて、δ１’’≧δ２’’≧．．．≧δｎ’’≧δｄｅｆａｕｌｔである。たとえば、図９で例示されているように、オフセット値δ１’’は、Ｍｉｎ  ＢＦとＳ１との間のＢＦ値の範囲に関連付けられるのに対し、オフセット値δｎ’’は、Ｓｎ−１とＳｎとの間のＢＦ値の範囲に関連付けられる。
【０１１０】
[0124]加えて、隣接する大きい方のしきい値［Ｌ１、Ｌ２、．．．Ｌｍ］によって定義されている各範囲は、それぞれのオフセット値［δ１’、δ２’、．．．、δｍ’］に関連付けられ得、ここにおいて、δ１’≦δ２’≦．．．≦δｍ’≦δｄｅｆａｕｌｔである。たとえば、図９で例示されているように、オフセット値δ１’は、Ｌ１とＭａｘ  ＢＦとの間のＢＦ値の範囲に関連付けられるのに対し、オフセット値δｍ’は、ＬｍとＬｍ−１との間のＢＦ値の範囲に関連付けられる。
【０１１１】
[0125]いくつかの実施形態では、レートコントローラ１２０は、バッファ１５０のバッファフルネスＢＦに基づいて最大ＱＰを調整するために、以下の擬似コードに基づいて、オフセット値δを計算し得る：
δ＝δｄｅｆａｕｌｔ；
ｉｆ（ＢＦ＞＝Ｌ１）
δ＝δ１’；
ｅｌｓｅ  ｉｆ（ＢＦ＞＝Ｌ２）
δ＝δ２’；
…
ｅｌｓｅ  ｉｆ（ＢＦ＞＝Ｌｍ）
δ＝δｍ’；
ｉｆ（ＢＦ＜＝Ｓ１）
δ＝δ１’’；
ｅｌｓｅ  ｉｆ（ＢＦ＜＝Ｓ２）
δ＝δ２’’；
…
ｅｌｓｅ  ｉｆ（ＢＦ＜＝Ｓｎ）
δ＝δｎ’’；
[0126]上で説明されたように、レートコントローラ１２０は、ｍａｘＣａｌＱｐ＝ｍａｘＦｉｘｅｄＱｐ−δの通りに最大ＱＰ値を調整するためにオフセット値δを使用し得る。上記実施では、「以下（less than and equal to）」という指定は、厳密には「より小さい（less than）」によって置き換えられることができる。同様に、「以上（greater than and equal to）」という指定は、厳密には「より大きい（greater than）」によって置き換えられることができる。いくつかの実施形態では、ｎおよびｍは同じであり得るか、または同じでないことがある。
【０１１２】
[0127]このように、図９において上で説明されたように、バッファ１５０のバッファフルネスが低い（たとえば、Ｓｎより低い）とき、レートコントローラ１２０は、オフセットδの値をδｄｅｆａｕｌｔよりも高い値に設定し得、結果としてより低いｍａｘＣａｌＱｐをもたらす。このように、エンコーダ２０は、より多いビット数を使用してビデオデータの連続ブロックをコーディングし得、このことが、潜在的にバッファ１５０のフルネスを増加させる。
【０１１３】
[0128]一方で、バッファ１５０のバッファフルネスが高い（たとえば、Ｌｍを超える）とき、レートコントローラ１２０は、オフセットδの値をδｄｅｆａｕｌｔよりも低い値に設定し得、結果としてより高いｍａｘＣａｌＱｐをもたらす。このように、エンコーダ２０は、より小さいビット数を使用してビデオデータの連続ブロックをコーディングし得、このことが、潜在的にバッファ１５０のフルネスを減少させる。
【０１１４】
[0129]いくつかの実施形態では、バッファしきい値［Ｌ１、Ｌ２、．．．Ｌｍ］および／または［Ｓ１、Ｓ２、．．．Ｓｎ］は、ルーマ成分とクロマ成分との両方にとって同じであり得る。別の実施では、それらはルーマ成分およびクロマ成分にとって異なり得る。別の例では、各バッファしきい値についてのオフセット値δは、ルーマ成分およびクロマ成分にとって同じまたは異なり得る。
【０１１５】
[0130]しきい値［Ｌ１、Ｌ２、．．．Ｌｍ］は、上で説明されたようなＱＰモード［Ｑ１、Ｑ２、．．．Ｑｍ］を決定するために使用される同一のｍ個のしきい値［Ｑ１、Ｑ２、．．．Ｑｍ］であり得るか、または同じでないことがある。同様に、しきい値［Ｓ１、Ｓ２、．．．Ｓｎ］は、ＱＰモード［Ｐ１、Ｐ２、．．．Ｐｎ］を決定するために使用される同一のｎ個のしきい値であり得るか、または同じでないことがある。
【０１１６】
[0131]いくつかの実施形態では、１つまたは複数のバッファフルネスしきい値に基づいて最大ＱＰを調整するためにオフセットデルタ値を決定する代わりに、レートコントローラ１２０は、所定の関数または数式に基づいて、バッファ１５０の現在のバッファフルネス（ＢＦ）からオフセットデルタ値を決定し得る。
【０１１７】
[0132]いくつかの実施形態では、最大ＱＰを調整するために使用されるオフセットデルタ値は、周期的に（たとえば、ある特定の時間インターバルで、ある特定の数のブロックがコーディングされ終わった後で、および／または同様のもので）決定され得る。たとえば、レートコントローラ１２０は、バッファ１５０の現在のバッファフルネスに基づいて、エンコーダ２０によってコーディングされるべきビデオデータの各ブロックについての最大ＱＰを調整するためにオフセットデルタ値を決定し得る。
【０１１８】
[0133]ここで開示されている技法は、エンコーダ２０でのみ適用され得る。たとえば、エンコーダ２０は、最大ＱＰを調整するためのオフセット値を決定し、該決定されたオフセットを（たとえば、リンク１６を通じてデコーダ３０に送信されるコーディングされたビデオデータビットストリームの一部として）デコーダ３０にシグナリングし得る。別の代案では、ここで提案されている技法は、エンコーダ２０とデコーダ３０との両方に適用され得る。エンコーダ２０とデコーダ３０との両方に適用された後に技法が本明細書で提案されるいくつかの実施形態では、エンコーダ２０は、デコーダ３０にオフセット値をシグナリングする必要がない。
【０１１９】
例となる実施形態
[0134]図１０は、バッファフルネス（ＢＦ）の異なる範囲に対するオフセットデルタ値を選ぶための実例的なスキームのグラフを例示する。図１０で例示されているグラフは、図９で例示されているものと類似しており、ここにおいて、バッファ１５０のバッファフルネス値は、軸の左側の最小ＢＦ（Ｍｉｎ  ＢＦ）から軸の右側の最大ＢＦ（Ｍａｘ  ＢＦ）までの範囲に広がる横軸上で示されている。いくつかの実施形態では、軸上で表されているＢＦ値は、パーセンテージの値に対応し得る。たとえば、Ｍｉｎ  ＢＦは０％に対応し得るのに対し、Ｍａｘ  ＢＦは１００％に対応し得る。加えて、図９にあるように、図１０のグラフは、横軸に沿って位置する複数のしきい値を示している。図１０で例示されているスキームでは、レートコントローラ１２０は、（横軸の左側に示されている）［１２、２４］の値を有するｎ＝２つの小さい方のしきい値［Ｓ１、Ｓ２］、および（横軸の右側に示されている）［８８、７６］の値を有するｍ＝２つの大きい方のしきい値［Ｌ１、Ｌ２］を維持し得る。
【０１２０】
[0135]バッファフルネスを表す横軸に沿った隣接するしきい値の各ペアは、最大ＱＰを調整するためにレートコントローラ１２０によって使用可能な特定のオフセット値に対応し得る。たとえば、バッファ１５０のバッファフルネスが２４％と７６％との間にあるとき、レートコントローラ１２０は、δｄｅｆａｕｌｔ＝４のオフセット分だけ最大ＱＰを調整し得る。バッファフルネスが７６％と８８％との間にあるとき、オフセットはδ２’＝２であり得る。バッファフルネスが８８％を上回るとき、レートコントローラ１２０は、δ１’ ＝０のオフセットを使用し得る。
【０１２１】
[0136]一方で、図９で例示された実施形態では、バッファフルネスが２４のしきい値未満に減少するとオフセット値は減少しないことがある。たとえば、それぞれ１２未満および１２と２４との間のバッファフルネス範囲に対応し得る、オフセットδ１’’およびδ２’’は、両方とも４の値に対応し得る。しきい値［Ｌ１、Ｌ２］および［Ｓ１、Ｓ２］は、ルーマ成分とクロマ成分との両方にとって同じであり得る。
【０１２２】
ピクチャパラメータに基づく最大ＱＰに対する調整
[0137]いくつかの実施形態では、レートコントローラ１２０はさらに、コーディングされるべきビデオデータに関連付けられた１つまたは複数のピクチャパラメータ（たとえば、ソースビット深度（source bit depth）、圧縮ビットレート（compressed bitrate）、および／または同様のもの）に基づいて、最大ＱＰ（max QP）を調整し得る。たとえば、いくつかの実施形態では、ビデオデータのソースビット深度についてのデフォルトの値は、たとえば、成分ごとに８ビットであり得る。そのようなケースでは、最大ＱＰは、以下の通りに調整され得る：
ｍａｘＱｐ＝ｍａｘＱｐ＋（（ｂｉｔＤｅｐｔｈ−８）≪ａ）
ここで、パラメータａは、チューニングされ得る（たとえば、パラメータａは、レートコントローラ１２０によって修正され得る）。たとえば、アドバンスドＤＳＣ（Ａ−ＤＳＣ）では、ａ＝２のデフォルトの値が使用され得る。
【０１２３】
[0138]他の実施形態では、最大ＱＰについての上記数式は、ソースビット深度についてのデフォルトの値の変化に基づいて修正され得ることが理解される。たとえば、数式は、下記の通りに修正され得、ここにおいて、パラメータｂｄは、デフォルトのビット深度値（たとえば、成分ごとのデフォルトのビット数）を示し得る。
ｍａｘＱｐ＝ｍａｘＱｐ＋（（ｂｉｔＤｅｐｔｈ−ｂｄ）≪ａ）
【０１２４】
[0139]いくつかの実施形態では、レートコントローラ１２０は、圧縮ビットレート値に基づいて最大ＱＰを調整し得る。他の実施形態では、レートコントローラ１２０は、ビット深度または圧縮ビットレートのうちの少なくとも１つに基づいて、最大ＱＰを調整し得る。
【０１２５】
[0140]いくつかの実施形態では、デフォルトの圧縮ビットレートは６ｂｐｐ（８ｂｐｃソースコンテンツに対して４：１の圧縮）であり得る。Ａ−ＤＳＣコデックでは、圧縮ビットレートは、ｍ個の少数ビット（fractional bits）を使用して定義され得、これは、６ｂｐｐの圧縮ビットレートが（６≪ｍ）としてコデックに内蔵される（stored internally）だろうことを意味する。たとえば、ｍ＝４であるとき、内蔵された値は、６＜＜４＝９６であり得る。
【０１２６】
[0141]デフォルトの圧縮ビットレートが６ｂｐｐに等しいことを前提とするいくつかの実施形態では、６ｂｐｐ未満の値を有する圧縮ビットレートについて、レートコントローラ１２０は、以下の通りに最大ＱＰを調整し得る：
ｍａｘＱｐ＝ｍａｘＱｐ＋（（（９６−ｂｐｐ）≫ｍ）≪ｂ０）
【０１２７】
[0142]逆に、６ｂｐｐを上回るビットレートについて、レートコントローラ１２０は、以下の通りに最大ＱＰを調整し得る：
ｍａｘＱｐ＝ｍａｘＱｐ−（（（ｂｐｐ−９６）≫ｍ）≪ｂ１）
ここで、ｂ０およびｂ１は、ｍａｘＱｐにオフセット量をスケーリングするための所定の固定値に対応し得る。いくつかの実施形態では、ｍ、ｂ０、およびｂ１の値は、ｍ＝４、ｂ０＝３、ｂ１＝２であり得る。他の実施形態では、最大ＱＰについての上記数式が、デフォルトの圧縮ビットレート値の変化に基づいて修正され得ることは理解される。
【０１２８】
[0143]ソースビット深度と圧縮ビットレートとの両方がそれらのデフォルトの値（たとえば、８ｂｐｃおよび６ｂｐｐそれぞれ）とは異なるいくつかの実施形態では、レートコントローラ１２０は、以下の通りに２回、最大ＱＰを調整し得る（必ずしも順序通りでないことがある）：
・ソースビット深度に基づいて最大ＱＰを修正する。
・圧縮ビットレートに基づいて最大ＱＰをさらに修正する。
【０１２９】
[0144]いくつかの実施形態では、ピクチャパラメータに基づいて最大ＱＰを調整した後に、レートコントローラ１２０は、前章で説明された技法を使用して（たとえば、バッファ１５０のバッファフルネスに基づいて）コーダによってオンザフライで動的に最大ＱＰをさらに調整し得る。たとえば、いくつかの実施形態では、レートコントローラ１２０は最初に、ソースビット深度および圧縮ビットレートのようなピクチャパラメータに基づいて最大ＱＰ値を調整し得る。調整された最大ＱＰ値は、バッファ１５０のバッファフルネスに基づいてオンザフライで最大ＱＰ値を調整する目的でｍａｘＦｉｘｅｄＱｐ値として使用され得る。
【０１３０】
プロセスの流れ
[0145]図１１は、ビデオデータのブロックをコーディングするための最大ＱＰ値を調整することについての実例的なプロセスのフローチャートを図示する。ブロック１１０２で、レートコントローラ１２０は、デフォルトの最大ＱＰ値を決定し得る。いくつかの実施形態では、最大ＱＰ値は、所定の値であり得る。
【０１３１】
[0146]ブロック１１０４で、レートコントローラ１２０は、１つまたは複数のピクチャパラメータに基づいて最大ＱＰ値を調整し得る。いくつかの実施形態では、ピクチャパラメータは、ソースビット深度または圧縮ビットレートに対応し得る。いくつかの実施形態では、レートコントローラ１２０は、まずソースビットレートに基づいて、そしてその後圧縮ビットレートに基づいて最大ＱＰ値を調整し得る。いくつかの実施形態では、レートコントローラ１２０は、ソースビット深度にのみ基づいて、または圧縮ビットレートにのみ基づいて、最大ＱＰ値を調整し得る。いくつかの実施形態では、ソースビット深度または圧縮ビットレートがデフォルトの値から外れる場合のみ、レートコントローラ１２０は、ソースビット深度または圧縮ビットレートに基づいて最大ＱＰ値を調整する。いくつかの実施形態では、調整された最大ＱＰ値は、ｍａｘＦｉｘｅｄＱｐと称され得る。
【０１３２】
[0147]ブロック１１０６で、レートコントローラ１２０は、バッファ１５０のバッファフルネスの量のインジケーションを受信し得る。ブロック１１０８で、レートコントローラは、バッファのバッファフルネスに基づいて最大ＱＰオフセットを決定し得る。いくつかの実施形態では、レートコントローラ１２０は、オフセット値を決定するために１つまたは複数のしきい値に対してバッファフルネス値を比較する。たとえば、１つまたは複数のしきい値は、１つまたは複数のバッファフルネス範囲を定義し得、ここにおいて、異なるオフセット値は、異なるバッファフルネス範囲に関連付けられ得る。ブロック１１１０で、レートコントローラ１２０は、調整された最大ＱＰ（たとえば、ブロック１１０４で決定されたようなｍａｘＦｉｘｅｄＱｐ）および決定されたオフセット値に基づいて最大ＱＰ値を決定し得る。たとえば、レートコントローラ１２０は、ｍａｘＦｉｘｅｄＱｐと決定されたオフセット値との間の差分として最大ＱＰ値ｍａｘＣａｌＱｐを決定し得る。決定された最大ＱＰ値はその後、ビデオデータのブロックをコーディングする際にエンコーダ２０によって使用される。
【０１３３】
[0148]いくつかの実施形態では、ブロック１１０６〜１１１０は、エンコーダ２０がビデオデータの連続ブロックをコーディングするとき、繰り返し得る。たとえば、いくつかの実施形態では、レートコントローラ１２０は、周期的なインターバルで（たとえば、ある特定の時間インターバルで、またはある特定の数のブロックがコーディングされ終わった後で）、バッファフルネスのインジケーションを受信し得る（ブロック１１０６）。レートコントローラ１２０はその後、ビデオデータの後続のブロックをコーディングするためにエンコーダ２０によって使用されるべき新たなオフセットおよび最大ＱＰ値を決定し得る（ブロック１１０８、１１１０）。このループは、エンコーダ２０がビデオデータの全てのブロックをコーディングし終えるまで繰り返し得る。
【０１３４】
[0149]バッファフルネスに基づいてビデオデータのブロックをコーディングするために使用される最大ＱＰ値を動的に調整することによって、レートコントローラ１２０は、ビデオデータのブロックをコーディングするために使用される最大ＱＰ値を、バッファ１５０が空になることまたはオーバーフローすることを防ぎながら、潜在的に制限し得る。たとえば、バッファフルネスが低い（たとえば、ある特定のしきい値未満）ときにオフセット値を増加させること（および、そのため最大ＱＰ値を減少させること）によって、エンコーダ２０は、それが別の方法をとった場合には（otherwise）使用したかもしれないＱＰ値よりも小さいＱＰ値を使用してビデオデータのブロックを符号化し、それにより、量子化ロスを減少させ、バッファが空になるのを防ぎ得る。
【０１３５】
[0150]本明細書で開示されている情報および信号は、様々な異なる技術および技法のうちのいずれを使用しても表わされ得る。たとえば、上記説明全体を通して参照され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光学場もしくは光学粒子、またはそれらのいずれの組合せによっても表され得る。
【０１３６】
[0151]本明細書で開示されている実施形態と関係して説明されている様々な例示的な論理ブロックおよびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実施され得る。このハードウェアとソフトウェアとの互換性を明確に例示するために、様々な例示的なコンポーネント、ブロック、およびステップが、概してそれらの機能性の観点から上で説明されてきた。そのような機能が、ハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定のアプリケーションおよびシステム全体に課せられる設計制約に依存する。当業者は、特定のアプリケーションごとに様々な方法で説明されている機能性を実装し得るが、そのような実装決定は本開示の範囲からの逸脱を引き起こすと解釈されるべきでない。
【０１３７】
[0152]本明細書で説明されている技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらのいずれの組合せでも実施され得る。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、あるいはワイヤレス通信デバイスハンドセット、自動車、電気器具、ウェアラブル、および／または他のデバイスにおける用途（applications）を含む複数の使途（uses）を有する集積回路デバイスのような様々なデバイスのいずれにおいても実施され得る。デバイスまたはコンポーネントとして説明されているいずれの特徴も、集積論理デバイスにおいて一緒に、または、ディスクリートではあるが相互動作可能な論理デバイスとして別個に実装され得る。ソフトウェアにおいて実施される場合、技法は、少なくとも部分的に、命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって実現され得、該命令は、実行されると、上で説明された方法のうちの１つまたは複数を実行する。コンピュータ可読データ記憶媒体は、パッケージングマテリアルを含み得る、コンピュータプログラム製品の一部を形成し得る。コンピュータ可読媒体は、同期動的ランダムアクセスメモリ（ＳＤＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、不揮発ランダムアクセスメモリ（ＮＶＲＡＭ）、電気的消去可能なプログラマブル読取専用メモリ（ＥＥＰＲＯＭ（登録商標））、ＦＬＡＳＨメモリ、磁気または光学データ記憶媒体、等のようなメモリまたはデータ記憶媒体を備え得る。技法は、加えてまたは代わりとして、少なくとも部分的に、伝播される信号または波のような、コンピュータによってアクセス、読み取り、および／または実行されることができ、かつ、データ構造または命令の形態のプログラムコードを搬送または通信するコンピュータ可読通信媒体によって実現され得る。
【０１３８】
[0153]プログラムコードは、１つまたは複数のデジタルシグナルプロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または他の同等の集積またはディスクリート論理回路のような１つまたは複数のプロセッサを含み得るプロセッサによって実行され得る。そのようなプロセッサは、本開示で説明されている技法のうちのいずれも実行するように構成され得る。汎用プロセッサは、マイクロプロセッサであり得るが、代わりとして、該プロセッサは、いずれの従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンでもあり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携した１つまたは複数のマイクロプロセッサ、またはいずれの他のそのような構成としても実装され得る。したがって、「プロセッサ」という用語は、本明細書で使用される場合、前述の構造のうちのいずれも、前述の構造のいずれの組合せも、または本明細書で説明されている技法の実装に適したいずれの他の構造または装置も指し得る。加えて、いくつかの態様では、本明細書で説明されている機能性は、符号化および復号のために構成された専用のソフトウェアまたはハードウェア内に提供され得るか、または複合ビデオエンコーダ−デコーダ（ＣＯＤＥＣ）に組み込まれ得る。また、技法は、１つまたは複数の回路または論理要素において完全に実施されることができるだろう。
【０１３９】
[0154]本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、幅広い種類のデバイスまたは装置において実施され得る。様々なコンポーネントまたはユニットが、開示されている技法を実行するように構成されたデバイスの機能的な態様を強調するために本開示において説明されているが、必ずしも異なるハードウェアユニットによる実現を必要とするわけではない。むしろ、上で説明されたように、様々なユニットが、コデックハードウェアユニットにおいて組み合わせられ得るか、または、適したソフトウェアおよび／またはファームウェアと併せて、上で説明されたような１つまたは複数のプロセッサを含む相互動作するハードウェアユニットのコレクションによって提供され得る。
【０１４０】
[0155]前述は、様々な異なる実施形態と関係して説明されてきたけれども、一実施形態からの特徴または要素は、本開示の教示から逸脱することなく、他の実施形態と組み合わせられ得る。しかしながら、それぞれの実施形態間の特徴の組合せは、必ずしもそれらに限定されるわけではない。本開示の様々な実施形態が説明されてきた。これらの実施形態および他の実施形態は、以下に続く請求項の範囲内にある。
【図１Ａ】
2019512970.tif 000003
【図１Ｂ】
2019512970.tif 000004
【図２Ａ】
2019512970.tif 000005
【図２Ｂ】
2019512970.tif 000006
【図３】
2019512970.tif 000007
【図４】
2019512970.tif 000008
【図５】
2019512970.tif 000009
【図６】
2019512970.tif 000010
【図７】
2019512970.tif 000011
【図８Ａ】
2019512970.tif 000012
【図８Ｂ】
2019512970.tif 000013
【図８Ｃ】
2019512970.tif 000014
【図９】
2019512970.tif 000015
【図１０】
2019512970.tif 000016
【図１１】
2019512970.tif 000017
【手続補正書】
【提出日】平成30年12月4日(2018.12.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ビデオ情報をコーディングするための装置であって、
コーディングされたビデオ情報を記憶するように構成されたバッファユニットと、
ハードウェアプロセッサとを備え、前記プロセッサは、
前記ビデオ情報を、少なくとも１つの２次元（２×８）ブロックへと区分化することと、
前記バッファユニットのバッファフルネスを決定することと、前記バッファフルネスは、前記バッファユニット中で現在占有されているビット数と、前記バッファユニットの現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定することと、
前記バッファユニットの前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することと、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整することと、ここにおいて、前記調整された最大ＱＰ値は、前記２次元ブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
前記調整された最大ＱＰ値を、前記２次元ブロックのサンプルに適用することと、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、前記２次元ブロックをコーディングすることと、
を行うように構成される、
装置。
【請求項２】
前記ハードウェアプロセッサは、前記バッファユニットの前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定するようにさらに構成され、前記デフォルトの調整値は０より大きい、請求項１に記載の装置。
【請求項３】
前記ハードウェアプロセッサは、前記デフォルトの調整値よりも高い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第２のフルネスしきい値より低い、請求項２に記載の装置。
【請求項４】
前記ハードウェアプロセッサは、前記デフォルトの調整値よりも低い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第１のフルネスしきい値より高い、請求項２に記載の装置。
【請求項５】
前記ハードウェアプロセッサは、ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定するようにさらに構成され、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、請求項１に記載の装置。
【請求項６】
前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、請求項１に記載の装置。
【請求項７】
前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、請求項１に記載の装置。
【請求項８】
前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、請求項１に記載の装置。
【請求項９】
前記バッファユニットは、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、請求項１に記載の装置。
【請求項１０】
ビデオ情報をコーディングするための方法であって、
前記ビデオ情報を、少なくとも１つの２次元（２×８）ブロックへと区分化することと、
コーディングされたビデオ情報を記憶するように構成されたバッファユニットのバッファフルネスを決定することと、前記バッファフルネスは、前記バッファユニット中で現在占有されているビット数と、前記バッファユニットの現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定することと、
前記バッファユニットの前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することと、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整することと、ここにおいて、前記調整された最大ＱＰ値は、前記２次元ブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
前記調整された最大ＱＰ値を、前記ビデオ情報の前記２次元ブロックのサンプルに適用することと、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、前記２次元ブロックをコーディングすることと、
を備える、方法。
【請求項１１】
前記バッファユニットの前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定することをさらに備え、前記デフォルトの調整値は０より大きい、請求項１０に記載の方法。
【請求項１２】
前記デフォルトの調整値よりも高い値に前記調整値を設定することをさらに備え、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第２のフルネスしきい値より低い、請求項１１に記載の方法。
【請求項１３】
前記デフォルトの調整値よりも低い値に前記調整値を設定することをさらに備え、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第１のフルネスしきい値より高い、請求項１１に記載の方法。
【請求項１４】
ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定することをさらに備え、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１５】
前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１６】
前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１７】
前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、請求項１０に記載の方法。
【請求項１８】
前記バッファユニットは、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、請求項１０に記載の方法。
【請求項１９】
ビデオ情報をコーディングするための装置であって、
コーディングされたビデオ情報を記憶するためのバッファ手段と、
前記ビデオ情報を、少なくとも１つの２次元（２×８）ブロックへと区分化する手段と、
前記バッファ手段のバッファフルネスを決定するための手段と、前記バッファフルネスは、前記バッファ手段中で現在占有されているビット数と、前記バッファ手段の現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定するための手段と、
前記バッファ手段の前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定するための手段と、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整するための手段と、ここにおいて、前記調整された最大ＱＰ値は、前記２次元ブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
前記調整された最大ＱＰ値を、前記ビデオ情報の前記２次元ブロックのサンプルに適用する手段と、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、前記２次元ブロックをコーディングするための手段と、
を備える、装置。
【請求項２０】
前記調整値を決定するための前記手段は、前記バッファ手段の前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定するように構成され、前記デフォルトの調整値は０より大きい、請求項１９に記載の装置。
【請求項２１】
前記調整値を決定するための前記手段は、前記デフォルトの調整値よりも高い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファ手段の前記バッファフルネスは前記第２のフルネスしきい値より低い、請求項２０に記載の装置。
【請求項２２】
前記調整値を決定するための前記手段は、前記デフォルトの調整値よりも低い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファ手段の前記バッファフルネスは前記第１のフルネスしきい値より高い、請求項２０に記載の装置。
【請求項２３】
ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定するための手段をさらに備え、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２４】
前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２５】
前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２６】
前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、請求項１９に記載の装置。
【請求項２７】
前記バッファ手段は、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、請求項１９に記載の装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１４０
【補正方法】変更
【補正の内容】
【０１４０】
[0155]前述は、様々な異なる実施形態と関係して説明されてきたけれども、一実施形態からの特徴または要素は、本開示の教示から逸脱することなく、他の実施形態と組み合わせられ得る。しかしながら、それぞれの実施形態間の特徴の組合せは、必ずしもそれらに限定されるわけではない。本開示の様々な実施形態が説明されてきた。これらの実施形態および他の実施形態は、以下に続く請求項の範囲内にある。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[Ｃ１]  ビデオ情報をコーディングするための装置であって、
コーディングされたビデオ情報を記憶するように構成されたバッファユニットと、
ハードウェアプロセッサとを備え、前記プロセッサは、
前記バッファユニットのバッファフルネスを決定することと、前記バッファフルネスは、前記バッファユニット中で現在占有されているビット数と、前記バッファユニットの現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定することと、
前記バッファユニットの前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することと、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整することと、ここにおいて、前記調整された最大ＱＰ値は、前記ビデオ情報の前記現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の前記現在のブロックをコーディングすることと、
を行うように構成される、
装置。
[Ｃ２]  前記ハードウェアプロセッサは、前記バッファユニットの前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定するようにさらに構成され、前記デフォルトの調整値は０より大きい、Ｃ１に記載の装置。
[Ｃ３]  前記ハードウェアプロセッサは、前記デフォルトの調整値よりも高い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第２のフルネスしきい値より低い、Ｃ２に記載の装置。
[Ｃ４]  前記ハードウェアプロセッサは、前記デフォルトの調整値よりも低い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第１のフルネスしきい値より高い、Ｃ２に記載の装置。
[Ｃ５]  前記ハードウェアプロセッサは、ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定するようにさらに構成され、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、Ｃ１に記載の装置。
[Ｃ６]  前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、Ｃ１に記載の装置。
[Ｃ７]  前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、Ｃ１に記載の装置。
[Ｃ８]  前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、Ｃ１に記載の装置。
[Ｃ９]  前記バッファユニットは、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、Ｃ１に記載の装置。
[Ｃ１０]  ビデオ情報をコーディングするための方法であって、
コーディングされたビデオ情報を記憶するように構成されたバッファユニットのバッファフルネスを決定することと、前記バッファフルネスは、前記バッファユニット中で現在占有されているビット数と、前記バッファユニットの現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定することと、
前記バッファユニットの前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定することと、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整することと、ここにおいて、前記調整された最大ＱＰ値は、前記ビデオ情報の前記現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の前記現在のブロックをコーディングすることと、
を備える、方法。
[Ｃ１１]  前記バッファユニットの前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定することをさらに備え、前記デフォルトの調整値は０より大きい、Ｃ１０に記載の方法。
[Ｃ１２]  前記デフォルトの調整値よりも高い値に前記調整値を設定することをさらに備え、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第２のフルネスしきい値より低い、Ｃ１１に記載の方法。
[Ｃ１３]  前記デフォルトの調整値よりも低い値に前記調整値を設定することをさらに備え、ここにおいて、前記バッファユニットの前記バッファフルネスは前記第１のフルネスしきい値より高い、Ｃ１１に記載の方法。
[Ｃ１４]  ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定することをさらに備え、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、Ｃ１０に記載の方法。
[Ｃ１５]  前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、Ｃ１０に記載の方法。
[Ｃ１６]  前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、Ｃ１０に記載の方法。
[Ｃ１７]  前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、Ｃ１０に記載の方法。
[Ｃ１８]  前記バッファユニットは、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、Ｃ１０に記載の方法。
[Ｃ１９]  ビデオ情報をコーディングするための装置であって、
コーディングされたビデオ情報を記憶するためのバッファ手段と、
前記バッファ手段のバッファフルネスを決定するための手段と、前記バッファフルネスは、前記バッファ手段中で現在占有されているビット数と、前記バッファ手段の現在の容量との間の比を示す、
初期最大量子化パラメータ（ＱＰ）値を決定するための手段と、
前記バッファ手段の前記決定されたバッファフルネスに少なくとも部分的に基づいて、調整値を決定するための手段と、
前記決定された調整値を使用して前記初期最大ＱＰ値を調整するための手段と、ここにおいて、前記調整された最大ＱＰ値は、前記ビデオ情報の前記現在のブロックをコーディングするために使用され得る最大ＱＰ値を指定する、
ディスプレイまたは送信のためにビデオデータビットストリームを形成するようにＱＰ値に基づいて、前記ＱＰ値が前記調整された最大ＱＰ値を超えないことがあるという制限に従い、ビデオ情報の前記現在のブロックをコーディングするための手段と、
を備える、装置。
[Ｃ２０]  前記調整値を決定するための前記手段は、前記バッファ手段の前記バッファフルネスが、より高い第１のフルネスしきい値とより低い第２のフルネスしきい値との間のレベルにあるとき、デフォルトの調整値に前記調整値を設定するように構成され、前記デフォルトの調整値は０より大きい、Ｃ１９に記載の装置。
[Ｃ２１]  前記調整値を決定するための前記手段は、前記デフォルトの調整値よりも高い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファ手段の前記バッファフルネスは前記第２のフルネスしきい値より低い、Ｃ２０に記載の装置。
[Ｃ２２]  前記調整値を決定するための前記手段は、前記デフォルトの調整値よりも低い値に前記調整値を設定するようにさらに構成され、ここにおいて、前記バッファ手段の前記バッファフルネスは前記第１のフルネスしきい値より高い、Ｃ２０に記載の装置。
[Ｃ２３]  ビデオ情報の前のブロックをコーディングするのに費やされたビット数に少なくとも部分的に基づいて導かれる複雑度値を決定するための手段をさらに備え、前記調整値はさらに、前記決定された複雑度値に少なくとも部分的に基づく、Ｃ１９に記載の装置。
[Ｃ２４]  前記ＱＰ値はさらに、前記バッファユニットの前記バッファフルネスに少なくとも部分的に基づく、Ｃ１９に記載の装置。
[Ｃ２５]  前記調整値はさらに、コーディングされるべき前記ビデオ情報のビット深度に少なくとも部分的に基づく、Ｃ１９に記載の装置。
[Ｃ２６]  前記調整値はさらに、コーディングされるべき前記ビデオ情報の圧縮ビットレートに少なくとも部分的に基づく、Ｃ１９に記載の装置。
[Ｃ２７]  前記バッファ手段は、固定レートで前記ビデオデータビットストリームにコーディングされたビデオデータのビットを出力するようにさらに構成される、Ｃ１９に記載の装置。
【国際調査報告】
2019512970.tif 000018
2019512970.tif 000019
2019512970.tif 000020
2019512970.tif 000021