(57)【特許請求の範囲】
【請求項１】
ビデオデータを符号化するための方法であって、前記方法が、
ビデオエンコーダにより、サンプル適応オフセット(SAO)モードを使用してピクチャの最大コーディング単位(LCU)のサンプルを符号化するステップを備え、前記SAOモードを使用して前記LCUの前記サンプルを符号化するステップが、
前記ビデオエンコーダにより、前記LCUの対応する再構成されたサンプルと前記LCUの元のサンプルとの間の差を計算するステップと、
前記ビデオエンコーダにより、第1の指定されたビット数を有し、それぞれの値の第1の範囲内に入るクリップされた差を形成するために、前記差の各々からビット数をクリップするステップと、
前記ビデオエンコーダにより、差の合計を形成するために、前記クリップされた差を合計するステップと、
前記ビデオエンコーダにより、第2の指定されたビット数を有し、それぞれの値の第2の範囲内に入るクリップされた差の合計を形成するために、前記差の合計からビット数をクリップするステップと、
前記ビデオエンコーダにより、前記再構成されたサンプルの数を計算するステップと、
前記ビデオエンコーダにより、第3の指定されたビット数を有し、それぞれの値の第3の範囲内に入るクリップされたサンプル数を形成するために、前記再構成されたサンプルの数からビット数をクリップするステップと、
前記ビデオエンコーダにより、前記LCUのためのオフセットを生成するために、前記クリップされたサンプル数で前記クリップされた差の合計を除算するステップと
を備え、前記LCUのためのオフセットを生成するために前記クリップされた差の合計を除算するステップが、
前記差の合計に等しい変数から、前記変数がゼロより大きく、かつ、反復減算が実行される回数が8未満である限り、前記ビデオエンコーダにより前記サンプル数を反復減算するステップと、
前記ビデオエンコーダにより、実行された反復減算の数として前記LCUのためのオフセットを決定するステップと、
前記ビデオエンコーダにより、前記差の合計の符号に基づいて、前記オフセットの符号を決定するステップと
を備える、方法。
【請求項２】
前記SAOモードが、バンドオフセットモードまたはエッジオフセットモードを備える、請求項1に記載の方法。
【請求項３】
前記SAOモードが、バンドオフセットモードを備え、前記LCUのためのオフセットが、バンドオフセットを備え、前記方法が、
前記バンドオフセットモードのための前記バンドオフセットを決定するステップをさらに備え、前記バンドオフセットを決定するステップが、32ビンのヒストグラムのビンに前記元のサンプルを分類するために、前記LCUの前記元のサンプルを反復的に算術右シフトするステップを備える、請求項1に記載の方法。
【請求項４】
前記元のサンプルが、前記LCUの成分平面の元のサンプルを備え、前記再構成されたサンプルが、前記LCUの成分平面の再構成されたサンプルを備え、前記方法が、
前記ヒストグラムの前記32ビンのうちの1つに属するサンプルの数が、前記LCUの現在の成分平面に属するサンプルの数の半分以上であるとき、前記反復的な分類を終了するステップをさらに備える、請求項3に記載の方法。
【請求項５】
前記方法が、
前記LCUに対する上隣接LCUおよび左隣接LCUの非ブロック化後のサンプルを記憶するステップと、
現在のLCUに対する下隣接LCUおよび右隣接LCUの非ブロック化前のサンプルを記憶するステップと、
前記LCUのサンプルを記憶するステップと
をさらに備え、
前記SAOモードを使用して前記LCUの前記サンプルを符号化するステップが、前記記憶されたLCUのサンプルの少なくとも一部に基づいて、前記SAOモードを使用して前記LCUの前記サンプルを符号化するステップを備える、請求項1に記載の方法。
【請求項６】
ビデオデータを符号化するためのデバイスであって、前記デバイスが、
メモリと、
少なくとも1つのプロセッサとを備え、前記少なくとも1つのプロセッサが、
サンプル適応オフセット(SAO)モードを使用してピクチャの最大コーディング単位(LCU)のサンプルを符号化するように構成され、前記SAOモードを使用して前記LCUの前記サンプルを符号化するために、前記少なくとも1つのプロセッサが、
前記LCUの対応する再構成されたサンプルと前記LCUの元のサンプルとの間の差を計算し、
第1の指定されたビット数を有し、それぞれの値の第1の範囲内に入るクリップされた差を形成するために、前記差の各々からビット数をクリップし、
差の合計を形成するために、前記クリップされた差を合計し、
第2の指定されたビット数を有し、それぞれの値の第2の範囲内に入るクリップされた差の合計を形成するために前記差の合計からビット数をクリップし、
前記再構成されたサンプルの数を計算し、
第3の指定されたビット数を有し、それぞれの値の第3の範囲内に入るクリップされたサンプル数を形成するために、前記再構成されたサンプルの数からビット数をクリップし、
前記LCUのためのオフセットを生成するために、前記クリップされたサンプル数で前記クリップされた差の合計を除算するように構成され、
前記LCUのためのオフセットを生成するために前記クリップされた差の合計を除算するために、前記少なくとも1つのプロセッサが、
前記差の合計に等しい変数から、前記変数がゼロより大きく、かつ、反復減算が実行される回数が8未満である限り、前記サンプル数を反復減算し、
実行された反復減算の数として前記LCUのためのオフセットを決定し、
前記差の合計の符号に基づいて、前記オフセットの符号を決定するようにさらに構成された、デバイス。
【請求項７】
前記SAOモードが、バンドオフセットモードまたはエッジオフセットモードを備える、請求項6に記載のデバイス。
【請求項８】
前記SAOモードが、バンドオフセットモードを備え、前記LCUのためのオフセットが、バンドオフセットを備え、前記少なくとも1つのプロセッサが、
前記バンドオフセットモードのための前記バンドオフセットを決定するようにさらに構成され、前記バンドオフセットを決定するために、前記少なくとも1つのプロセッサが、32ビンのヒストグラムのビンに前記元のサンプルを分類するために、前記LCUの前記元のサンプルを反復的に算術右シフトするようにさらに構成された、請求項6に記載のデバイス。
【請求項９】
前記元のサンプルが、前記LCUの成分平面の元のサンプルを備え、前記再構成されたサンプルが、前記LCUの成分平面の再構成されたサンプルを備え、前記少なくとも1つのプロセッサが、
前記ヒストグラムの前記32ビンのうちの1つに属するサンプルの数が、前記LCUの現在の成分平面に属するサンプルの数の半分以上であるとき、前記反復的な分類を終了するようにさらに構成された、請求項8に記載のデバイス。
【請求項１０】
前記少なくとも1つのプロセッサが、
前記LCUに対する上隣接LCUおよび左隣接LCUの非ブロック化後のサンプルを記憶し、
現在のLCUに対する下隣接LCUおよび右隣接LCUの非ブロック化前のサンプルを記憶し、
前記LCUのサンプルを記憶するようにさらに構成され、
前記SAOモードを使用して前記LCUの前記サンプルを符号化するために、前記少なくとも1つのプロセッサが、前記LCUの前記記憶されたサンプルの少なくとも一部に基づいて、前記LCUの前記サンプルを符号化するように構成された、請求項6に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、その全体が参照により本明細書に組み込まれている、2014年1月30日に出願した、出願第61/933,718号の優先権を主張するものである。
【０００２】
本開示は、ビデオコーディングに関し、より具体的には、サンプル適応オフセット(SAO:sample adaptive offset)オフセット符号化のための技術に関する。
【背景技術】
【０００３】
デジタルビデオ機能は、デジタルテレビ、デジタル直接放送システム、ワイヤレス放送システム、携帯情報端末(PDA)、ラップトップまたはデスクトップコンピュータ、タブレットコンピュータ、電子書籍リーダ、デジタルカメラ、デジタル記録デバイス、デジタルメディアプレーヤ、ビデオゲームデバイス、ビデオゲームコンソール、セルラーまたは衛星無線電話、いわゆる「スマートフォン」ビデオ会議デバイス、ビデオストリーミングデバイスなどを含む、広範囲のデバイスに組み込まれることが可能である。デジタルビデオデバイスは、MPEG-2、MPEG-4、ITU-T H.263、ITU-T H.264/MPEG-4、パート10、アドバンスドビデオコーディング(AVC:Advanced Video Coding)、高効率ビデオコーディング(HEVC:High Efficiency Video Coding)規格、およびそのような規格の拡張によって定義された規格に記載されるものなどのビデオ圧縮技術を実装する。ビデオデバイスは、そのようなビデオ圧縮技術を実装することによって、デジタルビデオ情報をより効率的に送信、受信、符号化、復号、および/または記憶することがある。
【０００４】
ビデオ圧縮技術は、ビデオシーケンスに固有の冗長性を低減または除去するために、空間(ピクチャ内)予測および/または時間(ピクチャ間)予測を実行する。ブロックベースのビデオコーディングのために、ビデオスライス(すなわち、ビデオフレーム、またはビデオフレームの一部)は、ビデオブロックに区分されてもよく、ビデオブロックはまた、ツリーブロック、コーディング単位(CU:coding unit)、および/またはコーディングノードと呼ばれることがある。ピクチャのイントラコード化(I)スライス内のビデオブロックは、同じピクチャ内の隣接ブロック内の参照サンプルに対する空間予測を用いて符号化される。ピクチャのインターコード化(PまたはB)スライス内のビデオブロックは、同じピクチャ内の隣接ブロック内の参照サンプルに対する空間予測、または他の参照ピクチャ内の参照サンプルに対する時間予測を使用してもよい。ピクチャは、フレームと呼ばれることがあり、参照ピクチャは、参照フレームと呼ばれることがある。
【０００５】
空間または時間予測は、コーディングされるべきブロックのための予測ブロックをもたらす。残差データは、コーディングされるべき元のブロックと予測ブロックとの間のピクセル差を表す。インターコード化ブロックは、予測ブロックを形成する参照サンプルのブロックを指す動きベクトルと、コード化ブロックと予測ブロックとの間の差を示す残差データとに従って符号化される。イントラコード化ブロックは、イントラコーディングモードと残差データとに従って符号化される。さらなる圧縮のために、残差データは、ピクセル領域から変換領域に変換されてもよく、次いで量子化されてもよい残差変換係数をもたらす。最初に2次元アレイに配置される量子化変換係数は、変換係数の1次元ベクトルを生成するために、走査されてもよく、エントロピーコーディングが、さらに多くの圧縮を達成するために適用されてもよい。
【発明の概要】
【課題を解決するための手段】
【０００６】
本開示は、サンプル適応オフセット(SAO)フィルタリングに関連する技術について説明する。たとえば、本開示は、ビデオエンコーダを作製するSAOモードの決定の複雑さを低減するための技術について説明する。全体的に、本開示は、計算の複雑さを低減するための技術と、SAO符号化モードを使用するときの、ビデオデータのブロック、たとえば、コード化ビデオピクチャの最大コーディング単位(LCU:largest coding unit)を符号化することに関連するメモリ要件とについて説明する。本開示はまた、LCUのためのモードを符号化するSAOを決定することに関連する技術、ならびに、SAOを使用してLCUを符号化するときに使用されるLCUのサンプルをバッファリングすることに関連する技術について説明する。本開示は、異なるSAOモードに関連付けられた費用関数のレート-歪み費用を推定および比較する技術と、費用関数を最適化するモードを選択する技術とについて説明する。加えて、本開示は、費用関数の計算の複雑さを低減するための技術について説明する。
【０００７】
一例では、ビデオデータを復号するための方法は、サンプル適応オフセット(SAO)モードを使用してピクチャの最大コーディング単位(LCU)のサンプルを符号化するステップを含む。SAOモードを使用してLCUのサンプルを符号化するステップは、LCUの対応する再構成されたサンプルとLCUの元のサンプルとの間の差を計算するステップと、クリップされた差を形成するために差の各々からビット数をクリップするステップと、差の合計を形成するためにクリップされた差を合計するステップと、クリップされた差の合計を形成するために差の合計をクリップするステップと、再構成されたサンプルの数を計算するステップと、クリップされたサンプル数を形成するために再構成されたサンプルの数からビット数をクリップするステップと、LCUのオフセットを生成するために、クリップされたサンプル数でクリップされた差の合計を割るステップとを備える。
【０００８】
別の例では、ビデオデータを符号化するためのデバイスは、メモリと、少なくとも1つのプロセッサとを含む。少なくとも1つのプロセッサは、サンプル適応オフセット(SAO)モードを使用してピクチャの最大コーディング単位(LCU)のサンプルを符号化するように構成される。SAOモードを使用してLCUのサンプルを符号化するために、少なくとも1つのプロセッサは、LCUの対応する再構成されたサンプルとLCUの元のサンプルとの間の差を計算し、クリップされた差を形成するために差の各々からビット数をクリップし、差の合計を形成するためにクリップされた差を合計し、クリップされた差の合計を形成するために差の合計をクリップし、再構成されたサンプルの数を計算し、クリップされたサンプル数を形成するために再構成されたサンプルの数からビット数をクリップし、LCUのオフセットを生成するために、クリップされたサンプル数でクリップされた差の合計を割るように構成される。
【０００９】
別の例では、ビデオデータを符号化するための方法は、LCUのための少なくとも1つのサンプル適応オフセット(SAO)モードを決定するステップを含み、少なくとも1つのSAOモードは、バンドオフセットモード、エッジオフセットモード、マージアップモード、マージレフトモード、およびスキップモードのうちの少なくとも1つを備える。少なくとも1つのSAOモードを決定することは、LCUのためのSAOモードの所定の優先順位に基づいて少なくとも1つのSAOモードを決定することを備える。
【００１０】
別の例では、ビデオデータを符号化するためのデバイスは、メモリと、少なくとも1つのプロセッサとを含む。少なくとも1つのプロセッサは、LCUのための少なくとも1つのサンプル適応オフセット(SAO)モードを決定するように構成され、少なくとも1つのSAOモードは、バンドオフセットモード、エッジオフセットモード、マージアップモード、マージレフトモード、およびスキップモードのうちの少なくとも1つを備える。少なくとも1つのSAOモードを決定することは、LCUのためのSAOモードの所定の優先順位に基づいて少なくとも1つのSAOモードを決定することを備える。
【００１１】
1つまたは複数の例の詳細は、添付図面および以下の説明に記載される。他の特徴、目的、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】本開示に記載の技術を利用してもよい例示的なビデオ符号化および復号システムを示すブロック図である。
【図２Ａ】サンプル適応オフセット(SAO)コーディングのための例示的なエッジオフセット分類を示す概念図である。
【図２Ｂ】サンプル適応オフセット(SAO)コーディングのための例示的なエッジオフセット分類を示す概念図である。
【図２Ｃ】サンプル適応オフセット(SAO)コーディングのための例示的なエッジオフセット分類を示す概念図である。
【図２Ｄ】サンプル適応オフセット(SAO)コーディングのための例示的なエッジオフセット分類を示す概念図である。
【図３】SAOコーディングのための例示的なバンドオフセット分類を示す概念図である。
【図４】本開示に記載の技術を実装してもよい例示的なビデオエンコーダを示すブロック図である。
【図５】例示的なビデオデコーダを示すブロック図である。
【図６】本開示の技術に従ってSAOフィルタリングモードを決定するための高レベルプロセスを示す概念図である。
【図７】本開示の技術に従って輝度SAO導出を実行するためのプロセスを示す概念図である。
【図８】本開示の技術に従ってエッジオフセット(EO:edge offset)輝度SAO費用導出を実行するためのプロセスを示すフロー図である。
【図９】本開示の技術に従って輝度バンドオフセット導出を実行するためのプロセスを示すフロー図である。
【図１０】本開示の技術に従って彩度SAO導出を実行するための方法を示すフロー図である。
【図１１】本開示の技術に従ってエッジオフセット彩度導出を実行するためのプロセスを示すフロー図である。
【図１２】本開示の技術に従ってバンドオフセット彩度導出を実行するためのプロセスを示すフロー図である。
【図１３】本開示の技術に従ってSAOフィルタリングを実行するためのプロセスを示すフロー図である。
【図１４】本開示の技術に従ってSAOフィルタリングを実行するためのプロセスを示すフロー図である。
【図１５】現在のLCUと隣接LCUとを示す概念図である。
【図１６】本開示の技術に従って現在のLCUに対するLCUからのサンプルをバッファリングするための技術を示す概念図である。
【図１７】本開示の技術に従ってサンプル適応オフセットパラメータを導出するためにビデオエンコーダが使用するサンプルの領域を示す概念図である。
【図１８】本開示の技術に従って最大コーディング単位のためのSAOモードを決定するためのプロセスを示すフロー図である。
【図１９】本開示の技術に従って最大コーディング単位のためのSAOモードを決定するためのプロセスを示すフロー図である。
【発明を実施するための形態】
【００１３】
本開示は、サンプル適応オフセット(SAO)フィルタリングに関連する技術を説明する。たとえば、本開示は、計算の複雑さを低減するための技術と、SAOモードを使用してビデオデータのピクチャのLCU(最大コーディング単位)をコーディングするときのビットレートコーディング効率を改善するための技術とを説明する。本開示はまた、SAOを使用してLCUを符号化するためのバッファリング技術、ならびに、SAOモードのビットレートを推定し、LCUを符号化するときに使用するSAO符号化モードを選択するための技術を説明する。
【００１４】
SAOフィルタリングは、ビデオコーディングで使用されるループフィルタリングの一種である。LCUを符号化するとき、ビデオコーダ(すなわち、ビデオエンコーダまたはビデオデコーダ)は、LCUのサンプルにオフセット値を適用する。一般に、ビデオデータのコード化ピクチャ(たとえば、再構成された画像)内のサンプルへのオフセット値の追加は、いくつかの事例では、符号化ビデオデータを記憶または送信するために必要とされるビットオーバヘッドを大きく増加させることなく、コード化ビデオピクチャの画像品質を。SAOフィルタリングの結果である可能性が高いコーディングにおける改善は、たとえば、復号された画像が元の画像により密接に似ることであってもよい。SAO技術は、ビデオコーダが、エッジメトリック、バンドメトリック、または他のタイプのメトリックなどのピクセル(またはブロック)分類メトリックに応じて、異なるピクセル(またはピクセルのブロック)に異なるオフセット値を適用することを可能にする。
【００１５】
いくつかの例では、ビデオコーダのSAOフィルタユニットは、一般に本開示ではバンドオフセット(BO)フィルタリングおよびエッジオフセット(EO)フィルタリングと呼ばれる、2つのタイプのSAOフィルタリングを実行するように構成されてもよい。ビデオコーダのSAOフィルタユニットはまた、ときにはオフセットを適用しなくてもよく、これは、以下でより詳細に説明するように、それ自体SAOフィルタリングの第3のタイプと考えることができる。ビデオコーダは、SAOフィルタユニットが適用するオフセットフィルタリングのタイプを明示的にまたは暗示的に合図してもよい。エッジオフセットフィルタリングを適用するとき、ビデオコーダは、コーディング単位のエッジ情報に基づいてピクセルを分類することができ、ビデオコーダは、エッジ分類に基づいてコーディング単位のピクセルのためのオフセット(たとえば、彩度および/または輝度サンプル)を決定する。以下でより詳細に説明するように、典型的には、エッジベースのSAOの4つの変形形態が存在し、ピクセルの値は、その8つの隣接ピクセルのうちの2つと比較される。ビデオコーダが比較のために使用する2つの隣接ピクセルは、ビデオコーダがコーディング単位のためにどのエッジベースのオフセットの変形形態を選択するのかに依存してもよい。ピクセル間の差の大きさに基づいて、ビデオコーダは、コーディング単位のピクセルにオフセットを追加してもよい。
【００１６】
バンドオフセットフィルタリングを適用するとき、ビデオコーダは、ヒストグラムの異なるバンドにコーディング単位のピクセルを分類する。ビデオコーダは、各バンドが関連するオフセットを有しながら、ピクセルの強度値などのピクセルの特性に基づいてピクセルを分類する。各バンドは、ピクセル値の範囲を含んでもよい。たとえば、0〜255のピクセル値は、ピクセル値0〜7が第1のバンドであり、ピクセル値8〜15が第2のバンドであり、ピクセル値16〜23が第3のバンドであり、ヒストグラムの32のバンドすべてに関して以下同様になるように、(0〜31でラベル付けされた)32の等しいバンドに分割されてもよい。ビデオコーダは、ピクセルまたはピクセルのグループにどの特定のオフセット値を適用するのかを決定するために、バンドを使用してもよい。たとえば、ピクセルが10の値(上記の例では、第2のバンド内、すなわち、値8〜15)を有する場合、ビデオコーダは、ピクセル値に、第2のバンドに関連付けられた特定のオフセットを追加してもよい。
【００１７】
上記で説明したようにピクセルをバンドに分類することに加えて、ビデオコーダは、オフセット値を適用する目的のための2つ以上のグループにバンドをグループ化してもよい。ビデオコーダは、さらに、バンドを2つのグループ(たとえば、16のバンドの2つのグループ、4つのバンドの1つのグループおよび28のバンドの1つのグループ、8のバンドの1つのグループおよび24のバンドの1つのグループ、または他のそのようなグループ化)にグループ化してもよい。バンドのグループ化は、バンドのためのオフセット値が符号化されたビデオビットストリーム内で合図される順序を決定するために使用されることが可能であり、および/または、特定のバンドがゼロ以外のオフセット値を有するかどうかを決定するために使用されることが可能である。ビデオコーダは、現在の値が現在のオフセット値と前回のオフセット値との間の差として合図される差動コーディング技術を使用して、バンドのためのオフセットを合図してもよい。
【００１８】
本開示は、全体的に、ビデオデコーダなどの別のデバイスに特定の情報を「合図する」ビデオエンコーダを参照してもよい。しかしながら、ビデオエンコーダは、ビデオデータの様々な符号化された部分に特定の構文要素を関連付けることによって情報を合図してもよいことが理解されるべきである。すなわち、ビデオエンコーダは、ビデオデータの様々な符号化された部分のヘッダに特定の構文要素を記憶することによって、データを「合図」してもよい。いくつかの場合では、そのような構文要素は、ビデオデコーダによって受信され復号される前に、符号化され記憶されてもよい(たとえば、コンピュータ可読媒体に記憶されてもよい)。したがって、「合図する」という用語は、一般に、そのような通信がリアルタイムもしくはほぼリアルタイムで、またはある時間の期間にわたって生じるかにかかわらず、符号化の時点で、媒体に構文要素を記憶するときに生じてもよいような、圧縮されたビデオデータを復号するための構文または他のデータの通信を指してもよく、構文要素は、次いで、この媒体に記憶された後の任意の時間に、復号デバイスによって取得されてもよい。
【００１９】
いずれの場合においても、高効率ビデオコーディング(HEVC)規格に含まれるいくつかの技術では、SAOフィルタリングは、スライスレベルにおいて有効または無効にされてもよく、さらに、SAOフィルタリングは、輝度サンプルおよび彩度サンプルのために別々に有効または無効にされてもよい。たとえば、ビデオデータの特定のスライスのために、輝度サンプルと彩度サンプルの両方がSAOフィルタリングされてもよく、輝度サンプルと彩度サンプルのいずれもがSAOフィルタリングされなくてもよく、または輝度サンプルおよび彩度サンプルのうちの一方がSAOフィルタリングされ、他方がSAOフィルタリングされなくてもよい。SAOフィルタリングがスライスのために有効にされたとき、SAOタイプおよびオフセット値は、最大コーディング単位(LCU)レベルにおいて合図される。
【００２０】
上記で紹介したように、SAOタイプは、バンドオフセットフィルタリング、エッジオフセットフィルタリング、または無SAOフィルタリングを含むことができる。したがって、SAOフィルタリングが特定のスライスのために有効にされている場合であっても、そのスライスのいくつかのLCUは、SAOフィルタリングされなくてもよい(すなわち、いくつかのLCUは、無SAOフィルタリングのSAOタイプを有することになる)。いくつかの事例では、SAOタイプおよびオフセット値は、一連のマージフラグ構文要素で合図され、第1のマージフラグに関する真の値は、オフセットタイプを示し、LCUのためのオフセット値は、左隣のLCUから受け継がれ、第2のマージフラグに関する真の値は、SAOタイプを示し、オフセット値は、上に隣接する(上隣接とも呼ばれる)LCUから受け継がれる。両方のマージフラグが偽である場合、ビデオコーダは、LCUのための新しいSAOタイプおよび新しいオフセット値を示す構文要素を合図する。
【００２１】
(以下で説明するビデオエンコーダ20などの)ビデオエンコーダは、SAOフィルタリングを用いてビデオデータを符号化することに関連する計算の複雑さおよび/またはメモリ要件を低減するように構成されてもよい。一般に、本開示は、数の精度を指定された最大ビット数(すなわち、指定された値の範囲)に低減する数学的関数として「クリッピング」を指すことがある。クリッピング関数は、算術右シフトする、算術左シフトする、ANDする、マスクする、丸める、様々なハードウェア機構を使用する、などによって、数の精度を低減してもよい。
【００２２】
(以下で説明するビデオエンコーダ20などの)ビデオエンコーダはまた、上記で説明したモードからSAOモードを選択するとき、本開示の技術を使用するように構成されてもよい。たとえば、本開示の技術に従って、ビデオエンコーダ20は、LCUのための少なくとも1つのサンプル適応オフセット(SAO)モードを決定するように構成されてもよい。少なくとも1つのSAOモードは、バンドオフセットモード、エッジオフセットモード、マージアップモード、マージレフトモード、およびスキップモードのうちの少なくとも1つを備えてもよい。少なくとも1つのSAOモードを決定するために、ビデオエンコーダ20は、LCUのためのSAOモードの所定の優先順位に基づいて少なくとも1つのSAOモードを決定するように構成されてもよい。
【００２３】
図1は、本開示に記載のSAO符号化技術を利用してもよい例示的なビデオ符号化および復号システム10を示すブロック図である。図1に示すように、システム10は、宛先デバイス14によってより後の時間に復号されるべき符号化ビデオデータを生成するソースデバイス12を含み、以下でより詳細に説明するように、このビデオデータの符号化および復号は、SAOモードおよび/またはオフセット値をコーディングすることを含んでもよい。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、いわゆる「スマート」パッド、テレビ、カメラ、表示デバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイス、などを含む、広い範囲のデバイスのうちのいずれかを含んでもよい。いくつかの場合には、ソースデバイス12および宛先デバイス14は、ワイヤレス通信のために装備されてもよい。
【００２４】
宛先デバイス14は、リンク16を介して、復号されるべき符号化ビデオデータを受信してもよい。リンク16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動することが可能な任意のタイプの媒体またはデバイスを備えてもよい。一例では、リンク16は、ソースデバイス12がリアルタイムで宛先デバイス14に直接符号化ビデオデータを送信することを可能にする通信媒体を備えてもよい。符号化ビデオデータは、ワイヤレス通信プロトコルなどの通信規格に従って変調され、宛先デバイス14に送信されてもよい。通信媒体は、無線周波数(RF)スペクトルなどの任意のワイヤレスもしくはワイヤード通信媒体、または、1つもしくは複数の物理的伝送線を備えてもよい。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなどの、パケットベースのネットワークの一部を形成してもよい。通信媒体は、ルータ、スイッチ、基地局、または、ソースデバイス12から宛先デバイス14への通信を容易にするために有用であってもよい任意の他の機器を含んでもよい。
【００２５】
代替的には、符号化データは、出力インターフェース22から記憶デバイス34に出力されてもよい。同様に、符号化データは、入力インターフェースによって記憶デバイス34からアクセスされてもよい。記憶デバイス34は、ハードドライブ、Blu-ray（登録商標）ディスク、DVD、CD-ROM、フラッシュメモリ、揮発性もしくは不揮発性メモリ、または、符号化ビデオデータを記憶するための任意の他の適切なデジタル記憶媒体などの、様々な分散されたまたは局所的にアクセスされるデータ記憶媒体のうちのいずれかを含んでもよい。さらなる例では、記憶デバイス34は、ソースデバイス12によって生成された符号化ビデオを保持してもよいファイルサーバまたは別の中間記憶デバイスに対応してもよい。宛先デバイス14は、ストリーミングまたはダウンロードを介して記憶デバイス34からの記憶されたビデオデータにアクセスしてもよい。ファイルサーバは、符号化ビデオデータを記憶し、宛先デバイス14にその符号化ビデオデータを送信することが可能な任意のタイプのサーバであってもよい。例示的なファイルサーバは、(たとえば、ウェブサイトのための)ウェブサーバ、FTPサーバ、ネットワーク接続ストレージ(NAS:network attached storage)デバイス、またはローカルディスクドライブを含む。宛先デバイス14は、インターネット接続を含む任意の標準的なデータ接続を介して符号化ビデオデータにアクセスしてもよい。これは、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに適した、ワイヤレスチャネル(たとえば、Wi-Fi接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含んでもよい。記憶デバイス34からの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであってもよい。
【００２６】
本開示の技術は、必ずしもワイヤレス用途または設定に限定されない。技術は、空中テレビ放送、ケーブルテレビ送信、衛星テレビ送信、たとえばインターネットを介するストリーミングビデオ送信、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の用途など、様々なマルチメディア用途のうちのいずれかを支持するビデオコーディングに適用されてもよい。いくつかの例では、システム10は、ビデオストリーミング、ビデオ再生、ビデオ放送、および/またはビデオ電話などの用途を支持するために、一方向または双方向ビデオ送信を支持するように構成されてもよい。
【００２７】
図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの場合には、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含んでもよい。ソースデバイス12において、ビデオソース18は、ビデオキャプチャデバイス、たとえば、ビデオカメラ、以前にキャプチャされたビデオを含むビデオアーカイブ、ビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェース、および/または、ソースビデオとしてコンピュータグラフィックスデータを生成するためのコンピュータグラフィックスシステム、あるいはそのようなソースの組合せ、などのソースを含んでもよい。一例として、ビデオソース18がビデオカメラである場合、ソースデバイス12および宛先デバイス14は、いわゆるカメラ付き電話またはテレビ電話を形成してもよい。しかしながら、本開示で説明する技術は、一般にビデオコーディングに適用可能であってもよく、ワイヤレス用途および/またはワイヤード用途に適用されてもよい。
【００２８】
キャプチャされた、事前にキャプチャされた、またはコンピュータによって生成されたビデオは、ビデオエンコーダ20によって符号化されてもよい。符号化されたビデオデータは、ソースデバイス12の出力インターフェース22を介して宛先デバイス14に直接送信されてもよい。符号化されたビデオデータはまた(または代替的に)、復号および/または再生するために、宛先デバイス14または他のデバイスによって後にアクセスするための記憶デバイス34に記憶されてもよい。
【００２９】
宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、表示デバイス32とを含む。いくつかの場合には、入力インターフェース28は、受信機および/またはモデムを含んでもよい。宛先デバイス14の入力インターフェース28は、リンク16を介して、符号化されたビデオデータを受信する。リンク16を介して通信された、または記憶デバイス34上に提供された、符号化されたビデオデータは、ビデオデータを復号する際にビデオデコーダ30などのビデオデコーダによって使用するための、ビデオエンコーダ20によって生成された様々な構文要素を含んでもよい。そのような構文要素は、通信媒体上で送信された、記憶媒体上に記憶された、またはファイルサーバ上に記憶された、符号化されたビデオデータと共に含まれてもよい。
【００３０】
表示デバイス32は、宛先デバイス14と一体化されてもよく、または宛先デバイス14の外部にあってもよい。いくつかの例では、宛先デバイス14は、一体化された表示デバイスを含んでもよく、また、外部表示デバイスとインターフェースするように構成されてもよい。他の例では、宛先デバイス14は、表示デバイスであってもよい。一般に、表示デバイス32は、復号されたビデオデータをユーザに表示し、液晶ディスプレイ(LCD:liquid crystal display)、プラズマディスプレイ、有機発光ダイオード(OLED:organic light emitting diode)ディスプレイ、または別のタイプの表示デバイスなどの、様々な表示デバイスのうちのいずれかを備えてもよい。
【００３１】
ビデオエンコーダ20およびビデオデコーダ30は、最近標準化された高効率ビデオコーディング(HEVC)規格などのビデオ圧縮規格に従って動作してもよく、「HEVC規格」と呼ばれる、HEVC試験モデル(HM)、文書ITU-T H.265、SERIES H:AUDIOVISUAL AND MULTIMEDIA SYSTEMS、Infrastructure of Audiovisual Services-Coding of Moving Video、「High Efficiency Video Coding」、2013年4月、に準拠してもよい。
【００３２】
代替的には、ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG-4、パート10と呼ばれるITU-T H.264規格、アドバンスドビデオコーディング(AVC)、またはそのような規格の拡張などの、他の独自または工業規格に従って動作してもよい。本開示の技術は、しかしながら、任意の特定のコーディング規格に限定されない。ビデオ圧縮規格の他の例は、MPEG-2とITU-T H.263とを含む。
【００３３】
図1には示していないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ30は、各々、オーディオエンコーダおよびデコーダと一体化されてもよく、共通データストリームまたは別々のデータストリームにおけるオーディオとビデオの両方の符号化を処理するために、適切なMUX-DEMUXユニットまたは他のハードウェアおよびソフトウェアを含んでもよい。該当する場合、いくつかの例では、MUX-DEMUXユニットは、ITU H.223マルチプレクサプロトコル、または、ユーザデータグラムプロトコル(UDP:user datagram protocol)などの他のプロトコルに準拠してもよい。
【００３４】
ビデオエンコーダ20およびビデオデコーダ30は、各々、1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、特定用途向け集積回路(ASIC: application specific integrated circuit)、フィールドプログラマブルゲートアレイ(FPGA:field programmable gate array)、ディスクリートロジック、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せなどの、様々な適切なエンコーダ回路のうちのいずれかとして実装されてもよい。技術が部分的にソフトウェアにおいて実装されているとき、デバイスは、適切な非一時的コンピュータ可読媒体内にソフトウェアのための命令を記憶してもよく、本開示の技術を実行するために、1つまたは複数のプロセッサを使用してハードウェアにおいて命令を実行してもよい。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダ内に含まれてもよく、そのいずれかは、それぞれのデバイス内に、組み合わされたエンコーダ/デコーダ(CODEC)の一部として組み込まれてもよい。
【００３５】
HEVC規格化の努力は、HEVCテストモデル(HM)と呼ばれるビデオコーディングデバイスのモデルに基づいている。HMは、たとえば、ITU-T H.264/AVCによる既存のデバイスと比較してビデオコーディングデバイスのいくつかの追加の能力を想定する。たとえば、H.264は、9つのイントラ予測符号化モードを提供する一方で、HMは、33ものイントラ予測符号化モードを提供してもよい。
【００３６】
一般に、HMは、ビデオフレームまたはピクチャが、輝度サンプルと彩度サンプルの両方を含む一連のツリーブロックまたは最大コーディング単位(LCU)に分割されてもよいことを記載している。ツリーブロックは、H.264規格のマクロブロックと同様の目的を有する。スライスは、コーディング順にいくつかの連続するツリーブロックを含む。ビデオフレームまたはピクチャは、1つまたは複数のスライスに区分されてもよい。各ツリーブロックは、4分木に従ってコーディング単位(CU: coding unit)に分割されてもよい。たとえば、ツリーブロックは、4分木のルートノードとして、4つの子ノードに分割されてもよく、各子ノードは、次に、親ノードになり、別の4つの子ノードに分割されてもよい。最後の、分割されていない子ノードは、4分木のリーフノードとして、コーディングノード、すなわちコード化ビデオブロックを備える。コード化ビットストリームに関連付けられた構文データは、ツリーブロックが分割されてもよい最大回数を定義してもよく、また、コーディングノードの最小サイズを定義してもよい。
【００３７】
CUは、コーディングノードと、コーディングノードに関連付けられた予測単位(PU:prediction unit)および変換単位(TU:transform unit)とを含む。CUのサイズは、コーディングノードのサイズに対応し、形状において正方形でなければならない。CUのサイズは、8×8ピクセルから、最大64×64ピクセルまたはそれ以上のツリーブロックのサイズまでの範囲であってもよい。各CUは、1つまたは複数のPUと1つまたは複数のTUとを含んでもよい。CUに関連付けられた構文データは、たとえば、1つまたは複数のPUへのCUの区分を記述してもよい。分割モードは、CUがスキップもしくは直接モードで符号化されているのか、イントラ予測モード符号化されているのか、またはインター予測モードで符号化されているのかの間で異なってもよい。PUは、形状において非正方形であるように区分されてもよい。CUに関連付けられた構文データはまた、たとえば、4分木に従った1つまたは複数のTUへのCUの区分を記述してもよい。TUは、形状において正方形または非正方形であることができる。
【００３８】
HEVC規格は、TUに従う変換を可能にし、それは、異なるCUのために異なってもよい。TUは、典型的には、区分されたLCUのために定義された所与のCU内のPUのサイズに基づいてサイズが決められるが、これは、必ずしもそうでないことがある。TUは、典型的には、PUと同じサイズであり、またはPUよりも小さい。いくつかの例では、CUに対応する残差サンプルは「残差4分木」(RQT:residual quad tree)として知られる4分木構造を使用して、より小さい単位に細分されてもよい。RQTのリーフノードは、変換単位(TU)と呼ばれることがある。TUに関連付けられたピクセル差分値は、量子化されてもよい変換係数を生成するために変換されてもよい。
【００３９】
一般に、PUは、予測プロセスに関連するデータを含む。たとえば、PUがイントラモード符号化されたとき、PUは、PUのためのイントラ予測モードを記述するデータを含んでもよい。別の例として、PUがインターモード符号化されたとき、PUは、PUのための動きベクトルを定義するデータを含んでもよい。PUのための動きベクトルを定義するデータは、たとえば、動きベクトルの水平成分、動きベクトルの垂直成分、動きベクトルの解像度(たとえば、4分の1ピクセル精度もしくは8分の1ピクセル精度)、動きベクトルが指す参照ピクチャ、および/または動きベクトルのための参照ピクチャリスト(たとえば、リスト0、リスト1、もしくはリストC)を記述してもよい。
【００４０】
一般に、TUは、変換および量子化プロセスのために使用される。1つまたは複数のPUを有する所与のCUはまた、1つまたは複数の変換単位(TU)を含んでもよい。予測に続いて、ビデオエンコーダ20は、PUに対応する残差値を計算してもよい。残差値は、ピクセル差分値を備え、ピクセル差分値は、エントロピーコーディングのためのシリアライズ化された変換係数を生成するために、変換係数に変換され、量子化され、TUを使用して走査されてもよい。本開示は、典型的には、CUのコーディングノードを指すために「ビデオブロック」という用語を使用する。いくつかの特定の場合には、本開示はまた、コーディングノードとPUおよびTUとを含むツリーブロック、すなわち、LCUまたはCUを指すために「ビデオブロック」という用語を使用することがある。
【００４１】
ビデオシーケンスは、典型的には、ビデオフレームまたはピクチャを含む。ピクチャのグループ(GOP:group of pictures)は、一般に、一連の1つまたは複数のビデオピクチャを備える。GOPは、GOPのヘッダ、1つまたは複数のピクチャのヘッダ、または他の場所に、GOP内に含まれるピクチャの数を記述する構文データを含んでもよい。ピクチャの各スライスは、それぞれのスライスのための符号化モードを記述するスライス構文データを含んでもよい。ビデオエンコーダ20は、典型的には、ビデオデータを符号化するために、個々のビデオスライス内のビデオブロックに対して動作する。ビデオブロックは、CU内のコーディングノードに対応してもよい。ビデオブロックは、固定されたまたは変化するサイズを有してもよく、指定されたコーディング規格に従ってサイズが異なってもよい。
【００４２】
一例として、HMは、様々なPUサイズにおける予測をサポートする。特定のCUのサイズが2N×2Nであると仮定すると、HMは、2N×2NまたはN×NのPUサイズにおけるイントラ予測と、2N×2N、2N×N、N×2N、またはN×Nの対称PUサイズにおけるインター予測とをサポートする。HMはまた、2N×nU、2N×nD、nL×2N、およびnR×2NのPUサイズにおけるインター予測のための非対称区分をサポートする。非対称分割では、CUの1つの方向は、区分されず、他の方向は、25%および75%に区分される。25%区分に対応するCUの部分は、「上」、「下」、「左」、または「右」の指示が続く「n」によって示される。したがって、たとえば、「2N×nU」は、上に2N×0.5NのPUおよび下に2N×1.5NのPUで水平に区分された2N×2NのCUを指す。
【００４３】
本開示では、「N×N」および「N掛けるN」は、垂直方向および水平方向の寸法に関するビデオブロックのピクセルの寸法、たとえば、16×16ピクセル、または16掛ける16ピクセルを指すために、交換可能に使用されてもよい。一般に、16×16ブロックは、垂直方向に16ピクセル(y=16)と水平方向に16ピクセル(x=16)とを有することになる。同様に、N×Nブロックは、一般に、垂直方向にNピクセルと水平方向にNピクセルとを有し、ここでNは、負ではない整数値を表す。ブロック内のピクセルは、行および列に配置されてもよい。さらに、ブロックは、必ずしも水平方向で垂直方向と同じ数のピクセルを有する必要はない。たとえば、ブロックは、N×Mピクセルを備えてもよく、ここでMは、Nと必ずしも等しくない。
【００４４】
CUのPUを使用するイントラ予測またはインター予測コーディングに続いて、ビデオエンコーダ20は、CUのTUのための残差データを計算してもよい。PUは、空間領域(ピクセル領域とも呼ばれる)におけるピクセルデータを備えてもよく、TUは、残差ビデオデータへの変換、たとえば、離散コサイン変換(DCT:discrete cosine transform)、整数変換、ウェーブレット変換、または概念的に同様の変換に続いて、変換領域における係数を備えてもよい。残差データは、符号化されていないピクチャのピクセルと、PUに対応する予測値との間のピクセル差に対応してもよい。ビデオエンコーダ20は、CUのための残差データを含むTUを形成し、次いで、CUのための変換係数を生成するためにTUを変換してもよい。
【００４５】
変換係数を生成するための任意の変換に続いて、ビデオエンコーダ20は、変換係数の量子化を実行してもよい。量子化は、一般に、係数を表すために使用されるデータの量をできる限り低減するために変換係数が量子化され、さらなる圧縮を提供するプロセスを指す。量子化プロセスは、係数の一部またはすべてに関連付けられたビット深度を低減してもよい。たとえば、nビット値は、量子化の間にmビット値に切り捨てられてもよく、ここでnは、mよりも大きい。
【００４６】
いくつかの例では、ビデオエンコーダ20は、エントロピー符号化されることが可能なシリアル化ベクトルを生成するために、量子化された変換係数を走査するために事前定義された走査順を利用してもよい。他の例では、ビデオエンコーダ20は、適応走査を実行してもよい。1次元ベクトルを形成するために、量子化された変換係数を走査した後、ビデオエンコーダ20は、たとえば、コンテキスト適応可変長コーディング(CAVLC:context adaptive variable length coding)、コンテキスト適応2値算術コーディング(CABAC:context adaptive binary arithmetic coding)、構文ベースコンテキスト適応2値算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)、確率インターバル区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング、または別のエントロピー符号化方法に従って、1次元ベクトルをエントロピー符号化してもよい。ビデオエンコーダ20はまた、ビデオデータを復号する上でビデオデコーダ30によって使用するための符号化ビデオデータに関連付けられた構文要素をエントロピー符号化してもよい。
【００４７】
CABACを実行するために、ビデオエンコーダ20は、送信されるべきシンボルにコンテキストモデル内のコンテキストを割り当ててもよい。コンテキストは、たとえば、シンボルの隣接値が非ゼロであるかどうかに関連してもよい。CAVLCを実行するために、ビデオエンコーダ20は、送信されるべきシンボルのための可変長コードを選択してもよい。VLCにおけるコードワードは、比較的より短いコードがより可能性が高いシンボルに対応し、より長いコードがより可能性が低いシンボルに対応するように構成されてもよい。このように、VLCの使用は、たとえば、送信されるべき各シンボルに等長コードワードを使用して、ビットの節約を達成してもよい。確率決定は、シンボルに割り当てられたコンテキストに基づいてもよい。
【００４８】
SAOコーディングはまた、HEVC規格に含まれる。一般に、ビデオピクチャ内のピクセルへのオフセット値の追加は、符号化ビデオデータを記憶または送信するために必要なコーディングビットオーバヘッドを大きく増加させることなく、再構成されたビデオの品質を改善することができる。SAO技術は、ビデオエンコーダ20および/またはビデオデコーダ30などのビデオデコーダが、ピクセル(またはブロック)分類メトリックに応じて、異なるピクセル(またはブロック)に適用される異なるオフセット値を適用することを可能にする。可能な分類メトリックは、バンドメトリックと、エッジメトリックなどのアクティビティメトリックとを含む。オフセット分類の説明は、C.-M.Fu、C.-Y.Chen、C.-Y.Tsai、Y.-W.Huang、S.Lei、「CE13:Sample Adaptive Offset with LCU-Independent Decoding」、JCT-VC Contribution、E049、Geneva、2011年2月(「C.-M.Fuら」)において見ることができる。
【００４９】
HEVC規格によるSAO実施態様では、各区分(LCUのセットなどのいくつかのブロックで構成されてもよい)は、ピクセル分類とも呼ばれる5つのSAOモードのうちの1つを有してもよい。ビデオエンコーダ20などのビデオエンコーダは、LCUベースにおけるSAO処理を選択的に可能にしてもよい(LCUは、16×16、32×32、または64×64のサイズを取ってもよい)。SAO処理が有効にされた場合、ビデオエンコーダ20は、5つのSAOオプションのうちの1つでLCU成分(Y、Cb、Cr)を処理してもよい。ビデオエンコーダ20は、選択されたLCUの輝度チャネルおよび彩度チャネルにそれぞれ適用するモードをビデオデコーダ30に示すために、構文値「sao_type_idx_luma」および「sao_type_idx_chroma」の値を合図する。
【００５０】
第1のモードは、「エッジオフセット」(EO)である。ビデオエンコーダ20がこのモードを選択した場合、ビデオエンコーダ20は、sao_type_idx_luma/chroma=2を合図する。加えて、ビデオエンコーダ20は、以下でより詳細に説明するsao_eo_class_luma構文値およびsao_eo_class_chroma構文値に基づいて選択されるように、4つの可能なエッジ分類子を合図する(以下に示す表1を参照)。EOモードが選択されたとき、ビデオエンコーダ20は、5つの可能なカテゴリのうちの1つにLCU内のピクセルを分類する。これらのカテゴリのうちの4つは、ビットストリーム内で明示的に合図されることがある非ゼロオフセットを有する。ビデオエンコーダ20は、次いで、それぞれのカテゴリに属するピクセルにこれらのオフセットを追加する。
【００５１】
第2のモードは、ビデオエンコーダ20がsao_type_idx_luma/chroma=1を設定することによって合図する「バンドオフセット」(BO)である。このモードでは、ビデオエンコーダ20は、32の可能なカテゴリ(バンド)にLCU内のピクセルを分類する。本開示の技術によれば、ビデオエンコーダ20は、(8ビット強度値を有するピクセルに関して)3ビットだけピクセルの各々の強度を右にシフトすることによって、32のバンドにピクセルを分類してもよい。これらの32のうちの4つの連続したバンドのグループのみが、ビデオエンコーダ20がビットストリームにおいて明示的に合図する非ゼロオフセットを有することになる。ビデオエンコーダ20は、構文要素sao_band_positionとして、合図された非ゼロオフセットのうちの第1のものの位置を合図する。ビデオエンコーダ20は、次いで、関連するバンドに属するピクセルに各オフセットを追加する。
【００５２】
「スキップモード」とも呼ばれる次のモードでは、ビデオエンコーダ20は、処理を適用せず、ビデオエンコーダ20は、ゼロに等しいsao_type_idx_luma/chromaを合図する。このモードでは、ビデオエンコーダ20は、現在のLCUのピクセルが変化されないままにし、SAOは、(図4に関連して以下で説明するように「参照ピクチャメモリ」または単に「メモリ」とも呼ばれる)復号ピクチャバッファ(DPB:decoded picture buffer)に向かう途中で非ブロック化ブロック/ユニットから出力されるピクセルのためのパススルーとして働く。
【００５３】
「マージレフト」モードと呼ばれる第4のモードでは、ビデオエンコーダ20は、現在のLCUのピクセルに左隣接LCUのSAOパラメータを適用する(ここで、左隣接LCUは、現在コーディングされているLCUの左に直接配置されたLCUである)。ビデオエンコーダ20は、ビデオエンコーダ20がこのモードを選択したとき、1に等しくsao_merge_left_flagの値を設定する。「マージアップ」モードと呼ばれる第5のモードでは、ビデオエンコーダ20は、現在のLCUのピクセルに上隣接LCUのSAOパラメータを適用する(ここで、上隣接LCUは、現在コーディングされているLCUの上に直接配置されたLCUである)。このモードでは、ビデオエンコーダ20は、0に等しくsao_merge_left_flagの値を設定し、1に等しくsao_merge_up_flagの値を設定する。
【００５４】
図2A〜図2Dは、HEVC規格に現在含まれる4つの可能なエッジオフセット分類を示す概念図である。エッジオフセットタイプは、エッジ情報に基づいて各ピクセルを分類し、現在のLCUの各ピクセルは、構文要素sao_eo_classによって指示されるフィルタ形状を使用して分類される。4つの可能なフィルタ形状は、それぞれ、図2A〜図2Dに示す、水平(クラス0)と、垂直(クラス1)と、135度(クラス2)と、45度(クラス3)とを含む。
【００５５】
ビデオエンコーダ20は、各ピクセルのために分類動作recPicture[ xC + i, yC + j ]を繰り返す。LCUでは、成分(xC,yC)は、LCUの上左サンプルの座標であり、例示的な32×32のLCUに関して、輝度に関してi=0...31およびj=0...31、彩度に関してi=0...15およびj=0...15である。ビデオエンコーダ20は、現在のサンプルrecPicture[ xC + i, yC + j ]とともに、2つの隣接ピクセルrecPicture[ xC + i + hPos[ k ], yC + j + vPos[ k ] ]を使用し、ここでk=0...1である。hPosおよびvPosとして示される隣接ピクセルの座標は、以下の表1において定義される。
【００５６】
【表１】
0006285559.tif 000002
【００５７】
分類動作は、表2の最初の2行に示されている。ビデオエンコーダ20が実行するこの動作は、以下の表3に示す5つの可能なカテゴリに現在のピクセルを分類する。分類の間、ビデオエンコーダ20は、0から4までの範囲のインデックスを現在のLCUの各ピクセルに割り当てる。ビデオエンコーダ20は、1〜4のインデックスを付与された4つのカテゴリに関して、ビットストリーム内で任意の非ゼロオフセットを送信する。現在のピクセルのためのカテゴリインデックス(edgeTable[edgeIdx])を考えると、ビデオエンコーダ20は、表2の3行目に示すように、ピクセルに適切なオフセットを適用する。パラメータsaoValueArrayは、5つのエントリを有し、そのすべては、ゼロ値で初期化される。エントリ1〜4は、ビットストリーム内で合図されるオフセット値でポピュレートされる。
【００５８】
【表２】
0006285559.tif 000003
【００５９】
図2A〜図2Dに示すエッジ分類の各々に関して、ビデオエンコーダ20は、現在のピクセル(C)の値を隣接ピクセル(1および2)の値と比較することによって、現在のピクセルのエッジタイプを計算する。図2Aは、分類ゼロ(sao_eo_class=0)の水平エッジオフセットを示す。図2Aでは、ビデオエンコーダ20は、現在のピクセル(ピクセルC)を左隣接ピクセル(ピクセル1)および右隣接ピクセル(ピクセル2)と比較する。図2Bは、分類(sao_eo_class=1)の垂直SAOエッジオフセットを示す。図2Bの分類において、ビデオエンコーダ20は、現在のピクセル(ピクセルC)を上隣接ピクセル(ピクセル1)および下隣接ピクセル(ピクセル2)と比較する。図2Cに示す135度SAOエッジオフセット分類(sao_eo_class=2)に関して、ビデオエンコーダ20は、現在のピクセル(ピクセルC)を左上隣接ピクセル(ピクセル1)および右下隣接ピクセル(ピクセル2)と比較する。図2Dに示す45度SAOエッジオフセット分類(sao_eo_class=3)に関して、ビデオエンコーダ20は、現在のピクセル(ピクセルC)を右上隣接ピクセル(ピクセル1)および左下隣接ピクセル(ピクセル2)と比較する。
【００６０】
4つのエッジオフセット分類は、各々、0から4までの範囲の5つの可能な整数値を有するエッジタイプを有してもよい。最初に、現在のピクセルのエッジタイプは、ゼロであると仮定される。現在のピクセルCの値が左隣接ピクセルと右隣接ピクセル(1および2)の両方の値と等しい場合、Cのエッジタイプは、ゼロに等しい。Cの値が両方の隣接ピクセルの値よりも小さい場合、Cのエッジタイプは、1に等しい。現在のピクセルCの値が隣接ピクセルのうちの一方よりも小さく、Cが他方のピクセルの値と等しい場合、エッジタイプは、2に等しい。現在のピクセルCの値が隣接ピクセルのうちの一方の値よりも大きく、Cが他方の隣接ピクセルの値と等しい場合、エッジタイプは、3に等しい。現在のピクセルCの値が両方の隣接ピクセル値の値よりも大きい場合、エッジタイプは、4に等しい。表3は、現在のピクセル(p)の隣接ピクセルとの比較に基づくEO分類カテゴリをまとめたものである。
【００６１】
【表３】
0006285559.tif 000004
【００６２】
ビデオエンコーダ20は、上記で説明した5つのカテゴリのうちの1つに同じチャネル(すなわち、Y、Cr、またはCbチャネル)内のサンプルを分類し、カテゴリの各々におけるピクセルの各々に適用するオフセットを決定する。ビデオエンコーダ20は、レート-歪み費用関数に基づいて、現在のLCUのために使用する5つのEOモードのうちの1つを選択し、コード化ビデオビットストリーム内で、カテゴリ、ならびに、選択されたEOカテゴリのためのオフセット値を合図する。
【００６３】
各エッジクラスのためのCUに適用されるオフセットを決定するために、ビデオエンコーダ20は、特定のエッジクラスで分類されたCUの元のサンプルと、同じエッジクラスを有するブロックの再構成されたサンプルとの間の差の合計を決定する。本開示の技術によれば、メモリ要件を低減するために、ビデオエンコーダ20は、元のサンプルと再構成されたサンプルとの間の各々の差を低減するために6ビットが十分なビット数であるように、[-32,31]の範囲に差のビット幅をクリップ(たとえば、低減)してもよい。差の合計に各々の6ビットにクリップされた差分値を追加した後、ビデオエンコーダ20は、さらに、差の合計を表すために必要なビット数を13ビットに低減するために、[-4095,4095]の範囲に差の合計をクリップする。
【００６４】
エッジクラスに属するピクセルのためのオフセット値を決定することの一部として、ビデオエンコーダ20は、そのエッジクラスに属する再構成されたサンプルの数を計算し、10ビットがエッジクラスに属するピクセルの数を表すように、範囲[0,1023]にサンプルの数の値をクリップする。
【００６５】
次に、ビデオエンコーダ20は、エッジクラスのためのオフセット値を決定するために、サンプル数でクリップされた差の合計を除算する。除算の性能を改善するために、ビデオエンコーダ20は、反復減算によって除算を実行してもよい。反復減算の一部として、ビデオエンコーダ20は、クリップされた差の合計の絶対値に等しく一時変数を設定してもよい。ビデオエンコーダ20は、次いで、得られた差がゼロ以下になるまで、クリップされた差の合計の絶対値に等しく変数からサンプル数を反復減算してもよい。LCUのためのオフセットは、次いで、実行された反復減算の数に等しい。
【００６６】
したがって、本開示の技術によれば、ビデオエンコーダ20は、サンプル適応オフセット(SAO)モードを使用して、ピクチャの最大コーディング単位(LCU)のサンプルを符号化するように構成されてもよい。SAOモードを使用してLCUのサンプルを符号化するために、少なくとも1つのプロセッサは、LCUの対応する再構成されたサンプルと、LCUの元のサンプルとの間の差を計算し、クリップされた差を形成するために、差の各々からビット数をクリップし、差の合計を形成するために、クリップされた差を合計し、クリップされた差の合計を形成するために、差の合計をクリップするように構成される。ビデオエンコーダ20は、さらに、再構成されたサンプルの数を計算し、クリップされたサンプル数を形成するために、再構成されたサンプルの数からビット数をクリップし、LCUのためのオフセットを生成するために、クリップされたサンプル数でクリップされた差の合計を除算するように構成されてもよい。
【００６７】
EOフィルタリングされたLCUを復号するとき、ビデオデコーダ30は、コード化ビデオビットストリームにおいて受信された値に基づいて、オフセットとEOカテゴリとを決定する。ビデオデコーダ30は、合図されたEOカテゴリに属するものとして分類されたLCUのサンプルにオフセットを適用する。
【００６８】
本開示は、以下でより詳細に説明するように、EOカテゴリの各々のためのオフセットを決定する計算の複雑性を低減するための技術を説明する。
【００６９】
図3は、バンドオフセット(BO)SAOフィルタリングにおいて使用されてもよい例示的なバンドを示す概念図である。図3中の各長方形は、バンドを表す。図3の例は、32のバンド、すなわち、バンド0〜31を示し、バンド0、バンド8、バンド12、バンド15。バンド24、およびバンド31などのバンドのいくつかは、ラベル付けされている。バンドベースのオフセットに関して、ピクセルは、強度値などのピクセル値に基づいて、異なるバンドに分類される。例示の目的のため、(たとえば、ピクセルが10ビットのビット深度を有するとき)0〜1023などの他の範囲も使用されてもよいが、(たとえば、8ビット深度を有するサンプルに関して)0〜255の範囲のピクセル値を仮定する。そのような例では、図3に示す最大値は、255に等しくなり、図3に示す32のバンドの各々は、8の範囲を有することになる。最も左のバンド(すなわち、図3中のバンド0)は、0〜7の強度値を有するピクセルを含んでもよく、次のバンド(すなわち、図3中のバンド1)は、8〜15の強度値を有するピクセルを含んでもよく、次のバンド(すなわち、バンド2)は、強度値16〜23を有するピクセルを含んでもよく、強度値248〜255を有するピクセルを含んでもよい最も右のバンド(すなわち、図3中のバンド31)に達するまで、以下同様である。
【００７０】
符号化するとき、エンコーダ、たとえば、ビデオエンコーダ20は、4つのバンド範囲と、選択された4つのバンド範囲内に入るピクセルの各々に加算する、またはそこから減算する対応するオフセットとを決定する。ビデオエンコーダ20は、いくつかの例では、3ビット(>>3)だけ現在の処理チャネルにおける各ピクセルの強度を算術的に右にシフトすることによって、各バンド内のピクセルの数を決定してもよい。ビデオエンコーダ20は、最も左のバンドのインデックスのみを合図し、ビデオデコーダ30は、合図された最も左のバンドに基づいて、次の3つの右隣接バンドも適用されたオフセットを有するべきことを決定する。このように、バンドまたはバンドの数を示すことに関連する合図は、(バンドの各々を合図することに対して)低減されてもよい。
【００７１】
図3の例では、ビデオエンコーダ20が決定した4つのバンド範囲は、バンド12において開始し、バンド15において終了する。ビデオエンコーダ20は、フィルタリングされるべき最も左のバンドのインデックス(開始インデックス12として図13に示す)を合図し、ビデオデコーダ30は、合図されたインデックスに基づいて、バンド12〜15内のサンプルが適用されたオフセットを有することになることを決定する。ビデオエンコーダ20はまた、4つのバンドの各々のためのオフセットを決定し、合図し、ビデオデコーダ30は、バンド12〜15内のサンプルにオフセットを適用する。
【００７２】
4つのバンドの各々に関連付けられたオフセットを決定するために、ビデオエンコーダ20は、図2A〜図2Dに関連して上記で説明したプロセスと同様のプロセスを利用してもよい。すなわち、ビデオエンコーダ20は、元のピクセル値と再構成されたピクセル値との間の差分値を決定し、差分値をクリップし、差の合計を生成するために、クリップされた差分値を加算してもよく、差の合計は、ビデオエンコーダ20がまた、クリップされた差の合計を生成するためにクリップしてもよい。ビデオエンコーダ20はまた、各バンドに属するピクセルの数を計算し、ピクセルのクリップされた数を生成するために差の数をクリップしてもよい。オフセット値を決定するために、ビデオエンコーダ20は、反復減算を使用して上記で説明したように、ピクセル数で差の合計を除算してもよい。
【００７３】
バンドオフセットフィルタリングを実行することの複雑さを低減するための追加の技術は、以下で詳細に説明される。
【００７４】
図4は、本開示で説明する技術を実施してもよい例示的なビデオエンコーダ20を示すブロック図である。ビデオエンコーダ20は、ビデオスライス内のビデオブロクのイントラコーディングとインターコーディングとを実行してもよい。イントラコーディングは、所与のビデオフレームまたはピクチャ内のビデオにおける空間的冗長性を低減または除去するために空間的予測に依存する。インターコーディングは、ビデオシーケンスの隣接フレームまたはピクチャ内のビデオにおける時間的冗長性を低減または除去するために時間的予測に依存する。イントラモード(Iモード)は、いくつかの空間ベースの圧縮モードのうちのいずれかを指してもよい。片方向予測(Pモード)または双方向予測(Bモード)などのインターモードは、いくつかの時間ベースの圧縮モードのうちのいずれかを指してもよい。
【００７５】
図4の例では、ビデオエンコーダ20は、区分ユニット35と、予測処理ユニット41と、加算器50と、変換処理ユニット52と、量子化ユニット54と、エントロピー符号化ユニット56とメモリ64とを含む。予測処理ユニット41は、動き推定ユニット42と、動き補償ユニット44と、イントラ予測ユニット46とを含む。ビデオブロック再構成のために、ビデオエンコーダ20はまた、逆量子化ユニット58と、逆変換処理ユニット60と、加算器62と、非ブロック化フィルタユニット72と、SAOユニット74と、適応ループフィルタ(ALF:adaptive loop filter)76とを含む。非ブロック化フィルタユニット72、SAOユニット74、およびALF76は、ループ内フィルタとして図4に示されているが、他の構成では、非ブロック化フィルタユニット72、SAOユニット74、およびALF76は、ポストループフィルタとして実装されてもよい。その上、説明の目的のために別々に図示され、説明されているが、フィルタリングユニットは、高度に統合されてもよい。
【００７６】
図4に示すように、ビデオエンコーダ20は、ビデオデータを受信し、区分ユニット35は、ビデオブロックにデータを区分する。この区分はまた、スライス、タイル、または他のより大きい単位への区分、ならびに、たとえば、LCUおよびCUの4分木構造によるビデオブロック区分を含んでもよい。ビデオエンコーダ20は、全体的に、符号化されるべきビデオスライス内のビデオブロックを符号化する構成要素を示す。スライスは、複数のビデオブロックに(および、あるいは、タイルと呼ばれるビデオブロックのセットに)分割されてもよい。予測処理ユニット41は、エラー結果(たとえば、コーディングレートおよび歪のレベル)に基づいて、現在のビデオブロックのための、複数のイントラコーディングモードのうちの1つまたは複数のインターコーディングモードのうちの1つなどの、複数の可能なコーディングモードのうちの1つを選択してもよい。予測処理ユニット41は、残差ブロックデータを生成するために加算器50に、および、参照ピクチャとして使用するための符号化ブロックを再構成するために加算器62に、得られたイントラまたはインターコード化ブロックを提供してもよい。
【００７７】
予測処理ユニット41内のイントラ予測ユニット46は、空間的圧縮を提供するために、コーディングされるべき現在のブロックと同じフレームまたはスライス内の1つまたは複数の隣接ブロックに対する現在のビデオブロックのイントラ予測コーディングを実行してもよい。予測処理ユニット41内の動き推定ユニット42および動き補償ユニット44は、時間的圧縮を提供するために、1つまたは複数の参照ピクチャ内の1つまたは複数の予測ブロックに対する現在のビデオブロックのインター予測コーディングを実行する。
【００７８】
動き推定ユニット42は、ビデオシーケンスのための所定のパターンに従ってビデオスライスのためのインター予測モードを決定するように構成されてもよい。所定のパターンは、Pスライス、Bスライス、またはGPBスライスとしてシーケンス内のビデオスライスを指定してもよい。動き推定ユニット42および動き補償ユニット44は、高度に統合されてもよいが、概念的な目的のために別々に示されている。動き推定ユニット42によって実行される動き推定は、ビデオブロックに関する動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、参照ピクチャ内の予測ブロックに対する現在のビデオフレームまたはピクチャ内のビデオブロックのPUの変位を示してもよい。
【００７９】
予測ブロックは、差の絶対値の合計(SAD:sum of absolute difference)、自乗差の合計(SSD:sum of square difference)、または他の差メトリックによって決定されてもよいピクセル差の観点で、コーディングされるべきビデオブロックのPUと密接に一致することが見出されたブロックである。いくつかの例では、ビデオエンコーダ20は、メモリ64内に記憶された参照ピクチャのサブ整数ピクセル位置のための値を計算してもよい。たとえば、ビデオエンコーダ20は、参照ピクチャの4分の1ピクセル位置の値、8分の1ピクセル位置の値、または他の分数ピクセル位置の値を補間してもよい。したがって、動き推定ユニット42は、フルピクセル位置および分数ピクセル位置に対する動き探索を実行し、分数ピクセル精度で動きベクトルを出力してもよい。
【００８０】
動き推定ユニット42は、参照ピクチャの予測ブロックの位置とPUの位置とを比較することによって、インターコード化スライス内のビデオブロックのPUのための動きベクトルを計算する。参照ピクチャは、その各々がメモリ64内に記憶された1つまたは複数の参照ピクチャを識別する第1の参照ピクチャリスト(リスト0)または第2の参照ピクチャリスト(リスト1)から選択されてもよい。動き推定ユニット42は、エントロピー符号化ユニット56および動き補償ユニット44に計算された動きベクトルを送信する。
【００８１】
動き補償ユニット44によって実行される動き補償は、あるいはサブピクセル精度で補間を行う動き推定によって決定された動きベクトルに基づいて、予測ブロックを取得または生成することを伴ってもよい。現在のビデオブロックのPUのための動きベクトルを受信すると、動き補償ユニット44は、参照ピクチャリストのうちの1つにおいて動きベクトルが指す予測ブロックの位置を特定してもよい。ビデオエンコーダ20は、コーディングされている現在のビデオブロックのピクセルピクセル値から予測ブロックのピクセル値を減算し、ピクセル差分値を形成することによって、残差ビデオブロックを形成する。ピクセル差分値は、ブロックのための残差データを形成し、輝度差成分と彩度差成分の両方を含んでもよい。加算器50は、この減算演算を実行する1つまたは複数の成分を表す。動き補償ユニット44はまた、ビデオスライスのビデオブロックを復号する際にビデオデコーダ30によって使用するための、ビデオブロックおよびビデオスライスに関連付けられた構文要素を生成してもよい。
【００８２】
イントラ予測ユニット46は、上記で説明したように、動き推定ユニット42および動き補償ユニット44によって実行されるインター予測の代替として、現在のブロックをイントラ予測してもよい。具体的には、イントラ予測ユニット46は、現在のブロックを符号化するために使用するイントラ予測モードを決定してもよい。いくつかの例では、イントラ予測ユニット46は、たとえば、別々の符号化パスの間、様々なイントラ予測モードを使用して現在のブロックを符号化してもよく、イントラ予測ユニット46(または、いくつかの例ではモード選択ユニット40)は、試験されたモードから使用する適切なイントラ予測モードを選択してもよい。たとえば、イントラ予測ユニット46は、様々な試験されたイントラ予測モードに対してレート-歪み分析を使用してレート-歪み値を計算し、試験されたモードの中から最良のレート-歪み特性を有するイントラ予測モードを選択してもよい。レート-歪み分析は、一般に、符号化ブロックと、符号化ブロックを生成するために符号化された元の非符号化ブロックとの間の歪(または誤差)、ならびに、符号化ブロックを生成するために使用されたビットレート(すなわち、ビット数)を決定する。イントラ予測ユニット46は、どのイントラ予測モードがブロックのための最良のレート-歪み値を示すのかを決定するために、様々な符号化ブロックに関する歪みおよびレートから比を計算してもよい。
【００８３】
いずれの場合でも、ブロックのためのイントラ予測モードを選択した後、イントラ予測ユニット46は、エントロピー符号化ユニット56にブロックのための選択されたイントラ予測モードを示す情報を提供してもよい。ビデオエンコーダ20は、複数のイントラ予測モードインデックステーブルおよび複数の変更されたイントラ予測モードインデックステーブル(コードワードマッピングテーブルとも呼ばれる)を含んでもよい、送信されたビットストリーム構成データ内に、コンテキストの各々のために使用する、様々なブロックのための符号化コンテキストの定義と、最もあり得るイントラ予測モードの指示と、イントラ予測モードインデックステーブルと、変更されたイントラ予測モードインデックステーブルとを含んでもよい。
【００８４】
予測処理ユニット41が、インター予測またはイントラ予測のいずれかによって現在のビデオブロックのための予測ブロックを生成した後、ビデオエンコーダ20は、現在のビデオブロックから予測ブロックを減算することによって、残差ビデオブロックを形成する。残差ブロック内の残差ビデオデータは、1つまたは複数のTU内に含まれ、変換処理ユニット52に適用されてもよい。変換処理ユニット52は、離散コサイン変換(DCT)または概念的に同様の変換などの変換を使用して、残差ビデオデータを残差変換係数に変換する。変換処理ユニット52は、残差ビデオデータをピクセル領域から周波数領域などの変換領域に変換してもよい。
【００８５】
変換処理ユニット52は、量子化ユニット54に得られた変換係数を送信してもよい。量子化ユニット54は、ビットレートをさらに低減するために、変換係数を量子化する。量子化プロセスは、係数の一部またはすべてに関連するビット深度を低減してもよい。量子化の程度は、量子化パラメータを調整することによって変更されてもよい。いくつかの例では、量子化ユニット54は、次いで、量子化変換係数を含む行列の走査を実行してもよい。代替的には、エントロピー符号化ユニット56は、走査を実行してもよい。
【００８６】
量子化に続いて、エントロピー符号化ユニット56は、量子化変換係数をエントロピー符号化する。たとえば、エントロピー符号化ユニット56は、コンテキスト適応可変長コーディング(CAVLC)、コンテキスト適応2値算術コーディング(CABAC)、構文ベースコンテキスト適応2値算術コーディング(SBAC)、確率インターバル区分エントロピー(PIPE)コーディング、または別のエントロピー符号化方法もしくは技術を実行してもよい。エントロピー符号化ユニット56によるエントロピー符号化に続いて、符号化ビットストリームは、ビデオデコーダ30に送信されてもよく、または、ビデオデコーダ30による後の送信または検索のためにアーカイブされてもよい。エントロピー符号化ユニット56は、コーディングされている現在のビデオスライスに関する動きベクトルおよび他の構文要素を符号化してもよい。
【００８７】
逆量子化ユニット58および逆変換処理ユニット60は、参照ピクチャの参照ブロックとして後に使用するためのピクセル領域における残差ブロックを再構成するために、それぞれ、逆量子化および逆変換を適用する。動き補償ユニット44は、参照ピクチャリストのうちの1つ内の参照ピクチャのうちの1つの予測ブロックに残差ブロックを加算することによって、参照ブロックを計算してもよい。動き補償ユニット44はまた、動き推定において使用するためのサブ整数ピクセル値を計算するために、再構成された残差ブロックに1つまたは複数の補間フィルタを適用してもよい。加算器62は、メモリ64内に記憶するための参照ブロックを生成するために、動き補償ユニット44によって生成された動き補償された予測ブロックに再構成された残差ブロックを加算する。参照ブロックは、後続のビデオフレームまたはピクチャ内のブロックをインター予測するために、参照ブロックとして動き推定ユニット42および動き補償ユニット44によって使用されてもよい。
【００８８】
メモリ64内に記憶する前に、ビデオエンコーダ20は、1つまたは複数のフィルタを使用して、再構成された残差ブロックをフィルタリングしてもよい。たとえば、非ブロック化フィルタ72は、ブロック性(blockiness)アーティファクトを除去するために、再構成された残差ブロックをフィルタリングするために適用されてもよい。(コーディングループ内またはコーディングループ後のいずれかの)ALF76およびSAO74などの他のループフィルタはまた、ピクセル遷移をなめらかにするため、またはビデオ品質を他の方法で改善するために使用されてもよい。参照ブロックは、非ブロック化フィルタユニット72、SAOユニット74、およびALFユニット76のうちの1つまたは複数によってフィルタリングされた後に、後続のビデオフレームまたはピクチャ内のブロックをインター予測するために参照ブロックとして動き推定ユニット42および動き補償ユニット44によって使用されてもよい。
【００８９】
SAOユニット74は、ビデオコーディング品質を改善する方法でSAOフィルタリングするためのオフセット値を決定してもよい。ビデオコーディング品質を改善することは、たとえば、再構成された画像を元の画像により密接に一致させるオフセット値を決定することを伴ってもよい。ビデオエンコーダ20は、たとえば、異なるSAOタイプおよび異なるオフセット値を有する複数のパスを使用してビデオデータをコーディングし、所望のレート-歪みのトレードオフに基づいて決定されるように、最良のコーディング品質を提供するSAOタイプ、およびオフセット値を、符号化されたビットストリーム内に含めるために選択してもよい。
【００９０】
いくつかの構成では、SAOユニット74は、上記で説明したように、2つのタイプのオフセット(たとえば、バンドオフセットおよびエッジオフセット)を適用するように構成されてもよい。SAOユニット74はまた、時にはオフセットを適用しなくてもよく、これは、第3のタイプのオフセットとみなされてもよい。SAOユニット74によって適用されるオフセットのタイプは、ビデオデコーダに明示的または暗示的に合図されてもよい。エッジオフセットを適用するとき、ピクセルは、図2A〜図2Dによるエッジ情報に基づいて分類されてもよく、オフセット値は、エッジ分類に基づいて決定されることが可能である。バンドベースオフセットを適用するとき、SAOユニット74は、図3に関連して説明したように、強度値などのピクセル値に基づいて異なるバンドにピクセルを分類してもよく、各バンドは、関連するオフセットを有する。
【００９１】
本開示の一態様によれば、SAOユニット74は、サンプル適応オフセット(SAO)モードを使用してピクチャの最大コーディング単位(LCU)のサンプルを符号化するように構成されてもよい。SAOモードを使用してLCUのサンプルを符号化するために、SAOユニット74は、LCUの対応する再構成されたサンプルとLCUの元のサンプルとの間の差を計算し、クリップされた差を形成するために差の各々からビット数をクリップし、差の合計を形成するためにクリップされた差を合計し、クリップされた差の合計を形成するために差の合計をクリップし、再構成されたサンプルの数を計算し、クリップされたサンプル数を形成するために再構成されたサンプルの数からビット数をクリップし、LCUのためのオフセットを生成するためにクリップされたサンプル数でクリップされた差の合計を除算するように構成されてもよい。
【００９２】
本開示の別の態様によれば、SAOユニット74は、LCUのための少なくとも1つのサンプル適応オフセット(SAO)モードを決定するように構成されてもよい。少なくとも1つのSAOモードは、バンドオフセットモード、エッジオフセットモード、マージアップモード、マージレフトモード、およびスキップモードのうちの少なくとも1つを備えてもよい。少なくとも1つのSAOモードを決定するために、SAOユニット74は、LCUのためのSAOモードの所定の優先順位に基づいて少なくとも1つのSAOモードを決定するように構成されてもよい。
【００９３】
図5は、例示的なビデオデコーダ30を示すブロック図である。図5の例では、ビデオデコーダ30は、エントロピー復号ユニット80と、予測処理ユニット81と、逆量子化ユニット86と、逆変換処理ユニット88と、加算器90と、非ブロック化フィルタユニット93と、SAOユニット94と、ALFユニット95と、参照ピクチャメモリ92とを含む。予測処理ユニット81は、動き補償ユニット82と、イントラ予測処理ユニット84とを含む。ビデオデコーダ30は、いくつかの例では、図4からのビデオエンコーダ20に関連して説明した符号化パスと全体的に相互的な復号パスを実行してもよい。
【００９４】
復号プロセスの間、ビデオデコーダ30は、ビデオエンコーダ20から、符号化ビデオスライスのビデオブロックと関連する構文要素とを表す符号化されたビデオビットストリームを受信する。ビデオデコーダ30のエントロピー復号ユニット80は、量子化係数と、動きベクトルと、他の構文要素とを生成するためにビットストリームを復号する。エントロピー復号ユニット80は、予測処理ユニット81に動きベクトルと他の構文要素とを転送する。ビデオデコーダ30は、ビデオスライスレベルおよび/またはビデオブロックレベルにおいて構文要素を受信してもよい。
【００９５】
ビデオスライスがイントラコード化(I)スライスとしてコーディングされたとき、予測処理ユニット81のイントラ予測処理ユニット84は、合図されたイントラ予測モードと、現在のフレームまたはピクチャの以前に復号されたブロックからのデータとに基づいて、現在のビデオスライスのビデオブロックのための予測データを生成してもよい。ビデオフレームがインターコード化(すなわち、B、P、またはGPB)スライスとしてコーディングされたとき、予測処理ユニット81の動き補償ユニット82は、エントロピー復号ユニット80から受信した動きベクトルと他の構文要素とに基づいて、現在のビデオスライスのビデオブロックのための予測ブロックを生成する。予測ブロックは、参照ピクチャリストのうちの1つ内の参照ピクチャのうちの1つから生成されてもよい。ビデオデコーダ30は、参照ピクチャメモリ92内に記憶された参照ピクチャに基づいて、デフォルトの構成技術を使用して、参照フレームリスト、リスト0およびリスト1を構成してもよい。
【００９６】
動き補償ユニット82は、動きベクトルと他の構文要素とを構文解析することによって、現在のビデオスライスのビデオブロックのための予測情報を決定し、復号されている現在のビデオブロックのための予測ブロックを生成するために予測情報を使用する。たとえば、動き補償ユニット82は、ビデオスライスのビデオブロックをコーディングするために使用された予測モード(たとえば、イントラまたはインター予測)と、インター予測スライスタイプ(たとえば、Bスライス、Pスライス、またはGPBスライス)と、スライスのための参照ピクチャリストのうちの1つまたは複数のための構成情報と、スライスの各インター符号化ビデオブロックのための動きベクトルと、スライスの各インターコード化ビデオブロックのためのインター予測状態と、現在のビデオスライス内のビデオブロックを復号するための他の情報とを決定するために、受信した構文要素の一部を使用する。
【００９７】
動き補償ユニット82はまた、補間フィルタに基づいて補間を実行してもよい。動き補償ユニット82は、参照ブロックのサブ整数ピクセルに関する補間値を計算するために、ビデオブロックの符号化の間にビデオエンコーダ20によって使用されるように補間フィルタを使用してもよい。この場合には、動き補償ユニット82は、受信した構文要素からビデオエンコーダ20によって使用された補間フィルタを決定し、予測ブロックを生成するために補間フィルタを使用してもよい。
【００９８】
逆量子化ユニット86は、ビットストリーム内で提供され、エントロピー復号ユニット80によって復号された量子化変換係数を逆量子化する(inverse quantize)、すなわち逆量子化する(de-quantize)。逆量子化プロセスは、量子化の程度を決定し、同様に、適用されるべき逆量子化の程度を決定するために、ビデオスライス内の各ビデオブロックのための、ビデオエンコーダ20によって計算された量子化パラメータの使用を含んでもよい。逆変換処理ユニット88は、ピクセル領域における残差ブロックを生成するために、変換係数に逆変換、たとえば、逆DCT、逆整数変換、または概念的に同様の逆変換プロセスを適用する。
【００９９】
動き補償ユニット82が、動きベクトルと他の構文要素とに基づいて現在のビデオブロックのための予測ブロックを生成した後、ビデオデコーダ30は、逆変換処理ユニット88からの残差ブロックを、動き補償ユニット82によって生成された対応する予測ブロックと加算することによって、復号ビデオブロックを形成する。加算器90は、この加算演算を実行する1つまたは複数の成分を表す。加算器90によって形成された復号ビデオブロックは、次いで、非ブロック化フィルタユニット93、SAOユニット94、およびALFユニット95によってフィルタ処理されてもよい。所与のフレームまたはピクチャ内の復号ビデオブロックは、次いで、(参照ピクチャメモリまたは復号ピクチャバッファと呼ばれることもある)メモリ92内に記憶され、メモリ92は、後続の動き補償のために使用される参照ピクチャを記憶する。メモリ92はまた、図1の表示デバイス32などの表示デバイス上で後に提示するための復号ビデオを記憶する。本開示の態様によれば、SAOユニット94は、上記で説明したSAOユニット74と同じフィルタリング(たとえば、エッジオフセットおよびバンドオフセット)を適用するように構成されてもよい。
【０１００】
図6は、本開示の技術による、SAOフィルタリングモードを決定するための高レベル処理を示す概念図である。ビデオエンコーダ20などの互換性のあるビデオエンコーダは、図6のフロー図に示す技術を実行してもよい。
【０１０１】
図6の例では、ビデオエンコーダ20は最初に、ゼロに等しくすべてのスキップフラグおよびマージフラグを設定する(120)。上記で説明したように、スキップフラグおよびマージフラグは、ビデオエンコーダ20がSAOモードを使用するかどうかと、現在のLCUに関係する隣接LCUからのパラメータとを示す構文要素である。ビデオエンコーダ20は、以下でより詳細に説明するように、スキップフラグおよびマージフラグの値を後に変更してもよい。
【０１０２】
ビデオエンコーダ20が利用する図6の例への入力は、現在のLCUからの元のピクセルと、現在のLCUからの非ブロック化後のピクセルおよび非ブロック化前のピクセルとを含む。(SAOスキップ検討(consideration)と呼ばれる)SAOスキップモードを利用するかどうかを決定するとき、ビデオエンコーダ20は、sao_deci_luma_onlyが以前に真であると合図されていることを必要としてもよい。マージレフトモードを利用するかどうか、またはマージレフトモードを検討するとき、ビデオエンコーダ20は、次の通り、(左LCUが利用可能な場合)左隣接LCUからのSAOパラメータを要求してもよい。ビデオエンコーダ20が左隣接LCUから要求してもよいSAOパラメータは、left_sao_type_idx_luma/chromaと、left_sao_band_position_luma/Cb/Crと、left_sao_eo_class_luma/chromaと、left_offsetslumaと、left_offsetsCbと、left_offsetsCr、ならびに、left_bo_hist_peaklumaと、left_bo_hist_peakCbと、left_bo_hist_peakCrとを含んでもよい。マージアップモードを利用することを検討するために、ビデオエンコーダ20は、(上隣接LCUが利用可能な場合)上隣接LCUから以下のSAOパラメータ、up_sao_type_idx_luma/chromaと、up_sao_band_position_luma/Cb/Crと、up_sao_eo_class_luma/chromaと、up_offsetslumaと、up_offsetsCbと、up_offsetsCrと、ならびに、up_bo_hist_peaklumaと、up_bo_hist_peakCbと、up_bo_hist_peakCrとを要求してもよい。
【０１０３】
次に、ビデオエンコーダ20は、輝度SAOパラメータを導出し(輝度SAOパラメータ導出、歪み、ビン数、オフセット、およびsao_type_idxを取得として図6に示す)(122)、彩度SAOパラメータを導出する(彩度SAOパラメータ導出、歪み、ビン数、オフセット、およびsao_type_idxを取得として図6に示す)(124)。sao_deci_lumaフラグがゼロに等しい場合、ビデオエンコーダ20は、並行して輝度SAOおよび彩度SAOに関するパラメータを導出してもよい。輝度SAOパラメータおよび彩度SAOパラメータを決定するために、ビデオエンコーダ20は、歪み値(「dist」)、ビン数(bin count)、オフセット、およびSAOモード(たとえば、バンドオフセットまたはエッジオフセット)を決定する。ビデオエンコーダ20は、sao_type_idxパラメータ値を使用してSAOモードを合図する。輝度SAOパラメータ導出を実行することの詳細は、図7〜図9に関連して以下でより詳細に説明される。彩度SAOパラメータ導出を実行することの詳細は、図10〜図12に関連して以下でより詳細に説明される。
【０１０４】
より具体的には、ステップ120において、ビデオエンコーダ20は、skip_sao_luma=0およびskip_sao_chroma=0を設定し、sao_merge_left_flagおよびsao_merge_up_flagをゼロに設定してもよい。この時点で、skip_sao_luma/chroma=1は、sao_type_idx_luma/chroma=0と同じである。ビデオエンコーダ20は、この信号の事前の知識(たとえば、一実施形態では、SAO彩度が早くスキップされることがある)が、ビデオエンコーダ20におけるハードウェア動作を無効にし、したがって電力および/または処理サイクルを節約するために使用されてもよい例示的な実施態様では、別々の信号としてこれらを維持する。
【０１０５】
彩度SAOパラメータおよび輝度SAOパラメータを決定した後、適切な場合、ビデオエンコーダ20は、現在のLCUのためのビン数を決定し(126)、現在のLCUに対してSAOフィルタリングを実行する、JSAOと呼ばれる費用を計算する(128)。JSAOは、レート-歪み費用関数を最適化するSAOモードを使用してSAOフィルタリングを実行する費用を指す。
【０１０６】
JSAOを決定した後、ビデオエンコーダ20は、マージレフトSAOフィルタリング(130)およびマージアップSAOフィルタリング(132)を実行するための費用を決定するように構成されてもよい。いくつかの例では、ビデオエンコーダ20は、並行して費用を決定してもよい。マージレフトSAOフィルタリングおよびマージアップSAOフィルタリングのための費用を決定するプロセスは、図13に関連して以下でより詳細に説明される。いくつかの例では、ビデオエンコーダ20は、Jmerge_leftと呼ばれるマージレフトSAOフィルタリングのための費用と、Jmerge_upと呼ばれるマージアップSAOフィルタリングのための費用とを並行して計算するように構成されてもよい。
【０１０７】
マージSAOフィルタリングのための費用を決定することに応答して、ビデオエンコーダ20は、費用JSAO、Jmerge_left、およびJmerge_upに 基づいて、現在のLCUのための最終的なSAOパラメータの決定を行う(134)。ビデオエンコーダ20は、JSAO、Jmerge_left、およびJmerge_upにわたって最小化する、すなわち、最小費用に関連するパラメータを選択することによって、LCUパラメータを決定してもよい。
【０１０８】
マージレフトが最低の費用を有する場合、ビデオエンコーダ20は、best_sao_type_idx_luma/chroma、best_sao_band_position_luma/Cb/Cr、best_sao_eo_class_luma/chroma、offsetsluma、offsetsCb、およびoffsetsCrの値を、それぞれ、left_sao_type_idx_luma/chroma、left_sao_band_position_luma/Cb/Cr、left_sao_eo_class_luma/chroma、left_offsetsluma、left_offsetsCbおよびleft_offsetsCrの値に置き換える。この場合、ビデオエンコーダ20は、sao_merge_left_flagを1に設定する。
【０１０９】
マージアップが最低の費用を有する場合、ビデオエンコーダ20は、best_sao_type_idx_luma/chroma、best_sao_band_position_luma/Cb/Cr、
best_sao_eo_class_luma/chroma、offsetsluma、offsetsCb、およびoffsetsCrの値を、それぞれ、up_sao_type_idx_luma/chroma、up_sao_band_position_luma/Cb/Cr、up_sao_eo_class_luma/chroma、up_offsetsluma、up_offsetsCb、およびup_offsetsCrの値に置き換えるように構成される。ビデオエンコーダ20はまた、sao_merge_up_flagを1に設定する。
【０１１０】
最終的なパラメータの決定は、とりわけ、(もしあれば)現在のLCUのためのオフセットと、上または左隣接LCUからのSAOパラメータがSAOパラメータとして使用されるべきであるかどうかを示すマージフラグの値と、sao_type_idx値とを含む。ビデオエンコーダ20は、最終的なSAOパラメータに対応する構文要素を符号化するように構成される。最終的に、ビデオエンコーダ20は、任意のスキップフラグを符号化し(136)、LCU SAOエンコーダが決定を行うのを停止するように構成される。best_sao_type_idx_lumaが0に設定された場合、ビデオエンコーダ20は、skip_sao_lumaを1に設定する。best_sao_type_idx_chromaが0である場合、ビデオエンコーダ20は、skip_sao_chromaを1に設定する。
【０１１１】
加えて、フラグsao_deci_luma_onlyが1に等しい事例では、ビデオエンコーダ20は、輝度SAOフィルタリングを実行し、彩度、マージ、またはスキップモードを考慮しないように構成されてもよい。いくつかの例では、sao_deci_luma_onlyが1に等しい場合、ビデオエンコーダ20は、輝度SAOフィルタリングおよび/または彩度SAOフィルタリングのみを実行し、マージフィルタリングおよびスキップSAOモードを考慮しないように構成されてもよい(138)。
【０１１２】
図6に示す例示的なプロセスの出力は、構文パラメータ、sao_merge_left_flagと、sao_merge_up_flagと、best_sao_type_idx_luma/chromaと、best_sao_band_position_luma/Cb/Crと、best_sao_eo_class_luma/chromaと、offsetslumaと、offsetsCbと、offsetsCrとを含む。ビデオエンコーダ20は、次の行の下方隣接LCUにおけるマージアップ処理のため、ならびに、内部的に右隣接LCUにおけるマージレフト処理のためのラインバッファ内(たとえば、頂点ストリームプロセッサ内)に上記の構文値をバッファリングする。加えて、出力は、SAOが現在のLCUサンプルに適用されるかどうかを制御する補助パラメータskip_sao_lumaおよびskip_sao_chroma、ならびに、(たとえば、マージモード処理をサポートするために)同様に内部的にラインバッファ内にバッファリングされるパラメータbo_hist_peakluma、bo_hist_peakCb、およびbo_hist_peakCrを含む。
【０１１３】
いくつかの例では、ビデオエンコーダ20が特定のモードおよび成分を評価する順序は、図6に記載の順序と同じでなくてもよい。たとえば、図6の方法は、彩度の前に輝度を評価し、BOの前にEOを評価するビデオエンコーダ20を示す。いくつかの例では、ビデオエンコーダ20は、EOの前にBOを評価してもよい。ビデオエンコーダ20はまた、彩度と同時に輝度を評価してもよく、その場合には、(以下で説明する)彩度の早期終了は、可能ではないであろう。
【０１１４】
いくつかの例では、ビデオエンコーダ20は、輝度についてBOおよびEOを評価する前にマージモードとともにSAO OFFを評価してもよい。そうすることによって、ビデオエンコーダ20は、マージ費用またはSAO OFF費用がしきい値未満(このしきい値は、時間的または空間的隣接を使用して決定されてもよい)である場合、EOおよびBOの決定の早期の終了を実行してもよい(すなわち、EOおよびBOの決定をスキップしてもよい)。
【０１１５】
さらに別の例では、ビデオエンコーダ20はまた、費用が等しい場合、別のモードに対して1つのモードに優先順位を与えてもよい。たとえば、マージレフトは、マージアップよりも高い優先順位を有してもよい。そのような方式は、品質よりもビットレートを優先させてもよい。同様に、BOは、EOよりも高い優先順位を有してもよく、SAO OFFは、BOまたはEOのいずれかよりも高い優先順位を有してもよい。最後に、BOおよびEOは、マージモードよりも高い優先順位を有してもよい(そのような方式は、おそらくビットレートよりも品質を優先させることになる)。決定ステップの優先順位付けおよび順序は、したがって、品質-ビットレートのトレードオフに影響を与える場合がある。
【０１１６】
図7は、本開示の技術による、輝度SAO導出を実行するためのプロセスを示す概念図である。図7の方法では、ビデオエンコーダ20は、EO輝度フィルタリングを実行する費用を決定するために、EO輝度導出を実行するように構成されてもよい(160)。費用は、JEO,lumaと呼ばれる。ビデオエンコーダ20は、JBO,lumaと呼ばれる、BO輝度フィルタリングのための費用を決定するために、BO輝度導出を実行するようにさらに構成される(162)。いくつかの例では、ビデオエンコーダ20は、ステップ160およびステップ162を並行して実行するように構成されてもよい。ビデオエンコーダ20は、JBO,luma = dist_B[Y] + λ × (sao_bo_luma_bias + bincount1BO,luma)としてステップ162におけるBOモードフィルタリングの費用を計算する。上記の式では、sao_bo_luma_bias値は、任意であってもよく、またはゼロに固定されてもよく、bincount1BO,lumaは、輝度バンドオフセットのための推定されたビン数であり、dist_B[Y]は、バンドオフセットに関する計算された歪みであり、λは、ラグランジュ乗数である。
【０１１７】
費用JBO,lumaおよびJEO,lumaの決定に応答して、ビデオエンコーダ20は、SAOフィルタリングを実行しない、すなわちSAOスキップモードを合図する費用を決定するために試験を実行するように構成される(164)。SAOを実行しない費用は、Jno_SAO,lumaと呼ばれる。
【０１１８】
SAOを実行しない費用を計算すること(164)に応答して、ビデオエンコーダ20は、輝度パラメータを更新する最小費用を有する輝度SAOパラメータのセットを選択するようにさらに構成される(166)。費用は、JEO,lumaと呼ばれる。ビデオエンコーダ20は、次いで、後に他のSAO費用と比較される費用を出力する。
【０１１９】
EOモードと、BOモードと、非SAOモードとの間で選択する(ステップ166)ために、ビデオエンコーダ20は、JEO,luma、Jno_SAO,luma、およびJBO,lumaにわたるレート-歪み費用を最小にするようにさらに構成され、最小R-D費用を有するSAOモードオプションを選択することによって最適な輝度パラメータを決定することを試みる。EOモードと、BOモードと、SAOモードとの間で選択することは、いくつかの例では、ステップ166に示すように、費用を最小化し、輝度パラメータを更新することと同義であってもよい。ビデオエンコーダ20がEOモードを選択したとき、ビデオエンコーダ20は、dist_X[Y] = dist_Ek[Y]、bincountluma = bincount1EO,luma、offsetsluma =offsetsEO,luma、およびbest_sao_type_idx_luma=2として、計算された歪みを記憶する。ビデオエンコーダ20がBOモードを選択したとき、ビデオエンコーダ20は、dist_X[Y] = dist_B[Y]、bincountluma = bincount1BO,luma、offsetsluma=offsetsBO,luma、およびbest_sao_type_idx_luma=1として、計算された歪みを決定する。ビデオエンコーダ20がSAOスキップモード、すなわち、SAOが実行されないことを選択したとき、ビデオエンコーダ20は、dist_X[Y] = 0,bincountluma = bincount(0)およびbest_sao_type_idx_luma=0を記憶する。
【０１２０】
図8は、本開示の技術による、エッジオフセット(EO)輝度SAO費用導出を実行するためのプロセスを示すフロー図である。上記で説明したように、EO SAOのための4つのクラスが存在する。図8の方法では、ビデオエンコーダ20は、(第1のオフセットクラスi=0から最後のオフセットクラスi=3までの)オフセットクラスの各々のために、各クラスのための費用を計算し、すなわち、JEO,luma,iとして示される、各クラスの費用を計算し(182)、最も低い関連する費用を有するクラスを選択する(184)ためのEO輝度クラス導出を実行するように構成される。最も低い費用を有するクラスを選択するために、ビデオエンコーダ20は、費用を最小化する最良の輝度クラスkを選択してもよく、JEO,lumaをJEO,luma,iに等しく設定してもよい。いくつかの例では、ビデオエンコーダ20は、互いに並行して複数のクラスを試験するように構成される。図8に関連して以下で説明するクリップ動作および反復分割技術は、本開示の技術によるEOおよびBOモードを符号化する性能を改善することがある。
【０１２１】
図2A〜図2Dに関連して上記で説明したように、ビデオエンコーダ20がEOモードを選択したとき、ビデオエンコーダ20は、エッジオフセット分類子構文要素sao_eo_class_luma/chromaを符号化する。sao_eo_class_luma/chromaを合図する前に、ビデオエンコーダ20は、パラメータの導出を実行し、各エッジオフセット分類子のレート-歪み費用(sao_eo_class_luma)を評価し、i=[0,1,2,3]であり、ビデオエンコーダ20は、各入力クラスiのための、および現在のLCUのYチャネル(輝度)サンプルにおけるエッジオフセット導出を実行する。輝度EOパラメータ導出の一部として、ビデオエンコーダ20は、distEi[Y]として示される、各輝度エッジクラスのための歪み値、ならびに、各エッジクラスのためのオフセット(offsetsEO,luma,i)、各クラス内のピクセルの合計(SOPEO,luma,i)、各クラス内のピクセルの数(NOPEO,luma,i)、およびビン数(bincountEO,luma,i)を決定する。ビン数は、EO輝度分類子i=[0,1,2,3]の各々のための符号化パラメータ(たとえば、符号化モード、オフセットなど)をCABACエントロピー符号化するために必要なビンの数の推定である。
【０１２２】
ビデオエンコーダ20が考慮する、クラスが変数iによって示された各EOクラスに関して、および、現在のLCUの輝度成分に関して、ビデオエンコーダ20は、図6に関連して上記で説明したように、各クラスのための歪み値distEi[Y]と、各クラスのためのオフセット(offsetsEO,luma,i)と、そのクラスに関するピクセルの合計(SOPEO,luma,i)と、各ピクセルにおけるピクセルの数(NOPEO,luma,i)と、ビン数bincountEO,luma,iとを出力し、記憶する。歪みに基づいて、ビデオエンコーダ20は、(182)に示すように、JEO,luma,iと呼ばれる、各クラスのための費用を決定するように構成される。ビデオエンコーダ20は、JEO,luma,i = distEi[Y] + λ × (sao_eo_luma_bias + sao_eo_class_yj_bias + bincountEO,luma,i)としてJEO,luma,iを計算してもよい。
【０１２３】
ステップ184において、ビデオエンコーダ20は、最小費用を有するJEO,luma,i(i = [0,1,2,3])の値をさらに選択する。ビデオエンコーダ20はまた、offsetsEO,lumaの値をoffsetsEO,luma,kに等しく設定し、JEO,lumaの値をJEO,luma,k - λ × sao_eo_class_y(k+1)_biasに等しく設定する。いくつかの例では、ビデオエンコーダ20は、sao_eo_luma_biasおよびsao_eo_class_yj_biasの値を任意の値に設定してもよい。ビデオエンコーダ20は、特定のモードに向けてSAOモード決定をバイアスするために、設定されたバイアス値を使用してもよい。他の例では、ビデオエンコーダ20は、バイアス値をゼロに固定してもよい。加えて、ビデオエンコーダ20は、sao_eo_class_y(k+1)_biasを、いくつかの例では任意の値に割り当ててもよく、他の例ではゼロに割り当ててもよい。
【０１２４】
各クラスのためのエッジオフセット値を計算するために、ビデオエンコーダ20は、所与の成分cのための所与のsao_eo_class EO分類子iを試験する。EO分類子インデックスiを指定すると、ビデオエンコーダ20は、現在のLCUの各再構成されたピクセル(rc(x,y))のedgeIdxを導出するために分類子を適用する。ビデオエンコーダ20は、以下の表4に従ってedgeIdxを計算する。
【０１２５】
【表４】
0006285559.tif 000005
【０１２６】
再構成されたピクセルは、非ブロック化フィルタ、たとえば図4の非ブロック化フィルタユニット72のブロックから来るピクセルを指す。非ブロック化フィルタの依存関係により、ハードウェアパイプラインが現在のLCUを処理するとき、LCUまたは隣接するLCUのピクセルのすべてが非ブロック化されるわけではない。ビデオエンコーダ20は、フィルタリングされていないLCUに対する下方隣接サンプルおよび右隣接サンプルを残してもよく、後続の右隣接LCUおよび下方隣接LCUが処理された後、これらのサンプルを非ブロック化してもよい。したがって、いくつかの例では、ビデオエンコーダ20は、たとえば、現在処理しているLCUの右隣接サンプルおよび下方隣接サンプルのために、非ブロック化サンプルに対してのみ、または、非ブロック化されたサンプルと、部分的に非ブロック化された(垂直エッジフィルタリングのみが適用された)サンプルと、フィルタリングされていない(非ブロック化されていない)サンプルとの組合せにおいて、レート-歪み費用を決定するために計算を適用してもよい。また、SAOパラメータを導出するための非非ブロック化ピクセルの使用は、SAOパラメータを選択するためにのみ有効であってもよい。パラメータが選択された後、ビデオエンコーダ20は、完全に非ブロック化されたサンプルを使用してSAOを適用してもよい。
【０１２７】
各edgeIdx(またはEOクラス)のためのオフセットを計算するために、ビデオエンコーダ20は、各edgeIdx値に関する元のピクセルと再構成されたピクセルとの間の差の合計を計算し、ここで、edgeIdx ∈ (1,2,3,4)である。ビデオエンコーダ20は、ピクセルの合計(SOP)(SOP_Ei[c][edgeIdx])を以下のように計算する。
SOP_Ei[c][edgeIdx] = Σ(x,y)∈EOi(pc(x,y)-(rc(x,y))
ここで、cは、チャネル(たとえば、彩度「Cb」、彩度「Cr」、または輝度「Y」)であり、pc(x,y)は、座標(x,y)における元のサンプル値であり、rc(x,y)は、(x,y)における再構成されたサンプルである。
【０１２８】
本開示の技術によれば、ビデオエンコーダ20は、エッジオフセット計算を実行するとき、後続の演算のビット幅および精度を低減するように構成されてもよい。たとえば、ビデオエンコーダ20は、6つの合図されたビットが差分量を表すのに十分なビット数であるように、元のピクセルマイナス再構成されたピクセルの差を範囲[-32, 31]にクリップしてもよい。特定のエッジクラスEOi内の各ピクセルのために、ビデオエンコーダ20は、SOPの現在の値にクリップされた差を加算する(合計は、各クラスに関するすべてのピクセルでの反復の開始時にゼロに設定される)。ビデオエンコーダ20は、[-4095, 4095]の範囲においてSOP_Ei[c][edgeIdx]に対するクリッピングを再び実行し、SOPは、このクリッピングの結果を用いて更新される。これは、以下のように書かれてもよい。
SOP(n) = Clip3( -4095, 4095, SOP(n-1) + Clip3(-32, 31, pixel_diff(n)) )
ここで、nは、セット(EOi)内のピクセルのインデックスであり、pixel_diff(n)は、ビデオエンコーダ20によってEOi内で分類されたピクセルのセット内のインデックスnを有する元のマイナス再構成されたピクセルの差である。ビデオエンコーダ20は、ビデオエンコーダ20が差の合計に各ピクセルに関するピクセル差を加算するたびに、この最後のクリッピングを実行する。この最後のクリッピングは、13ビットがSOP(ピクセルの合計)情報を表すのに十分であることを保証する。
【０１２９】
各edgeIdxのためのオフセット(たとえば、SAO EOクラス)を計算するために、ビデオエンコーダ20は、NOP_Ei[c][edgeIdx]と呼ばれる所与のsao_eo_class iのための、edgeIdxで分類された再構成されたピクセルの数(NOP)を計算する。いくつかの例では、ビデオエンコーダ20は、10ビットがハードウェア内でNOP_Ei[c][edgeIdx]を表すのに必要とされるように、NOP_Ei[c][edgeIdx]を範囲[0, 1023]にクリップするように構成される。クリップされたバージョンは、記憶され、(マージ費用計算を含む)すべての後続の計算において使用される。
【０１３０】
クラスiのためのオフセットを決定するために、edgeIdx ∈ (1,2,3,4)の各edgeIdxに関して、ビデオエンコーダ20は、NOP_Ei[c][edgeIdx]の対応する値で各SOP_Ei[c][edgeIdx]を除算するように構成されてもよい。ビデオエンコーダ20は、次いで、除算の結果を丸め、クリップする。オフセットを計算するために使用される式は、したがって、
OffsetEi[c][edgeIdx] = clip(round(SOP_Ei[c][edgeIdx] /NOP_Ei[c][edgeIdx] ),vmin, vmaxである。
この例において、クリップ範囲は、edgeIdx = 1または2に関しては(vmin, vmax) = (0, 7)、edgeIdx = 3または4に関しては(vmin, vmax)=(-7, 0)と、異なる。一例では、NOPによるSOPの除算は、ハードウェアフレンドリな方法で実行される。たとえば、ビデオエンコーダ20は、特別なカウンタと反復カウンタ(たとえば、ソフトウェア変数、レジスタ、ハードウェアカウンタなど)をゼロに設定する。ビデオエンコーダ20はまた、SOP値の絶対値に等しく一時変数を設定する。
【０１３１】
オフセットの絶対値は、(クリッピングにより)7よりも大きくない可能性があるので、ビデオエンコーダ20は、一時変数がゼロ以下になるまで、または7回の反復が実行されるまで、一時変数からNOPを反復的に減算する反復ループを実行する。ビデオエンコーダ20が一時変数からNOPを減算するたびに、ビデオエンコーダ20は、反復カウンタをインクリメントする。加えて、ビデオエンコーダ20が一時変数からNOP値を減算し、得られた一時変数がゼロ以上であるたびに、ビデオエンコーダ20は、特別なカウンタをインクリメントする。この演算の終わりに、特別なカウンタは、特定のクラスまたはedgeIdxのためのオフセットの絶対値をもたらす。ビデオエンコーダ20は、SOPの符号からオフセットの符号を決定する。しかしながら、絶対値がゼロである場合、ビデオエンコーダ20は、符号が正であると決定する。
【０１３２】
したがって、本開示の技術によれば、ビデオエンコーダ20は、サンプル適応オフセットSAOモードを使用して、コード化ビデオピクチャのLCUのサンプルを符号化するように構成されてもよい。SAOモードを使用してCUのサンプルを符号化するために、ビデオエンコーダ20は、LCUの対応する再構成されたサンプルとLCUの元のサンプルとの間の差を計算し、クリップされた差を形成するために差の各々からビット数をクリップし、差の合計を形成するためにクリップされた差を合計し、クリップされた差の合計を形成するために差の合計をクリップし、再構成されたサンプルの数を計算し、サンプルのクリップされた数を形成するために再構成されたサンプルの数からビット数をクリップし、LCUのためのオフセットを生成するためにサンプルのクリップされた数でクリップされた差の合計を除算してもよい。
【０１３３】
次に、ビデオエンコーダ20は、dist_Ei[c]として示されるクラスiのための歪みを計算する。ビデオエンコーダ20は、dist_Ei[c] = Σk(NOP_Ei[c][k] × Offset_Ei[c][k] × Offset_Ei[c][k] - SOP_Ei[c][k] × Offset_Ei[c][k] × 2)として歪みを計算し、ここで、k = [1, 2, 3, 4]である。
歪みの計算は、上記で引用したC.-M.Fuらに記載の計算に従って実行されてもよい。
【０１３４】
輝度パラメータを導出するために、ビデオエンコーダ20は、各EOクラスのためのレート-歪み費用を計算する。費用は、JEO,luma,Iとして示され、JEO,luma,i = dist_Ei[Y] + λ × (sao_eo_luma_bias + sao_eo_class_yj_bias + bincountEO,luma,i)のように計算され、ここで、sao_eo_class_yj_biasは、各EOクラスのためのなんらかのバイアス因子である。
いくつかの例では、ビデオエンコーダ20は、特定のモードに向けてモード決定選択をバイアスするために、sao_eo_luma_biasおよびsao_eo_class_yj_biasに任意の値を割り当ててもよい。他の例では、ビデオエンコーダ20は、sao_eo_luma_bias変数およびsao_eo_class_yj_bias変数の値をゼロに等しく固定してもよい。
【０１３５】
輝度SAOパラメータを決定するためにステップ184においてビデオエンコーダ20が実行する最後の一般的な演算は、JEO,luma,iを最小化することである。具体的には、ビデオエンコーダ20は、最小費用を有する(EOクラスに対応する)インデックスiとして、可変のbest_sao_eo_class_luma=kを導出する。ビデオエンコーダ20は、次いで、offsetsEO,lumaをoffsetsEO,luma,kに等しく設定し、JEO,luma = JEO,luma,k - λ × sao_eo_class_y(k + 1)_biasとする。
ビデオエンコーダ20は、一例ではsao_eo_class_y(k+1)_biasに任意の値を割り当ててもよく、他の例ではゼロを割り当ててもよい。
【０１３６】
輝度のためのBOパラメータを導出するために、ビデオエンコーダ20は、輝度成分(c=Y)のためのBO導出を実行するために構成されてもよい。ビデオエンコーダ20は、次いで、出力を記憶し、パラメータ、バンドの各々における輝度サンプルのための歪み値(dist_B[Y])と、最良のバンド位置を示す変数(best_sao_band_position_luma)と、32バンドのピーク位置(bo_hist_peakluma)と、バンドの各々のためのオフセット(offsetsBO,luma)と、バンドの各々におけるピクセル値の合計(SOPBO,luma)と、バンドの各々におけるピクセル数(NOPBO,luma)と、バンドオフセットのための推定されたビン数(bincount0BO,Y)とを記憶する。ビン数を計算することは、以下でより詳細に説明される。
【０１３７】
図9は、本開示の技術による、輝度バンドオフセットの導出を実行するためのプロセスを示すフロー図である。図9の例では、ビデオエンコーダ20は、歪みおよびbincount0を決定することを伴う(すなわち、歪みdistおよびビン数bincount0を決定するためにBO輝度導出を実行する)BO輝度導出を実行するように構成される(200)。ステップ200に応答して、ビデオエンコーダ20は、bincount1を計算し(202)、BOモードで輝度チャネルを符号化するための費用JBO,lumaを計算する(204)ようにさらに構成される。このプロセスへの入力は、輝度のためのEOに関して上記で説明したように、cである。このプロセスの出力は、それらのEO輝度の同等物と同様のパラメータ、dist_B[Y]、best_sao_band_position_luma、bo_hist_peakluma、offsetsBO,luma、SOPBO,luma、NOPBO,luma、およびbincount0BO,Yである。
【０１３８】
輝度BOフィルタリングプロセスへの入力は、ビデオエンコーダ20が処理しているチャネルを示すインデックス、cである。cに基づいて、ビデオエンコーダ20は、適切なチャネルから、この場合には輝度チャネルから非ブロック化後のピクセル(サンプル)および非ブロック化前のピクセル(サンプル)を読み出す。図9のプロセスへの出力は、歪み値dist_Ei[c]と、オフセットOffset_Ei[c][edgeIdx](それらのうちの4つ)およびSOP_Ei[c][edgeIdx] and NOP_Ei[c][edgeIdx]と、成分が輝度を示す場合、ビン数bincountEO,luma,iとを含む。上記のように、SOPおよびNOPは、非ブロック化前の値と非ブロック化後の値との間のピクセル差の合計である。NOPは、各バンド内のピクセルの数である。
【０１３９】
本開示の技術によれば、ビデオエンコーダ20は、BOオフセットの導出の間に、バンド位置のすべての可能な32の値を試験しなくてもよい。代わりに、ビデオエンコーダ20は、バンド位置(sao_band_position)を選択するために、ヒストグラム分析を使用する。各成分LCU(たとえば、Y、Cb、またはCr)のための導出アルゴリズムの説明が続く。
【０１４０】
まず、ビデオエンコーダ20は、ヒストグラム分析を使用して、バンド位置sao_band_positioncを決定する。ヒストグラムを計算するために、ビデオエンコーダ20は、まず、アレイbin_count[32]内に記憶された32のチャネルのうちの1つにLCUのサンプルの各々をビンする。本開示の技術によれば、ビデオエンコーダ20は、8ビットコンテンツに関して、BO分類子( bandIdx(x, y) = pc(x, y) >> 3を使用して、32ビンヒストグラムに元のピクセルpc(x, y)を分類する。一例では、ビデオエンコーダ20は、ハードウェアサイクルを節約するために、早期終了方式を使用する。ビデオエンコーダ20は、ラスタ走査順に、それらの分類に従ってピクセルを訪問し、ビデオエンコーダ20は、各サンプルのbandIdxに対応するビン数をインクリメントする。
【０１４１】
ビデオエンコーダ20は、2つの以下の条件のうちのいずれか一方、すなわち、(1)成分平面内のすべてのピクセルが処理された、または、(2)(現在のピクセルを処理した結果として)インクリメントされたビン数の値が、成分(たとえば、Y、Cr、Cb)平面内のピクセルの数の半分(すなわち、しきい値は、32×32LCUに関して、輝度に関して512ピクセル、彩度に関して128ピクセル)に等しい、のいずれかが満たされた後、ヒストグラム計算を終了する。すでに可能なビンの数の半分であるビン数は、任意の他のビン数よりも小さくない場合がある。ビデオエンコーダ20が処理を終了したとき、ビデオエンコーダ20は、その最大値にビン数の値を設定する。成分が2つの非ゼロのみを有し、(したがって)等しい値のビン数を有するコンテンツが存在してもよい。ヒストグラムの導出は、ビン数のうちの1つがしきい値に達すると、早期に終了するので、ビデオエンコーダ20は、ヒストグラムの最大値(たとえば、ビン内のサンプルの最大数)の明確な選択を保証するために、このプロセスを継続する。
【０１４２】
次に、ビデオエンコーダ20は、最大値のbin_count[m]値(ヒストグラムピーク)マイナスいくらかの定数h(bo_hist_peakc = m - h)を有するbin_countのインデックスmとしてsao_band_positioncを選択する。本開示の技術による一例では、ビデオエンコーダ20は、定数(h)を1に設定してもよい。
【０１４３】
元のピクセルのためのバンド位置を決定することに応答して、ビデオエンコーダ20は、BO分類子(8ビットコンテンツに関してbandIdx(x, y) = rc(x, y) >> 3)を使用して、現在のLCU (p(x, y))の各再構成されたピクセルrc(x, y)のbandIdxを計算する。上記で説明したように、再構成されたピクセルの一部またはすべては、完全には非ブロック化されなくてもよい。
【０１４４】
EOオフセット計算に関連して説明したプロセスと同様に、ビデオエンコーダ20はまた、輝度EOフィルタリングの文脈において図8に関連して上記で説明したように、元のマイナス再構成されたピクセルの合計(SOP_B[c][bandIdx] = Σ (x,y)∈bandIdx(pc(x, y)-rc(x, y)))を計算する。ビデオエンコーダ20は、EOオフセットの計算に関連して上記で説明したように、合計および差をクリップする。ビデオエンコーダ20は、NOP_B[c][bandIdx](bandIdxで分類された再構成されたピクセルの数)を決定する。いくつかの例では、ビデオエンコーダ20は、10ビットがハードウェアにおける値を表すために必要とされるように、[0, 1023]の範囲におけるNOP_B値をクリップする。クリップされたバージョンは、記憶され、(マージ費用計算を含む)すべての後続の計算において使用される。
【０１４５】
ビデオエンコーダ20は、SAO_BOのためのオフセットを決定する。各bandIdx ∈ (0, …,31)に関して、Offset_B[c][bandIdx] = clip(round(SOP_B[c][bandIdx]/ NOP_B[c][bandIdx], - 7, 7)であり、ここで、bandIdxは、範囲(sao_band_positionc, …, sao_band_positionc + 3)内である。本開示の技術による一例では、NOPによるSOPの除算は、SOPの絶対値からのNOPの反復減算および符号継承と同様の方法で実施される。
【０１４６】
ビデオエンコーダ20は、k = sao_band_positionc, …, sao_band_positionc + 3として、dist_B[c] = Σk(NOP_B[c][k] × Offset_B[c][k] × Offset_B[c][k] - SOP_B[c][k] × Offset_B[c][k] × 2)としてバンドSAOフィルタリングのための歪みを計算する。
歪みの計算は、Chih-Ming Fuら、「Sample Adaptive Offset in the HEVC Standard」、IEEE Transactions on Circuits and Systems for Video Technology、Vol.22、No.12、2012年12月、の付録に記載されている。ステップ200およびステップ202ごとのビンの計数は、図13に関連して以下でより詳細に説明される。
【０１４７】
本開示の技術は、BOフィルタリングのためのヒストグラム導出のための改善された技術を説明する。ビデオエンコーダ20は、元のLCUピクセルのヒストグラムを取ることによってBO決定のためのsao_band_positionを導出するように構成されてよい。(オプションの早期終了ありまたはなしで)ヒストグラムが導出されると、ヒストグラムのピークマイナスいくらかの定数は、sao_band_position構文要素を導出するために使用される。この関係は、
bo_hist_peak = maxi( bin_count(i) )
として記述されてもよい。
その後、ビデオエンコーダ20は、
sao_band_position = bo_hist_peak - const
としてバンド位置を導出してもよい。
最適には、ビデオエンコーダ20は、再構成されたサンプルを使用してこのヒストグラムを導出するように構成されることになる。複雑さおよび並列化の理由のため、しかしながら、ビデオエンコーダ20は、良好な結果を有する元のサンプルを使用してもよい。ヒストグラムを導出するための説明した方法は、効率的で、良好な品質をもたらすが、改善の余地がある可能性がある。本明細書に記載の追加の技術は、ビデオエンコーダ20がヒストグラムのピークを選択する方法を最適化することによって、サンプルベースのヒストグラム導出を改善してもよい。ヒストグラムピークを導出する前述の技術の一部として、ビデオエンコーダ20は、以下の、bo_hist_peak = maxi( bin_count(i) + bin_count(i+1) + bin_count(i+2) + bin_count(i+3))のような最大合計で、4つの連続するビンのグループを選択してもよい。4つの連続するバンドのみが、非ゼロオフセットを送信する。したがって、ビデオエンコーダ20は、依然として、sao_band_position = bo_hist_peak - constとしてsao_band_position構文要素を導出してもよい。ビデオエンコーダ20は、いくつかの例では、constをゼロに設定してもよい。
【０１４８】
図10は、本開示の技術による、彩度SAO導出を実行するための方法を示すフロー図である。図10の例では、ビデオエンコーダ20は、輝度オフ+フラグが設定されたかどうかを決定する(218)。フラグが設定されたとき、ビデオエンコーダ20は、スキップフラグを設定し(220)、輝度SAO構文値をオフに設定し(222)、マージフラグを合図することがスキップフラグを設定することよりも効率的であるかどうかを確かめるためにチェックする(224)。
【０１４９】
輝度フラグがオンであるか、または別のフラグが設定されたとき、ビデオエンコーダ20は、EO彩度SAOフィルタリング(JEO彩度を得るためのEO彩度導出)の費用を決定し(226)、BO彩度フィルタリング(JBO彩度を得るためのBO彩度導出)の費用を決定する(228)。EO彩度およびBO彩度のための費用は、JEO,chroma、JBO,chromaとして示される。次に、ビデオエンコーダ20は、SAOを実行しないための費用Jno_SAO,chroma (SAO試験なし、Jno_SAO,chroma取得)を決定し(230)、レート-歪み費用を最小化する、すなわち、最低の費用を有する彩度SAOパラメータを更新および選択する(232)。彩度パラメータを更新することは、いくつかの例では、ステップ232のサブステップであってもよい。
【０１５０】
ステップ232では、ビデオエンコーダ20は、JBO,chroma、Jno_SAO,chroma、およびJEO,chromaにわたって最小化し(すなわち、1つを選択し)、最小費用を有するオプションを選択することによって、最適な彩度パラメータを決定するように構成される。最小費用を有するパラメータを選択するために、EOが選択された場合、ビデオエンコーダ20は、c=Cb、Crに関するdist_X[c] = dist_Ek[c]、bincountchroma = bincount1EO,chroma、c=Cb、Crに関するoffsetsc=offsetsEO,c、およびbest_sao_type_idx_chroma=2を記憶する。BOが選択された場合、ビデオエンコーダ20は、c=Cb、Crに関するdist_X[c] = dist_B[c]、bincountchroma = bincount1EO,chroma、c=Cb、Crに関するoffsetsc=offsetsBO,c、およびbest_sao_type_idx_chroma=1を記憶する。SAOが選択されない場合、ビデオエンコーダ20は、c=Cb、Crに関するdist_X[c] = 0、bincountchroma = bincount(0)、およびbest_sao_type_idx_chroma=0を記憶する。
【０１５１】
値best_sao_type_idx_lumaがゼロに等しい場合、ビデオエンコーダ20は、オプションで、彩度SAO決定を完全にスキップするかどうかを試験してもよい。この決定は、外部手段を介して制御されてもよい。このような場合、ビデオエンコーダ20は、以下のステップを適用する。
(1)skip_sao_lumaとskip_sao_chromaの両方を1に設定する。
(2)best_sao_type_idx_chromaをゼロに設定する。
(3)(タイルおよびスライス境界内で、または、たとえば、特定のレジスタをプログラミングすることによって、いくつかの外部手段を介して許可されて)上LCUが利用可能である場合、
a.best_sao_type_idx_lumaとup_sao_type_idx_lumaの両方がゼロであるかどうかを決定する。up_sao_type_idx_lumaは、利用可能な場合、上LCUのsao_type_idx_luma構文パラメータの値に設定される。
b.best_sao_type_idx_chromaとup_sao_type_idx_chromaの両方がゼロであるかどうかをチェックする。up_sao_type_idx_chromaは、利用可能な場合、上LCUのsao_type_idx_chroma構文パラメータの値に設定される。
c.上記の条件(a.およびb.)の両方が真である場合、ビデオエンコーダ20は、sao_merge_up_flag = 1およびsao_merge_left_flag = 0を設定し、ジャンプに進み、および/または任意のさらなるSAO決定のプロセスを行うのを停止する。
(4)(タイルおよびスライス境界内で、または、すなわち、特定のレジスタをプログラミングすることによって、いくつかの外部手段を介して許可されて)LCUが利用可能な場合、
a.best_sao_type_idx_lumaとleft_sao_type_idx_lumaの両方がゼロであるかどうかをチェックする。left_sao_type_idx_lumaは、利用可能な場合、左LCUのsao_type_idx_luma構文パラメータである。
b.best_sao_type_idx_chromaとleft_sao_type_idx_chromaの両方がゼロであるかどうかを決定する。left_sao_type_idx_chromaは、利用可能な場合、左LCUのsao_type_idx_chroma構文パラメータの値に設定される。
c.両方の上記の条件が真である場合、sao_merge_up_flag = 0およびsao_merge_left_flag = 1を設定し、任意のさらなるSAO決定を行うのを停止する。
【０１５２】
図11は、本開示の技術による、エッジオフセット彩度導出を実行するためのプロセスを示すフロー図である。図11の例では、各EO分類子(sao_eo_class_chroma) i=(0, 1, 2, 3)に関して、ビデオエンコーダ20は、以下を行うように構成される。入力クラス=iおよび成分c=Cbに関してEO導出を実行する。ビデオエンコーダ20は、出力としてdist_Ei[Cb]およびoffsetsEO,Cb,I、SOPEO,Cb,i、NOPEO,Cb,Iを出力し(240)、入力クラス=iおよび成分c=Crに関してEO導出を実行する。ビデオエンコーダ20は、出力としてdist_Ei[Cr]およびoffsetsEO,Cr,I、SOPEO,Cr,i、NOPEO,Cr,Iを出力する(242)。
【０１５３】
ステップ242に応答して、ビデオエンコーダ20は、bincount0EO,chroma, iを計算し(244)、JEO,chroma,i = dist_Ei[Cb] + dist_Ei[Cr] + λ × (sao_eo_class_cj_bias + bincount0EO,chroma,i)を計算する。sao_eo_class_cj_bias (j=i+1)は、1における任意の値を有してもよく、またはゼロに固定されてもよい(246)。
ビデオエンコーダ20がステップ240〜246の実行を終了したら、ビデオエンコーダ20は、次いで、最小費用を有するインデックスiとしてbest_sao_eo_class_chroma=kを導出するために、JEO,chroma,iにわたって最小化するように構成される(248)。ビデオエンコーダ20はまた、offsetsEO,CbおよびoffsetsEO,Cr を、それぞれ、offsetsEO,Cb,kおよびoffsetsEO,Cr,kに等しく設定する。ビデオエンコーダ20はまた、以下で説明するようにbincount1EO,chromaを計算し(250)、JEO,chroma=dist_Ek[Cb] + dist_Ek[Cr] + λ × (sao_eo_chroma_bias + bincount1EO,chroma)として最終費用を再計算する(252)。sao_eo_chroma_biasバイアスは、1つの場合において任意の値を有してもよく、またはゼロに固定されてもよい。
【０１５４】
図12は、本開示の技術による、バンドオフセット彩度導出を実行するためのプロセスを示すフロー図である。図12の例では、ビデオエンコーダ20は、輝度BO導出の文脈で図9に関連して上記で説明したように、c=Cbに関するBO導出を実行する(260)。このステップの結果は、出力dist_B[Cb]、best_sao_band_position_cb、bo_hist_peakCb、offsetsBO,Cb、SOPBO,Cb、NOPBO,Cb、およびbincount0BO,Cbである。
【０１５５】
ビデオエンコーダ20はまた、図9に関連して輝度BO導出に関して上記で説明したように、c=Crに関するBO導出を実行する(262)。このステップに関する出力は、dist_B[Cr] best_sao_band_position_cr、bo_hist_peakCr、offsetsBO,Cr、SOPBO,Cr、NOPBO,Cr、およびbincount0BO,Crである。
【０１５６】
ビデオエンコーダ20はまた、以下でより詳細に説明するように、bincount1BO,chromaを計算し(264)、JBO,chroma=dist_B[Cb]+dist_B[Cr]+λ×(sao_bo_chroma_bias+bincount1BO,chroma)としてBO R-D(レート-歪み)費用を計算する。sao_bo_chroma_bias構文要素は、一例において任意の値を有してもよく、またはゼロに固定されてもよい(266)。
【０１５７】
図13は、本開示の技術による、SAOフィルタリングを実行するためのプロセスを示すフロー図である。図13の方法では、ビデオエンコーダ20は、4つのEOクラスの各々のバンドに関する費用、オフセット、歪み値、および他の値と、BOモードとを導出するように構成されてもよい。ビデオエンコーダ20は、いくつかの例では、図14に示す技術と並行して、図13に関連して説明した技術を実行するように構成されてもよい。
【０１５８】
図13の例では、4つの最も左の列は、ビデオエンコーダ20が4つのエッジ分類子(図2A〜図2Dに記載する水平、垂直、45度、および135度の分類子)の各々に関するEOパラメータおよびレート-歪み費用の決定を実行するプロセスを示す。ビデオエンコーダ20は、水平、垂直、45度、および135度の分類子フィルタ形状を使用して現在のチャネルのピクセルの各々を分類することによってEO費用を計算することを開始する(それぞれ、ステップ300、310、320、および330)。
【０１５９】
エッジ分類子フィルタを使用してピクセルの各々を分類することに応答して、ビデオエンコーダ20は、上記の表3に記載の条件を使用して、4つのピクセルカテゴリの各々に関してサンプルの合計(SOP)を決定する。サンプルの合計は、現在のLCUの元のサンプルと再構成されたサンプルとの間の差の合計である(それぞれ、ステップ302、312、322、および332)。
【０１６０】
各分類子に関するピクセルの合計を決定することに応答して、ビデオエンコーダ20は、上記の表3において定義したように、4つのカテゴリの各々において分類されたサンプルの数を決定する(ステップ304、314、324、および334)。ビデオエンコーダ20は、次いで、4つのサンプルカテゴリの各々に関する4つのオフセットを決定するために、サンプルの数でサンプルの合計を除算する(ステップ306、316、326、および336)。ビデオエンコーダ20は、本開示の技術に従って、差、差の合計、および/またはピクセル数を計算することの一部として、計算された結果をクリップしてもよい。各ピクセルカテゴリに関連するオフセットを決定することに応答して、ビデオエンコーダ20は、各分類子に関連する歪みを計算してもよい(ステップ308、318、328、および338)。
【０１６１】
ビデオエンコーダ20はまた、BOモードにおける現在のLCUを符号化することに関連するオフセットおよびレート-歪み費用を決定するように構成される。様々な例では、ビデオエンコーダ20は、EO分類子の各々に関連する費用を決定することと並行して、BOモードにおける現在のLCUを符号化することに関連するR-D費用を決定してもよい。
【０１６２】
BOモードを決定するために、ビデオエンコーダ20は、まず、32のバンドに現在のLCUのサンプルを分類する(340)。ビデオエンコーダ20は、いくつかの例では、算術右シフトを使用して32のバンドに現在のLCUのサンプルを分類してもよい。32のバンドに現在のLCUのサンプルを分類することに応答して、ビデオエンコーダ20は、現在のLCUのためのヒストグラムピークを見つけ、記憶する(342)。ヒストグラムピークを見つけることに応答して、ビデオエンコーダ20は、4つのバンドオフセットの各々に関するサンプルの合計を決定してもよい(344)。サンプルの合計(SOP)は、現在のLCUの元のサンプルと再構成されたサンプルとの間の差の合計を備える。SOPを計算することに応答して、ビデオエンコーダ20は、4つのBOバンドの各々におけるサンプルの数を計算する(346)。差、差の合計、およびサンプルの数の計算の間に、ビデオエンコーダ20は、前述の量の各々を表すために必要なビット数をクリップしてもよい。
【０１６３】
4つのバンドの各々に関して、ビデオエンコーダ20は、そのバンドに関するオフセットを決定するために、除数としてサンプル数(NOP)を使用し、そのバンドにおけるNOPで各バンドにおけるSOPを除算する(348)。本開示の技術によれば、ビデオエンコーダ20は、上記で説明したように、減算による反復除算方法を使用して、各バンドのためのオフセットを決定してもよい。4つのオフセットを決定することに応答して、ビデオエンコーダ20は、BOモードに関する歪みを計算してもよい(350)。
【０１６４】
ビデオエンコーダ20がEO分類子の各々に関する歪みとBOに関する歪みとを計算したら、ビデオエンコーダ20は、モードの各々に関する歪み統計値を比較し、記憶してもよく(352)、現在のLCUのためのEO分類子のうちの1つとBOモードとを選択してもよい。様々な例では、ビデオエンコーダ20は、図14に関連して以下で説明するように、マージモードおよびスキップモードのために決定されたR-D費用と、記憶された統計値とを比較してもよい。
【０１６５】
図14は、本開示の技術による、SAOフィルタリングを実行するためのプロセスを示すフロー図である。図14の方法では、ビデオエンコーダ20は、マージレフトモードおよびマージアップモードに関する費用、オフセット、歪み、および他の値を導出するように構成されてもよい。ビデオエンコーダ20は、いくつかの例では、図13に示す技術と並行して、図14に関連して示した技術を実行するように構成されてもよい。
【０１６６】
マージモードは、上隣接LCUからのSAOパラメータをコピーするマージアップと、左隣接LCUからのSAOパラメータをコピーするマージレフトとを含む。マージアップおよびマージレフトのための費用を決定するプロセスを、ここで説明する。
【０１６７】
ビデオエンコーダ20は、モード(および対応するLCU)が利用可能である場合、ビデオエンコーダ20がマージレフトモードとマージアップモードの両方のための費用を決定することを試みる、マージレフトモードおよびマージアップのための同様のプロセスを実行する。2つのマージモードのための費用が等しい場合、マージレフトモードは、いくつかの例では、平均して符号化するためにより少ないビットを必要とする可能性があるので、ビデオエンコーダ20は、マージレフトモードを選択してもよい。以下の例では、「隣接」(NBR)の短縮形は、それが使用される文脈に基づいて、現在のLCUに対する上または左隣接LCUのいずれかを指す。
【０１６８】
マージモード(すなわち、マージレフトモードおよびマージアップモード)のための費用を決定しようとするとき、ビデオエンコーダ20は、まず、NBR LCUがマージ候補として利用可能であるかどうかを試験する(370、380)。現在のLCUがピクチャにおいて上または左の境界にあり、NBR LCUが境界の外にある場合、プロセスは、NBR LCUが境界内にある場合にのみ、真を返す。
【０１６９】
次に、ビデオエンコーダ20は、NBR LCUが現在のLCUに対して異なるスライスまたはタイルに属するかどうかと、スライスおよびタイル境界を越えるフィルタリングを有効にした対応するフラグが無効にされているかどうかとを決定する。プロセスは、クロススライスおよびタイルアクセスが有効にされている場合、真を返す。
【０１７０】
ビデオエンコーダ20はまた、NBR LCUがBOモードを使用しているかどうかを決定する。NBR LCUがBOモードを使用して符号化された場合、ビデオエンコーダ20は、隣接LCUに関するBOヒストグラムピークが現在のLCUのピークと一致するかどうかを決定する(370、380)。NBRのBOピークが一致しない場合、歪みを推定する方法は、存在せず、したがって、マージモードは、使用され得ない。以下で説明するすべての条件が真である場合、処理は、真を返し、そうでなければ(決定ボックス370、380の「YES」分岐)、処理は、偽を返し、ビデオエンコーダ20は、マージモードを選択しない(決定ボックス370、380の「NO」分岐)。
【０１７１】
left-NBR LCUが輝度SAOモードとしてBOを使用する(すなわち、NBR_sao_type_idx_lumaが1に等しい)とき、ビデオエンコーダ20は、現在のLCUに関するヒストグラムピークbo_hist_peaklumaがNBR LCUのヒストグラムピークNBR_bo_hist_peaklumaと同じであるかどうかを決定するためにチェックする。プロセスは、現在のLCUに関するヒストグラムピークおよび隣接LCUのヒストグラム位置が等しくない場合、偽を返す。そうでない場合、プロセスは、真を返す(これは、EOのケースを使用するNBRの場合を含む)。
【０１７２】
LCUの彩度チャネルに関して、ビデオエンコーダ20は、NBR LCUのSAOモードが彩度チャネルSAOモードとしてBO SAOモードを使用するかどうか(すなわち、NBR_sao_type_idx_chromaが1に等しい場合)を同様に決定する。NBR LCUがBO SAOモードを使用する場合、ビデオエンコーダ20は、現在のLCUのヒストグラムピークbo_hist_peakCbおよびbo_hist_peakCrが、それぞれ、NBR LCUのヒストグラムピークNBR_bo_hist_peakCbおよびNBR_bo_hist_peakCrと同じであるかどうかを決定するためにチェックする(370)。対応するピークのいずれか1つが現在のLCUのピークに等しくない場合、プロセスは、偽を返す。そうでない場合、プロセスは、真を返す(これは、NBR LCUがEO SAOを使用して符号化されている場合を含む)。任意の時点で上記の条件のいずれかが真でない場合、ビデオエンコーダ20は、その特定のNBR LCUのためのマージモード検討プロセスを終了する(決定ボックス370、380の「NO」分岐)。
【０１７３】
マージモード決定プロセスが彩度および/または輝度に関して偽を返す場合(再び、決定ボックス370、380の「NO」分岐)、ビデオエンコーダ20は、最大の可能な費用値にそれぞれの上または左マージモードの費用Jmerge_leftおよびJmerge_upをそれぞれ設定する(372、382)。それぞれのマージ費用を最大の費用に設定することは、上記の条件のいずれかが真でない場合、そのマージモードがビデオエンコーダ20によって選択されるのを不適格にする。
【０１７４】
左または上NBR LCUが利用可能であり、上記の条件が満たされている場合、ビデオエンコーダ20は、それぞれの左または上NBR LCUからのSAOパラメータをコピーし(374、384)、次いで、それぞれのマージモードのためのレート-歪み費用を計算する(376、386)。ビデオエンコーダ20は、以下のようにそれぞれのマージモードを使用する歪み(dist_NBR)を計算する(378、388)。具体的には、ビデオエンコーダ20は、dist_NBR = Σcdist_NBRcを計算し、ここで、
dist_NBRc = Σk(NOP_X[c][k] × Offset_NBR[c][k] × Offset_NBR[c][k] - SOP_X[c][k] × Offset_NBR[c][k] × 2)であり、ここで、Xは、NBR LCU成分Icにおいて使用されるSAOのタイプ(NBR_sao_type_idx_lumaまたはNBR_sao_type_idx_chroma)である。歪みの計算は、Chih-Ming Fuら、「Sample Adaptive Offset in the HEVC Standard」、IEEE Transactions on Circuits and Systems for Video Technology、Vol.22、No.12、2012年12月、の付録に記載されている。ビデオエンコーダ20は、現在のLCUからのサンプルに基づいてSOPおよびNOPを決定するが、ビデオエンコーダ20は、マージモードを使用するとき、隣接LCUのオフセットから現在のLCUのためのオフセットを導出する。
【０１７５】
次に、ビデオエンコーダ20は、以下で説明するように、現在のNBRの関するビン数を計算する。最後に、ビデオエンコーダ20は、Jmerge_NBR = dist_NBR + λ × (sao_merge_NBR_bias + bincount_NBR)として、NBR LCUのSAOマージモード符号化に関するLCUレート-歪み費用を計算する。いくつかの例では、sao_merge_NBR_biasは、その両方が任意の値を有してもよく、または0に設定されてもよいsao_merge_up_biasバイアスまたはsao_merge_left_biasバイアスに等しい。
【０１７６】
マージモードSAOフィルタリングを実行するために、現在のLCUは、現在のLCUのためのすべてのエッジオフセットクラスおよび成分に関するSOP_Ei[c][edgeIdx]およびNOP_Ei[c][edgeIdx]へのアクセスを必要とする。加えて、現在のLCUに関するパラメータbo_hist_peakluma、bo_hist_peakCbおよびbo_hist_peakCrはまた、隣接LCUに関する利用可能性情報とともに必要とされる。ビデオエンコーダ20はまた、再びすべての成分に関するバンドオフセットSOP_B[c][bandIdx]およびNOP_B[c][bandIdx]へのアクセスを必要とする。マージレフト検討に関して、ビデオエンコーダ20は、(左NBR LCUが利用可能な場合)左NBR LCUからの以下のsaoパラメータ、left_sao_type_idx_luma/chroma、left_offsetsluma、left_offsetsCb、およびleft_offsetsCr、ならびに、left_bo_hist_peakluma、left_bo_hist_peakCb、およびleft_bo_hist_peakCrを必要とする。マージアップ検討に関して、ビデオエンコーダ20は、(再び、上NBR LCUが利用可能であると仮定して)上NBR LCUからの以下のSAOパラメータ、up_sao_type_idx_luma/chroma、up_offsetsluma、up_offsetsCb、およびup_offsetsCr、ならびに、up_bo_hist_peakluma、up_bo_hist_peakCb、およびup_bo_hist_peakCrを必要とする。マージモード費用推定プロセスの唯一の出力は、ステップ390においてビデオエンコーダ20が記憶するレート-歪み費用Jmerge_NBRである。
【０１７７】
いくつかの例では、ビデオエンコーダ20は、LCUまたはLCU成分のためのスキップモードSAOを使用することがより効率的であるかどうかを決定することを試みてもよい(sao_skip_flag)。ビデオエンコーダ20が輝度成分のためのスキップモードの検討を実行するとき、ビデオエンコーダ20は、まず、ビデオエンコーダ20がEOおよびBO費用をスキップ費用と比較することができるように、EOおよびBOのSAOモードパラメータおよび関連するレート-歪み費用を決定しなければならない。一例では、ビデオエンコーダ20は、輝度スキップモード費用比較を比較することとは別に、彩度のためのスキップモードのレート-歪みの比較を実行してもよい。したがって、ビデオエンコーダ20が、スキップモードが現在のLCUのために選択され、符号化されるべきであると決定した場合、ビデオエンコーダ20は、単に、SAO EOおよびBOの決定判定が輝度と彩度の両方に関して完了した後、現在のLCUのためのSAOスキップモードフラグを設定する。
【０１７８】
別の例では、ビデオエンコーダ20が輝度SAOスキップモードを選択した(すなわち、スキップモードは、EO、BO、およびスキップモードを評価した後、最低のレート-歪み費用を有するので、sao_type_idx_luma=0を設定した)場合、ビデオエンコーダ20は、最良の彩度SAOモードを決定するプロセスをスキップしてもよい。この例では、ビデオエンコーダ20は、高価な彩度EOおよびBOの導出を実行することをスキップし、SAO LCU決定を終了し、スキップフラグの両方を1に設定する。しかしながら、ビデオエンコーダ20が輝度SAOを有効にした(すなわち、現在のLCUに関するBOまたはEOのいずれかを選択した)場合、ビデオエンコーダ20は、彩度SAOをスキップせず、彩度EOおよびBOの導出を実行する必要はない。その場合、ビデオエンコーダ20は、決定アルゴリズムの終了時にのみスキップフラグを設定する。
【０１７９】
異なる例では、現在のLCUがIPCMコード化されている場合、ビデオエンコーダ20は、輝度チャネルと彩度チャネルの両方に関するSAOモードを決定することをスキップしてもよい。ビデオエンコーダ20はまた、LCU内のサンプルの大部分がロスレスコーディングを使用する(たとえば、cu_transquant_bypass_flagがLCU内のCUの大部分に関して設定される)場合、同じことを行ってもよい(すなわち、輝度および彩度のSAOモードを決定することをスキップする)。いくつかの例では、ビデオエンコーダ20は、現在のLCUに関するスキップモードを使用するために、(LCUの領域の割合が上記の基準を満たすことを必要とする)決定しきい値を変化させてもよい。
【０１８０】
輝度または彩度の導出の間、ビデオエンコーダ20が非SAO処理を使用すること(すなわち、スキップモード)を検討する場合、ビデオエンコーダ20は、レート-歪み費用(0に等しいsao_type_idx_luma/chroma)を計算する。Dは、SAOに関する歪み削減を表すので、歪み成分は、0に等しく、この場合に関して、Dは、0に等しい。レート費用は、0(1ビン)に設定されたsao_type_idx_lumaまたはsao_type_idx_chromaのビン費用に相当する。得られた費用は、輝度成分に関してJno_SAO,luma = λ × (1 + sao_off_luma_bias)をもたらし、彩度成分に関してJno_SAO,chroma = λ × (1 + sao_off_chroma_bias)をもたらす。sao_off_luma_biasバイアスおよびsao_off_chroma_biasバイアスは、いくつかの例では、任意の値であってもよく、またはゼロに固定されてもよい。
【０１８１】
ビデオエンコーダ20は、様々なSAOモードを符号化するために必要なビット数の推定を実行する。一例では、レート-歪み(R-D)の計算の間のSAO構文をコーディングするために使用されるビットの推定は、SAO構文要素のためのCABACビンの数(「ビン数」)を計数することによって行われる。ここで、高複雑度の計算が可能であり、ビデオエンコーダ20が構文の完全なCABAC符号化を実行することができ、これが、R-D費用導出のためのより正確なレート費用をもたらすことができる他のオプションの実施態様を留意されたい。以下で説明するいくつかの例では、本開示は、低複雑度方式の説明を含む。
【０１８２】
輝度ビット数を推定するために、ビデオエンコーダ20は、ビン数bincountEO,luma,sao_eo_classを以下のように計算する。
【０１８３】
【数１】
0006285559.tif 000006
【０１８４】
ビデオエンコーダ20がEOフィルタリングを適用するときの両方の彩度成分に関する彩度ビット数を推定するために、ビデオエンコーダ20は、ビン数を以下のように計算する。
bincount1EO,chroma= bincount(sao_type_idx_chroma) + bincount0EO,chroma,sao_eo_class = 2 + bincount0EO,chroma,sao_eo_class
【０１８５】
特定の輝度クラスに関するビン数を推定するために、ビデオエンコーダ20は、ビン数を以下のように計算する。
【０１８６】
【数２】
0006285559.tif 000007
【０１８７】
cに基づいて、Y、Cb、およびCrの値を取ると、ビデオエンコーダ20がBOモードを実行するときの各彩度成分に関するビン数の推定は、以下のように計算される。
【０１８８】
【数３】
0006285559.tif 000008
【０１８９】
輝度チャネルに関して、ビデオエンコーダ20は、BOモードに関するビット数の推定を以下のように計算する。
bincount1BO,luma = bincount(sao_type_idx_luma) + bincount0BO,Y = 2 + bincount0BO,Y
【０１９０】
ビデオエンコーダ20は、BOが適用されたときの両方の彩度成分のためのビン数の推定を以下のように計算する。
bincount1BO,chroma = bincount(sao_type_idx_chroma) + bincount0BO,Cb + bincount0BO,Cr
【０１９１】
次いで、ビデオエンコーダ20は、LCU全体に関するビット推定を以下のように計算する。
bincountSAO,LCU = bincount(sao_merge_left_flag) + bincount(sao_merge_up_flag)+ bincountluma+ bincountchroma
【０１９２】
上記の計算に基づいて、次いで、best_sao_type_idx_luma=2の場合に関して、bincountluma = bincount1EO,lumaである。
best_sao_type_idx_luma=2の場合に関して、bincountchroma = bincount1EO,chromaである。best_sao_type_idx_luma=1の場合に関して、bincountluma = bincount1EO,lumaである。best_sao_type_idx_chroma=1の場合に関して、bincountchroma = bincount1BO,chromaである。best_sao_type_idx_luma=0の場合に関して、bincountluma = bincount(sao_type_idx_luma)=bincount(0)である。そしてbest_sao_type_idx_chroma=0の場合に関して、bincountchroma = bincount(sao_type_idx_chroma)=bincount(0)である。
【０１９３】
加えて、ビデオエンコーダ20は、sao_merge_left/up_flagに関するビン数を、それらが設定されていない場合、ゼロに等しく設定する。そうでない場合、ビデオエンコーダ20は、マージフラグに関するビン数を1に等しく設定する。ビデオエンコーダ20は、sao_type_idxに関するビン数を計算する。ビデオエンコーダ20は、bincount(a) = max(2,a + 1)としてビン数を計算する。ビン数は、以下の表5において示されている。
【０１９４】
【表５】
0006285559.tif 000009
【０１９５】
ビデオエンコーダ20はまた、sao_eo_class構文要素に関する値を決定する。sao_eo_class構文要素に関するビン数は、2に等しい。ビデオエンコーダ20は、sao_bands_position構文要素に関するビン数が5に等しいことを決定するようにさらに構成されてもよい。
【０１９６】
EOモードに関して、ビデオエンコーダ20は、bincountEO(a) = max(7, abs(a) + 1)として、合図されたオフセットに関するビン数を計算し、これは、以下の表6に示されている。
【０１９７】
【表６】
0006285559.tif 000010
【０１９８】
BOモードに関して、ゼロオフセットのためのビン数は、1であり、非ゼロオフセットbに関して、ビン数は、bincountBO(b) = 1 + max(7, abs(ab) + 1)である。これは、以下の表7に示されている。
【０１９９】
【表７】
0006285559.tif 000011
【０２００】
図15は、現在のLCUと、隣接LCUとを示す概念図である。図15の図では、現在のLCUは、左上LCU420と、上LCU422と、左LCU424と、左下LCU426と、下LCU428と、右下LCU430と、右LCU432と、右上LCU434とによって囲まれている。左上LCU、上LCUおよび左LCUは、現在のLCUに利用可能である可能性が最も高い。しかしながら、他の隣接LCU、すなわち、右下LCU430、左下LCU426、下LCU428、右LCU432、および右上LCU434は、ビデオエンコーダ20がこれらの隣接LCUをまだ処理していない可能性があるので、現在のLCUには利用不可能である可能性がある。しかしながら、現在のピクセルのEO分類子を決定するために使用される隣接ピクセルがEO導出を実行するために必要とされるので、ビデオエンコーダ20は、たとえば、エッジオフセットモード導出を実行するために、これらの隣接LCUのサンプルへのアクセスを必要とする場合がある。
【０２０１】
ビデオエンコーダ20は、「preSao」および「postSao」と呼ばれる2つの処理バッファにおいて非ブロック化を実行するときに使用するためのサンプルを記憶する。いくつかの例では、バッファは、メモリ64(図4)内に割り振られてもよい。1つの可能な実施態様では、メイン処理バッファpreSaoおよびpostSaoは、SAO処理の適用の前後にサンプルを記憶する。preSaoバッファのサイズは、それぞれ、幅掛ける高さに関して(LCU_SIZE + db_skip_cols + 1) × (LCU_SIZE + db_skip_rows)であってもよい。一例では、ビデオエンコーダ20は、LCU_SIZEの値を、輝度に関して32に、彩度に関して16に設定してもよい。db_skip_rowsおよびdb_skip_colsという項は、ピクチャの右または下境界のいずれかにないLCUに関する、DBブロックが処理していない、現在のLCUの下に対するピクセルの行と、現在のLCUの右に対するピクセルの列とを示す。一実施態様では、ビデオエンコーダ20は、非ブロック化をスキップする行および列の数を4に設定してもよい。
【０２０２】
図16は、本開示の技術による、現在のLCUに対するLCUからのサンプルをバッファリングするための技術を示す概念図である。図16は、図15に関連して上記で説明したpreSAOバッファ内にビデオエンコーダ20が記憶するピクセル(サンプル)を示す。図16は、2つの領域、現在のLCU、現在のLCUに対する上隣接LCU、左隣接LCU、および左上LCUを含む第1の領域460と、右上隣接LCU、右隣接LCU、右下隣接LCU、下隣接LCU、および左下隣接LCUを含む第2の領域462とを示す。ビデオエンコーダ20は、第1の領域(preSAO領域)内のサンプルをすでに非ブロック化していてもよく、ビデオエンコーダ20は、バッファ内に第1の領域460の非ブロック化サンプルを記憶してもよい。ビデオエンコーダ20は、第2の領域462のサンプルをすでに非ブロック化していなくてもよいが、第1の領域460のサンプルとして同じバッファ内に第2の領域462のサンプルを記憶してもよい。
【０２０３】
図17は、本開示の技術による、ビデオエンコーダがサンプル適応オフセットパラメータを導出するために使用するサンプルの領域を示す概念図である。図17は、図15〜図16に示すように、ビデオエンコーダ20がそこからサンプルを使用するが、ビデオエンコーダ20がSAOパラメータを導出するために使用してもよい(垂直ハッシングで示された)第1の領域480を示す。第1の領域480は、左上隣接LCUと、上隣接LCUと、左隣接LCUと、左下隣接LCUとを含む。図17はまた、ビデオエンコーダ20が第1の領域と同じバッファ内に記憶してもよく、ビデオエンコーダ20が現在のLCUのためのSAOパラメータを導出するために使用してもよい(斜めのハッシングで示された)第2の領域482を示す。第2の領域482は、現在のLCUと、右隣接LCUと、下隣接LCUと、右下隣接LCUとを含んでもよい。
【０２０４】
図18は、本開示の技術による、最大コーディング単位のためのSAOモードを決定するためのプロセスを示すフロー図である。例のみの目的のため、ビデオエンコーダ20などのビデオエンコーダは、図18に示すプロセスを実行してもよいことが理解されるべきである。図18の例では、ビデオエンコーダ20は、サンプル適応オフセットSAOモードを使用してピクチャのLCUのサンプルを符号化するように構成されてもよい。LCUのサンプルを符号化するために、ビデオエンコーダ20のSAOユニット74は、LCUの対応する再構成されたサンプルとLCUの元のサンプルとの間の差を計算する(502)ように構成されてもよい。SAOユニット74は、クリップされた差を形成するために差の各々からビット数をクリップし(504)、差の合計を形成するために差を合計する(506)ようにさらに構成されてもよい。SAOユニット74は、クリップされた差の合計を形成するために差の合計をクリップする(508)ようにさらに構成されてもよい。
【０２０５】
クリップされた差の合計を計算することに応答して、SAOユニット74は、再構成されたサンプルの数を計算し(510)、クリップされたサンプル数を形成するために、再構成されたサンプルの数からビット数をクリップし(512)、LCUのためのオフセットを生成するために、クリップされたサンプル数でクリップされた差の合計を除算する(514)ようにさらに構成されてもよい。
【０２０６】
いくつかの例では、SAOモードは、バンドオフセットモードまたはエッジオフセットモードを備えてもよい。他の例では、SAOは、バンドオフセットモードを備えてもよく、ビデオエンコーダ20は、バンドオフセットモードのためのバンドオフセットを決定するようにさらに構成されてもよい。バンドオフセットモードを決定するために、ビデオエンコーダ20は、32ビンヒストグラムのビンに元のサンプルを分類するために、LCUの元のサンプルを反復的に算術右シフトするようにさらに構成されてもよい。
【０２０７】
様々な例では、元のサンプルは、LCUの成分平面(たとえば、輝度成分平面または彩度成分平面)の元のサンプルを備えてもよい。加えて、これらの例では、再構成されたサンプルは、LCUの成分平面の再構成されたサンプルを備えてもよい。これらの例では、ビデオエンコーダ20は、ヒストグラムの32ビンのうちの1つに属するサンプルの数がLCUの現在の成分平面に属するサンプルの数の半分以上であるとき、サンプルの反復分類を終了するようにさらに構成されてもよい。
【０２０８】
さらにいくつかの他の例では、LCUのためのオフセットを生成するためにクリップされた差の合計を導出するために、ビデオエンコーダ20は、変数がゼロ以下になるまで、差の合計に等しい変数からピクセル数を反復的に減算し、実行された反復減算の数としてLCUのためのオフセットを決定し、差の合計の符号に基づいてオフセットの符号を決定してもよい。
【０２０９】
別の例では、ビデオエンコーダ20は、LCUに対する上隣接LCUおよび左隣接LCUの非ブロック化後のサンプルを(たとえば、バッファ内に)記憶し、現在のLCUに対する下隣接LCUおよび右隣接LCUの非ブロック化前のサンプルを記憶し、LCUのサンプルを記憶するようにさらに構成されてもよい。SAOモードを使用してLCUのサンプルを符号化するために、ビデオエンコーダ20は、LCUのサンプルの少なくとも一部に基づいてLCUのサンプルを符号化するようにさらに構成されてもよい。さらに別の例では、ビデオエンコーダ20は、LCUのサンプルと、バッファ内に記憶された下隣接LCUおよび右隣接LCUの非ブロック化前のサンプルのサンプルとに基づいて、LCUのためのSAOモードを決定するように構成されてもよい。
【０２１０】
図19は、本開示の技術による、LARGESTコーディングユニットのためのSAOモードを決定するためのプロセスを示すフロー図である。例のみの目的のため、ビデオエンコーダ20などのビデオエンコーダは、図19に示すプロセスを実行してもよいことが理解されるべきである。図19の例では、ビデオエンコーダ20は、複数のSAOモードからLCUのためのSAOモードを決定する(540)ように構成されてもよい。複数のSAOモードは、バンドオフセットモードと、エッジオフセットモードと、マージアップモードと、マージレフトモードと、スキップモードとを備えてもよい。SAOモードを決定するために、ビデオエンコーダ20は、LCUのためのSAOモードの所定の優先順位に基づいて少なくとも1つのSAOモードを決定してもよい。いくつかの例では、少なくとも1つのSAOモードを決定するために、ビデオエンコーダ20は、LCUの彩度チャネルのための複数のモードから彩度SAOモードを決定する前に、LCUの輝度チャネルのための複数のモードから輝度SAOモードを決定してもよい(542)。
【０２１１】
いくつかの例では、ビデオエンコーダ20は、マージレフトモード、マージアップモード、およびスキップモードのうちの少なくとも1つがしきい値費用以下のレート-歪み費用を有するかどうかをさらに決定してもよい。マージレフトモード、マージアップモード、およびスキップモードのうちの1つがしきい値費用以下のレート-歪み費用を有することを決定することに応答して、ビデオエンコーダ20は、しきい値費用以下のレート-歪み費用を有するマージレフトモード、マージアップモード、およびスキップモードのうちの1つを選択してもよい。別の例では、ビデオエンコーダ20は、マージレフトモード、マージアップモード、およびスキップモードのうちの1つがしきい値費用よりも高いレート-歪み費用を有するかどうかを決定してもよい。マージレフトモード、マージアップモード、およびスキップモードのうちの1つがしきい値費用よりも高いレート-歪み費用を有することを決定することに応答して、ビデオエンコーダ20は、LCUのためのエッジオフセットモードまたはバンドオフセットモードを選択してもよい。
【０２１２】
様々な例では、複数のSAOモードのうちの1つからLCUのためのSAOモードを決定するために、ビデオエンコーダ20は、LCUの彩度チャネルのための複数のモードからSAOモードを決定する前に、LCUの輝度チャネルのための複数のモードからSAOモードを決定するようにさらに構成されてもよい。
【０２１３】
いくつかの他の例では、複数のSAOモードの所定の優先順位に基づいて少なくとも1つのSAOモードを決定するために、ビデオエンコーダ20は、複数のSAOモードのうちの第1のSAOモードおよび複数のSAOモードのうちの第2のSAOモードが同じレート-歪み費用を有するかどうかを決定するようにさらに構成されてもよい。第1のSAOモードおよび第2のSAOモードが同じレート-歪み費用を有することを決定することに応答して、ビデオエンコーダ20は、LCUのための第1のSAOモードを選択してもよい。いくつかの例では、第1のモードは、バンドオフセットモードを備えてもよく、第2のモードは、エッジオフセットモードを備えてもよい。別の例では、第1のモードは、マージレフトモードを備えてもよく、第2のモードは、マージアップモードを備えてもよい。別の例では、第1のモードは、バンドオフセットモードまたはエッジオフセットモードを備えてもよく、第2のモードは、マージアップモードまたはマージレフトモードを備えてもよい。さらに別の例では、第1のモードは、スキップモードを備えてもよく、第2のモードは、バンドオフセットモードまたはエッジオフセットモードを備えてもよい。
【０２１４】
1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装されてもよい。ソフトウェアにおいて実装された場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体に記憶またはコンピュータ可読媒体を介して送信されてもよく、ハードウェアベースの処理ユニットによって実行されてもよい。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従うある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含んでもよい。このようにして、コンピュータ可読媒体は、概して、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応する場合がある。データ記憶媒体は、本開示で説明した技術の実施態様のための命令、コード、および/またはデータ構造を取得するために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされてもよい任意の利用可能な媒体であってもよい。コンピュータプログラム製品は、コンピュータ可読媒体を含んでもよい。
【０２１５】
例として、限定するものではないが、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROM、もしくは他の光ディスク記憶装置、磁気ディスク記憶装置、もしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用されてもよく、コンピュータによってアクセスされてもよい任意の他の媒体を備えてもよい。また、任意の接続は、適切にコンピュータ可読媒体と呼ばれる。たとえば、命令がウェブサイト、サーバ、または他の遠隔ソースから、同軸ケーブル、光ファイバケーブル、より対線、デジタル加入者線(DSL:digital subscriber line)、または、赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバケーブル、より対線、DSL、または、赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義内に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されるべきである。ディスク(disk)およびディスク(disc)は、本明細書で使用される場合、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびBlu-ray（登録商標）ディスクを含み、ディスク(disk)は通常、磁気的にデータを再生し、ディスク(disc)は、レーザを用いて光学的にデータを再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【０２１６】
命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の同等の集積またはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行されてもよい。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または本明細書で説明する技術の実装に適した任意の他の構造のいずれかを指す場合がある。さらに、いくつかの態様では、本明細書で説明する機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/またはソフトウェアモジュール内に与えられてもよく、あるいは複合コーデックに組み込まれてもよい。また、技術は、1つまたは複数の回路または論理要素において完全に実装されてもよい。
【０２１７】
本開示の技術は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装されてもよい。本開示では、開示する技術を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニット内に組み合わされてもよく、または、適切なソフトウェアおよび/もしくはファームウェアと併せて、上記で説明したように、1つもしくは複数のプロセッサを含む相互運用ハードウェアユニットの集合によって提供されてもよい
【０２１８】
様々な例を説明してきた。これらおよび他の例は以下の特許請求の範囲内に入る。
【符号の説明】
【０２１９】
10  ビデオ符号化および復号システム
12  ソースデバイス
14  宛先デバイス
16  リンク
18  ビデオソース
20  ビデオエンコーダ
22  出力インターフェース
28  入力インターフェース
30  ビデオデコーダ
32  表示デバイス
34  記憶デバイス
35  区分ユニット
41  予測処理ユニット
42  動き推定ユニット
44  動き補償ユニット
46  イントラ予測ユニット
50  加算器
52  変換処理ユニット
54  量子化ユニット
56  エントロピー符号化ユニット
58  逆量子化ユニット
60  逆変換処理ユニット
62  加算器
64  メモリ
72  非ブロック化フィルタユニット
74  SAOユニット
76  適応ループフィルタ、ALF
80  エントロピー復号ユニット
81  予測処理ユニット
82  動き補償ユニット
84  イントラ予測処理ユニット
86  逆量子化ユニット
88  逆変換処理ユニット
90  加算器
92  参照ピクチャメモリ
93  非ブロック化フィルタユニット
94  SAOユニット
95  ALFユニット
420  左上LCU
422  上LCU
424  左LCU
426  左下LCU
428  下LCU
430  右下LCU
432  右LCU
434  右上LCU
460  第1の領域
462  第2の領域
480  第1の領域
482  第2の領域
【図１】
0006285559.tif 000012
【図２Ａ】
0006285559.tif 000013
【図２Ｂ】
0006285559.tif 000014
【図２Ｃ】
0006285559.tif 000015
【図２Ｄ】
0006285559.tif 000016
【図３】
0006285559.tif 000017
【図４】
0006285559.tif 000018
【図５】
0006285559.tif 000019
【図６】
0006285559.tif 000020
【図７】
0006285559.tif 000021
【図８】
0006285559.tif 000022
【図９】
0006285559.tif 000023
【図１０】
0006285559.tif 000024
【図１１】
0006285559.tif 000025
【図１２】
0006285559.tif 000026
【図１３】
0006285559.tif 000027
【図１４】
0006285559.tif 000028
【図１５】
0006285559.tif 000029
【図１６】
0006285559.tif 000030
【図１７】
0006285559.tif 000031
【図１８】
0006285559.tif 000032
【図１９】
0006285559.tif 000033