(57)【特許請求の範囲】
【請求項１】
ビデオデータをコーディングするための装置であって、
前記ビデオデータを記憶するためのメモリと、
前記メモリに動作可能に結合されたハードウェアプロセッサとを備え、前記ハードウェアプロセッサは、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することと、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備え、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定することと、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することと、
前記スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することと、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を行うように構成された、装置。
【請求項２】
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、請求項１に記載の装置。
【請求項３】
前記ハードウェアプロセッサが、バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整するようにさらに構成された、請求項１に記載の装置。
【請求項４】
前記ターゲットレートの調整量が、ルックアップテーブル（ＬＵＴ）を使用することに基づいて決定される、請求項３に記載の装置。
【請求項５】
前記ハードウェアプロセッサは、前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整するようにさらに構成された、請求項１に記載の装置。
【請求項６】
ビデオデータのブロックをコーディングするためのターゲットレートを決定するためのコンピュータ実装方法であって、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することと、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備え、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定することと、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することと、
前記スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することと、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を備える、コンピュータ実装方法。
【請求項７】
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、請求項６に記載のコンピュータ実装方法。
【請求項８】
バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整することをさらに備える、請求項６に記載のコンピュータ実装方法。
【請求項９】
前記ターゲットレートの調整量が、ルックアップテーブル（ＬＵＴ）を使用することに基づいて決定される、請求項８に記載のコンピュータ実装方法。
【請求項１０】
前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整することをさらに備える、請求項６に記載のコンピュータ実装方法。
【請求項１１】
装置であって、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶するための手段と、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶するための手段と、
コーディングされるべき前記ビデオデータを受信するための手段と、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備え、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定するための手段と、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定するための手段と、
前記スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施するための手段と、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を備える装置。
【請求項１２】
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、請求項１１に記載の装置。
【請求項１３】
バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整するための手段をさらに備える、請求項１１に記載の装置。
【請求項１４】
前記ターゲットレートの調整量が、ルックアップテーブル（ＬＵＴ）を使用することに基づいて決定される、請求項１３に記載の装置。
【請求項１５】
前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整するための手段をさらに備える、請求項１１に記載の装置。
【請求項１６】
画像のスライスに関係するビデオデータを記憶した非一時的コンピュータ可読記憶媒体であって、前記スライスが１つまたは複数のブロックを備え、ここにおいて、前記記憶媒体は、実行されたとき、デバイスのプロセッサに、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することと、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが少なくとも１つのスライスを備え、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定することと、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することと、
前記スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することと、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を行わせる命令をさらに記憶している、非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記記憶媒体が、実行されたとき、前記プロセッサに、バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整させる命令をさらに記憶している、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
前記ターゲットレートの調整量が、ルックアップテーブル（ＬＵＴ）を使用することに基づいて決定される、請求項１８に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記記憶媒体は、実行されたとき、前記プロセッサに、前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整させる命令をさらに記憶している、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本開示は、ビデオコーディングおよび圧縮の分野に関し、詳細には、ディスプレイストリーム圧縮（ＤＳＣ：display stream compression）など、ディスプレイリンク（display link）を介した送信のためのビデオ圧縮（video compression）に関する。
【背景技術】
【０００２】
[0002]  デジタルビデオ機能は、デジタルテレビジョン、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、デスクトップモニタ、デジタルカメラ、デジタル記録デバイス、デジタルメディアプレーヤ、ビデオゲームデバイス、ビデオゲームコンソール、セルラー電話または衛星無線電話、ビデオ遠隔会議デバイスなどを含む、広範囲にわたるディスプレイに組み込まれ得る。適切なソースデバイスにディスプレイを接続するために、ディスプレイリンクが使用される。ディスプレイリンクの帯域幅要件（bandwidth requirement）はディスプレイの解像度（resolution）に比例し、したがって、高解像度ディスプレイは、大きい帯域幅のディスプレイリンクを必要とする。いくつかのディスプレイリンクは、高解像度ディスプレイをサポートするための帯域幅を有しない。高解像度ディスプレイにデジタルビデオを与えるためにより低い帯域幅のディスプレイリンクが使用され得るように帯域幅要件を低減するために、ビデオ圧縮が使用され得る。
【０００３】
[0003]  他のものが、ピクセルデータ（pixel data）に対して画像圧縮を利用することを試みた。しかしながら、そのような方式は、時々視覚的ロスレスでないか、または従来のディスプレイデバイスにおいて実装することが困難で費用がかかることがある。
【０００４】
[0004]  ビデオエレクトロニクス規格協会（ＶＥＳＡ：Video Electronics Standards Association）は、ディスプレイリンクビデオ圧縮のための規格として、ディスプレイストリーム圧縮（ＤＳＣ）を開発した。ＤＳＣなど、ディスプレイリンクビデオ圧縮技法は、特に、視覚的ロスレス（visually lossless）であるピクチャ品質（すなわち、圧縮がアクティブであることをユーザがわからないような品質のレベルを有するピクチャ）を与えるべきである。ディスプレイリンクビデオ圧縮技法はまた、従来のハードウェアを用いてリアルタイム（real-time）に実装することが容易で費用がかからない方式を与えるべきである。
【発明の概要】
【０００５】
[0005]  本開示のシステム、方法およびデバイスは、それぞれいくつかの発明的態様を有し、それらのうちの単一の態様が、本明細書で開示される望ましい属性を単独で担当するとは限らない。
【０００６】
[0006]  一態様では、ビデオデータ（video data）をコーディングするための装置（apparatus）が提供される。本装置は、ビデオデータを記憶するためのメモリ（memory）を含むことができ、メモリはバッファ（buffer）を含む。本装置は、メモリに動作可能に結合されたハードウェアプロセッサ（hardware processor）をも含むことができる。プロセッサは、コーディングされるべきビデオデータを受信するように構成され得る。プロセッサは、コーディングされるべきブロック（block）について、ターゲットレート（target rate）、平坦度（flatness）量子化パラメータ（ＱＰ：quantization parameter）、バッファのフルネス（fullness）、ビットレート（bitrate）についてのラグランジュパラメータ（Lagrangian parameter）、またはバッファのフルネスについてのラグランジュパラメータのうちの１つまたは複数を決定するようにさらに構成され得、決定は、１つまたは複数の固定小数点近似演算（fixed-point approximation operation）に少なくとも部分的に基づく。
【０００７】
[0007]  別の態様では、ビデオデータをコーディングする方法が提供される。本方法は、ビデオデータをメモリに記憶することを含むことができ、メモリはバッファを含む。本方法は、コーディングされるべきビデオデータを受信することをも含み得る。本方法は、コーディングされるべきブロックについて、ターゲットレート、平坦度量子化パラメータ（ＱＰ）、バッファのフルネス、ビットレートについてのラグランジュパラメータ、またはバッファのフルネスについてのラグランジュパラメータのうちの１つまたは複数を決定することをさらに含むことができ、前記決定することは、１つまたは複数の固定小数点近似演算に少なくとも部分的に基づく。
【０００８】
[0008]  別の態様では、ビデオデータをコーディングするための装置が提供される。本装置は、ビデオデータを記憶するためのメモリを備え、メモリはバッファを含む。本装置は、メモリに動作可能に結合され、ビデオデータのスライス（slice）内のピクセルの合計数（total number）に基づいてスケーリングパラメータ（scaling parameter）を決定および記憶するように構成された、ハードウェアプロセッサをさらに備える。ハードウェアプロセッサは、複数の入力値（input value）をそれらの逆数値（reciprocal value）に関連付けるデータ構造（data structure）を決定および記憶するようにさらに構成される。ハードウェアプロセッサは、コーディングされるべきビデオデータを受信するようにさらに構成され、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。ハードウェアプロセッサは、記憶されたスケーリングパラメータに基づいてしきい値（threshold value）を決定するようにさらに構成される。ハードウェアプロセッサは、コーディングされるべきスライスのブロックについて、スライス中の残りのピクセルの数がしきい値よりも小さいという決定に応答して、スケーリングパラメータを更新し、スケーリングファクタ（scaling factor）に基づいて、更新されたしきい値を決定するようにさらに構成される。ハードウェアプロセッサは、スケーリングファクタに基づいてスケーリングされた残りのピクセルの数に関連付けられた逆数値に基づいて、ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施するようにさらに構成され、ここにおいて、逆数値は、記憶されたデータ構造を使用して決定される。
【０００９】
[0009]  別の態様では、ビデオデータのブロックをコーディングするためのターゲットレートを決定するためのコンピュータ実装方法が提供される。本方法は、ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することを備える。本方法は、複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することをさらに備える。本方法は、コーディングされるべきビデオデータを受信することをさらに備え、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。本方法は、記憶されたスケーリングパラメータに基づいてしきい値を決定することをさらに備える。本方法は、コーディングされるべきスライスのブロックについて、スライス中の残りのピクセルの数がしきい値よりも小さいという決定に応答して、スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することをさらに備える。本方法は、スケーリングファクタに基づいてスケーリングされた残りのピクセルの数に関連付けられた逆数値に基づいて、ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することをさらに備え、ここにおいて、逆数値は、記憶されたデータ構造を使用して決定される。
【００１０】
[0010]  別の態様では、ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶するための手段を備える、装置が提供される。本装置は、複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶するための手段をさらに備える。本装置は、コーディングされるべきビデオデータを受信するための手段をさらに備え、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。本装置は、記憶されたスケーリングパラメータに基づいてしきい値を決定するための手段をさらに備える。本装置は、コーディングされるべきスライスのブロックについて、スライス中の残りのピクセルの数がしきい値よりも小さいという決定に応答して、スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定するための手段をさらに備える。本装置は、スケーリングファクタに基づいてスケーリングされた残りのピクセルの数に関連付けられた逆数値に基づいて、ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施するための手段をさらに備え、ここにおいて、逆数値は、記憶されたデータ構造を使用して決定される。
【００１１】
[0011]  別の態様では、非一時的コンピュータ可読記憶媒体が提供される。本記憶媒体は、画像のスライスに関係するビデオデータを記憶しており、スライスは１つまたは複数のブロックを備える。本記憶媒体は、実行されたとき、デバイスのプロセッサに、ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶させる命令をさらに記憶している。本記憶媒体は、プロセッサに、複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶させる命令をさらに記憶している。本記憶媒体は、プロセッサに、コーディングされるべきビデオデータを受信させる命令をさらに記憶しており、ビデオデータは少なくとも１つのスライスを備える。本記憶媒体は、プロセッサに、記憶されたスケーリングパラメータに基づいてしきい値を決定させる命令をさらに記憶している。本記憶媒体は、プロセッサに、コーディングされるべきスライスのブロックについて、スライス中の残りのピクセルの数がしきい値よりも小さいという決定に応答して、スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定させる命令をさらに記憶している。本記憶媒体は、プロセッサに、スケーリングファクタに基づいてスケーリングされた残りのピクセルの数に関連付けられた逆数値に基づいて、ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施させる命令をさらに記憶しており、ここにおいて、逆数値は、記憶されたデータ構造を使用して決定される。
【００１２】
[0012]  別の態様では、ビデオデータをコーディングするための装置が提供される。本装置は、ビデオデータを記憶するためのメモリを備え、メモリはバッファを含む。本装置は、メモリに動作可能に結合されたハードウェアプロセッサをさらに備える。ハードウェアプロセスは、最大バッファサイズの逆数（reciprocal）に基づいて第１のパラメータ値を決定および記憶するように構成される。ハードウェアプロセッサは、コーディングされるべきビデオデータを受信するようにさらに構成され、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。ハードウェアプロセッサは、コーディングされるべきスライスのブロックについて、バッファフルネス（buffer fullness）を表すために使用されるビット数を示す第１の値と、バッファフルネスを計算するための精度を示す第２の値とに基づいて、第１のパラメータをスケーリングするようにさらに構成される。ハードウェアプロセッサは、スケーリングされた第１のパラメータに基づいて、ブロックについてのバッファフルネス値を決定するために１つまたは複数の固定小数点近似演算を実施するようにさらに構成される。
【００１３】
[0013]  別の態様では、ビデオデータをコーディングするための装置が提供される。本装置は、ビデオデータを記憶するためのメモリを備え、メモリはバッファを含む。本装置は、メモリに動作可能に結合されたハードウェアプロセッサをさらに備える。ハードウェアプロセスは、バッファフルネス値を量子化パラメータ（ＱＰ）調整値に関連付けるデータ構造を決定および記憶するように構成される。ハードウェアプロセッサは、コーディングされるべきビデオデータを受信するようにさらに構成され、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。ハードウェアプロセッサは、コーディングされるべきスライスのブロックについて、ブロックが複雑な領域と平坦な領域との間の遷移を含んでいるかどうかを決定するようにさらに構成され、ここにおいて、複雑な領域は、平坦な領域と比較してより高い複雑さを有する。ハードウェアプロセッサは、ブロックが遷移を含んでいるという決定に応答して、バッファフルネス値を、バッファフルネス値をコーディングするために使用されるビット数と、ＱＰ調整値をコーディングするために使用されるべきビット数とに基づいてシフトするようにさらに構成される。ハードウェアプロセッサは、記憶されたデータ構造とシフトされたバッファフルネス値とに基づいて、ブロックについてのＱＰ調整値を決定するために１つまたは複数の固定小数点近似演算を実施するようにさらに構成される。ハードウェアプロセッサは、ブロックのＱＰを決定されたＱＰ調整値に設定するようにさらに構成される。
【００１４】
[0014]  別の態様では、ビデオデータをコーディングするための装置が提供される。本装置は、ビデオデータを記憶するためのメモリを備える。本装置は、メモリに動作可能に結合されたハードウェアプロセッサをさらに備える。ハードウェアプロセスは、ビデオデータのブロックをコーディングするために使用され得る最大ビット数（maximum number of bits）に基づいて第１のスケーリングパラメータを決定および記憶するように構成される。ハードウェアプロセッサは、ビデオデータのブロックをコーディングするために使用されるビット数をビットレートについてのラグランジュパラメータに関連付けるデータ構造を決定および記憶するようにさらに構成される。ハードウェアプロセッサは、コーディングされるべきビデオデータを受信するようにさらに構成され、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。ハードウェアプロセッサは、コーディングされるべきスライスのブロックについて、第１のスケーリングパラメータによって調整されたブロックをコーディングするためのビット数に基づいて、データ構造を使用してブロックのビットレートについてのラグランジアン（Lagrangian）を決定する１つまたは複数の固定小数点近似演算を実施するようにさらに構成される。
【００１５】
[0015]  別の態様では、ビデオデータをコーディングするための装置が提供される。本装置は、ビデオデータを記憶するためのメモリを備え、メモリはバッファを含む。本装置は、メモリに動作可能に結合されたハードウェアプロセッサをさらに備える。ハードウェアプロセスは、バッファフルネス値をバッファフルネス値についてのラグランジュ値（Lagrangian value）に関連付けるデータ構造を決定および記憶するように構成される。ハードウェアプロセッサは、コーディングされるべきビデオデータを受信するようにさらに構成され、ビデオデータは、複数のブロックに分割された少なくとも１つのスライスを備える。ハードウェアプロセッサは、コーディングされるべきスライスのブロックについて、ブロックの計算されたバッファフルネス値を、バッファフルネス値をコーディングするために使用されるビット数を示す第１のパラメータと、データ構造のインデックス（index）をコーディングするために使用されるビット数を示す第２のパラメータとに基づいてスケーリングするようにさらに構成される。ハードウェアプロセッサは、記憶されたデータ構造とスケーリングされたバッファフルネス値とを使用して、バッファフルネス値についてのラグランジュ値を決定するために１つまたは複数の固定小数点近似演算を実施するようにさらに構成される。
【図面の簡単な説明】
【００１６】
【図１Ａ】[0016]  本開示で説明される態様による技法を利用し得る例示的なビデオ符号化および復号システムを示すブロック図。
【図１Ｂ】[0017]  本開示で説明される態様による技法を実施し得る別の例示的なビデオ符号化および復号システムを示すブロック図。
【図２Ａ】[0018]  本開示で説明される態様による技法を実装し得るビデオエンコーダの一例を示すブロック図。
【図２Ｂ】[0019]  本開示で説明される態様による技法を実装し得るビデオデコーダの一例を示すブロック図。
【図３】[0020]  ｎ1が６の値を有する（１＜＜ｎ1が６４である）、逆関数を示すグラフを示す図。
【図４】[0021]  いくつかの実施形態による、固定小数点近似（fixed point approximation）を使用してブロックについてのターゲットレートを決定するための例示的な方法のフローチャート。
【図５】[0022]  いくつかの実施形態による、固定小数点近似を使用してブロックについての平坦度ＱＰを決定するための例示的な方法のフローチャート。
【図６】[0023]  スライスのブロックがコーディングされるとき、ｂｕｆＡｄｊＳｉｚｅがどのように変化し得るかを示す図。
【図７】[0024]  いくつかの実施形態による、バッファフルネスを決定するための例示的なプロセスのフローチャート。
【図８】[0025]  いくつかの実施形態による、ビットレートについてのラグランジュパラメータを決定するための例示的なプロセスのフローチャート。
【図９】[0026]  いくつかの実施形態による、バッファフルネスについてのラグランジュパラメータを決定するためのプロセスのフローチャート。
【発明を実施するための形態】
【００１７】
[0027]  概して、本開示は、たとえば、ディスプレイストリーム圧縮（ＤＳＣ）など、ビデオ圧縮技法を改善する方法に関する。より詳細には、本開示は、レート制御パラメータ（rate control parameter）の固定小数点近似のためのシステムおよび方法に関する。
【００１８】
[0028]  いくつかの実施形態は、ＤＳＣ規格のコンテキストにおいて本明細書で説明されるが、本明細書で開示されるシステムおよび方法が任意の好適なビデオコーディング規格に適用可能であり得ることを、当業者は諒解されよう。たとえば、本明細書で開示される実施形態は、以下の規格、すなわち、国際電気通信連合（ＩＴＵ）電気通信標準化部門（ＩＴＵ−Ｔ）Ｈ．２６１、国際標準化機構／国際電気標準会議（ＩＳＯ／ＩＥＣ）ムービングピクチャエキスパートグループ１（ＭＰＥＧ−１）Ｖｉｓｕａｌ、ＩＴＵ−Ｔ  Ｈ．２６２またはＩＳＯ／ＩＥＣ  ＭＰＥＧ−２  Ｖｉｓｕａｌ、ＩＴＵ−Ｔ  Ｈ．２６３、ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４  Ｖｉｓｕａｌ、（ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４  ＡＶＣとしても知られる）ＩＴＵ−Ｔ  Ｈ．２６４、高効率ビデオコーディング（ＨＥＶＣ）のうちの１つまたは複数、およびそのような規格に対する任意の拡張に適用可能であり得る。また、本開示で説明される技法は、将来開発される規格の一部になり得る。言い換えれば、本開示で説明される技法は、前に開発されたビデオコーディング規格、現在開発中のビデオコーディング規格、および次のビデオコーディング規格に適用可能であり得る。
【００１９】
[0029]  ＤＳＣでは、バッファフルネス、およびバッファフルネスに基づくラムダ値（lambda value）など、いくつかのレート制御パラメータが、１つまたは複数の除算または除算演算（division operation）を使用して決定され得る。除算または除算演算は、除算演算子（たとえば、「／」）を伴う演算を指すことがある。しかしながら、除算演算の使用は、ハードウェア実装における複雑さおよび困難をもたらし得る。
【００２０】
[0030]  これらおよび他の課題に対処するために、本開示で説明される技法は、固定小数点近似を使用して様々なレート制御パラメータを決定または計算することができる。レート制御パラメータの例としては、限定はしないが、ターゲットレート、平坦度ＱＰ、バッファフルネス、ビットレートについてのラムダ値、バッファフルネスについてのラムダ値などがあり得る。ラムダ値は、ラグランジュ（Lagrangian）パラメータまたはラグランジュ（lagrangrian）パラメータと呼ばれることもある。固定小数点近似を使用することによって、本技法は、レート制御パラメータを計算する際の除算演算の使用を低減するかまたはなくすことができ、これは、ハードウェア実装の複雑さおよびコストを低減することができる。
【００２１】
ビデオコーディング規格（Video Coding Standards）
[0031]  ビデオ画像、ＴＶ画像、静止画像、あるいはビデオレコーダまたはコンピュータによって生成された画像など、デジタル画像は、水平ライン（horizontal line）および垂直ライン（vertical line）で構成されたピクセルまたはサンプルを含み得る。単一の画像中のピクセルの数は一般に数万個である。各ピクセルは、一般に、ルミナンス情報とクロミナンス情報とを含んでいる。圧縮がなければ、画像エンコーダから画像デコーダに搬送されるべき情報の膨大な量（sheer quantity）は、リアルタイム画像送信（real-time image transmission）を実行不可能にするであろう。送信されるべき情報の量を低減するために、ＪＰＥＧ、ＭＰＥＧおよびＨ．２６３規格など、いくつかの異なる圧縮方法が開発された。
【００２２】
[0032]  ビデオコーディング規格は、ＩＴＵ−Ｔ  Ｈ．２６１と、ＩＳＯ／ＩＥＣ  ＭＰＥＧ−１  Ｖｉｓｕａｌと、ＩＴＵ−Ｔ  Ｈ．２６２またはＩＳＯ／ＩＥＣ  ＭＰＥＧ−２  Ｖｉｓｕａｌと、ＩＴＵ−Ｔ  Ｈ．２６３と、ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４  Ｖｉｓｕａｌと、（ＩＳＯ／ＩＥＣ  ＭＰＥＧ−４  ＡＶＣとしても知られる）ＩＴＵ−Ｔ  Ｈ．２６４と、そのような規格の拡張を含むＨＥＶＣとを含む。
【００２３】
[0033]  さらに、ＶＥＳＡによって、あるビデオコーディング規格、すなわち、ＤＳＣが開発された。ＤＳＣ規格は、ディスプレイリンクを介した送信のためにビデオを圧縮することができるビデオ圧縮規格である。ディスプレイの解像度が増加するにつれて、ディスプレイを駆動するために必要とされるビデオデータの帯域幅は、対応して増加する。いくつかのディスプレイリンクは、そのような解像度についてディスプレイにビデオデータのすべてを送信するための帯域幅を有しないことがある。したがって、ＤＳＣ規格は、ディスプレイリンクを介した相互運用可能な、視覚的ロスレス圧縮のための圧縮規格を規定する。
【００２４】
[0034]  ＤＳＣ規格は、Ｈ．２６４およびＨＥＶＣなど、他のビデオコーディング規格とは異なる。ＤＳＣは、フレーム内圧縮（intra-frame compression）を含むが、フレーム間圧縮（inter-frame compression）を含まず、これは、ビデオデータをコーディングする際にＤＳＣ規格によって時間的情報（temporal information）が使用されないことがあることを意味する。対照的に、他のビデオコーディング規格は、それらのビデオコーディング技法においてフレーム間圧縮を採用し得る。４：１のまたはより高い圧縮比を与えるために、たとえば、アドバンストＤＳＣが開発されている。４：１のまたはより高い圧縮比は、モバイルデバイスのために、たとえば、４Ｋなどの高解像度ディスプレイのために使用され得る。
【００２５】
ビデオコーディングシステム（Video Coding System）
[0035]  添付の図面を参照しながら、新規のシステム、装置、および方法の様々な態様が以下でより十分に説明される。ただし、本開示は、多くの異なる形態で実施され得、本開示全体にわたって提示される任意の特定の構造または機能に限定されるものと解釈されるべきではない。むしろ、これらの態様は、本開示が周到で完全になり、本開示の範囲を当業者に十分に伝えるように与えられる。本明細書の教示に基づいて、本開示の範囲は、本開示の他の態様とは無関係に実装されるにせよ、本開示の他の態様と組み合わせられるにせよ、本明細書で開示される新規のシステム、装置、および方法のいかなる態様をもカバーするものであることを、当業者は諒解されたい。たとえば、本明細書に記載される態様をいくつ使用しても、装置は実装され得、または方法は実施され得る。さらに、本開示の範囲は、本明細書に記載される本開示の様々な態様に加えてまたはそれらの態様以外に、他の構造、機能、または構造および機能を使用して実施されるそのような装置または方法をカバーするものとする。本明細書で開示されるどの態様も請求項の１つまたは複数の要素によって実施され得ることを理解されたい。
【００２６】
[0036]  本明細書では特定の態様が説明されるが、これらの態様の多くの変形および置換は本開示の範囲内に入る。好適な態様のいくつかの利益および利点が説明されるが、本開示の範囲は特定の利益、使用、または目的に限定されるものではない。むしろ、本開示の態様は、異なるワイヤレス技術、システム構成、ネットワーク、および伝送プロトコルに広く適用可能であるものとし、それらのうちのいくつかが、例として、図において、および好適な態様の以下の説明において示される。発明を実施するための形態および図面は、本開示を限定するものではなく説明するものにすぎず、本開示の範囲は添付の特許請求の範囲およびそれの均等物によって定義される。
【００２７】
[0037]  添付の図面は例を示す。添付の図面中の参照番号によって示される要素は、以下の説明における同様の参照番号によって示される要素に対応する。本開示では、序数語（たとえば、「第１の」、「第２の」、「第３の」など）で始まる名前を有する要素は、必ずしもそれらの要素が特定の順序を有することを暗示するとは限らない。むしろ、そのような序数語は、同じまたは同様のタイプの異なる要素を指すために使用されるにすぎない。
【００２８】
[0038]  図１Ａは、本開示で説明される態様による技法を利用し得る例示的なビデオコーディングシステム１０を示すブロック図である。本明細書で使用され説明される「ビデオコーダ（video coder）」または「コーダ（coder）」という用語は、ビデオエンコーダ（video encoder）とビデオデコーダ（video decoder）の両方を総称的に指す。本開示では、「ビデオコーディング（video coding）」または「コーディング（coding）」という用語は、ビデオ符号化（video encoding）とビデオ復号（video decoding）とを総称的に指すことがある。ビデオエンコーダおよびビデオデコーダに加えて、本出願で説明される態様は、トランスコーダ（たとえば、ビットストリームを復号し、別のビットストリームを再符号化することができるデバイス）およびミドルボックス（たとえば、ビットストリームを変更、変換、および／または場合によっては操作することができるデバイス）など、他の関係するデバイスに拡張され得る。
【００２９】
[0039]  図１Ａに示されているように、ビデオコーディングシステム１０は、宛先デバイス１４によって後で復号されるべき符号化ビデオデータを生成するソースデバイス１２を含む。図１Ａの例では、ソースデバイス１２および宛先デバイス１４は、別個のデバイスを構成する。ただし、ソースデバイス１２および宛先デバイス１４は、図１Ｂの例に示されているように、同じデバイス上にあるかまたはそれの一部であり得ることに留意されたい。
【００３０】
[0040]  もう一度図１Ａを参照すると、ソースデバイス１２および宛先デバイス１４は、それぞれ、デスクトップコンピュータ、ノートブック（たとえば、ラップトップ）コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、いわゆる「スマート」パッド、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータ、ビデオストリーミングデバイス、アイウェアおよび／またはウェアラブルコンピュータなど、エンティティ（たとえば、人間、動物、および／または別の被制御デバイス）によって（に）装着可能な（または着脱自在に取付け可能な）デバイス、エンティティ内で消費、摂取、または配置され得るデバイスまたは装置などを含む、広範囲にわたるデバイスのいずれかを備え得る。様々な実施形態では、ソースデバイス１２および宛先デバイス１４は、ワイヤレス通信のために装備され得る。
【００３１】
[0041]  宛先デバイス１４は、復号されるべき符号化ビデオデータをリンク（link）１６を介して受信し得る。リンク１６は、ソースデバイス１２から宛先デバイス１４に符号化ビデオデータを移動することが可能な任意のタイプの媒体またはデバイスを備え得る。図１Ａの例では、リンク１６は、ソースデバイス１２が符号化ビデオデータをリアルタイムで宛先デバイス１４に送信することを可能にするための通信媒体を備え得る。符号化ビデオデータは、ワイヤレス通信プロトコルなどの通信規格に従って変調され、宛先デバイス１４に送信され得る。通信媒体は、無線周波数（ＲＦ）スペクトルまたは１つまたは複数の物理伝送線路など、任意のワイヤレスまたはワイヤード通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス１２から宛先デバイス１４への通信を可能にするために有用であり得る任意の他の機器を含み得る。
【００３２】
[0042]  図１Ａの例では、ソースデバイス１２は、ビデオソース１８と、ビデオエンコーダ２０と、出力インターフェース２２とを含む。いくつかの場合には、出力インターフェース２２は、変調器／復調器（モデム）および／または送信機を含み得る。ソースデバイス１２において、ビデオソース１８は、ビデオキャプチャデバイス、たとえばビデオカメラ、以前にキャプチャされたビデオを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェース、および／またはソースビデオとしてコンピュータグラフィックスデータを生成するためのコンピュータグラフィックスシステムなどのソース、あるいはそのようなソースの組合せを含み得る。一例として、ビデオソース１８がビデオカメラである場合、ソースデバイス１２および宛先デバイス１４は、図１Ｂの例に示されているように、いわゆる「カメラフォン」または「ビデオフォン」を形成し得る。ただし、本開示で説明される技法は、概してビデオコーディングに適用可能であり得、ワイヤレスおよび／またはワイヤード適用例に適用され得る。
【００３３】
[0043]  キャプチャされたビデオ、以前にキャプチャされたビデオ、またはコンピュータ生成されたビデオは、ビデオエンコーダ２０によって符号化され得る。符号化ビデオデータは、ソースデバイス１２の出力インターフェース２２を介して宛先デバイス１４に送信され得る。符号化ビデオデータは、さらに（または代替として）、復号および／または再生のための宛先デバイス１４または他のデバイスによる後のアクセスのためにストレージデバイス３１上に記憶され得る。図１Ａおよび図１Ｂに示されているビデオエンコーダ２０は、図２Ａ示されているビデオエンコーダ２０、または本明細書で説明される他のビデオエンコーダを備え得る。
【００３４】
[0044]  図１Ａの例では、宛先デバイス１４は、入力インターフェース２８と、ビデオデコーダ３０と、ディスプレイデバイス３２とを含む。いくつかの場合には、入力インターフェース２８は受信機および／またはモデムを含み得る。宛先デバイス１４の入力インターフェース２８は、リンク１６を介しておよび／またはストレージデバイス３１から符号化ビデオデータを受信し得る。リンク１６を介して通信された、またはストレージデバイス３１上に与えられた符号化ビデオデータは、ビデオデータを復号する際に、ビデオデコーダ３０などのビデオデコーダが使用するための、ビデオエンコーダ２０によって生成された様々なシンタックス要素（syntax element）を含み得る。そのようなシンタックス要素は、通信媒体上で送信された、記憶媒体上に記憶された、またはファイルサーバ記憶された符号化ビデオデータに含まれ得る。図１Ａおよび図１Ｂに示されているビデオデコーダ３０は、図２Ｂに示されているビデオデコーダ３０、または本明細書で説明される他のビデオデコーダを備え得る。
【００３５】
[0045]  ディスプレイデバイス３２は、宛先デバイス１４と一体化されるかまたはその外部にあり得る。いくつかの例では、宛先デバイス１４は、一体型ディスプレイデバイスを含み、また、外部ディスプレイデバイスとインターフェースするように構成され得る。他の例では、宛先デバイス１４はディスプレイデバイスであり得る。概して、ディスプレイデバイス３２は、復号ビデオデータをユーザに表示し、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイ、有機発光ダイオード（ＯＬＥＤ）ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスのいずれかを備え得る。
【００３６】
[0046]  関係する態様では、図１Ｂは例示的なビデオコーディングシステム１０’を示し、ここにおいて、ソースデバイス１２および宛先デバイス１４はデバイス１１上にあるかまたはそれの一部である。デバイス１１は、「スマート」フォンなどの電話ハンドセットであり得る。デバイス１１は、ソースデバイス１２および宛先デバイス１４と動作可能に通信している（随意に存在する）プロセッサ／コントローラデバイス１３を含み得る。図１Ｂのビデオコーディングシステム１０’およびそれの構成要素は、場合によっては図１Ａのビデオコーディングシステム１０およびそれの構成要素と同様である。
【００３７】
[0047]  ビデオエンコーダ２０およびビデオデコーダ３０は、ＤＳＣなど、ビデオ圧縮規格に従って動作し得る。代替的に、ビデオエンコーダ２０およびビデオデコーダ３０は、代替的にＭＰＥＧ−４，Ｐａｒｔ１０，ＡＶＣと呼ばれるＩＴＵ−Ｔ  Ｈ．２６４規格、ＨＥＶＣなど、他のプロプライエタリ（proprietary）規格または業界規格、あるいはそのような規格の拡張に従って動作し得る。ただし、本開示の技法は、いかなる特定のコーディング規格にも限定されない。ビデオ圧縮規格の他の例としては、ＭＰＥＧ−２およびＩＴＵ−Ｔ  Ｈ．２６３がある。
【００３８】
[0048]  図１Ａおよび図１Ｂの例には示されていないが、ビデオエンコーダ２０およびビデオデコーダ３０は、それぞれオーディオエンコーダおよびデコーダと統合され得、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するために、適切なＭＵＸ−ＤＥＭＵＸユニット、または他のハードウェアおよびソフトウェアを含み得る。適用可能な場合、いくつかの例では、ＭＵＸ−ＤＥＭＵＸユニットは、ＩＴＵ  Ｈ．２２３マルチプレクサプロトコル、またはユーザデータグラムプロトコル（ＵＤＰ：user datagram protocol）などの他のプロトコルに準拠し得る。
【００３９】
[0049]  ビデオエンコーダ２０およびビデオデコーダ３０はそれぞれ、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダ回路のいずれか、またはそれらの任意の組合せとして実装され得る。本技法が部分的にソフトウェアで実装されるとき、デバイスは、ソフトウェアのための命令を好適な非一時的コンピュータ可読媒体に記憶し、本開示の技法を実施するために１つまたは複数のプロセッサを使用してハードウェアでその命令を実行し得る。ビデオエンコーダ２０およびビデオデコーダ３０の各々は１つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ／デコーダの一部として統合され得る。
【００４０】
ビデオコーディングプロセス（Video Coding Process）
[0050]  上記で手短に述べられたように、ビデオエンコーダ２０はビデオデータを符号化する。ビデオデータは１つまたは複数のピクチャを備え得る。ピクチャの各々は、ビデオの一部を形成する静止画像である。いくつかの事例では、ピクチャはビデオ「フレーム（frame）」と呼ばれることがある。ビデオエンコーダ２０がビデオデータを符号化するとき、ビデオエンコーダ２０はビットストリームを生成し得る。ビットストリームは、ビデオデータのコード化表現を形成するビットのシーケンスを含み得る。ビットストリームは、コード化ピクチャと関連データとを含み得る。コード化ピクチャはピクチャのコード化表現である。
【００４１】
[0051]  ビットストリームを生成するために、ビデオエンコーダ２０は、ビデオデータ中の各ピクチャに対して符号化演算を実施し得る。ビデオエンコーダ２０がピクチャに対して符号化演算を実施するとき、ビデオエンコーダ２０は、一連のコード化ピクチャと関連データとを生成し得る。関連データは、量子化パラメータ（ＱＰ）などのコーディングパラメータのセットを含み得る。コード化ピクチャを生成するために、ビデオエンコーダ２０は、ピクチャを等しいサイズのビデオブロックに区分し得る。ビデオブロックはサンプルの２次元アレイであり得る。コーディングパラメータは、ビデオデータのあらゆるブロックについてコーディングオプション（たとえば、コーディングモード）を定義し得る。コーディングオプションは、所望のレートひずみ性能を達成するために選択され得る。
【００４２】
[0052]  いくつかの例では、ビデオエンコーダ２０はピクチャを複数のスライスに区分し得る。スライスの各々は、画像またはフレーム中の領域の残りからの情報なしに独立して復号され得る、画像（たとえば、フレーム）中の空間的に別個の領域を含み得る。各画像またはビデオフレームは単一のスライス中で符号化され得るか、あるいは各画像またはビデオフレームはいくつかのスライス中で符号化され得る。ＤＳＣでは、各スライスを符号化するために割り振られるターゲットビットは、実質的に一定であり得る。ピクチャに対して符号化演算を実施することの一部として、ビデオエンコーダ２０は、ピクチャの各スライスに対して符号化演算を実施し得る。ビデオエンコーダ２０がスライスに対して符号化演算を実施するとき、ビデオエンコーダ２０は、スライスに関連付けられた符号化データを生成し得る。スライスに関連付けられた符号化データは「コード化スライス（coded slice）」と呼ばれることがある。
【００４３】
ＤＳＣビデオエンコーダ（DSC Video Encoder）
[0053]  図２Ａは、本開示で説明される態様による技法を実装し得るビデオエンコーダ２０の一例を示すブロック図である。ビデオエンコーダ２０は、本開示の技法の一部または全部を実施するように構成され得る。いくつかの例では、本開示で説明される技法は、ビデオエンコーダ２０の様々な構成要素間で共有され得る。いくつかの例では、追加または代替として、プロセッサ（図示せず）が、本開示で説明される技法の一部または全部を実施するように構成され得る。
【００４４】
[0054]  説明の目的で、本開示では、ＤＳＣコーディングのコンテキストにおいてビデオエンコーダ２０について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【００４５】
[0055]  図２Ａの例では、ビデオエンコーダ２０は複数の機能構成要素を含む。ビデオエンコーダ２０の機能構成要素は、色空間変換器（color-space converter）１０５と、バッファ１１０と、平坦度検出器（flatness detector）１１５と、レートコントローラ（rate controller）１２０と、予測器、量子化器、および再構成器構成要素（predictor, quantizer, and reconstructor component）１２５と、ラインバッファ１３０と、インデックスカラー履歴（indexed color history ）１３５と、エントロピーエンコーダ（entropy encoder）１４０と、サブストリームマルチプレクサ（substream multiplexor）１４５と、レートバッファ（rate buffer）１５０とを含む。他の例では、ビデオエンコーダ２０は、より多数の、より少数の、または異なる機能構成要素を含み得る。
【００４６】
[0056]  色空間変換器１０５は、入力色空間をコーディング実装形態において使用される色空間に変換し得る。たとえば、例示的な一実施形態では、入力ビデオデータの色空間は、赤、緑、および青（ＲＧＢ）色空間中にあり、コーディングは、ルミナンスＹ、クロミナンスグリーンＣｇ、およびクロミナンスオレンジＣｏ（ＹＣｇＣｏ）色空間において実装される。色空間変換は、ビデオデータへのシフトおよび追加を含む（１つまたは複数の）方法によって実施され得る。他の色空間中の入力ビデオデータが処理され得、他の色空間への変換も実施され得ることに留意されたい。
【００４７】
[0057]  関係する態様では、ビデオエンコーダ２０は、バッファ１１０、ラインバッファ１３０、および／またはレートバッファ１５０を含み得る。たとえば、バッファ１１０は、色空間変換されたビデオデータを、ビデオエンコーダ２０の他の部分によるそれの使用に先立って保持し得る。別の例では、色空間変換されたデータはより多くのビットを必要とし得るので、ビデオデータはＲＧＢ色空間中で記憶され得、色空間変換が必要に応じて実施され得る。
【００４８】
[0058]  レートバッファ１５０はビデオエンコーダ２０においてレート制御機構の一部として機能し得、このことは、レートコントローラ１２０に関して以下でより詳細に説明される。各ブロックを符号化することに費やされるビットは、大いに、実質的に、ブロックの性質に基づいて変動することがある。レートバッファ１５０は、圧縮されたビデオにおけるレート変動を平滑化することができる。いくつかの実施形態では、ビットが固定ビットレート（ＣＢＲ：constant bit rate）でバッファから取り出されるＣＢＲバッファモデルが採用される。ＣＢＲバッファモデルでは、ビデオエンコーダ２０がビットストリームにあまりに多くのビットを加えた場合、レートバッファ１５０はオーバーフローし得る。一方、ビデオエンコーダ２０は、レートバッファ１５０のアンダーフローを防ぐために、十分なビットを加えなければならない。
【００４９】
[0059]  ビデオデコーダ側では、ビットは、固定ビットレートでビデオデコーダ３０のレートバッファ１５５（以下でさらに詳細に説明される図２Ｂを参照）に加えられ得、ビデオデコーダ３０は、各ブロックについて可変数のビットを削除し得る。適切な復号を保証するために、ビデオデコーダ３０のレートバッファ１５５は、圧縮されたビットストリームの復号中に「アンダーフロー（underflow）」または「オーバーフロー（overflow）」すべきでない。
【００５０】
[0060]  いくつかの実施形態では、バッファフルネス（ＢＦ：buffer fullness）は、バッファに現在あるビットの数を表す値ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅと、レートバッファ１５０のサイズ、すなわち、任意の時点においてレートバッファ１５０に記憶され得るビットの最大数を表すＢｕｆｆｅｒＭａｘＳｉｚｅとに基づいて定義され得る。ＢＦは次のように計算され得る。
【数１】
0006772266.tif 000002
【００５１】
[0061]  平坦度検出器１１５は、ビデオデータ中の複雑な（すなわち、平坦でない）エリアからビデオデータ中の平坦な（すなわち、単純なまたは均一な）エリアへの変化を検出することができる。「複雑な（complex）」および「平坦な（flat）」という用語は、本明細書では、概して、ビデオエンコーダ２０がビデオデータのそれぞれの領域を符号化することの困難さを指すために使用される。したがって、本明細書で使用される複雑なという用語は、概して、ビデオデータの領域が、ビデオエンコーダ２０が符号化することが複雑であることを表し、たとえば、テクスチャードビデオデータ、高い空間周波数、および／または符号化することが複雑である他の特徴を含み得る。本明細書で使用される平坦なという用語は、概して、ビデオデータの領域が、ビデオエンコーダ２０がエンコーダすることが単純であることを表し、たとえば、ビデオデータ中の滑らかな勾配、低い空間周波数、および／または符号化することが単純である他の特徴を含み得る。複雑な領域と平坦な領域との間の遷移が、符号化ビデオデータ中の量子化アーティファクト（quantization artifact）を低減するために、ビデオエンコーダ２０によって使用され得る。詳細には、レートコントローラ１２０、ならびに予測器、量子化器、および再構成器構成要素１２５は、複雑な領域から平坦な領域への遷移が識別されたとき、そのような量子化アーティファクトを低減することができる。
【００５２】
[0062]  レートコントローラ１２０は、コーディングパラメータのセット、たとえば、ＱＰを決定する。ＱＰは、レートバッファ１５０がオーバーフローまたはアンダーフローしないことを保証するターゲットビットレート（target bitrate）についてピクチャ品質を最大にするために、レートバッファ１５０のバッファフルネスとビデオデータの画像アクティビティとに基づいて、レートコントローラ１２０によって調整され得る。レートコントローラ１２０はまた、最適レートひずみ性能（optimal rate-distortion performance）を達成するために、ビデオデータの各ブロックについて特定のコーディングオプション（たとえば、特定のモード）を選択する。レートコントローラ１２０は、再構成された画像のひずみ（distortion）を、それがビットレート制約を満たすように、すなわち、全体的実コーディングレートがターゲットビットレート内に収まるように最小限に抑える。
【００５３】
[0063]  予測器、量子化器、および再構成器構成要素１２５は、ビデオエンコーダ２０の少なくとも３つの符号化演算を実施し得る。予測器、量子化器、および再構成器構成要素１２５は、いくつかの異なるモードで予測を実施し得る。１つの例示的なプレディケーションモード（predication mode）は、メディアン適応予測（median-adaptive prediction）の変更バージョンである。メディアン適応予測はロスレスＪＰＥＧ規格（ＪＰＥＧ−ＬＳ）によって実装され得る。予測器、量子化器、および再構成器構成要素１２５によって実施され得るメディアン適応予測の変更バージョンは、３つの連続するサンプル値の並列予測を可能にし得る。別の例示的な予測モードはブロック予測（block prediction）である。ブロック予測では、サンプルは、上のライン中の、または同じライン中の左側の前に再構成されたピクセルから予測される。いくつかの実施形態では、ビデオエンコーダ２０およびビデオデコーダ３０は、両方とも、ブロック予測使用を決定するために、再構成されたピクセルに対して同じ探索を実施し得、したがって、ビットはブロック予測モードで送られる必要がない。他の実施形態では、ビデオエンコーダ２０は、探索を実施し、ビットストリーム中でブロック予測ベクトルをシグナリングし得、したがって、ビデオデコーダ３０は、別個の探索を実施する必要がない。成分範囲の中点を使用してサンプルが予測される中点予測モード（midpoint prediction mode）も実装され得る。中点予測モードは、ワーストケースサンプルにおいてさえも、圧縮されたビデオに必要なビットの数の制限を可能にし得る。予測器、量子化器、および再構成器構成要素１２５は、本開示の方法および技法を実施することによってビデオデータのブロック（または予測の他のユニット）を予測（たとえば、符号化または復号）するように構成され得る。
【００５４】
[0064]  予測器、量子化器、および再構成器構成要素１２５はまた、量子化を実施する。たとえば、量子化は、シフタを使用して実装され得る２のべき乗量子化器（power-of-2 quantizer）を介して実施され得る。２のべき乗量子化器の代わりに他の量子化技法が実装され得ることに留意されたい。予測器、量子化器、および再構成器構成要素１２５によって実施される量子化は、レートコントローラ１２０によって決定されたＱＰに基づき得る。最終的に、予測器、量子化器、および再構成器構成要素１２５はまた、予測値に逆量子化残差（inverse quantized residual）を加算することと、結果がサンプル値の有効範囲の外側にないことを保証することとを含む再構成を実施する。
【００５５】
[0065]  予測器、量子化器、および再構成器構成要素１２５によって実施される予測、量子化、および再構成に対する上記で説明された例示的な手法は、例示的なものにすぎず、他の手法が実装され得ることに留意されたい。また、予測器、量子化器、および再構成器構成要素１２５は、予測、量子化、および／または再構成を実施するための（１つまたは複数の）副構成要素を含み得ることに留意されたい。さらに、予測、量子化、および／または再構成は、予測器、量子化器、および再構成器構成要素１２５の代わりにいくつかの別個のエンコーダ構成要素によって実施され得ることに留意されたい。
【００５６】
[0066]  ラインバッファ１３０は、予測器、量子化器、および再構成器構成要素１２５ならびにインデックスカラー履歴１３５が、バッファされたビデオデータを使用することができるように、予測器、量子化器、および再構成器構成要素１２５からの出力を保持する。インデックスカラー履歴１３５は、最近使用されたピクセル値を記憶する。これらの最近使用されたピクセル値は、専用シンタックスを介してビデオエンコーダ２０によって直接参照され得る。
【００５７】
[0067]  エントロピーエンコーダ１４０は、インデックスカラー履歴１３５と、平坦度検出器１１５によって識別された平坦度遷移とに基づいて、予測器、量子化器、および再構成器構成要素１２５から受信された予測残差および他のデータ（たとえば、予測器、量子化器、および再構成器構成要素１２５によって識別されたインデックス）を符号化する。いくつかの例では、エントロピーエンコーダ１４０は、サブストリームエンコーダ（substream encoder）ごとにクロックごとに３つのサンプルを符号化し得る。サブストリームマルチプレクサ１４５は、ヘッダレスパケット多重化方式（headerless packet multiplexing scheme）に基づいてビットストリームを多重化し得る。これは、ビデオデコーダ３０が並列に３つのエントロピーデコーダ（entropy decoder）を動作させることを可能にし、クロックごとの３つのピクセルの復号を可能にする。サブストリームマルチプレクサ１４５は、パケットがビデオデコーダ３０によって効率的に復号され得るようにパケット順序を最適化し得る。クロックごとの２のべき乗個のピクセル（たとえば、２ピクセル／クロックまたは４ピクセル／クロック）の復号を可能にし得る、エントロピーコーディングに対する異なる手法が実装され得ることに留意されたい。
【００５８】
ＤＳＣビデオデコーダ（DSC Video Decoder）
[0068]  図２Ｂは、本開示で説明される態様による技法を実装し得るビデオデコーダ３０の一例を示すブロック図である。ビデオデコーダ３０は、本開示の技法の一部または全部を実施するように構成され得る。いくつかの例では、本開示で説明される技法は、ビデオデコーダ３０の様々な構成要素間で共有され得る。いくつかの例では、追加または代替として、プロセッサ（図示せず）が、本開示で説明される技法の一部または全部を実施するように構成され得る。
【００５９】
[0069]  説明の目的で、本開示では、ＤＳＣコーディングのコンテキストにおいてビデオデコーダ３０について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【００６０】
[0070]  図２Ｂの例では、ビデオデコーダ３０は複数の機能構成要素を含む。ビデオデコーダ３０の機能構成要素は、レートバッファ１５５と、サブストリームデマルチプレクサ（substream demultiplexor）１６０と、エントロピーデコーダ（entropy decoder）１６５と、レートコントローラ１７０と、予測器、量子化器、および再構成器構成要素１７５と、インデックスカラー履歴１８０と、ラインバッファ１８５と、色空間変換器１９０とを含む。ビデオデコーダ３０の図示された構成要素は、図２Ａ中のビデオエンコーダ２０に関して上記で説明された対応する構成要素に類似する。したがって、ビデオデコーダ３０の構成要素の各々は、上記で説明されたビデオエンコーダ２０の対応する構成要素と同様の様式で動作し得る。
【００６１】
量子化パラメータ（ＱＰ：Quantization Parameter）
[0071]  上記で説明されたように、ビデオコーディングは、たとえば、予測器、量子化器、および再構成器構成要素１２５を介した、ビデオデータの量子化を含み得る。量子化は信号にロス（loss）をもたらし得、ロスの量は、レートコントローラ１２０によって決定されたＱＰによって制御され得る。各ＱＰについての量子化ステップサイズ（quantization step size）を記憶するのではなく、スケーリング行列（scaling matrix）がＱＰの関数として指定され得る。各ＱＰについての量子化ステップサイズはスケーリング行列から導出され得、導出された値は必ずしも２のべき乗であるとは限らず、すなわち、導出された値は２のべき乗でないこともある。
【００６２】
ＤＳＣにおけるスライス（Slices in DSC）
[0072]  上述のように、スライスは、概して、画像またはフレーム中の領域の残りからの情報を使用することなしに独立して復号され得る、画像またはフレーム中の空間的に別個の領域を指す。各画像またはビデオフレームは単一のスライス中で符号化され得るか、あるいは各画像またはビデオフレームはいくつかのスライス中で符号化され得る。ＤＳＣでは、各スライスを符号化するために割り振られるターゲットビットは、実質的に一定であり得る。これは部分スライスについて異なり得、これは、画像高さがスライス高さで割り切れない場合に起こることがある。たとえば、１０８のスライス高さをもつサイズ１２８０×７２０の画像は、高さ１０８の６つのスライスと高さ７２（＝７２０−（６＊１０８））の１つの部分スライスとを有する。
【００６３】
[0073]  アドバンストＤＳＣスライス寸法は、変数またはパラメータスライス幅×スライス高さを使用して指定され得、ここで、スライス幅およびスライス高さは構成可能である。スライス高さは所望の値、たとえば、１６、３２、１０８などに構成され得る。スライス幅は、ライン中のスライスの数を決定する、パラメータＮを使用して構成され得、各スライス中のラインごとのピクセルの数が等しい、たとえば、スライス幅＝画像幅／Ｎであると仮定される。画像幅は画像の幅を表す変数またはパラメータであり得る。
【００６４】
レート制御パラメータのための固定小数点近似（Fixed-Point Approximation for Rate Control Parameters）
[0074]  ディスプレイストリーム圧縮ｖ１．ｘ規格は、３：１の平均圧縮比をサポートし、ＶＥＳＡによって最近確定され、批准された。しかしながら、ディスプレイ解像度が、物理伝送プロトコルがそれらをサポートすることができるよりも速く増加しているので、ＤＳＣ  ｖ１．ｘは、多くのタイプのコンテンツ（たとえば、１０ｂｐｐにおける４Ｋビデオ、１２０Ｈｚにおける４Ｋビデオ、および任意のビット深度またはリフレッシュレートにおける８Ｋビデオ）に不適当であり得る。そのような使用事例をサポートするために、少なくとも４：１の平均圧縮レートをもつ視覚的ロスレスコーデックが提供され得る。いくつかの実施形態では、コーデックは、アドバンストＤＳＣコーデック（「ＡＤＳＣ」）と呼ばれることがある。
【００６５】
[0075]  いくつかの態様によれば、提案されるＤＳＣコーデックはブロックベースであり、各々が異なるタイプのコンテンツを圧縮することを目的とされる、多数のコーディングモードを含む。モード選択は、モードのレートとひずみの両方を考慮することによって各ブロックのための最良のモードを選択することを目的とするレート制御機構によって扱われ得る。レート制御機構はＨＲＤバッファモデルによってサポートされ得、前記バッファがアンダーフロー（たとえば、バッファ中で０ビットよりも少ない）またはオーバーフロー（たとえば、バッファサイズが、設定された最大サイズを超えて増加した）の状態に決してならないことが、コーデックの設計要件であり得る。
【００６６】
[0076]  ＤＳＣでは、バッファフルネス、およびバッファフルネスに基づくラムダ値など、いくつかのレート制御パラメータが、１つまたは複数の除算または除算演算を使用して決定され得る。除算または除算演算は、除算演算子（たとえば、「／」）を伴う演算を指すことがある。しかしながら、除算演算の使用は、ハードウェア実装における複雑さおよび困難（たとえば、任意の数による除算を伴う除算演算など）をもたらし得る。また、込み入った関数または算出の使用は、ハードウェア実装における複雑さおよび困難をもたらすことがある。
【００６７】
[0077]  これらおよび他の課題に対処するために、本開示で説明される技法は、様々なレート制御パラメータを決定または計算する際の除算演算および他の複雑な算出の使用をなくすかまたは低減することができる。たとえば、本技法は、固定小数点近似を使用して様々なレート制御パラメータを決定または計算することができる。レート制御パラメータの例としては、限定はしないが、ターゲットレート、平坦度ＱＰ、バッファフルネス、ビットレートについてのラムダ値、バッファフルネスについてのラムダ値などがあり得る。ラムダ値は、ラグランジュ（Lagrangian）パラメータまたはラグランジュ（lagrangrian）パラメータと呼ばれることもある。固定小数点近似を使用することによって、本技法は、レート制御パラメータを計算する際の除算演算および／または他の複雑な演算の使用を低減するかまたはなくすことができ、これは、ハードウェア実装の複雑さおよびコストを低減することができる。たとえば、多くの値が事前算出（precompute）され得、演算を簡略化するために乗算、加算、およびビットシフティング（bit shifting）のみが使用され得る。また、演算を簡略化するためにルックアップテーブル（ＬＵＴ：lookup table）が使用され得る。本明細書で使用されるＬＵＴという用語は、事前算出された値を記憶するために使用され得る任意のタイプのデータ構造を指すために使用され得る。いくつかの態様に関係する詳細が以下で与えられる。
【００６８】
[0078]  関係する態様では、低コスト、固定レート視覚的ロスレス圧縮を与えるＤＳＣコーダが本明細書で開示される。コーダは、（たとえば、ブロックサイズＰ×Ｑを用いた）ブロックベースの手法に基づいて設計され、多数のコーディングモードのうちの１つまたは複数を用いて実装され得る。たとえば、各ブロックのための利用可能なコーディングオプションは、変換モード（たとえば、ＤＣＴ、アダマール）、ブロック予測モード、差分パルスコード変調（ＤＰＣＭ：differential pulse-code modulation）モード、パターンモード、中点予測（ＭＰＰ：mid-point prediction）モード、および／または中点プレディケーションフォールバック（ＭＰＰＦ：mid-point predication fall back）モードを含む。いくつかのコーディングモードが、異なるタイプのコンテンツまたは画像を圧縮するためにコーダにおいて使用され得る。たとえば、テキスト画像はパターンモードを介して圧縮され得、自然画像は変換モードを介してキャプチャされ得る。
【００６９】
[0079]  さらなる関係する態様では、コーディングモードは、候補モードのレートとひずみの両方を考慮することによって、各ブロックのための（１つまたは複数の）最適なモードを選択するためのレート制御技法に基づいて、複数の候補コーディングモードの中から各ブロックのために選択され、利用され得る。レート制御技法は、バッファモデルを利用することを伴い得、コーデックの設計考慮事項は、バッファがアンダーフロー（たとえば、バッファ中で０ビットよりも少ない）またはオーバーフロー（たとえば、バッファサイズが、設定／定義された最大サイズを超えて増加した）の状態にないことを確実にすることを含み得る。
【００７０】
バッファフルネス計算（Buffer Fullness Calculation）
[0080]  その全体が参照により本明細書に組み込まれる、２０１５年８月６日に出願された米国特許出願第１４／８２０，４０４号（代理人整理番号：ＱＶＩＤ．２６０Ａ／１４６５２５）では、バッファフルネス（ＢＦ）を計算するための方法が開示された。特に、いくつかの態様によれば、ＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ＝ｍａｘＢｕｆｆｅｒＢｉｔｓＡｔＳｌｉｃｅＥｎｄである場合、スライスの終わりに、ＢＦが１００％になるように、ＢＦは、スライス中のある固定数のブロックをコーディングした後に一定のレートにおいて線形的に減少され、ここで、ｍａｘＢｕｆｆｅｒＢｉｔｓＡｔＳｌｉｃｅＥｎｄは、スライスの終わりにレートバッファ中に含まれていることがある最大ビット数（maximum number of bits）を示す。より正確に、ＢＦは次のように計算される。
【００７１】
【数２】
0006772266.tif 000003
ここで、
【数３】
0006772266.tif 000004
【数４】
0006772266.tif 000005
【００７２】
ここで、ｎｕｍＢｌｏｃｋｓＣｏｄｅｄはスライス中のここまでコーディングされたブロックの数を表し、ｎｕｍＢｌｏｃｋｓＴｈは構成可能であるしきい値パラメータである。バッファがブロックごとに線形的に調整されるレートは、次のように計算される。
【数５】
0006772266.tif 000006
【数６】
0006772266.tif 000007
【００７３】
バッファフルネスに基づくラムダ（Lambda Based on Buffer Fullness）
[0081]  レートとひずみ（rate and distortion）とを組み合わせるコスト関数（cost function）を算出するために（ラムダまたはラムダ値とも呼ばれる）ラグランジュパラメータが使用され得る。たとえば、
【数７】
0006772266.tif 000008
【００７４】
[0082]  ラグランジュパラメータの値は、ひずみとレートとの間のトレードオフが、異なる領域について異なり得るので、コーデックの状態（たとえば、バッファフルネス値）に基づいて調整され得る。たとえば、レートバッファがよりフルである（高いバッファフルネス）ほど、バッファが、コーディングするのにより費用がかかるブロックを収容することが可能でないことがあるので、固有モードのレートはよりペナルティを課され得る。いくつかの実施形態では、ラグランジアンはまた、ブロックのビットレートの関数（たとえば、ブロックのビットレートの関数として増加するペナルティ）であり得る。
【００７５】
[0083]  その全体が参照により本明細書に組み込まれる、２０１５年４月１３日に出願された米国特許出願第１４／６８５，４５３号（代理人整理番号：ＱＶＩＤ．２２２Ａ／１４４５６９）では、バッファフルネスに基づくラムダまたはラグランジュ値が、以下の式に基づいて計算され得る。
【数８】
0006772266.tif 000009
ここで、｛Λ，ａ1，ｂ1，ｃ1，ｄ1｝は同調可能なパラメータ（tunable parameter）である。ｘ∈［０，１]であり、ｘは
【数９】
0006772266.tif 000010
として計算され、ここで、ＢＦはここでは割合、たとえば、バッファ中で占有されるビットの割合として表される。しかしながら、この式は、それが除算を必要とするので、ハードウェアで容易に実装可能でない。
【００７６】
固定小数点近似（Fixed-Point Approximation）
[0084]  上記の項（たとえば、バッファフルネスＢＦ、ラムダなど）を高精度に計算するために使用されるソフトウェアアルゴリズムが浮動小数点演算（floating point arithmetic）を使用するが、そのようなタイプの計算は、ハードウェアおよびＡＳＩＣベースの設計上で実装することがより困難であり得る。いくつかの態様によれば、本開示の技法は、ＡＤＳＣコーデックのハードウェア実装コストを減少させるものである。上記で説明されたように、形式ａ／ｂの任意の除算、または
【数１０】
0006772266.tif 000011
のような込み入った関数を算出することは、困難であり、概して浮動小数点演算を必要とする。これらおよび他の課題に対処するために、本技法は、そのような算出を、除算関数、ルート関数、および／または他の潜在的に込み入った浮動小数点関数の算出を必要とすることなしに、ハードウェアで容易に算出され得る固定小数点近似と入れ替えることができる。
【００７７】
[0085]  一例では、本技法は、以下のように、ＡＤＳＣコーデックにおける５つの固定小数点アルゴリズム変更を与えることができる。
・ターゲットレート：この量が計算される方法への変更
・平坦度ＱＰ：この量が計算される方法への変更
・バッファフルネス：この量が計算される方法への変更
・λbitrate：λ値を事前算出し、ルックアップテーブル（ＬＵＴ）に記憶する
・λBF：固定小数点近似を使用してλを算出する
【００７８】
[0086]  別の例では、２つのλ関数を算出する方法は切り替えられ得る。たとえば、λBFを取得するためにはＬＵＴが使用され得、λbitrateのためには固定小数点近似が使用され得る。第１の例では、λBFはブロックごとに１回のみ算出され得るが、λbitrateは、各モードについてブロックごとに１回（たとえば、ＡＤＳＣにおいて現在サポートされているモードを使用して、ブロックごとに６回）算出され得るので、ＬＵＴが使用されるλbitrateである。したがって、より多くのストレージと引き換えにわずかにより少ない合計算術（たとえば、より少ない演算）を必要とすることができるＬＵＴ手法は、より適切であり得る。一方、λBFはより低い頻度で算出されるので、λBFのためにより多くの演算が与えられるかまたは使用され得る。
【００７９】
ターゲットレート（Target Rate）
[0087]  いくつかの実施形態では、ターゲットレートは、以下で説明されるように固定小数点近似を使用して決定され得る。以前は、ターゲットレートは、以下で示される浮動小数点比を使用して計算され、ここで＃ｂｉｔｓはスライス中に残っているビット数であり、＃ｐｘはスライス中に残っているピクセルの数である。計算された浮動小数点比を使用すると、スライス中に残っているビットは、スライス中に残っているブロック／ピクセルにわたって一様に分散され得る。ターゲットレートがピクセルごとではなくブロックごと（たとえば、１６ピクセル／ブロック）に算出されるので、１６のファクタが使用されるが、他の実施形態では、各ブロックが１６以外のピクセルの数を有し得ることを理解されたい。
【数１１】
0006772266.tif 000012
【００８０】
[0088]  しかしながら、これは２つの大きい整数間の浮動小数点計算（floating point calculation）を伴う。さらに、スライス内のピクセルが処理されるにつれてスライス中に残っているピクセルの数を示す＃ｐｘが変化するので、計算を事前算出することは実行不可能であり得る。
【００８１】
[0089]  そのような浮動小数点計算を回避するために、計算は固定小数点除算器実装形態を使用し得、それはＴＲ0として示され得る。さらに、固定小数点ターゲットレート近似ＴＲ0が決定された後に、バッファフルネスの現在状態に基づいてターゲットレート近似ＴＲ0を調整するために２次ＬＵＴが使用され得る。
【数１２】
0006772266.tif 000013
【００８２】
[0090]  固定小数点近似は、「Integer Division Using Reciprocals」、Ｒｏｂｅｒｔ  Ａｌｖｅｒｓｏｎ、コンピュータ算術に関する第１０回シンポジウムの議事録、１８６〜１９０ページ、１９９１年に記載されているのと同様の方法でＴＲ0について算出され得る。以下のパラメータが与えられる。
・Ｂ0：スライスに割り振られた合計ビット
・Ｐ0：スライス中の合計ピクセル
・ｎ0：ＬＵＴのグラニュラリティ（granularity）を定義するために使用されるビット
・ｎ1：ＬＵＴエントリが追加の精度のｎ1ビットを用いて記憶される
【００８３】
[0091]  いくつかの実施形態では、ＴＲ0を計算するためのアルゴリズムは以下の通りであり得る。
１．スケーリングファクタＮを事前算出し、パラメータのコーデックのリストに記憶する。以下で示されるように、スケーリングファクタＮは、スライスＰ0中のピクセルの合計数に基づき得る。
【数１３】
0006772266.tif 000014
スライス（Ｐ0）中のピクセルの合計数が、知られている一定値であるので、スケーリングファクタＮはまた、ランタイムより前に事前算出され、記憶され得る一定値である。
２．
【数１４】
0006772266.tif 000015
＝１＜＜（ｎ0−１）個のエントリを使用して逆関数
【数１５】
0006772266.tif 000016
についてのＬＵＴ（ＬＵＴreciprocal）を事前算出し、ここにおいて、ｐは、スライスＰ中に残っているビット数のスケーリングされたバージョンに対応し得る。このＬＵＴは精度のｎ1ビットを使用して記憶され、したがって、各エントリは比
【数１６】
0006772266.tif 000017
を実際に与えている。いくつかの実施形態では、ＬＵＴreciprocalは、ｐ値の特定の範囲（たとえば、１／２から１の間のｐ値）についてのｐの逆数値を備え得る。たとえば、ｎ1は、ＬＵＴreciprocalへの入力が常に１／２から１の間にあるように構成され得る。図３は、ｎ1およびｎ0が両方とも６の値を有する（１＜＜ｎ1が６４である）、逆関数のグラフを示す。
３．ＴＲ0を算出するとき、スライスのピクセルがコーディングされるにつれて、スケーリングファクタＮの値は、あるしきい値間隔において減分され得る。Ｎが減分されることになる次のしきい値は、次のように算出され得る。
【数１７】
0006772266.tif 000018
【００８４】
４．各ブロック時間において、コーデックの現在状態（Ｂはスライス中に残っているビット数であり、Ｐはスライス中に残っているピクセルの数である）が与えられればターゲットレートは、以下のように算出され得る。
ａ．第１に、スケーリングファクタを更新する。
【数１８】
0006772266.tif 000019
上記のように、スライス中のビットが処理されるにつれて、残りのビットの数Ｐがしきい値τを下回り下がるとき、スケーリングファクタＮは減分される。さらに、しきい値τは、減分されたスケーリングファクタＮに基づいて新しい、より低い値に更新され得る。その後、残りのビットの数Ｐが再びしきい値τに到達したとき、スケーリングファクタＮおよびしきい値τは再び更新され得る。
【００８５】
ｂ．以下のようにターゲットレートを計算する。
【数１９】
0006772266.tif 000020
【００８６】
[0092]  たとえば、特定の実施形態では、スライス中に残っている合計ビットはＢ＝１２４４１６０であり得、スライス中に残っているピクセルの数はＰ＝２０７３６０である。したがって、事前算出されたスケーリングファクタＮは、
【数２０】
0006772266.tif 000021
として計算され得る。
【００８７】
[0093]  逆ＬＵＴのグラニュラリティを記述するために使用されるビット数（ｎ0）と、ＬＵＴエントリが（ｎ1）として記憶される追加の精度のビット数とは、両方とも６であり得る。したがって、ＬＵＴは、（シフトの後に０〜３１になり得る）範囲３２〜６３の値について定義され得る。たとえば、以下で示されているように、ｐシフトは１９の値を有し、それは、ＬＵＴに入力されたとき、ＬＵＴ［１９]＝８０の値をもたらす。これは
【数２１】
0006772266.tif 000022
に対応する。したがって、ＬＵＴは、６ビット精度を用いて１／ｘ（ここでｘ＝０．８）についてのスケーリングされた値を決定することが可能である。
【００８８】
[0094]  したがって、ターゲットレートは、次のように計算され得る。
【数２２】
0006772266.tif 000023
【００８９】
[0095]  初期ターゲットレートＴＲ0が近似されると、各ブロックについてのターゲットレートは、バッファフルネスの現在状態に基づく調整ファクタを加算することによって計算される。たとえば、バッファがほぼ空である場合、ターゲットレートは増加されるべきであり、バッファがほぼフルである場合、ターゲットレートは減少されるべきである。
【００９０】
[0096]  バッファフルネス値ＢＦを調整値（adjustment value）δ（ＢＦ）に関連付けた調整ＬＵＴ（δ（ＢＦ））が事前算出され、記憶され得る。調整ＬＵＴは、多くのコーデックパラメータ、たとえば、ビットレート、スライスサイズ、色空間、クロマフォーマットなどに基づいて同調または調整され得る。概して、ｍ0の精度を使用する、および
【数２３】
0006772266.tif 000024
個のエントリを有する調整ＬＵＴを記憶することが好ましい。（以下でさらに説明される）ｍ1ビットを使用してバッファフルネスが記憶され得るので、正しい調整ＬＵＴエントリは、（たとえば、丸めを用いて）必要とされるビット数だけバッファフルネスを下にシフトすることによって取得され得る。たとえば、
【数２４】
0006772266.tif 000025
【００９１】
[0097]  これらの２つの項（初期ターゲットレートＴＲ0および調整値δ（ＢＦ））は、ターゲットレートに固定小数点近似を与えるために組み合わせられ得る。
【数２５】
0006772266.tif 000026
【００９２】
[0098]  上記で説明されたように、固定小数点ターゲットレートは、ハードウェアで効率的に実装され得る完全に固定小数点算術（fixed point arithmetic）を使用して計算され得る。たとえば、ターゲットレートを決定するために必要とされる計算は、除算または指数関数なしに、加算と、減算と、ビットシフティングと、ＬＵＴルックアップとを含み得る。
【００９３】
[0099]  いくつかの場合には、場合によってはコーディングするのにコストがかかるかまたは費用がかかり得るブロックに追加のレートを割り振ることが望ましい。たとえば、スライス中の第１のライン内のブロックは、予測のために使用され得る利用可能な垂直ネイバー（vertical neighbor）を有しないことにより、コーディングするのにより費用がかかり得る。したがって、これらのブロックについてのコーディング効率が低減され、より高い予想されるレート要件（rate requirement）を生じ得る。この場合、各ブロックについてのレートは、調整値δを上方に固定することによって調整され得る。一例として、公称ターゲットレートが９６ビット／ブロックであると仮定する。ＦＬＳ（スライスの第１のライン（First Line of Slice））内のブロックを１９２ビット／ブロックに増加させるために、δ＝９６のオフセットがＦＬＳのみのために使用され得る。このオフセットの後に、ＮＦＬＳ（スライスの非第１のライン（Non-First Line of Slice））内のブロックについて、ターゲットレートは、ＴＲ0＋δ（ＢＦ）として算出されることに戻り得る。
【００９４】
【数２６】
0006772266.tif 000027
【００９５】
[0100]  別の実施形態では、ターゲットレートは、ＦＬＳとバッファフルネスの両方を考慮に入れ得る。たとえば、
【数２７】
0006772266.tif 000028
【００９６】
[0101]  図４は、いくつかの実施形態による、固定小数点近似を使用してブロックについてのターゲットレートを決定するための方法のフローチャートを示す。ブロック３０２において、スケーリングファクタが事前算出され、記憶される。スケーリングファクタは定数Ｎに対応し得る。いくつかの実施形態では、スケーリングファクタは、スケーリングファクタが減分され得る、スライス中に残っているピクセルの数に対応するしきい値を決定するために使用され得る。
【００９７】
[0102]  ブロック４０４において、逆数を計算するためのＬＵＴが事前算出され、記憶され得る。いくつかの実施形態では、ＬＵＴは、予想される値の範囲にわたって（たとえば、１／２から１の間で）精度のｎ1ビットを使用して記憶され得る。いくつかの実施形態では、ブロック４０２およびブロック４０４は、ビデオデータをコーディングするより前に実施され得る事前算出ステップに対応し得る。たとえば、スケーリングファクタＮおよび逆ＬＵＴは、パラメータのビデオコーデック（video codec）のリストに記憶され得る。
【００９８】
[0103]  コーディング中に、スライスの各ブロックについてターゲット値が計算され得る。ブロック４０６において、コーディングされるべきスライス中に残っているピクセルの数がしきい値よりも小さいかどうかに関する決定が行われ得る。しきい値は、スケーリングファクタＮ（たとえば、Ｎに基づくビットシフト）に基づいて決定され得る。
【００９９】
[0104]  スライス中の残りのピクセルがしきい値よりも小さい場合、ブロック４０８において、スケーリングファクタＮは更新され得る。いくつかの実施形態では、スケーリングファクタは減分され得る。さらに、更新されたスケーリングファクタに基づいて新しいしきい値が決定され得る。
【０１００】
[0105]  ブロック４１０において、スケーリングファクタＮおよび逆ＬＵＴを使用して、固定小数点近似を使用してブロックについてのターゲットレートが推定される。いくつかの実施形態では、推定されたターゲットレートはさらに、バッファフルネスのレベルに基づく調整値δ（ＢＦ）に基づいて変更され得る。たとえば、バッファフルネスが高い場合、ターゲットレートは低減され得る。一方、バッファフルネスが低い場合、ターゲットレートは増加され得る。いくつかの実施形態では、ターゲット値はさらに、現在ブロックがスライスのブロックの第１のラインの一部であるかどうかに基づいて調整され得る。いくつかの実施形態では、ブロック４０６〜ブロック４１０は、スライスの各ブロックについて繰り返され得る。
【０１０１】
[0106]  したがって、１つまたは複数の定数（たとえば、スケーリングファクタＮ）および／またはＬＵＴを使用する１つまたは複数の関数（たとえば、逆ＬＵＴ）を事前算出し、記憶することによって、ターゲットレートなどのパラメータは、除算および指数関数などの複雑な計算を回避することによってそのような計算がハードウェアでより容易に実施されることを可能にする固定小数点近似を使用して計算され得る。
【０１０２】
バッファフルネスの関数としての平坦度ＱＰ（Flatness QP as a function of buffer fullness）
[0107]  前のセクションにおいて上記で説明されたように、ターゲットレート（δ（ＢＦ））についての調整ＬＵＴは、バッファフルネスの関数としてコーデックのブロックごとターゲットレートの調整に対応する。この技法を使用すると、ターゲットレートは、レートバッファがほぼフルであるときにより低くなり得、レートバッファがほぼ空であるときにより高くなり得る。
【０１０３】
[0108]  同じまたは同様の様式では、本技法は、バッファフルネスの関数としての平坦度ＱＰを調整することができる。いくつかの実施形態では、平坦度ＱＰは、たとえば、様々な複雑さの領域間の（たとえば、複雑な領域から平坦な領域への遷移、平坦な領域から複雑な領域への遷移など）、平坦度検出に基づいてエンフォース（enforce）されるＱＰ値を指し得る。たとえば、平坦度ＱＰは、その全体が参照により本明細書に組み込まれる、２０１５年４月１３日に出願された米国特許出願第１４／６８５，４７９号（代理人整理番号：ＱＶＩＤ．２２１Ａ／１４４５６８）に記載されているＱＰまたは平坦度ＱＰと同様または同じであり得、概略的なＱＰ調整方式は、その全体が参照により本明細書に組み込まれる、２０１５年４月１３日に出願された米国仮出願第６２／１４６，８９８号（代理人整理番号：ＱＶＩＤ．２７０ＰＲ１／１５３０２７Ｐ１）において説明されたＱＰ調整方式と同様または同じであり得る。
【０１０４】
[0109]  特に、平坦な領域から複雑な領域へまたは複雑な領域から平坦な領域へ遷移するとき、ＱＰは、視覚的アーティファクト（visual artifact）がそのような境界において見えないように調整され得る。しかしながら、コーデックがそれに変更されるＱＰはバッファフルネスに依存し得る。たとえば、極めて困難なまたは複雑な領域では、レートバッファがより負担を課された状態にあるので、適度のＱＰ値が使用される必要があり得る。いくつかの態様によれば、平坦から複雑へのまたはその逆の遷移において（１つまたは複数の）視覚的アーティファクトがもたらされないように、適度のＱＰ値が選択され得ることに留意することが重要である。一方、レートバッファがほぼ空である場合、より高いレートという犠牲を払ってひずみを最小限に抑えるために極めて低いＱＰが使用され得る。バッファフルネス値をＱＰ調整値に関連付けるＬＵＴflatnessQPが事前算出され、記憶され得る。
【０１０５】
[0110]  上記のδ（ＢＦ）と同様の様式で、バッファフルネスは、（ｍ1−ｍ0）ビットだけ下にシフトされ得、ここで、ｍ1はバッファフルネスのためのビット数であり、ｍ0は、平坦度ＱＰ調整ＬＵＴを定義するために使用されるビット数である。ＬＵＴ  ｍ0のビット数およびＬＵＴ中に含まれている値は、コーデックの構成に応じて同調または調整され得る。たとえば、それらは、圧縮ビットレート、ＲＧＢ／ＹＣｂＣｒ入力、クロマサブサンプリングなど、ファクタに応じて変更され得る。この様式で、平坦度ＱＰは、固定小数点近似を使用して決定され得る。
【数２８】
0006772266.tif 000029
【０１０６】
[0111]  図５は、いくつかの実施形態による、固定小数点近似を使用してブロックについての平坦度ＱＰを決定するための方法のフローチャートを示す。ブロック５０２において、バッファフルネス値をＱＰ調整値に関連付けたＬＵＴまたは他のデータ構造が事前算出され、記憶される。ブロック５０４において、スライスの特定のブロックのためのコーディング時間中に、ブロックが平坦な領域と複雑な領域との間の遷移を含んでいるかどうかに関する決定が行われる。いくつかの実施形態では、決定は、ブロックに関連付けられた複雑さ値を決定し、決定された複雑さ値を１つまたは複数のしきい値と比較することによって行われ得る。いくつかの実施形態では、１つまたは複数の隣接ブロックの複雑さ値も考慮され得る。遷移がブロック内に存在しないと決定された場合、ブロックのＱＰ値は、平坦度ＱＰ調整値に設定される代わりに、通常に設定され得る。プロセスは次いで、コーディングされるべきビデオデータの後続のブロックのためにブロック５０４に戻り得る。
【０１０７】
[0112]  一方、遷移がブロック内に存在すると決定された場合、平坦度ＱＰ調整が決定される必要があり得る。ブロック５０６において、現在のバッファフルネス値は、バッファフルネスのために使用されるビット数とＱＰ調整値を定義するために使用されるビット数とに基づいてシフトされる。ブロック５０６において、ＱＰ調整値は、事前算出されたＬＵＴとシフトされたバッファフルネス値とを使用して決定される。さらに、ＱＰ調整値は、０から、ＱＰ調整値を定義するために使用されるビット数の最大値の間でクリッピングされ得る。
【０１０８】
[0113]  ブロック５１０において、ブロックに関連付けられたＱＰ値は、決定されたＱＰ調整値に設定され得る。プロセスは次いで、コーディングされるべきビデオデータの後続のブロックのためにブロック５０４に戻り得る。
【０１０９】
[0114]  図５は、平坦度ＱＰ調整値を決定する前にブロックが遷移を含んでいるかどうかを決定することを示すが、他の実施形態では、平坦度ＱＰ調整値は、ブロックの複雑さを分析する前に決定され得ることを理解されたい。
【０１１０】
バッファフルネス（Buffer Fullness）
[0115]  上記の式（１）に基づいて計算されるバッファフルネスは、それが除算演算を必要とするので、ハードウェアで容易に実装可能でない。特に、式（１）における分母値、ｂｕｆＡｄｊＳｉｚｅは、スライス中のブロックの位置に応じて値が変化する。したがって、バッファフルネスを算出するために除算値を事前算出することは、実行不可能であり得る。たとえば、図６は、スライスのブロックがコーディングされるとき、ｂｕｆＡｄｊＳｉｚｅがどのように変化し得るかを示す。たとえば、ｎｕｍＢｌｏｃｋｓＴｈしきい値までのブロックの数について、ｂｕｆＡｄｊＳｉｚｅは、ＢｕｆｆｅｒＭａｘＳｉｚｅと同じであり得る（たとえば、オフセット＝０）。しかしながら、しきい値数のブロックがコーディングされた後に、ｂｕｆＡｄｊＳｉｚｅは、追加のブロックがコーディングされるにつれて、減少し得る。
【０１１１】
[0116]  ハードウェアでバッファフルネスを容易に計算するために、オフセット値は、分母から分子に移動され得、したがって、分母ｂｕｆｆｅｒＡｄｊＳｉｚｅが、スライス全体にわたって一定であるＢｕｆｆｅｒＭａｘＳｉｚｅになる。たとえば、式（１）は、次のように変更される。
【数２９】
0006772266.tif 000030
【０１１２】
[0117]  式（３）におけるオフセット値は、式（１）に関して上記で説明されたのと同じ方法で計算される。一代替形態では、式（３）の分子における（ＢｕｆｆｅｒＭａｘＳｉｚｅ＞＞１）は省略され得る。式（３）に基づいてバッファフルネスを計算するための変更された方法は、スライスの終わりにＢｕｆｆｅｒＣｕｒｒｅｎｔＳｉｚｅ＝ｍａｘＢｕｆｆｅｒＢｉｔｓＡｔＳｌｉｃｅＥｎｄであるとき、１００％のバッファフルネスを生じる。
【０１１３】
[0118]  式（３）は式（１）と等価でないが、式（３）を用いて計算されたＢＦの一般的な挙動が、スライス内の異なるブロックについての式（１）の挙動とほとんど同様であることを理解されたい。
【０１１４】
[0119]  式（３）における分母がスライス全体にわたって一定値であり得るので、バッファフルネスＢＦは固定小数点近似を使用して計算され得る。［０１０７］
たとえば、式（３）についての固定小数点近似が、以下の式（４）の場合のように決定され得る。一定値ＢｕｆｆｅｒＭａｘＳｉｚｅに基づくファクタａが事前算出され、たとえば、コーデックのピクチャパラメータセット（ＰＰＳ：picture parameter set）に記憶され得る。
【０１１５】
[0120]  以下のパラメータのセットが与えられる。
・ＢｆＲａｎｇｅＢｉｔｓ：バッファフルネスを表すために使用されるビット数
・ＢｆＳｃａｌｅＢｉｔｓ：バッファフルネスを計算するための精度
【０１１６】
[0121]  ０〜（２＾ＢｆＲａｎｇｅＢｉｔｓ）−１にわたる（ＢＦiとして示される）バッファフルネスの整数値が、次のように計算され得る。
【数３０】
0006772266.tif 000031
ここで、
【数３１】
0006772266.tif 000032
であり、それは、コーデックのパラメータセットに記憶され得る。
【０１１７】
[0122]  式（４）の一代替形態では、右シフト前に、最も近い整数に丸めるために分子において（ＢｆＳｃａｌｅＢｉｔｓ＞＞１）の値が加算され得る。いくつかの実施形態では、パラメータＢｆＲａｎｇｅＢｉｔｓおよび／またはＢｆＳｃａｌｅＢｉｔｓは、バッファフルネスを計算するためのビット数および精度が調整され得るように、スケーラブルであり得る。たとえば、ａは
【数３２】
0006772266.tif 000033
として事前計算、次いで、ＢｆＲａｎｇｅＢｉｔｓおよびＢｆＳｃａｌｅＢｉｔｓの値に基づいてビットシフト得る。
【０１１８】
[0123]  図７は、いくつかの実施形態による、バッファフルネスを決定するためのプロセスのフローチャートを示す。ブロック７０２において、最大バッファサイズの逆数が事前算出され、記憶され得る。たとえば、逆数は、ビデオコーデックのパラメータセットの一部として記憶され得る。
【０１１９】
[0124]  ブロック７０４において、最大バッファサイズの逆数は、バッファフルネスを表すためのビット数および／またはバッファフルネスを計算するための精度値に基づいてスケーリングされ得る。いくつかの実施形態では、ビット数および精度は定数であり得、ブロック７０２における最大バッファサイズの逆数用いて事前算出され得る。
【０１２０】
[0125]  ブロック７０６において、バッファフルネスが、現在のバッファサイズと最大バッファサイズのスケーリングされた逆数とに基づいて決定され得る。バッファフルネス測定を、（式（１）の場合のように）調整されたバッファサイズの代わりに、最大バッファサイズに基づかせることによって、バッファフルネスは、浮動小数点の代わりに、固定小数点近似を使用して計算され、ハードウェアでのより容易な実装を可能にし得る。
【０１２１】
ビットレートのためのラグランジュパラメータ−λ（ビットレート）（Lagrangian Parameter for Bitrate - λ(bitrate)）
[0126]  上記で説明されたように、ラムダまたはラグランジュパラメータは、所与のブロックのビットレート（たとえば、あるモードでブロックをコーディングするために必要とされるビット数）の関数として調整され得る。一実施形態では、ビットレートについてのラグランジュパラメータは、以下で説明されるように固定小数点近似を使用して決定され得る。以前は、ラグランジュパラメータは、次のように計算され得る。
【数３３】
0006772266.tif 000034
ここで、｛ａ，ｂ，ｃ，ｄ｝は同調可能または調整可能なパラメータであり、
【数３４】
0006772266.tif 000035
であり、ここで、ｂｉｔｓは、（ブロックについてのビットレートとも呼ばれ、ターゲットレート、ＱＰ値、および／または他のパラメータに基づき得る）ブロックをコーディングするために使用されるビット数であり、ｍａｘＢｉｔｓはワーストケースビット／ブロックである。この計算は、ハードウェア実装に好適でない、浮動小数点演算を使用して行われ得る。
【０１２２】
[0127]  固定小数点演算（fixed point arithmetic）を使用してビットレートの関数としてラグランジュパラメータを算出するために、ＬＵＴ（ＬＵＴλ）が使用され得る。さらに、スケーリングファクタｃが事前算出され、コーデックのパラメータセットに記憶され得る。スケーリングファクタは、除算ではなくビットシフティングが使用され得るように、分母ｍａｘＢｉｔｓ（たとえば、ブロックごとの最大ビット）を２のべき乗に変換するために使用され得る。
【０１２３】
[0128]  以下のパラメータが与えられる。
・ｎ3：ラムダ計算のための合計精度
・ｎ4：ＬＵＴλがサイズ（１＜＜ｎ4）のものである
【０１２４】
[0129]  λ（ビットレート）を計算するためのアルゴリズムは、以下の通りである。
１．上記で説明された指数関数を使用してＬＵＴλを事前算出する。
ａ．一実施形態では、関数は、ＬＵＴを生成するために均一にサンプリングされ得る。
ｂ．別の実施形態では、関数は、より高いダイナミックレンジをもつ関数のエリアはより密にサンプリングされ、より少ないレンジをもつエリアはより疎にサンプリングされるように、不均一にサンプリングされ得る。
２．次のようにスケーリングファクタｃを事前算出する。
【数３５】
0006772266.tif 000036
３．最後に、ＬＵＴにおいてラムダ値をルックアップする。
【数３６】
0006772266.tif 000037
【０１２５】
[0130]  上記の代替手法では、ＬＵＴは、低減された数のエントリ（たとえば、６４の代わりに１６）を用いて記憶され得、次いで、値に近似するために双一次補間（bilinear interpolation）が使用され得る。これは、λ値を決定するためにわずかにより多くの論理を必要とするが、固定小数点補間が使用され得、これはワーストケース複雑さを制限する。トレードオフは、ＬＵＴテーブルの低減されたストレージと引き換えに追加された論理である。
【０１２６】
[0131]  図８は、いくつかの実施形態による、ビットレートについてのラグランジュパラメータを決定するためのプロセスのフローチャートを示す。ブロック８０２において、スケーリングファクタｃが事前算出される。スケーリングファクタｃは、ｃによってスケーリングされた定数ｍａｘＢｉｔｓが２のべき乗になり、これにより、ｍａｘＢｉｔｓで除算することが、ビットシフト演算（bit shift operation）を使用して実施することを可能にする、に構成され得る。
【０１２７】
[0132]  ブロック８０４において、ブロックをコーディングするために使用されるビット数をビットレートラグランジアンに関連付けるＬＵＴまたは他のデータ構造。いくつかの実施形態では、ビット数は、スケーリングファクタｃと、精度ファクタと、ＬＵＴまたはデータ構造のサイズの指示とに基づいてスケーリングされ得る。
【０１２８】
[0133]  コーディング時間中に、ブロック８０６において、ブロックについてのビットレートラグランジアンは、ブロックをコーディングするために使用されるビット数と、事前算出されたＬＵＴおよびスケーリングファクタｃとに基づいて決定され得る。
【０１２９】
バッファフルネスについてのラグランジュパラメータ−λ（ＢＦ）（Lagrangian Parameter for Buffer Fullness - λ (BF)）
[0134]  上記で説明されたように、ブロックについてのラグランジュパラメータは、バッファフルネスの測度（measure）に基づいて調整され得る。いくつかの態様によれば、バッファフルネス（ＢＦi）のための範囲は、ＢＦi∈［０，（２BfRangeBits）−１]である。したがって、式（２）において
【数３７】
0006772266.tif 000038
のように計算されるｘは、次のように書き直され得る。
【数３８】
0006772266.tif 000039
【０１３０】
[0135]  上記を使用して、式２は、以下のように変更され得る。
【数３９】
0006772266.tif 000040
【０１３１】
[0136]  精度を増加させるために、上式は、一定のスケーリングファクタ２ScaleBitsによって乗算され得、ここで、ＳｃａｌｅＢｉｔｓは正の整数である。いくつかの実施形態では、バッファフルネスについてのラムダ値またはラグランジュパラメータは、以下で説明されるように固定小数点近似を使用して決定され得る。
【０１３２】
[0137]  一実施形態では、固定小数点演算を使用してバッファフルネスに基づいてラムダ（lambda）を計算するために、ルックアップテーブル（ＬＵＴ）方法が使用され得る。たとえば、式（５）におけるｄ1が２のべき乗でない場合、ＬＵＴが使用され得る。一例では、ＬＵＴは、２＾（ｌb）のサイズをもつＬＵＴを作成するためにｌbビットを使用してＢＦiを線形的にサンプリングすることによって式（５）を使用して構築され得る。ＬＵＴが構築されると、バッファフルネスラムダ（buffer fullness lambda）は、インデックス＝（ＢＦi＋オフセット）＞＞スケールとして計算されたインデックスを使用してＬＵＴから推論され得、ここで、スケール＝ＢｆＲａｎｇｅＢｉｔｓ−ｌbであり、オフセット＝１＜＜（スケール−１）である。いくつかの実施形態では、インデックスは、インデックス＝（ＢＦi）＞＞スケールとして計算され得る。最後に、いくつかの実施形態では、必要な場合、計算されたインデックス値は、ＬＵＴにおける有効なエントリを保証するために、それぞれの最大値
【数４０】
0006772266.tif 000041
および最小値０にクリッピングされ得る。
【０１３３】
[0138]  別の例では、ＬＵＴは、非線形サンプリングに基づいて構築され得、ここで、ＢＦiは、不均一なステップサイズを用いてサンプリングされ得る。一例では、ＬＵＴは、より低い範囲においてより粗く、より高い範囲においてより密にサンプリングされ得、たとえば、ステップサイズは０から遠ざかるときに増加する。また別の例では、より密なサンプリングは（１つまたは複数の）より低い範囲にあり得、粗いサンプリングは（１つまたは複数の）より高い範囲にあり得る。
【０１３４】
[0139]  別の代替形態では、式（５）は、ラムダ（lambda）がオンザフライ（on the fly）で計算され得るように、ラムダがより少ない演算を使用して容易に算出され得るように変更され得る。たとえば、式は、それが、整数を用いた乗算と、シフト演算（右シフトと左シフトの両方）と、加算とのみを伴うように変更され得る。言い換えれば、変更された式は除算演算を含んでいない。この方法の利点は、それがＬＵＴストレージを低減し、ＬＵＴを用いたメモリアクセス演算をなくすことができることである。一例では、ｄ1が２のべき乗である場合、関数λ（ｘ）は、固定小数点演算を使用して容易に算出され得る。
【０１３５】
[0140]  このようにして、本技法は、たとえば、固定小数点近似を使用することによって、ハードウェア実装における複雑さ、困難、および／または増加されたコストをもたらす演算の使用を低減するかまたはなくすことができる。そのような演算は、除算、込み入ったまたは複雑な関数または算出、浮動小数点演算などを伴うことがある。提案されるＡＤＳＣコーデックまたはモデルのハードウェア複雑さは、上記の固定小数点近似を使用して大幅に低減され得る。
【０１３６】
[0141]  本開示で説明されるすべての例および実施形態は、実施形態に応じて、別々にまたは組合せで実装され得る。実施形態に応じて、例および実施形態のいくつかの特徴が省略または変更され得、他の特徴が例および実施形態に追加され得る。
【０１３７】
[0142]  図９は、いくつかの実施形態による、バッファフルネスについてのラグランジュパラメータを決定するためのプロセスのフローチャートを示す示す。ブロック９０２において、ＬＵＴまたは他のデータ構造が事前算出され、記憶される。ＬＵＴまたは他のデータ構造は、バッファフルネス（ＢＦi）をバッファフルネスについてのラグランジュパラメータに関連付け得る。
【０１３８】
[0143]  ブロック９０４において、コーディング時間中に、（たとえば図７に示されているプロセスを使用して）計算されたバッファフルネス値は、バッファフルネス値を表すために使用されるピクセルの数および／あるいはＬＵＴまたはデータ構造のサイズ（たとえば、ＬＵＴインデックスのピクセルの数）の指示に基づいてスケーリングされ得る。ブロック９０６において、スケーリングされたバッファフルネス値は、バッファフルネスについてのラグランジュパラメータを決定するために、ＬＵＴまたはデータ構造（たとえば、ＬＵＴインデックス）への入力として使用される。
【０１３９】
他の考慮事項（Other Considerations）
[0144]  本開示の態様は、図２Ａ中のビデオエンコーダ２０など、エンコーダの観点から説明されたことに留意されたい。しかしながら、上記で説明された動作の逆の動作が、たとえば、図２Ｂ中のビデオデコーダ３０によって、生成されたビットストリームを復号するために適用され得ることを、当業者は諒解されよう。
【０１４０】
[0145]  本明細書で開示される情報および信号は、多種多様な技術および技法のいずれかを使用して表され得る。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界または磁性粒子、光場または光学粒子、あるいはそれらの任意の組合せによって表され得る。
【０１４１】
[0146]  本明細書で開示される実施形態に関して説明された様々な例示的な論理ブロック、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、およびステップが、概してそれらの機能に関して上記で説明された。そのような機能がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明された機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈されるべきではない。
【０１４２】
[0147]  本明細書で説明された技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセット、自動車、アプライアンス、ウェアラブル、および／または他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスなど、様々なデバイスのいずれかにおいて実装され得る。デバイスまたは構成要素として説明された特徴は、集積論理デバイスに一緒に、または個別であるが相互運用可能な論理デバイスとして別々に実装され得る。ソフトウェアで実装された場合、本技法は、実行されたとき、上記で説明された方法のうちの１つまたは複数を実施する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって、少なくとも部分的に実現され得る。コンピュータ可読データ記憶媒体は、パッケージング材料を含むことがあるコンピュータプログラム製品の一部を形成し得る。コンピュータ可読媒体は、同期型ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気または光学データ記憶媒体など、メモリまたはデータ記憶媒体を備え得る。本技法は、追加または代替として、伝搬信号または電波など、命令またはデータ構造の形態でプログラムコードを搬送または伝達し、コンピュータによってアクセスされ、読み取られ、および／または実行され得るコンピュータ可読通信媒体によって、少なくとも部分的に実現され得る。
【０１４３】
[0148]  プログラムコードは、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または他の等価の集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサを含み得るプロセッサによって実行され得る。そのようなプロセッサは、本開示で説明された技法のいずれかを実施するように構成され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つまたは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。したがって、本明細書で使用される「プロセッサ」という用語は、上記の構造、上記の構造の任意の組合せ、または本明細書で説明された技法の実装に好適な他の構造または装置のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用のソフトウェアまたはハードウェア内に提供され得、あるいは複合ビデオエンコーダ／デコーダ（コーデック）に組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素で十分に実装され得る。
【０１４４】
[0149]  本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示される技法を実施するように構成されたデバイスの機能的態様を強調するために、様々な構成要素またはユニットが説明されたが、それらの構成要素またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明されたように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明された１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【０１４５】
[0150]  上記のことは、様々な異なる実施形態に関して説明されたが、一実施形態からの特徴または要素は、本開示の教示から逸脱することなく他の実施形態と組み合わせられ得る。ただし、それぞれの実施形態間の特徴の組合せは、必ずしもそれに限定されるとは限らない。本開示の様々な実施形態が説明された。これらおよび他の実施形態は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
ビデオデータをコーディングするための装置であって、
前記ビデオデータを記憶するためのメモリと、前記メモリがバッファを含む、
前記メモリに動作可能に結合されたハードウェアプロセッサとを備え、前記ハードウェアプロセッサは、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することと、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定することと、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することと、
スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することと、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を行うように構成された、装置。
［Ｃ２］
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、Ｃ１に記載の装置。
［Ｃ３］
前記ハードウェアプロセッサが、バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整するようにさらに構成された、Ｃ１に記載の装置。
［Ｃ４］
前記調整量が、ルックアップテーブル（ＬＵＴ）を使用すること基づいて決定される、Ｃ３に記載の装置。
［Ｃ５］
前記ハードウェアプロセッサは、前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整するようにさらに構成された、Ｃ１に記載の装置。
［Ｃ６］
前記ハードウェアプロセッサが、前記スライス中に残っているビット数に基づいて前記逆数値をスケーリングするようにさらに構成された、Ｃ１に記載の装置。
［Ｃ７］
ビデオデータのブロックをコーディングするためのターゲットレートを決定するためのコンピュータ実装方法であって、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することと、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定することと、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することと、
スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することと、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を備える、コンピュータ実装方法。
［Ｃ８］
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、Ｃ７に記載のコンピュータ実装方法。
［Ｃ９］
バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整することをさらに備える、Ｃ７に記載のコンピュータ実装方法。
［Ｃ１０］
前記調整量が、ルックアップテーブル（ＬＵＴ）を使用すること基づいて決定される、Ｃ９に記載のコンピュータ実装方法。
［Ｃ１１］
前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整することをさらに備える、Ｃ７に記載のコンピュータ実装方法。
［Ｃ１２］
前記スライス中に残っているビット数に基づいて前記逆数値をスケーリングすることをさらに備える、Ｃ７に記載のコンピュータ実装方法。
［Ｃ１３］
装置であって、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶するための手段と、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶するための手段と、
コーディングされるべき前記ビデオデータを受信するための手段と、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定するための手段と、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定するための手段と、
スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施するための手段と、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を備える装置。
［Ｃ１４］
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、Ｃ１３に記載の装置。
［Ｃ１５］
バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整するための手段をさらに備える、Ｃ１３に記載の装置。
［Ｃ１６］
前記調整量が、ルックアップテーブル（ＬＵＴ）を使用すること基づいて決定される、Ｃ１５に記載の装置。
［Ｃ１７］
前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整するための手段をさらに備える、Ｃ１３に記載の装置。
［Ｃ１８］
前記スライス中に残っているビット数に基づいて前記逆数値をスケーリングするための手段をさらに備える、Ｃ１３に記載の装置。
［Ｃ１９］
画像のスライスに関係するビデオデータを記憶した非一時的コンピュータ可読記憶媒体であって、前記スライスが１つまたは複数のブロックを備え、ここにおいて、前記記憶媒体は、実行されたとき、デバイスのプロセッサに、
ビデオデータのスライス内のピクセルの合計数に基づいてスケーリングパラメータを決定および記憶することと、
複数の入力値をそれらの逆数値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが少なくとも１つのスライスを備える、
前記記憶されたスケーリングパラメータに基づいてしきい値を決定することと、
コーディングされるべき前記スライスのブロックについて、前記スライス中の残りのピクセルの数が前記しきい値よりも小さいという決定に応答して、前記スケーリングパラメータを更新し、スケーリングファクタに基づいて、更新されたしきい値を決定することと、
スケーリングファクタに基づいてスケーリングされた残りのピクセルの前記数に関連付けられた逆数値に基づいて、前記ブロックについてのターゲットレートを決定するために１つまたは複数の固定小数点近似演算を実施することと、ここにおいて、前記逆数値が、前記記憶されたデータ構造を使用して決定される、を行わせる命令をさらに記憶している、非一時的コンピュータ可読記憶媒体。
［Ｃ２０］
前記データ構造がルックアップテーブル（ＬＵＴ）を備える、Ｃ１９に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２１］
前記記憶媒体が、実行されたとき、前記プロセッサに、バッファフルネスの測度に基づく量によって、前記決定されたターゲットレートを調整させる命令をさらに記憶している、Ｃ１９に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２２］
前記調整量が、ルックアップテーブル（ＬＵＴ）を使用すること基づいて決定される、Ｃ２１に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２３］
前記記憶媒体は、実行されたとき、前記プロセッサに、前記ブロックが前記スライスの第１のライン上に配置されたかどうかに基づいて、前記決定されたターゲットレートを調整させる命令をさらに記憶している、Ｃ１９に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２４］
前記記憶媒体が、実行されたとき、前記プロセッサに、前記スライス中に残っているビット数に基づいて前記逆数値をスケーリングさせる命令をさらに記憶している、Ｃ１９に記載の非一時的コンピュータ可読記憶媒体。
［Ｃ２５］
ビデオデータをコーディングするための装置であって、
前記ビデオデータを記憶するためのメモリと、前記メモリがバッファを含む、
前記メモリに動作可能に結合されたハードウェアプロセッサとを備え、前記ハードウェアプロセッサは、
最大バッファサイズの逆数に基づいて第１のパラメータ値を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
コーディングされるべき前記スライスのブロックについて、バッファフルネスを表すために使用されるビット数を示す第１の値と、バッファフルネスを計算するための精度を示す第２の値とに基づいて、前記第１のパラメータをスケーリングすることと、
前記スケーリングされた第１のパラメータと、前記バッファの現在のサイズと、前記スライス内の前記ブロックの位置に基づくバッファオフセット値と、バッファフルネスを計算するための精度を示す前記第２の値とに基づいて、前記ブロックについてのバッファフルネス値を決定するために１つまたは複数の固定小数点近似演算を実施することとを行うように構成された、装置。
［Ｃ２６］
前記ハードウェアプロセッサは、
バッファフルネス値をバッファフルネス値についてのラグランジュ値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
コーディングされるべき前記スライスのブロックについて、前記ブロックの計算されたバッファフルネス値を、前記バッファフルネス値をコーディングするために使用されるビット数を示す第１のパラメータと、前記データ構造のインデックスをコーディングするために使用されるビット数を示す第２のパラメータとに基づいてスケーリングすることと、
前記記憶されたデータ構造と前記スケーリングされたバッファフルネス値とを使用して、前記バッファフルネス値についてのラグランジュ値を決定するために１つまたは複数の固定小数点近似演算を実施することとを行うようにさらに構成された、Ｃ２５に記載の装置。
［Ｃ２７］
ビデオデータをコーディングするための装置であって、
前記ビデオデータを記憶するためのメモリと、前記メモリがバッファを含む、
前記メモリに動作可能に結合されたハードウェアプロセッサとを備え、前記ハードウェアプロセッサは、
バッファフルネス値を量子化パラメータ（ＱＰ）調整値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
コーディングされるべき前記スライスのブロックについて、前記ブロックが複雑な領域と平坦な領域との間の遷移を含んでいるかどうかを決定することと、ここにおいて、複雑な領域が、平坦な領域と比較してより高い複雑さを有する、
前記ブロックが遷移を含んでいるという決定に応答して、バッファフルネス値を、前記バッファフルネス値をコーディングするために使用されるビット数と、ＱＰ調整値をコーディングするために使用されるべきビット数とに基づいてシフトすることと、
前記記憶されたデータ構造と前記シフトされたバッファフルネス値とに基づいて、前記ブロックについてのＱＰ調整値を決定するために１つまたは複数の固定小数点近似演算を実施することと、
前記ブロックのＱＰを前記決定されたＱＰ調整値に設定することとを行うように構成された、装置。
［Ｃ２８］
ビデオデータをコーディングするための装置であって、
前記ビデオデータを記憶するためのメモリと、
前記メモリに動作可能に結合されたハードウェアプロセッサとを備え、前記ハードウェアプロセッサは、
ビデオデータのブロックをコーディングするために使用され得る最大ビット数に基づいて第１のスケーリングパラメータを決定および記憶することと、
ビデオデータのブロックをコーディングするために使用されるビット数をビットレートについてのラグランジュパラメータに関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
コーディングされるべき前記スライスのブロックについて、前記第１のスケーリングパラメータによって調整された前記ブロックをコーディングするためのビット数に基づいて、前記データ構造を使用して前記ブロックのビットレートについてのラグランジアンを決定する１つまたは複数の固定小数点近似演算を実施することとを行うように構成された、装置。
［Ｃ２９］
ビデオデータをコーディングするための装置であって、
前記ビデオデータを記憶するためのメモリと、前記メモリがバッファを含む、
前記メモリに動作可能に結合されたハードウェアプロセッサとを備え、前記ハードウェアプロセッサは、
バッファフルネス値をバッファフルネス値についてのラグランジュ値に関連付けるデータ構造を決定および記憶することと、
コーディングされるべき前記ビデオデータを受信することと、前記ビデオデータが、複数のブロックに分割された少なくとも１つのスライスを備える、
コーディングされるべき前記スライスのブロックについて、前記ブロックの計算されたバッファフルネス値を、前記バッファフルネス値をコーディングするために使用されるビット数を示す第１のパラメータと、前記データ構造のインデックスをコーディングするために使用されるビット数を示す第２のパラメータとに基づいてスケーリングすることと、
前記記憶されたデータ構造と前記スケーリングされたバッファフルネス値とを使用して、前記バッファフルネス値についてのラグランジュ値を決定するために１つまたは複数の固定小数点近似演算を実施することとを行うように構成された、装置。
【図１Ａ】
0006772266.tif 000042
【図１Ｂ】
0006772266.tif 000043
【図２Ａ】
0006772266.tif 000044
【図２Ｂ】
0006772266.tif 000045
【図３】
0006772266.tif 000046
【図４】
0006772266.tif 000047
【図５】
0006772266.tif 000048
【図６】
0006772266.tif 000049
【図７】
0006772266.tif 000050
【図８】
0006772266.tif 000051
【図９】
0006772266.tif 000052